Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 11 February 2019 16:09

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonjour,

Malgré mes recherches, je ne trouve pas vraiment de réponse.
J'ouvre une couche shape, un fichier excel avec des champs au nom rigoureusement identique dans les 2 fichiers.
Je réalise une jointure à partir du champs contenant les données communes A, B, C, D, etc

QGIS ne met pas à jour les champs demandés, mais en crée des nouveaux temporaires. J'ai bien essayé de cocher / décocher des cases dans la fenêtre "Add Vector Join" (en anglais dans ma version QGIS) sans succès.

J'ai également essayé de laisser vide "Personnaliser le préfixe du champ"

Quelle serait la manipulation à effectuer pour que les champs désignés se mettent à jour ?

Merci d'avance


Win 10 et QGIS 328

Hors ligne

 

#2 Mon 11 February 2019 16:30

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

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonjour,
Une jointure sert à relier des couches (et/ou tables) entre elles, pas à modifier le contenu de l'une ou l'autre. La jointure affiche les informations dont on pourrait avoir besoin pour un traitement donné sur une couche, sans nécessité que cette donnée soit inscrite dans la couche.
Ex, j'ai une couche spatiale des départements et une table des populations à cette échelle: les joindre me permet de faire une carte des populations. Mais parce que la population varie justement chaque année et pas les départements (oui, j'ai fait exprès de choisir cet échelon administratif!), il n'y a aucune bonne raison d'insérer les champs de population dans ma couche département par défaut.


La jointure ne le faisant pas, si vous souhaitez néanmoins modifier le contenu de vos champs initiaux par ceux de la table jointe, il vous faudra passer par la case "calculatrice de champs" une fois la jointure faite.

Hors ligne

 

#3 Mon 11 February 2019 16:52

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Merci pour cette réponse.

Y a-t-il une autre procédure ou plugin qui permettrait ce que je cherche à faire ?

En effet, je pars d'une couche de points identifiés dont les différents attributs (dans 5 à 7 champs) sont saisis dans un fichier excel.
La calculatrice de champs va me demander une série de manipulations supplémentaires, qu'il faudra que je répète très souvent sur plusieurs fichiers différents.
Et la mise à jour directe serait bien pratique.

Bonne journée.


Win 10 et QGIS 328

Hors ligne

 

#4 Mon 11 February 2019 17:16

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

En SQL, on peut faire la jointure et la mise à jour de toutes les colonnes en une seule étape. Je reviens plus tard avec la syntaxe si j'ai le temps.

Hors ligne

 

#5 Mon 11 February 2019 17:35

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Merci beaucoup.
Ce sera une nouveauté pour moi ...

Bonne soirée


Win 10 et QGIS 328

Hors ligne

 

#6 Mon 11 February 2019 18:20

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

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

En effet, je pars d'une couche de points identifiés dont les différents attributs (dans 5 à 7 champs) sont saisis dans un fichier excel.


Et quel usage en faites-vous sous QGIS qui motive l'inscription en dur dans la table attributaire de la couche? surtout si elle est appelée à bouger fréquemment?

Hors ligne

 

#7 Tue 12 February 2019 08:51

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonjour,
Et merci de votre aide

J'essaye en fait de ne pas saisir 2 fois les mêmes données.

- D'une part j'ai une couche de points SIG (des points de balisage de sentiers pour être précis) avec une série de champs donnant des infos diverses sur chacun de ces points (type de matériel, altitude, commune, ...)

- D'autre part j'ai un fichier excel qui sert de base pour une fusion de publipostage afin d'éditer des fiches de balisage.  Avec une partie des infos de la couche, mais aussi de nombreux autres champs. L'intérêt d'excel réside dans le remplissage automatique et le calcul via des formules pour remplir certaines cellules.
Je précise que je traite minimum de 30 à 50 fichiers excel différents par an.

Lorsque mon fichier excel est finalisé, je souhaite récupérer les données d'une partie des infos du fichier excel afin de les transférer dans la couche SIG via la jointure, ce qui m'éviterait de tout ressaisir et également des erreurs de transcription.
Passer par la calculatrice de champs après jointure me fera déjà gagner du temps, mais l'opération risque d'être fastidieuse à la longue. Alors si mes différents attributs pouvaient être mis à jour directement, ce serait l'idéal.

En espérant avoir été compréhensible.

Dernière modification par jpjp74 (Tue 12 February 2019 08:53)


Win 10 et QGIS 328

Hors ligne

 

#8 Tue 12 February 2019 15:24

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

J'ai testé dans un autre logiciel et ceci fonctionne à merveille (SQL) :

Code:

Update 
(Select * from  pts_SIG as pt JOIN xls as tab ON pt.id_X = tab.id_X)
Set pt.A = tab.A_ , pt.B = tab.B_  , pt.C = tab.C_ where pt.id_X = tab.id_X

Dans QGIS, j'obtiens :

SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 17260 and this is thread id 16700.


Je trouve le moteur SQL vraiment capricieux dans QGIS. Je vais ouvrir un nouveau sujet pour voir si on peut nous aider à comprendre ça.

Notez qu'aucun des champs entre les 2 tables n'a besoin d'être nommé identiquement. Même que pour les champs à mettre à jour, c'est préférable d'avoir des noms différents. Sinon, vous allez devoir utiliser une panoplie de "as" (des alias) et ça va compliquer la lisibilité de la requête.

Mon test été fait via un geopackage avec le DBManager.

Dernière modification par carteq (Tue 12 February 2019 15:27)

Hors ligne

 

#9 Tue 12 February 2019 15:40

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonjour

Merci beaucoup pour cette réponse, ... mais là je ne comprends même pas de quoi vous me parlez.

Je vais prendre le temps de chercher de mon coté dans des tutoriels et autres. Par contre ça me prendra un peu de temps. Je ne manquerai pas de revenir vers vous.

Bonne soirée


Win 10 et QGIS 328

Hors ligne

 

#10 Tue 12 February 2019 15:51

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

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonjour,

Lorsque mon fichier excel est finalisé, je souhaite récupérer les données d'une partie des infos du fichier excel afin de les transférer dans la couche SIG via la jointure, ce qui m'éviterait de tout ressaisir et également des erreurs de transcription.


Lorsque vous faites la jointure dans QGIS, les infos excel sont donc "disponibles" sur la couche spatiale. Ma question était donc: n'est-ce pas suffisant pour faire vos manipulations sur la couche spatiale? Faut-il absolument que la donnée soit DANS la couche (vous l'utilisez dans d'autres contextes avec ces valeurs importées?)?
Bon j'arrête avec mon obsession à vouloir garder les couches modulaires big_smile

Autrement, si besoin de créer une couche, quid de simplement supprimer les champs existants, faire la jointure et enregistrer sous?

Je précise que je traite minimum de 30 à 50 fichiers excel différents par an.


Le menu Traitement propose un modeleur graphique qui permet de préparer un certain nombre d'opérations récurrentes et les exécuter le moins péniblement possible. La plupart des algorithmes de la boîte à outils y sont utilisables. A explorer peut-être...

Hors ligne

 

#11 Tue 12 February 2019 16:10

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

@jpjpj74, c'est plus simple qu'il n'y paraît. Je vous expliquerai comment ça marche quand la bonne syntaxe sera disponible.

Hors ligne

 

#12 Tue 12 February 2019 17:08

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bon voilà, j'ai trouvé la syntaxe en SQLite. Très différente.

Pour éxécuter ça, chargez votre couche de points (ici "pts_SIG") et votre tableur Excel (ici "xls").

Ensuite menu Base de données, puis DBManager. Naviguez jusqu'à vos données via le Fournisseur de données. Elles sont dans Couches Virtuelles si chargée dans le projet. Utilisez un autre fournisseur si vos données sont dans une BD ou un Geopackage. Cliquez ensuite sur la Fenêtre SQL (2e icône en haut à gauche (version 3.4)) Adaptez et coller la requête suivante :

Code:

UPDATE 
      pts_SIG
SET A = (SELECT A_
                  FROM xls
                  WHERE id_X = xls.id_X)
        ,
        B= (SELECT B_
                  FROM xls
                  WHERE id_X = xls.id_X)
        ,
        C= (SELECT C_
                  FROM xls
                  WHERE id_X = xls.id_X)
                
where EXISTS (SELECT A_, B_, C_
                  FROM xls
                 WHERE id_X = xls.id_X)

A, B et C sont des noms de champs dans pts_SIG (ajoutez des champs au besoin et adaptez les noms). id_X est le nom du champ pour joindre les 2 tables. Adaptez à vos données. Pas obligé d'être identique dans les 2 tables. A_, B_ et C_ sont les noms des champs correspondants dans la table Excel. Adaptez. Ils peuvent être identiques. Adapter le nom des champs dans la clause EXISTS (quoique un seul soit suffisant ici je crois).

Cliquez sur Exécuter. Votre table de pts est mise à jour.
Conserver le texte de la requête pour une prochaine fois via Enregistrer.

