[QGis 1.8 – Excel – LibreOffice – Access] Créer une liaison dynamique entre une feuille d’un tableur ou d’une Base de données et QGis grâce à une connexion ODBC

Objectifs: Créer une liaison dynamique entre un tableau (Excel ou Libre Office) et QGis afin de faire une jointure entre un fichier de points en shapefile et des attributs de ceux-ci présents dans un tableau sans devoir ré-importer à chaque modification le tableau dans Qgis. Puis faire la même chose pour relier le shapefile de points à la base de données (Access).

Enfin, j’ai eu l’occasion de m’atteler a la connexion ODBC… c’est d’une simplicité presque déconcertante en fait … enfin presque 😉

1_Image_Titre

1) Préparer les données:

a)      Excel :

La spécificité sous Excel est qu’il faut définir la plage de données que l’on veut importer (comme cela est expliqué dans le numéro 7 des célèbres « QGis ppas à pas.. » de Christine C. que l’on peut trouver ici => http://fr.scribd.com/doc/63884739/QGis-1-7-0-pas-a-pas7 )

J’ai besoin ici des 7 premières colonnes, je les sélectionne donc (des lignes seront ajoutées ultérieurement donc ce sont les colonnes qui doivent être sélectionnées et pas seulement les enregistrements actuels !)

2_XL_Definir_Plage_de_donne

Une fenêtre s’ouvre et me demande de spécifier le nom de cette plage de données : je l’appelle Topo (Attention c’est ce nom qui apparaîtra en tant que couche dans Qgis, alors mettez y un nom intelligible !) et je vérifie qu’elle correspond bien aux 7 premières colonnes dans le champ « Fait référence à », ici les colonnes de A à G

3_XL_Nom_Plage-de-donnees

OKpuis j’enregistre mon document Listing_Topo_XL

Et c’est tout !

b)      LibreOffice :

Tout pareil !! il faut définir la plage de données : Menu Insertion > Noms > Définir…

4_LO_Nom_Plage-de-donnees

J’ai juste ici défini dans le champ étendue que seule la feuille « Listing » était concernée.

Par contre le tableau doit être enregistré sous Excel, car il n’y a pas de driver ODBC pour LibreOffice

c)      Access :

Rien à faire… si ce n’est connaitre le nom des tables et à quoi elle correspondent !!

2) Créer la source de données ODBC

a)      si votre ordinateur est en 32 bits :

Panneau de Configuration >  Outils d’administration  >5_Icone_Outils_D_Administra> Sources de données ODBC >6_icone_source-de-donnees-O

b)      si votre ordinateur est en 64 bits :

Attention : Il ne faut pas passer par les outils administrateur parce que cela ouvre une fenêtre ODBC 64 bits.

 =>  Il faut aller directement dans le répertoire C:\Windows\SysWow64\ (et non pas C:\Windows\System32, ou il existe aussi mais sans les drivers qu’il nous faut, ne me demandez pas pourquoi !!) et ouvrir odbcad32.exe pour avoir la version 32 bits et ainsi voir tout les drivers 32 bits.

7_icone_ODBCAD32

(Pour le trouver, vous pouvez aussi Taper directement C:\Windows\SysWow64\odbcad32.exe dans Menu Démarrer > Rechercher)

Astuce : Créez donc un raccourci sur le Bureau (clic droit > Envoyer vers > Bureau (créer un raccourci) si vous avez besoin de réitérer la démarche…

c)      configurer la source ODBC (Excel-LibrO):

Onglet « Source de données utilisateur » ou « « Source de données Système » selon que l’on veut créer la source seulement pour l’utilisateur en cours ou pour tout le monde…

Ici je clic sur l’onglet « Source de données système » > Bouton « Ajouter » >

Une fenêtre « Créer une nouvelle source de données » s’ouvre…

8_XL_Creer-une-nouvelle-sou

Je choisis mon pilote (ou driver), Excel dans mon cas (le driver LibreOffice n’existant pas je vous rappelle que l’on a enregistré notre tableau LibrO en .xls), puis Bouton « Terminer »

Dans la fenêtre « Installation ODBC pour Microsoft Excel », je donne un nom à ma source de données : ici, TopoXL

 Attention : c’est ce nom qu’il faudra indiquer dans QGis !! Retenez-le !!

9_XL_Installation-ODBC-pour

Puis Bouton « Sélectionner un classeur »

Dans la fenêtre « Sélectionner un classeur » (1) je parcours l’arborescence pour trouver mon le répertoire dans lequel se trouve mon fichier Excel Listing_Topo_XL.xls. Puis (2) clic sur le fichier > (3) OK

10_XL_selectionner-un-class

La fenêtre « Installation ODBC pour Microsoft Excel » réapparait > OK

Et voilà !!!!

Nous avons créé notre première source de données ODBC, la preuve :

11_XL_1ere-source-ODBC-cree

d)      configurer la source ODBC (Access):

Même chose, mais en sélectionnant Driver do Microsoft Access (*.mdb)

La fenêtre qui apparaît est un peu différente :

12_AC_Instalation-ODBC-pour-Microsoft_ACCESS

Mais la démarche est la même, il faut :

– Donner un nom, ici BDD

-Cliquer sur le bouton « sélectionner » pour parcourir et chercher l’emplacement de notre base de données Access.

– OK > OK

3) Ouvrir la source de données ODBC dans QGis (enfin !)

Menu Vecteur > Ajouter une couche vecteur

(1) Choisir « Base de données » comme type de source

(2) Choisir « ODBC » comme type de Base de données

(3) Clic sur le bouton Nouveau

13_Q_Ajouter-une-couche-vec

La fenêtre « Créer une nouvelle connexion OGR » s’ouvre :

– Donner un nom à votre Tableau de données (1) (pourquoi pas le même que la source de données, ici TopoXL)

– Dans le champ « Hôte », mettez localhost (2) (c’est-à-dire que le fichier est sur l’ordinatreur et pas en réseau)

– Dans le champ Base de données mettez le nom de votre source de données ODBC (3), c’est là qu’il ne  faut pas se planter ! (Mais je vous avait prévenu…)

14_Q_ConnexionODBC

C’est tout !

Je teste la connexion avec le bouton « Tester la connexion » (4)… et ca marche !!!.. (sinon on recommence depuis le début ou on va sur les forums spécialisés..moi je peux rien faire de plus là ;( )

=> OK (5)

15_Q_mdp

QGis me demande un mot de passe > Pas de panique il n’y en a pas  => OK

Dans le cas d’une source de données Access, une nouvelle fenêtre s’ouvre pour me demander de faire le choix d’une (ou plusieurs ) Table(s) de ma base de données à importer

16_Q_ODBC_Access_Choix_Table

En effet si j’ai créé une seule source de données ODBC pour ma base de données, chaque table est séparée et les relations entre elles ne sont pas prise en compte par Qgis.

Ma source de données apparait dans les couches avec le nom défini lors de la définition de la plage de données pour un tableau Excel (ou LibrO, et zut j’avais mis le même !) et le nom de la Table pour Access…

17_Q_couche

4) Conclusions:

Il ne me reste plus qu’à faire la jointure entre ma table de points et celle mon listing Excel via la liaison ODBC que je viens de créer puis entre ma table de points et ma base données Access (via la liaison ODBC)… Le seul problème étant que je ne peux joindre deux couches sur la base de deux champs appartenant a deux sources ODBC… 😉 => Il faut « figer » la première jointure en enregistrant le résultat en shapefile..

Attention : même si cette liaison ODBC est « dynamique » :

–          Les données ne peuvent être modifiées directement dans Qgis.

–          Les données modifiées sont mises à jour à la réouverture de Qgis

=>    Si vous voulez modifier des données dans votre tableur ou Base de données il faudra donc : fermer Qgis >  Ouvrir Excel-LibrO-Access > Modifier-Ajouter-Supprimer des données > Ouvrir Qgis > Miracle cela fonctionne !!!

– Aussi, si vous travaillez sur un autre ordinateur il faudra recréer la (ou les) liaisons ODBC à chaque fois ! Mais vous avez faire maintenant !

Note: Ici c’est simplement pour importer un Tableau (une feuille de données) Excel en « dynamique » mais on peut aussi grâce à une connexion ODBC et l’extension evis créer directement une couche de points si notre tableau d’origine contient une colonne X et une colonne Y…. => http://www.kogeo.com/fiches-qgis-creer-points-evis.php#qgis-creer-points-evis

Voili, voilà… on perd les relations entre tables, OK,  mais un peu de dynamisme dans les jointures cela ne fait pas de mal quand même ! non ?

Publicités
Tagué , , ,

26 réflexions sur “[QGis 1.8 – Excel – LibreOffice – Access] Créer une liaison dynamique entre une feuille d’un tableur ou d’une Base de données et QGis grâce à une connexion ODBC

  1. Baptiste dit :

    Ne marche pas pour moi sous QGIS 2.4

    • archeomatic dit :

      Les liaisons ODBC fonctionnent sous QGis 2.4.. attention toutefois tu dois être sur une version 32bits de Qgis (même si ton ordi est en 64) et suivre la procédure… promis j’en bouffe tous les jours !
      a+

  2. Timothée dit :

    Bonjour,

    j’ai le même problème sous QGis 2.4, une fois la connexion réussie,
    Qgis me dit « ODBC:BDD_invasive_XL n’est pas une source de données valide ou reconnue »
    Ordi 32bits

    Si vous avez une idée…

    Merci et topo très clair.

  3. Mad dit :

    Bonjour,

    Merci pour ce tutoriel efficace. Je n’ai pas de problème pour créer le lien mais je souhaiterais pourvoir utiliser le calcul de la surface de mes polygones par QGIS pour réinjecter cette donnée dans excel.

    Je lis en fin d’article « les données ne peuvent être modifiées directement dans Qgis. ». Est-ce que cela signifie que ce que je cherche est impossible avec liaison ODBC ?

    Une autre solution ?

    Bien cordialement

    • archeomatic dit :

      Bonsoir mad,
      Effectivement tu as bien compris: le lien odbc ne permet qune lecture du fichier excel et non pas decriture (modification ou nouvelle donnee) de celui ci
      Desole

      • Philippe dit :

        Bonsoir Mad,

        A mon avis, ce que tu cherches à faire est possible avec une solution libre (open office ou libre office) car ces deux formats sont éditables dans QGIS.
        Par ailleurs, tu peux créer une couche « dbf » directement avec le résultat de ton calcul …

        Philippe

  4. Mad dit :

    OK, merci pour ce retour rapide.

  5. Cyril dit :

    Bonsoir
    Je vais vous paraître idiot mais il y a un point qui me laisse perplexe, et c’est le plus simple à vos yeux: vous dites en conclusion :
    « Il ne me reste plus qu’à faire la jointure entre ma table de points et celle mon listing Excel via la liaison ODBC que je viens de créer puis entre ma table de points et ma base données Access (via la liaison ODBC)… »
    Mais c’est là précisément le problème : car ces jointures, comment faire pour qu’elles soient elles-mêmes dynamiques ? Ou bien faut-il à chaque fois les réaliser manuellement ?
    Merci !
    Cyril

    • archeomatic dit :

      Bonsoir cyril,
      La jointure cest un clic droit sur la couche dans la table des matieres > proprietes > onglet jointure ..
      Pas mieux.. Et oui le « dynamisme » est limité…

      • Cyril dit :

        Bonsoir
        La question est justement celle-ci : comment faire pour qu’à la ré-ouverture de qgis, non seulement la table « réseau » (ODBC ou autre) soit mise à jour, mais AUSSI que la liaison dans le calque soit elle-même mise à jour ?
        Cela vous parait possible ?
        Merci.
        Cyril

      • Philippe dit :

        Bonjour Cyril,
        J’ai suivi un peu vos échanges et je ne comprends pas bien ce que tu entends pas calque ?
        La liaison ODBC garanti une mise à jour dans QGIS des éléments modifiés dans le fichier qui est lié en ODBC mais la liaison en elle-même n’est pas dynamique :
        Si tu changes le nom du fichier lié, le nom d’un onglet dans le tableur, ces changements ne seront pas pris en compte, mais si tu ajoutes une colonne (champ) ou des lignes (enregistrements) cela devrait fonctionner …
        Philippe

      • Philippe dit :

        Cyril, de quel « calque » parles-tu ?
        QGIS ne contient pas de calque, mais des couches.
        Ton tableur ou base de données non plus, si ?
        Quel est ton environnement et quels sont les logiciels que tu utilises ?

  6. Cyril dit :

    Bonjour à vous
    Et merci de vous intéresser à mon cas.
    Désolé tout d’abord de mon manque de précision. En effet, lorsque je parle de calque, il s’agit de couche ; déformation due à mon utilisation de illustrator et autres.
    Il est vrai aussi que je me familiarise avec Qgis, même si j’ai touché à Mapinfo il y a un certain temps, et en particulier avec la gestion des bases. Du coup je suis parfois amené à comprendre de biais !
    Je vais donc tenter d’être plus précis.
    Suite à cet article, d’ailleurs fort utile, je me suis retrouvé face à la question suivante :
    1-il est en effet possible de mettre à jour en auto une couche liée (telle que l’article le décrit, à via postgresql, etc.)
    2-il est très utile d’utiliser la fonction de liaison entre deux couches via les propriétés d’une des 2 couches
    3-ce qui me parait manquer, c’est le « dynamisme » de cette relation là (point 2). Je fais peut-être erreur, mais à ce que j’ai compris, cette liaison n’est pas enregistrée, juste maintenue en mémoire jusque fermeture de Qgis. Or, ce qui serait souhaitable, c’est que la réouverture, les relations entre les 2 couches se « re-créent » dynamiquement (donc : la couche ODBC et la couche shp).
    Lorsque j’ai tenté de vérifier si c’était possible, il m’a bien semblé que non.
    En conclusion, la couche ODBC est dynamique ; mais la relation entre 2 couches ne l’est pas.
    Ou bien, me trompé-je ?
    Merci encore.
    Cordialement
    Cyril

  7. archeomatic dit :

    Salut cyril,

    illustrator… mapinfo y’a longtemps… bon ça sent l’archéologue ça non ?
    en fait pour tout dire je ne comprends pas ton problème..
    – tu créer ta liaison odbc à partir d’une BDD ou d’un tableur
    – tu arrives à ouvrir ta table dans QGIS
    – tu fais une jointure à partir de ta couche (pas de la table importée, hein?) clic droit>propriétés>jointure
    – tu enregistres ton projet qgis
    – tu fermes QGIS
    – tu modifies des données dans ton tableau/bdd
    – tu ouvres ton projet QGIS => ta jointure a du être conservée et les changements dans les données ont été prises en compte… NON?

    Aussi, tu peux aussi enregistrer le style de ta couche, il gardera en mémoire la jointure même si tu changesde projet (mais il faudra recréer la liason odbc et importer la même table)

    a+

    • Cyril dit :

      Salut
      Désolé, non, rien à voir avec l’archéologie ! Carto, en fait ! Et suivi de véhicule, etc.
      A voir ta réponse, je me dis que je dois me tromper.
      Dans mes jointures, je n’ai pas le sentiment que les données soient prises en compte. Je dois donc être à côté de mes godasses… Pas étonnant d’ailleurs vu tout ce que je digère ces derniers temps…
      Pour récapituler, et être certain de mon erreur : si on laisse de côté ce qui concerne les liaisons ODBC, et qu’on ne s’intéresse qu’à ce qui se passe entre 2 couches QGIS : si j’ai une liaison faite depuis la couche A vers la couche B, et que je mets à jour des données sur A, la liaison va les reporter sur B ?
      C’est ça qui me paraissait manquer, mais vu ta réponse, il semble que ça soit ce qui se passe « naturellement ».
      Merci encore.
      Cyril

  8. Many dit :

    Merci pour ce tutoriel qui vient de m’épargner de nombreuses frustrations…

  9. Laureline dit :

    Bonjour, pourquoi la table importée depuis la connexion odbc apparaît-elle comme une image dans la fenêtre couches? On ne peut pas ouvrir les données attributaires du coup…
    Merci pour votre article.

    • archeomatic dit :

      La réponse est dans la question… 😉
      Les tables issues d’une connexion ODBC ne sont pas modifiables dans QGIS, il faut le faire « à la source ».
      1) en même temps si tu utilise une BDD c’est bien dans celle ci qu’il faut modifier/amender les données. C’est son boulot.
      2) Tu peux aussi enregistrer ton shape avec la jointure (si tu ne compte pas modifier les données à la source évidemment) et travailler dessus après.
      Pas mieux 😉
      A+

  10. Marion dit :

    Bonjour,

    Merci pour ce guide bien pratique. J’ai réussi à établir la connexion (excel – qgis) en local.

    Maintenant je voudrais le faire en réseau (le fichier QGIS et excel sont sur le réseau et j’ai reconfiguré ma liaison odbc pour choisir le classeur en réseau). Mais sur QGIS quand je teste la connexion j’ai ce message d’erreur : ‘Unable to initialize ODBC connection to DSN for liaisonodbc, ‘Microsoft »pilote ODBC Excel’ ‘inconnu’ n’est pas un chemin d’accès valide. Assurez-vous que le chemin d’accès est correct et qu’une connexion est établie avec le serveur sur lequel réside le fichier’.

    Alors je me demande si lorsque l’on travaille en réseau, il y a d’autres modifications à faire que la localisation du classeur?

    Merci !!

  11. Ahmed dit :

    Bonjour, merci pour ce tutoriel.
    Alors en ce qui me concerne j’ai réussi à faire la liaison entre QGIS et ma bdd ACCESS (cette dernière est liée elle aussi à une bdd oracle).

    Mes soucis apparaissent quand j’essaye de récupérer avec QGIS une table sur ACCES:

    1)Demande d’authentification qui se répètent minimum 4 fois si ce n’est pas plus:
    2)Une fois cette étape passée et la table récupérée, elle est vide alors que sur access elle ne l’est pas (j’ai bien vérifie, pas de caractères spéciaux dans ma table).
    3)C’est trop long.

    Merci pour votre aide.

    • archeomatic dit :

      Salut Ahmed!
      Malheureusement je ne peux pas te donner de solution comme ça ! En effet je n’ai jamais rencontré aucun de 3 symptômes:
      1) authentification : soit ça fonctionne tout de suite soit pas du tout..
      2)pas eu d’effet table vide
      3) la connexion ODBC ne ma jamais pose de problème de latence..
      Mais
      1) je n’ai jamais eu plus de 1000 individus à gèrer
      2) jamais fais de connexion OracleAcces (d’ailleurs comment les 2 bdd sont elles reliées ? Et pourquoi ?)
      Ne pourrais tu pas relier directement ta base Oracle avec QGIS ?!
      3) cela fait bien 1 an que je n’ai pas fait de lien Odbc (genre avec un QGIS 2.4)
      Aller courage et donne nous de tes nouvelles..

      • Ahmed dit :

        Salut archeomatic;
        J’ai laissé une réponse sur le site hier, mais je vois que ce n’est pas passé.
        Alors si ça peut aider quelqu’un, il faut savoir que QGIS n’est compatible qu’avec Oracle Spatial.
        Du coup pour moi la connexion Qgis-Access passait bien mais comme access est connecté à Oracle, alors QGIS essayait lui aussi de s’y connecter et c’est là que ça bloque.

        Merci pour ton aide.

  12. Ahmed dit :

    Salut archeoamatic,

    Je crois que j’ai trouvé ce qui cloche, alors la connexion Qgis-access se déroule bien mais comme access est connecté à Oracle,alors Qgis essaye de s’y connecter lui aussi et c’est là que ça bloque puisque Qgis n’est compatible qu’avec Oracle spatiale.

    Merci pour ton aide.

  13. claire dit :

    Bonjour,
    La manip marche très bien merci, mais seriez-vous comment faire lorsque la base de données est sur un réseau (nas) ? Par quoi remplace t’on localhost ?
    Merci pour votre aide
    Claire

    • claire dit :

      J’ai trouvé la solution si ça peut en intéresser certain il suffit de remplacer loaclhost par network hard drive

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :