Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Wed 18 May 2022 09:59
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
QGIS: Menu deroulant sous conditions
Bonjour,
Je souhaite mettre des menus déroulants dont les listes de valeurs seront proposées sous conditions.
Cas des arbres :
Type d'essences proposées dans un menu déroulant :
- Feuillus
- Résineux
Dans les Feuillus, il y a comme type d'arbres des Bouleaux et Chataigniers
Dans les Résineux, il y a comme type d'arbres des Sapins et Epicéas
Si je saisis Feuillus dans le menu déroulant, il faudrait que, dans un second menu déroulant 'type d'arbres', soit proposé uniquement Bouleaux et Chataigniers, et non l'ensemble des types arbres (Bouleaux, Chataigniers, Sapins et Epicéas).
Comment faire?
Merci.
Hors ligne
#2 Wed 18 May 2022 11:37
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Je verrais bien une expression de type
case when "Essence" = 'Feuillu' then "Type" = "Bouleau" or "Chataigner" end
Je l'ai placée dans les expressions de contrainte dans le formulaire d'attributs. Mais sans résultat, c'est-à-dire que tous les types arbres (Bouleaux, Chataigniers, Sapins et Epicéas) s'affichent dans le menu déroulant.
Hors ligne
#3 Wed 18 May 2022 12:01
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
Bonjour,
Le mieux serait peut-etre de passer par un csv avec une colonne famille et une colonne espece. Vous auriez ainsi une 1ere liste de valeurs relationnelles "famille", puis une 2eme espece avec un filtre "famille"=current_value("famille")
Cordialement,
Hors ligne
#4 Wed 18 May 2022 12:37
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
C'est-à-dire, dans le champ "essence" je charge les données depuis un fichier csv?
De même dans le champ "types d'arbres" avec ce même fichier csv?
Si oui où inscrit-on le filtre "famille"=current_value("famille")?
Merci.
Hors ligne
#5 Wed 18 May 2022 13:05
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
Oui un tableau de correspondance entre essence et type d'arbre. De mon coté, je ne sais pas si c'était nécessaire mais j'ai un csv avec la liste (unique) des familles et un autre csv avec les correspondances familles-espece.
J'ai donc une liste de valeurs relationnelles qui pointe vers le csv famille et une 2eme liste espece qui pointe vers le csv famille_espece
Dans le formulaire, tu choisis le widget valeur relationnelle et dans filtre expression du widget tu utilises le current_value
Hors ligne
#6 Wed 18 May 2022 14:50
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Ce que j'ai fait :
Rappel :
J'ai donc une couche "Arbres" (vide). J'ai deux champs
- "Essence" dans lequel on saisira les essences (feuillus, résineux, fruitier ou divers) au moyen d'un menu déroulant
- "Type" : dans lequel on saisira les différents arbres au moyen d'un menu déroulant
2 csv
- un csv 'essence' pour répertorier les essences
- un csv 'correspondance' pour la correspondance entre les essences et les arbres.
Dans la couche "Arbres" --> Formulaire d'attributs :
- Champ "Essence" --> valeur relationnelle sur le .csv "Essence"
- Champ "Type"--> valeur relationnelle sur le .csv "Correspondance", colonne clé "essence", colonne de valeurs "arbre"
Jusqu'ici tout va bien?
Hors ligne
#7 Wed 18 May 2022 14:59
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
J'ai complètement oublié de préciser que cela a pour but d'être utilisé sous Qfield.
Ces menus déroulants sous valeurs relationnelles fonctionneraient sous Qfield?
Hors ligne
#8 Wed 18 May 2022 16:39
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
oui ca fonctionne sur qfield
Hors ligne
#9 Wed 18 May 2022 16:43
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Ce que j'ai fait :
Rappel :
J'ai donc une couche "Arbres" (vide). J'ai deux champs
- "Essence" dans lequel on saisira les essences (feuillus, résineux, fruitier ou divers) au moyen d'un menu déroulant
- "Type" : dans lequel on saisira les différents arbres au moyen d'un menu déroulant
2 csv
- un csv 'essence' pour répertorier les essences
- un csv 'correspondance' pour la correspondance entre les essences et les arbres.
Dans la couche "Arbres" --> Formulaire d'attributs :
- Champ "Essence" --> valeur relationnelle sur le .csv "Essence"
- Champ "Type"--> valeur relationnelle sur le .csv "Correspondance", colonne clé "essence", colonne de valeurs "arbre"
Et ce que j'ai fait c'est bon pour l'instant?
Hors ligne
#10 Wed 18 May 2022 16:47
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
ca a l'air ok, il faut testé... sans oublié le filtre avec current_value
Hors ligne
#11 Wed 18 May 2022 17:01
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Cela ne fonctionne pas, il y a toujours l'ensemble des arbres proposé dans "Type".
Peut-être que current_value ne fonctionne pas :
Voici l'expression du filtre dans la valeur relationnelle du champ "Type" :
"Type"=current_value("Essence")
De plus, le fait que la base de données de la couche "Arbres" soit vide porte-t-il préjudice à ce menu déroulant?
Hors ligne
#12 Wed 18 May 2022 17:12
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
Il faut jouer sur els champs clé et valeur.
Pouvez-vous mettre en pj vos 2 csv et votre shape (avec le qml) svp?
Hors ligne
#14 Wed 18 May 2022 18:43
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
Alors j'ai réussi en mettant:
Essence: valeur relationnelle - Couche "Essence", colonne clé essence et colonne de valeurs essence
Type: valeur relationnelle - Couche "Correspondance", colonne clé Type et colonne de valeurs Type et filtre "Essence"=current_value('Essence')
Hors ligne
#15 Wed 18 May 2022 19:18
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
ok super ça fonctionne merci beaucoup
Hors ligne
#16 Wed 18 May 2022 19:58
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Vous avez dû voir qu'il y a un champ H_ététage et un champ entretien.
Ce champ entretien comporte trois valeurs dans le menu déroulant : coupe, élagage et ététage.
Si on choisit la valeur ététage dans le champ entretien alors il faut mettre la hauteur dans le champ H_ététage.
Ce que je voudrais, c'est qu'il ne soit pas possible de rentrer une hauteur dans le champ H_ététage lorsque la valeur ététage dans le champ entretien n'est pas choisie.
Est-ce possible?
Merci.
Hors ligne
#17 Wed 18 May 2022 20:26
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
Je pense que c'est possible soit en rendant le champ entretien obligatoire, soit en rajoutant une contrainte "Expression" dans les propriétés du champ H_etetage genre Case when "entretien" is null then...
Hors ligne
#18 Wed 18 May 2022 20:38
- Miniopterine
- Participant assidu
- Date d'inscription: 29 Nov 2005
- Messages: 278
Re: QGIS: Menu deroulant sous conditions
Ca marche avec une expression dans le champ H_etetage" genre
Code:
case when "Entretien" ='Etétage' then not ( "H_ététag" is null) else "H_ététag" is null or "H_ététag" is not null END
et il faut cocher la case "Renforcer la contrainte par expression"
Dernière modification par Miniopterine (Wed 18 May 2022 20:50)
Hors ligne
#19 Thu 19 May 2022 09:25
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Bonjour,
Votre expression ne donne pas de résultat : quelque soit la valeur choisie dans le champ entretien, on peut toujours saisir une hauteur dans le champ H_ététag.
J'ai modifié l'expression :
case when "Entretien" ='Etétage'
then not ( "H_ététag" is null) else "H_ététag" is null
END
Et là cela fonctionne :
- Valeurs Coupe et Elagage choisies --> pas de saisie de hauteur possible dans le champ H_ététag
- Valeur Etétag choisie --> saisie de hauteur possible dans le champ H_ététag
-
Hors ligne
#20 Thu 19 May 2022 09:42
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
La valeur relationnelle fonctionne et je vous en remercie. J'ai une demande particulière concernant les arbres non répertoriés.
Je rappelle que pour chaque essence, il y a un menu déroulant dans le champ "Type" qui s'adapte.
Dans le champ essence, voici les valeurs possibles :
"Feuillus"
"Résineux"
"Fruitier"
"Divers"
Il m'est demande de rajouter une valeur "Autre" pour mettre des arbres non répertoriés dans le champ "Type". Seulement voilà, il s'agit de saisir manuellement dans ce cas-là des arbres non répertoriés, qui n'appartiennent à aucune des catégories.
Comment faire :
- pour garder la fonction Menu déroulant dans le champ "Type" lorsque dans le champ essence est choisi soit "Feuillus" soit "Résineux" soit "Fruitier" soit "Divers" et
- se mettre en mode saisie dans le champ "Type" lorsque dans le champ essence est choisi "Autre"
Est-ce possible?
Merci.
Hors ligne
#21 Thu 19 May 2022 11:42
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1671
Re: QGIS: Menu deroulant sous conditions
Par contre je viens de voir que l'expression
case when "Entretien" ='Etétage'
then not ( "H_ététag" is null) else "H_ététag" is null
END
fonctionne en mode création de point.
Mais si je veux modifier par la suite la hauteur, je peux le faire quelle que soit la valeur de l'entretien choisie.
Hors ligne