Pages: 1
- Sujet précédent - QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données - Sujet suivant
#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: 3944
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: 3944
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: 3944
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
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
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
Pages: 1
- Sujet précédent - QGIS 3.2.3: Jointure tablau excel et MaJ en direct des données - Sujet suivant