banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

Les inscriptions sont ouvertes !

#1 Tue 01 April 2025 21:22

Milhousette
Juste Inscrit !
Date d'inscription: 1 Apr 2025
Messages: 3

QGIS: Couleurs differentes dans meme Etiquette avec formules

Bonjour à tous !

Je m'avance vers vous avec une question qu'Ô combien d'entre vous ont déjà du voir passer big_smile

J'ai une problématique d'affichage de couleurs d'étiquettes. Après consultation de 6-7 sujets liés à cette problématique, j'ai constaté que le seul moyen de faire apparaitre dans une seule et même étiquette plusieurs champs de couleurs différentes était de passer par du code html.

Notamment des choses de ce genre qui pour les champs "Nom" et "Id" fonctionnement parfaitement :

Code:

format(%1  %2',"Nom","Id")

NÉANMOINS, j'aimerais intégrer ces couleurs dans des formules me permettant d'automatiser certains processus. Donc en gros, j'aurais 8 champs avec des chiffres. Et je compare chaque champs à une valeur fixe (différente pour chaque champs) et si la valeur du champs est inférieure à la valeur de comparaison fixe, je ne l'affiche pas, si supérieure, je l'affiche (et parfois avec arrondis voire des opérations simples (division par un entier etc).

En résulte que j'ai une formule extrêmement grande (je ne maitrise ni python, ni le HTML, que la calculatrice de champs QGis qui est simple est semblable à Excel :3).

Ci-joint la taille de ma formule qui marche nickel pour ce que je veux faire https://ibb.co/pjMXMXnV

Et là est tout le problème
-> Si je passe en html, je ne peux pas faire les manips que je veux avec les champs (je suis limité en place en nombre de caractères en plus.
-> Si je reste dans la calculatrice de champs, je ne peux pas choisir la couleur de mes lignes :'(

Auriez-vous une solution simple à mon problème de couleurs (à intégrer directement dans des formules en fait) ? :3

Sinon je resterai en noir et blanc TANT PIS.

D'avance merci pour votre temps, passez une excellente soirée,

Milhousette

Hors ligne

 

#2 Wed 02 April 2025 11:28

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4061

Re: QGIS: Couleurs differentes dans meme Etiquette avec formules

Bonjour,

Milhousette a écrit:

Ci-joint la taille de ma formule qui marche nickel pour ce que je veux faire https://ibb.co/pjMXMXnV


Copiez la formule dans votre message, avec la balise "code", ça facilitera aux gens sa lecture et sa compréhension. J'ai essayé de lire mais je vous avoue que même si Excel est simple, ces formules imbriquées ne sont pas du tout digestes, et ce n'est pas forcément adapté à la situation, ou il y a mieux peut-être. Réécrivez en aérant et faisant des sauts de lignes et des décalages afin que visuellement on s'y retrouve vite. Et une image du rendu obtenu ou escompté. Merci.
J'y vois des expressions du style

Code:

concat ("Echantillo")

qui n'ont pas de sens, vu que concat concatene plusieurs éléments et vous ne lui en passez qu'un. Il y a donc déjà moyen d'alléger la formule. Par ailleurs si vous avez des bouts de code qui se répètent vous pouvez les placez dans une variable (fonction with_variable).

-> Si je passe en html, je ne peux pas faire les manips que je veux avec les champs (je suis limité en place en nombre de caractères en plus.


Je ne vois pas à quelle limitation vous faites référence

-> Si je reste dans la calculatrice de champs, je ne peux pas choisir la couleur de mes lignes :'(


Euh... pas compris. Si vous voulez differentes couleurs dans votre étiquette, c'est l'expression qui va l'indiquez (cf https://docs.qgis.org/3.40/fr/docs/user … text-tab). Et d'ailleurs dans votre code, je ne vois pas où entre en jeu cette histoire de couleurs. C'est pas très clair ce que vous voulez colorier. et comment?

Hors ligne

 

#3 Wed 02 April 2025 12:06

Milhousette
Juste Inscrit !
Date d'inscription: 1 Apr 2025
Messages: 3

Re: QGIS: Couleurs differentes dans meme Etiquette avec formules

Bonjour SANTANNA, tout d'abord merci de votre réponse et de votre temps,

Je refais en plus clair :

Code:

CONCAT(
  if("Champ1"<Valeur1, 
     if("Champ2"<Valeur2,
        if("Champ3"<Valeur3,
           if("Champ4"<Valeur4,
              if("Champ5"<Valeur5,
                 if("Champ6"<Valeur6,
                    if("Champ7"<Valeur7,
                       if("Champ8"<Valeur8, "", CONCAT("Echantillon")),
                       CONCAT("Echantillon")),
                    CONCAT("Echantillon")),
                 CONCAT("Echantillon")),
              CONCAT("Echantillon")),
           CONCAT("Echantillon")),
        CONCAT("Echantillon")),
     CONCAT("Echantillon")
  ),

  if("Champ1"<Valeur1,"",CONCAT('\n','[Etiquette1] = ' ,format_number("Champ1",précision1), ' mg/kg')),
  if("Champ2"<Valeur2,"",CONCAT('\n','[Etiquette2] = ' ,format_number("Champ2",précision2), ' mg/kg')),
  if("Champ3"<Valeur3,"",CONCAT('\n','[Etiquette3] = ' ,format_number("Champ3",précision3), ' mg/kg')),
  if("Champ4"<Valeur4,"",CONCAT('\n','[Etiquette4] = ' ,format_number("Champ4",précision4), ' mg/kg')),
  if("Champ5"<Valeur5,"",CONCAT('\n','[Etiquette5] = ' ,format_number("Champ5",précision5), ' mg/kg')),
  if("Champ6"<Valeur6,"",CONCAT('\n','[Etiquette6] = ' ,format_number("Champ6",précision6), ' mg/kg')),
  if("Champ7"<Valeur7,"",CONCAT('\n','[Etiquette7] = ' ,format_number("Champ7",précision7), ' mg/kg')),
  if("Champ8"<Valeur8,"",CONCAT('\n','[Etiquette8] = ' ,format_number("Champ8",précision8), ' mg/kg')))

Situation : Sur un point j'ai 8 champs appelés Champ1 à Champ8

Sur ce point, je veux faire apparaitre une étiquette avec chaque champ qui serait supérieur à une certaine valeur (Valeur1 pour champ1 etc).

Et sur l'étiquette, je veux en gros :
1) Mon nom d'échantillon (qui est dans un 9e champ)
2) Un texte qui me dit " [composé de l'étiquette] = " le champ en question avec une précision donnée avec l'unité à la fin

De manière concrète, mes étiquettes ressemblent à ça sur mon projet avec ce code
https://ibb.co/6cnLWyMf

J'ai mon nom d'échantillons puis ensuite un composé par ligne si et seulement si il dépasse la valeur que j'ai associé.

Donc la première partie du code vérifie tout d'abord si j'ai au moins un Champ supérieur à sa valeur de comparaison, si ce n'est pas le cas, la formule retourne "".

Cette formule me convient bien sauf que :
1) Je crois avoir compris que je ne pouvais pas ajouter de code pour affiche certaines parties de texte en couleur à cet endroit : https://ibb.co/yc29yKjB
2) Quand je veux faire une mise en forme html, je suis limité à 125 caractères :'( Ici : https://ibb.co/hxrKNP9h

