QGis: jointures avec des tables Excel

Le sujet abordé ici n’est qu’un rappel car la possibilité de charger et joindre directement des tables Excel date de la version 1.8 de QGis.
Comme on ne suit pas la logique générale, pour les nouveaux utilisateurs ce n’est pas évident de trouver la réponse. Alors voyons, pas à pas, comment effectuer une jointure entre une couche spatiale (on prendra ici un exemple avec un fichier shapefile) et une table non spatiale de type Excel (avec ou sans champs X Y).

Pour charger une table Excel dans QGis il n’est pas nécessaire de passer par un plugin (XY Tools, MMQGIS,…). Vous utiliserez XY Tools si vous voulez transformer la table Excel avec des champs X et Y en couche spatiale de points.

Par contre si ce que vous souhaitez c’est de joindre la table Excel à une couche spatiale existante à travers une clé (N° de parcelle, nom du propriétaire, …) c’est simple et rapide.

1- Chargez la table Excel dans QGis

C’est là le piège. Pour faire cela, vous allez utiliser le bouton Charger une couche vecteur.

bouton ajouter une couche vecteur

Eh oui! Il faut le savoir, car la table Excel n’est pas une couche vecteur.

Vérifiez que l’option « Tous le fichiers » est bien sélectionnée, si non vous ne verrez pas les fichiers Excel.

sélection du fichier excel à charger

La table Excel apparaît alors dans la liste des couches. Vous pouvez ouvrir la table de la même manière que les autres tables des couches spatiales chargées dans QGis. Vous pouvez aussi basculer en mode édition, éditer la table et la sauvegarder. Vous aurez les mises à jour de votre table Excel, de la même manière que si vous les aviez effectuées avec Excel.

table excel chargée en tant que couche dans qgis

2- Chargez la couche spatiale

Chargez maintenant la couche spatiale à laquelle vous voulez joindre l’information contenue par la table Excel.

Pour notre exemple nous allons charger un shapefile avec des Établissements ostréicoles.

table d'un shapefile chargée dans qgis

Nous allons maintenant joindre la table Excel en utilisant le champ ZTABISSEM de la couche shapefile et le champ STATION de la table Excel

Jointure shapefile – Excel

Double-cliquez sur la couche shapefile dans le panneau Couches
La fenêtre de propriétés de la couche s’ouvre. Sélectionnez l’onglet Jointures et cliquez sur la croix verte pour ajouter une jointure

onglet jointure des propriétés de la couche

La fenêtre de définition de jointure s’ouvre

dialogue ajouter une jointure vecftorielle

  • Dans Joindre la couche sélectionnez la table Excel
  • Dans champ de jointure dans la couche jointe sélectionnez le champ clé de votre table Excel
  • Dans Champ de jointure dans la couche cible sélectionnez la clé de votre shapefile
  • Cliquez sur OK pour fermer la fenêtre de définition de jointure
  • Cliquez sur OK pour fermer la fenêtre de Propriétés de la couche

Si vous ouvrez maintenant la table de la couche shapefile, vous verrez que les champs de la table Excel apparaissent à la suite des champs qui étaient déjà présents.

résultat de la jointure excel-shapefile

Si vous sauvegardez maintenant votre projet, vous pouvez continuer à mettre à jour votre table Excel, sans QGis, mais quand vous ouvrirez le projet à nouveau vous retrouverez toutes les modifications apportées à la table Excel. La jointure est un lien dynamique et la table jointe est calculée à la volée à chaque ouverture.

16 pensées sur “QGis: jointures avec des tables Excel”

  1. Bonjour,
    Merci pour cet article très clair et intéressant.
    Pour ma part je cherche une façon d’avoir une jointure non dynamique. En effet, cela peut poser problème quand on modifie parfois son tableau excel mais qu’on ne souhaitait pas altérer la carte.
    Sous Mapinfo j’ouvrais simplement mon fichier excel. Un .tab était alors créé. Je pouvais ensuite faire une sélection sql qui me permettait de créer un .tab contenant à la fois les donner de mon fond carto (contours des communes d’un département par exemple) et les données de mon fichier excel (par exemple population par commune). Je n’avais ensuite plus qu’à sauvegarder la table issue de cette requête sql. Je pouvais travailler ensuite sereinement sur cette table contenant mes données statistiques et mes données géographiques, sachant que mon excel d’origine pouvait être modifié sans altérer ma carte.
    Malheureusement j’ai beau chercher je n’ai à ce jour pas trouvé d’équivalent sous QGIS pourtant bien plus pratique que Mapinfo.
    Auriez-vous une piste à me donner ?
    Merci beaucoup par avance.

    1. Bonjour
      Si vous ne voulez pas que la jointure soit dynamique, c’est que vous voulez figer l’état actuel de la table Excel,n’est-ce pas? Le plus simple qui me vient à l’esprit est, une fois chargée dans QGis la table Excel, sauvegarder la couche sous forme de shapefile ou autre, et réaliser la jointure avec cette nouvelle couche et non la table d’origine. Ceci va faire que votre jointure, qui n’existe que dans ce document QGis, soit statique. Toute modification de la table Excel d’origine ne sera pas répercutée sur la jointure.
      Mais si je comprends bien ce que vous faisiez avec MapInfo, vous dites que vous sauvegardiez la table jointe. Si vous faites la même chose: jointure de la table excel avec une couche shapefile, puis sauvegarde de la couche jointe sous forme de shapefile, le shapefile produit n’est plus lié à la table Excel d’origine.

      1. Bonjour,
        Merci de votre réponse très rapide.
        J’ai essayé de sauvegarder la coupe shapefile. Mais deux choses me chiffonnent encore :
        – le manque de contrôle rapide de la fusion pour vérifier que tout s’est bien passé et qu’on retrouve le bon nombre d’objets. Par exemple dans MapInfo je pouvais voir instantanément le nombre d’enregistrements de ma table et voir sur le fond carto le nombre d’objets sélectionnés (donc qui avaient fusionnés). Je pouvais ainsi m’assurer de la bonne jointure.
        – le plus qu’apportait la sélection sql aussi était que cela ne me gardait que les éléments ayant pu fusionner. Par exemple j’ai des données sur un département et des communes alentours (pour ne pas avoir une « ile »). Je le fusionne avec le fond des communes de France. La sélection sql sort un fond carto ne contenant que les communes ayant des données (ie département et alentours) qu’actuellement sauf si je me suis trompée en le faisant : qgis garde tous les objets quitte à mettre « null » dans la colonne de données lorsqu’il ne trouve pas d’identifiant et informations à ajouter.
        Je ne sais pas si je suis très claire ?

        1. Désolé, mais la dernière fois que j’ai utilisé Mapinfo c’était dans une vie antérieure. Vous n’aviez pas mentionné SQL. Si ce que vous voulez c’est utiliser une requête SQL pour faire la jointure (puis après sauvegarder la table jointe), dans QGis vous devez utiliser les « couches virtuelles ». Voici le lien sur un article qui traite des couches virtuelles : http://www.sigterritoires.fr/index.php/jointures-1-n-dans-qgis-les-couches-virtuelles/

  2. Bien le Bonjour.
    Article très intéressant. moi je voudrais faire une jointure dynamique. de façon à ce que toute modification dans mon fichier Excel se répercute immédiatement dans le shapefile (même après avoir fermé l’interface Qgis) comment puis je procéder?

    1. Dans cet article la jointure est un lien virtuel entre une table excel et un shapefile. Le résultat de la jointure est une couche virtuelle, sans existence physique sur le disque. Pour qu’elle existe, il faut que QGis soit lancé. C’est lui qui lit les deux sources de données et crée, en mémoire, la couche virtuelle. Dans votre question il me semble que vous voulez quelque chose comme un lien dynamique entre documents, où un document est intégré à l’intérieur d’un autre (un graphique excel dans un document word, par exemple). Ce n’est pas du tout comme ça que marchent les jointures. Votre table excel n’est pas incluse dans le shapefile. Si vous modifiez la table excel, ce qui sera modifié c’est la couche virtuelle, si elle est affichée dans QGis). Si vous convertissez en permanente la couche virtuelle (enregistrer sous…) sur votre disque, on ne peut pas garder un lien avec les fichiers source (shapefile et excel). Si ceux là sont modifiés à posteriori, on ne pourra pas voir ces modifications apparaître dans la couche enregistrée.

      1. Je vais reformuler ma préoccupation.
        je voudrais créer une jointure ou mieux un lien entre un fichier Excel et une couche shapefile. de façon à ce que toute éventuelle modification (ajout ou retrait) répercute dans le Shapefile.
        je sais que c’est possible en créant une source de donnée ODBC. je bloque au niveau des procédures !!

        1. Désolé, mais le format shapefile n’est pas compatible ODBC. C’est un format qui date des années 60. Vous pouvez créer une source ODBC excel, mais vous ne pouvez pas l’inclure dans un shapefile.

  3. Bonjour, je rencontre un petit soucis, lorsque je charge mon fichier excel il m’est impossible de passer en mode édition et de modifier les données, et lorsque j’essaie de joindre les fichiers les données du fichier excel n’apparaissent pas.
    Merci de vos réponses

  4. Bonjour,
    Merci beaucoup pour cet article.
    J’aimerais savoir s’il es possible de lier un fichier excel à plusieurs couches shapefile. J’ai crée une couche pour chaque mètre carré sur un plan (sachant que le plan est une image) et je voudrais associer les données excel (qui sont les quantités de matériel par m²) à chacune de mes couches pour ensuite faire une carte de densité de répartition des vestiges.
    Je ne sais pas si c’est clair, et si c’est possible?
    Merci d’avance si vous pouvez m’aider

    1. J’ai pas très bien compris mais vous pouvez joindre la même table excel à plusieurs couches. Le problème c’est que ça peut être long et ennuyeux…
      Ce que je ne vois pas c’est pourquoi créer une couche indépendante pour chaque m². Sûrement vous avez des raisons, ais si le but est une répartition des vestiges par m², le plus logique à première vue c’est que chaque m² soit un enregistrement d’une couche et pas une couche en soi. Mais bon , vous pouvez joindre le même tableau excel à autant de couches que vous voulez.

      1. Merci beaucoup pour votre réponse rapide!
        En fait je ne maîtrise pas très bien le logiciel et j’ai fait ça parce que je ne savais pas faire autrement, mais si c’est possible alors oui ça semble beaucoup plus simple en effet!
        merci encore

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *