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

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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,


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB