Pages: 1
- Sujet précédent - QGIS: remplir un champ automatiquement selon la valeur d'un autre - Sujet suivant
#1 Mon 03 February 2020 15:04
- SIGCMC56
- Participant occasionnel
- Date d'inscription: 9 Jul 2018
- Messages: 28
QGIS: remplir un champ automatiquement selon la valeur d'un autre
Bonjour,
je n'arrive pas à écrire une expression sur un champ me permettant de remplir ce champ de manière automatique.
J'ai 2 champs : champ1 et champ2
mon champ 1 doit être saisit manuellement avec une liste déroulante qui peut prendre plusieurs valeur possible (a, b, c)
mon champ 2 ne se saisit pas et doit se remplir automatiquement en focntion des valeurs du champ 1 :
si champ 1 = a alors mon champ 2 doit se remplir tout seul avec la valeur AAA
si champ 1 = b alors mon champ 2 doit se remplir tout seul avec la valeur BBB
si champ 1 = c alors mon champ 2 doit se remplir tout seul avec la valeur CCC
J'essaye de faire une expression dans le champ 2 du genre :
CASE WHEN "champ1" ='a' THEN 'AAA'
WHEN "champ1" ='b' THEN 'BBB'
WHEN "champ1" ='c' THEN 'CCC'
ELSE 'other' END
Mais mon champ 2 ne se remplit pas....
Quelqu'un pour m'aider ?
Dernière modification par SIGCMC56 (Mon 03 February 2020 15:05)
Hors ligne
#2 Mon 03 February 2020 15:10
- SIGCMC56
- Participant occasionnel
- Date d'inscription: 9 Jul 2018
- Messages: 28
Re: QGIS: remplir un champ automatiquement selon la valeur d'un autre
Petite précision,
Quand je passe par la création d'un champ virtuel (à la place du champ 2) cela fonctionne, mais j'aimerais la même méthode sans champ virtuel
Hors ligne
#3 Mon 03 February 2020 15:35
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS: remplir un champ automatiquement selon la valeur d'un autre
Bonjour,
les expressions de la calculatrice ne calcule pas les valeurs dynamiquement sauf dans le cas d'un champ virtuel.
Pour avoir quelque chose de complètement dynamique, je ne vois que la mise en place d'une fonction d'initialisation python dans le formulaire.
Cette fonction pourrait mettre à jour champ 2 lorsque champ 1 change.
Quelque chose dans ce goût (testé avec QGIS 3.4 / Ubuntu 16.04):
Code:
# -*- coding: utf-8 -*- """ Les formulaires QGIS peuvent avoir une fonction Python qui sera appelée à l'ouverture du formulaire. Utilisez cette fonction pour ajouter plus de fonctionnalités à vos formulaires. Entrez le nom de la fonction dans le champ "Fonction d'initialisation Python". Voici un exemple à suivre: """ from qgis.PyQt.QtWidgets import QWidget, QLineEdit def update_test(dialog, value): champ_2 = dialog.findChild(QLineEdit, "champ_2") champ_2.setText(value) def my_form_open(dialog, layer, feature): champ_1 = dialog.findChild(QLineEdit, "champ_1") champ_1.textChanged.connect(lambda: update_test(dialog, champ_1.value()))
Ici le champ 2 recoit la valeur de champ 1 dés qu'elle change. Lorsque l'utilisateur valide le formulaire les champs sont renseignés.
A partir de la, il ne devrait pas être très compliqué d'ajouter votre logique de calcul pour champ 2...
Dernière modification par YoLecomte (Mon 03 February 2020 15:37)
Hors ligne
#4 Mon 03 February 2020 17:25
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: remplir un champ automatiquement selon la valeur d'un autre
Bonjour,
la solution de YoLecomte me semble un poil compliquée.
Voici un projet qui montre que c'est possible nativement depuis la 3.2 grâce au widget valeur relationnelle
mais sans passer par la calculatrice de champs.
https://qgis.org/fr/site/forusers/visua … t=sql#id44
Cdt,
Hors ligne
#5 Mon 03 February 2020 17:55
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS: remplir un champ automatiquement selon la valeur d'un autre
Effectivement dans ce cas de figure et si on ne connais pas python, c'est plus simple.
Le prix a payer est l'ajout d'une nouvelle couche qui fais le lien valeur de champ 1 --> valeur de champ 2.
Bien vu, je n'y avais pas pensé!
Hors ligne
#6 Thu 11 June 2020 17:07
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Re: QGIS: remplir un champ automatiquement selon la valeur d'un autre
Bonjour,
Merci pour ce partage qui traduit effectivement ce que je cherche à faire, mais sous QGIS 3.12, avec une base postgreSQL12.
En adaptant l'exemple fournit par JD, je n'arrive pas à reproduire un fonctionnement voulu.
C'est comme si le calcul ne se faisait pas "à volée". Comme si le champ1 restait vide alors que j'ai sélectionné une valeur (current_value('champ') est -il censé fonctionner avec tout type de données)?
Une idée?
C'est parce que je bosse avec psql et pas en Geopackage?
EDIT: j'ai balancé les tables du gpkg partagé par JD dans une base pgSQL toute neuve, et la manip' fonctionne. Le problème n'est donc pas du au format des données. À suivre.
Dernière modification par Mathieu Denat (Fri 12 June 2020 10:15)
Mathieu
C'est en forgeant qu'on devient forgeron
Hors ligne
Pages: 1
- Sujet précédent - QGIS: remplir un champ automatiquement selon la valeur d'un autre - Sujet suivant