p.s. si vous faites une erreur, fermer le DBManager, recoller ou recharger la formule avant de ré-exécuter. Il ne semble pas tolérer autrement.

Dernière modification par carteq (Tue 12 February 2019 17:09)

Hors ligne

 

#13 Tue 19 February 2019 19:03

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonsoir

Merci pour votre aide.

J'ai donc suivi votre procédure et adapté les nom de ma couche SIG (Test_jointure_via_SQLITE) et de mon tableau excel (BD_DIR_Test_SQLITE)
Je n'ai gardé que 2 champs à mettre à jour : "TYPE_MOB" et "LIEU-DIT"
et la jointure se fait avec le champ "CODE"

J'ai une erreur de syntaxe et GIS plante (je suis avec la version 3.2.3 (la 3.4 plantait trop souvent). Je vous copie ci-dessous la syntaxe que j'ai utilisée. Il doit y avoir une erreur que je ne trouve pas ?

Je pense comprendre  globalement son organisation. Il y a une chose que je ne comprends pas  : Pourquoi n'a-t-on qu'une seule fois "SET A"  (dans votre exemple ) et pas les autres ? SET B, ... Mais peut-être que finalement je ne comprends pas tant que ça smile

Bonne journée

UPDATE
      Test_jointure_via_SQLITE
SET TYPE_MOB = (SELECT TYPE_MOB _
                  FROM BD_DIR_Test_SQLITE
                  WHERE id_CODE = BD_DIR_Test_SQLITE.id_CODE)
        ,
        B= (SELECT LIEU_DIT_
                  FROM BD_DIR_Test_SQLITE
                  WHERE id_CODE = BD_DIR_Test_SQLITE.id_ CODE)
               
where EXISTS (SELECT TYPE_MOB _, LIEU_DIT _
                  FROM BD_DIR_Test_SQLITE
                 WHERE id_CODE = BD_DIR_Test_SQLITE.id_CODE)


Win 10 et QGIS 328

Hors ligne

 

#14 Tue 19 February 2019 19:40

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Je vous copie ci-dessous la syntaxe que j'ai utilisée. Il doit y avoir une erreur que je ne trouve pas ?


Je pense qu'il y a 2 espaces blancs qui ne devraient pas être là avant des barres de soulignement dans vos noms de champs, ce qui crée 2 appellations pour un seul et unique champ. Donc, ça cause une erreur. À vérifier.

Pourquoi n'a-t-on qu'une seule fois "SET A"


On applique "Set" une seule fois, suivi de la liste des champs à mettre à jour, séparés par une virgule. "Set" s'applique alors à chaque champ de la liste.

Hors ligne

 

#15 Wed 20 February 2019 18:15

jpjp74
Participant assidu
Date d'inscription: 21 Oct 2011
Messages: 159

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonsoir

Merci pour le retour

J'ai corrigé mais QGIS plante directement quand je clique sur "exécuter"

Je ne suis pas certain d'une chose pour "id_X" : Vous précisez que [id_X est le nom du champ pour joindre les 2 tables]

Si mon nom de champ s'appelle "CODE" je dois saisir

WHERE CODE = BD_DIR_Test_SQLITE.id_CODE

ou WHERE CODE = BD_DIR_Test_SQLITE.CODE ?

Merci encore. Bonne soirée


Win 10 et QGIS 328

Hors ligne

 

#16 Wed 20 February 2019 19:08

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Si le nom est CODE dans les 2 fichiers :

WHERE CODE = BD_DIR_Test_SQLITE.CODE

Hors ligne

 

#17 Tue 19 March 2024 11:43

Maxoucarto
Juste Inscrit !
Date d'inscription: 18 Mar 2024
Messages: 4

Re: QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données

Bonjour,

Je déterre ce topic puisque je cherche également le moyen de lier une liste de communes tenue à jour sur Excel à une couche vectorielle des limites des communes sur mon département, le tout bien évidemment via Qgis (v.3.28.13-Firenze).

J'ai tenté le code SQL précédent pour mon cas de figure mais sans succès.

Je voudrais savoir néanmoins s'il n'y aurait pas un moyen encore plus simple avec une fonctionnalité dans Qgis qui permettrait de réaliser ce genre de jointure svp ?

! L'idée étant bien de ne pas additionner des attributs entre les 2 sources mais bien de soustraire à une couche vecteur exhaustive les communes listées dans un fichier Excel pour ne laisser apparaitre que les limites des communes listées dans ce même fichier Excel.

Merci !

Dernière modification par Maxoucarto (Tue 19 March 2024 13:32)

Hors ligne

 

Pied de page des forums

Powered by FluxBB