Et en gros, j'aimerais juste pouvoir choisir de mettre en couleur les parties de texte que je veux et je n'ai pas trouvé de solution sur le forum, les seules solutions en html sont pour afficher plusieurs couleurs d'un petit texte qui serait écrit "à la main" dans la zone prévue à cet effet, sauf que je ne veux pas recopier des choses à la main smile

Par exemple mettre en rouge les teneurs, en bleu le champ échantillon etc

En espérant avoir apporté de la clarté à ma demande initiale, j'ai hâte de lire un éventuel retour,

Encore merci

Dernière modification par SANTANNA (Wed 02 April 2025 15:38)

Hors ligne

 

#4 Wed 02 April 2025 18:43

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4061

Re: QGIS: Couleurs differentes dans meme Etiquette avec formules

Je pense avoir compris et vais m'y essayer.
Intéressons-nous à ce bloc:

Code:

  if("Champ1"<Valeur1, 
     if("Champ2"<Valeur2,
    ...
                       if("Champ8"<Valeur8, "", CONCAT("Echantillon")),
    ...
        CONCAT("Echantillon")),
     CONCAT("Echantillon")
  )

Si je comprends bien, dès lors que tous les 8 champs sont au-delà de leur valeur seuil, on affichera "Echantillon". Elle pourrait être donc réécrite en

Code:

CASE WHEN champ1>=valeur1 AND champ2>=valeur2 AND champ3>=.... 
THEN "Echantillon" -- cf. mon précédent commentaire sur concat(echantillon)
END

Si on passe au bout suivant, et en essayant de lui appliquer de la couleur différenciée, se basant sur l'exemple de la doc précédemment indiqué

Code:

if("Champ1"<Valeur1,"",CONCAT('\n','[Etiquette1] = ' ,format_number("Champ1",précision1), ' mg/kg')),

pourrait devenir en mode verbeux (pas de QGIS à côté pour tester donc prêtez attention au message d'erreur s'il y en a)

Code:

if("Champ1"<Valeur1,'', format(
  '\n [<span style="color:blue">%1</span>] = <span style="color:red"><u>%2</u></span> mg/kg',
  'Etiquette1',
  format_number("Champ1") -- toutes vos précisions sont à 0, valeur par défaut, donc vous pouvez vous en passer
  )
)

Si les suggestions ci-dessus marchent, on pourrait utiliser une variable pour stocker et alléger, soit

Code:

with_variable(
'texteformatage', 
'\n [<span style="color:blue">%1</span>] = <span style="color:red"><u>%2</u></span> mg/kg',
concat(
  CASE WHEN champ1>=valeur1 AND champ2.....END -- le premier bloc
  if("Champ1"<Valeur1, '', format(@texteformatage, 'Etiquette1', format_number("Champ1")),
  if("Champ2"<Valeur2, '', format(@texteformatage, 'Etiquette2', format_number("Champ2")),
 ...

Une fois arrivé ici, je me suis rendu compte que les couleurs ne sont pas appliquées aux bons endroits mais si vous avez compris le principe, réadapter devrait être possible

1) Je crois avoir compris que je ne pouvais pas ajouter de code pour affiche certaines parties de texte en couleur à cet endroit : https://ibb.co/yc29yKjB


Comme vu plus haut, c'est bien là qu'il faut mettre le formatage html. Qu'est-ce qui vous a fait croire que ce n'était pas là?

2) Quand je veux faire une mise en forme html, je suis limité à 125 caractères :'( Ici : https://ibb.co/hxrKNP9h


Euh... ce champ n'a rien à voir avec l'étiquetage HTML. C'est juste un espace de prévisualisation de vos paramètres, appliqués à du texte personnalisé.

Hors ligne

 

#5 Wed 02 April 2025 23:50

Milhousette
Juste Inscrit !
Date d'inscription: 1 Apr 2025
Messages: 3

Re: QGIS: Couleurs differentes dans meme Etiquette avec formules

Bonsoir SANTANNA !

Je regarde au plus vite votre proposition en détail, en survolant :

Si je comprends bien, dès lors que tous les 8 champs sont au-delà de leur valeur seuil, on affichera "Echantillon". Elle pourrait être donc réécrite en


Presque ! :3 Concrètement, j'ai des données avec un champ qui est le nom d'échantillon puis ensuite un champ par concentration en un composé différent.
Donc Echantillon 1 : 8 champs pour des concentrations mettons au pif en mercure, arsenic, hydrocarbures etc.

Et le but de la formule, c'est de me dire "tiens, je veux voir directement les valeurs de chaque composé que je juge importantes". Donc par exemple : tout ce qui est au dessus de 50 en pour le champ avec l'arsenic, 1 pour mercure etc (chiffres au pif).

Et donc avant, j'avais fait une formule avec un CONCAT qui affichait mon nom d'échantillon puis ensuite les valeurs en composés si dépassement.

MAIS soucis : Quand je n'avais aucun dépassement, mes noms d'échantillons apparaissaient donc, ce que je ne veux pas. Pour régler ce soucis, je me suis donc dis : "Tiens, il me faudrait une condition pour afficher mon nom d'échantillon si et seulement si j'ai un dépassement sur un ou plusieurs composés".

Donc j'ai créé la 1ere partie du code qui n'a qu'un seul but :

-> Si tous les composés sont tous inférieurs aux valeurs de comparaison alors ça n'affiche rien ("") et donc pas d'étiquette affichée par Qgis, et si n'importe lequel des composés dépasse la valeur que j'ai fixé, hop le nom d'échantillon apparait en premier smile

-----------------------

Une fois ce pré-requis fait, me suffit de lister les composés qui dépassent et vu que je suis une bille en Python/html etc, j'ai fait des maxi boucles imbriquées de if hahaha.

Euh... ce champ n'a rien à voir avec l'étiquetage HTML. C'est juste un espace de prévisualisation de vos paramètres, appliqués à du texte personnalisé.


HA big_smile Une bonne chose d'apprise haha. Que fait la fonction "CASE" concrètement ? Je lis ça dans la documentation : "Étiqueter ou catégoriser les entités en fonction de leur surface" mais même avec les exemples je ne comprends guère :calimero:

Passez une très bonne soirée, j'ai hâte d'essayer ces choses !

Hors ligne

 

#6 Thu 03 April 2025 09:04

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 4061

Re: QGIS: Couleurs differentes dans meme Etiquette avec formules

Bonjour,

Tiens, il me faudrait une condition pour afficher mon nom d'échantillon si et seulement si j'ai un dépassement sur un ou plusieurs composés".


Dans ce cas, c'est plutôt le OR qu'il faudrait utiliser dans la requête soit

Code:

CASE WHEN champ1>=valeur1 OR champ2>=valeur2 OR champ3>=....

Que fait la fonction "CASE" concrètement ?


Bah, en gros ça dit "dans le cas où on remplit telle condition, tu fais ci, dans telle autre, tu fais ça, dans telle autre, tu fais encore ça ...". Et on peut s'arrêter quand on veut. Perso, je la trouve plus flexible et plus lisible que if.

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo