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 Thu 21 February 2013 18:18

Razorbak
Participant assidu
Lieu: Clermont Ferrand
Date d'inscription: 7 Oct 2007
Messages: 505

[ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,

J'ai fait une jointure attributaire entre une couche SIG et un fichier excel dans un projet mxd, sans importer directement le fichier excel dans le projet.
Comment puis-je faire pour retrouver le fichier excel que j'ai utilisé, et également l'onglet utilisé ?

Je vous remercie.
Bonne soirée

Hors ligne

 

#2 Thu 07 March 2013 08:23

Razorbak
Participant assidu
Lieu: Clermont Ferrand
Date d'inscription: 7 Oct 2007
Messages: 505

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,

Personne ne sait ou ma question n'est pas assez précise ?
Je récapitule :
- pour faire une jointure, on a le choix d'importer directement une feuille excel dans un projet (elle apparait alors dans l'onglet Source, et le chemin du fichier excel apparait) mais on peut également faire une jointure directement avec la même feuille excel, sans l'importer dans le mxd, en faisant Parcourir dans nos répertoires.
Si j'enregistre le mxd, la jointure est toujours présente à sa réouverture, mais pas de trace de chemin.

Dans le second cas, comment puis-je retrouver quelle feuille excel j'ai interrogé ?

Je vous remercie. Bonne journée

Hors ligne

 

#3 Thu 07 March 2013 10:28

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,

Peut-être qu'en utilisant l'un de ces deux script VBA :
- List MXD Sources (ver.3)
- List Layer Sources/Paths

Ou en les complètant...

A+

Franck

PS : les outils mis à disposition par Kevin le font peut-être aussi  : Lister des couches dans un MXD

Hors ligne

 

#4 Thu 07 March 2013 16:18

Razorbak
Participant assidu
Lieu: Clermont Ferrand
Date d'inscription: 7 Oct 2007
Messages: 505

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Re-bonjour,

Merci.
J'ai regardé et voici les résultats :
- le premier script permet de lister les couches et les tables attributaires présentes dans le fichier mxd. On a bien leur chemin.
On récupère aussi les ensembles de définition présents ou non sur chaque couche.
Mais par contre, pas de trace des jointures.

- pour le second (c'est un dll), il y a plusieurs outils et celui qui peut potentiellement m'intéresser est censé créer une feuille excel avec toutes les infos. Mais, une fois que l'on clique sur l'outil en question, le fichier se crée a priori, mais par contre, je ne sais pas où il se situe.
Aucune trace de ce fichier.

Est-ce que quelqu'un a déjà utilisé ce 2e script ? Ou a une idée ?
Sinon, j'essaierai de contacter son auteur directement.

Merci

Hors ligne

 

#5 Thu 07 March 2013 18:45

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,

J'ai trouvé un autre outil pour documenter les MXD (et aussi les GDB dans ce cas) : GDB XRay 4.1.

Mais toujours pas de trace des jointures sur les couches...
Je commence à me demander s'il est possible d'accès à cette information dans les ArcObjects à l'aide du VBA.

Après quelques recherches, il semble que cela est possible de manipuler les tables jointes en VBA : Un exemple de suppression de la dernière jointure d'une couche ou d'une table. Il doit être possible de modifier le script en VBA pour gérer les tables jointes.


A+

Franck

Dernière modification par Franck B (Thu 07 March 2013 19:14)

Hors ligne

 

#6 Thu 07 March 2013 22:44

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonsoir,

Malheureusement l'outil que j'ai créé ne prend pas en compte les tables, et encore moins les jointures hmm. Je vais essayer de regarder si le module arcpy.mapping que j'ai utilisé permet de le faire. Mais quoiqu'il en soit, cet outil ne fonctionnera pas sous ArcGIS 9.2 : la librairie arcpy.mapping n'est disponible qu'à partir d'ArcGIS 10...
Mais si jamais j'arrive à faire quelque chose, peut-être que vous pourriez m'envoyer le MXD pour que j'exécute le traitement depuis mon poste. Je vous tiens au courant du résultat de mes tests dès que possible.

A bientôt,
Kevin

Hors ligne

 

#7 Fri 08 March 2013 13:19

Meums
Participant actif
Lieu: Bordeaux
Date d'inscription: 26 Mar 2009
Messages: 98

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,
C'est p-être éloigné de ta recherche (liste des sources vers lesquelles s'oriente ce post ?) mais sache qu'il est possible de retrouver la source jointe, couche par couche en affichant la propriété de chacune et en regardant dans l'onglet Jointure/Relation. On y retrouve alors le nom de la feuille jointe puis le chemin d'accès dans l'arbo. Windows.
L'inconvénient c'est lorsque tu as plusieurs liens à identifier...
Emeric

Hors ligne

 

#8 Fri 08 March 2013 13:47

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Meums a écrit :
[...]mais sache qu'il est possible de retrouver la source jointe, couche par couche en affichant la propriété de chacune et en regardant dans l'onglet Jointure/Relation.


C'est vrai, sauf lorsque la source de données est invalide : dans ce cas rien n'est affiché dans l'onglet Jointure/Relation hmm

Je vous confirme qu'il m'est impossible (en tout cas je n'ai pas trouvé comment faire) d'accéder aux propriétés des tables jointes avec le module arcPy.mapping. Par contre, j'ai pondu un bout de code en .NET qui me permet d'y arriver. Mais je n'ai pas le courage, ni surtout le temps, d'industrialiser ce code et de le rendre compatible avec la version 9.2 des ArcObjects (je suis en 10).

Razorbak, si tu le souhaites, tu peux me transmettre ton fichier MXD (sans les données bien sûr), et je devrais pouvoir exécuter mon code dessus pour te dire ce que ça donne.

Kevin

Dernière modification par Kevin Jousseaume (Fri 08 March 2013 13:47)

Hors ligne

 

#9 Fri 08 March 2013 22:19

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Pour ceux que ça pourrait intéresser, voici le code que j'utilise et qui me permet, pour un MXD donné, de parcourir toutes les couches du MXD et, si une couche possède des jointures, de parcourir ses tables jointes en récupérant le nom de la table et son emplacement d'origine.
Attention, ce code n'a été testé que sur des données jointes issues d'Excel.

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;

namespace ListLayers
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            UID pUID = new UIDClass();
            IMapDocument pDoc = new MapDocument();
            pDoc.Open(@"C:\temp\Nouveau dossier\Sans nom.mxd"); // Ouverture du mxd à tester

            string sSourceQueryTable = "";

            for (int i = 0; i < pDoc.MapCount; i++)
            {
                IMap pMap = pDoc.get_Map(i);

                UID uid = new UIDClass();
                uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}"; //IFeatureLayer
                // Récupération de toutes les couches de type IFeatureLayer, même au sein des groupes de couches
                IEnumLayer layers = pMap.get_Layers(uid, true);
                layers.Reset();

                IFeatureLayer pFeatureLayer = (IFeatureLayer)layers.Next();
                while (pFeatureLayer != null)
                {
                    IDisplayTable pDisplayTable = (IDisplayTable)pFeatureLayer;

                    ITable pTable = (ITable)pDisplayTable.DisplayTable;
                    if (pTable != null)
                    {
                        sSourceQueryTable += "Couche : " + pFeatureLayer.Name + "\n";
                        // Récupération de la liste des tables jointes
                        IRelQueryTable relQueryTable;
                        ITable destinationTable;
                        IDataset dataset;
                        try
                        {
                            // lève une exception lorsqu'il n'y a pas de jointure ou lorsque que 
                            // l'on arrive à la dernière table jointe
                            relQueryTable = (IRelQueryTable)pTable;

                            //Boucle sur les différentes tables jointes
                            while (relQueryTable != null)
                            {
                                destinationTable = relQueryTable.DestinationTable;
                                dataset = (IDataset)destinationTable;
                                sSourceQueryTable += "Nom de la table : " + dataset.Name + "; Emplacement du fichier source : " + dataset.Workspace.PathName + "\n";

                                pTable = relQueryTable.SourceTable;
                                relQueryTable = (IRelQueryTable)pTable;
                             }
                        }
                        // permet de s'échapper lorsqu'on arrive à la dernière table jointe ou s'il n'y a pas de table jointe du tout
                        catch { relQueryTable = null; }
                    }
                    pFeatureLayer = (IFeatureLayer)layers.Next();
                }
            }
            MessageBox.Show(sSourceQueryTable);
        }
    }
}

Résultat obtenu en présence de 3 couches différentes :
- la couche "CONSEIL_QUARTIER sans jointure" sans jointure,
- la couche "CONSEIL_QUARTIER avec jointure" possédant 1 jointure avec l'onglet "Quartiers" du fichier Excel C:\temp\Nouveau dossier\CONSEIL_QUARTIER.xls
- la "CONSEIL_QUARTIER avec 2 jointures" couche possédant 2 jointures :
       - une avec la plage de valeurs "Quartiers_Restreints" du fichier Excel C:\temp\Nouveau dossier\CONSEIL_QUARTIER_2.xls
       - une avec l'onglet "Quartiers" du fichier Excel C:\temp\Nouveau dossier\CONSEIL_QUARTIER.xls

Couche : CONSEIL_QUARTIER sans jointure
Couche : CONSEIL_QUARTIER avec jointure
Nom de la table jointe : Quartiers$; Emplacement du fichier source : C:\\temp\\Nouveau dossier\\CONSEIL_QUARTIER.xls
Couche : CONSEIL_QUARTIER avec 2 jointures
Nom de la table jointe : Quartiers_Restreints; Emplacement du fichier source : C:\\temp\\Nouveau dossier\\CONSEIL_QUARTIER_2.xls
Nom de la table jointe : Quartiers$; Emplacement du fichier source : C:\\temp\\Nouveau dossier\\CONSEIL_QUARTIER.xls

Dernière modification par Kevin Jousseaume (Fri 08 March 2013 23:29)

Hors ligne

 

#10 Thu 14 March 2013 08:04

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,

Après quelques recherches, il semble que cela est possible de manipuler les tables jointes en VBA : Un exemple de suppression de la dernière jointure d'une couche ou d'une table. Il doit être possible de modifier le script en VBA pour gérer les tables jointes.


Cela est effectivement possible, le code VBA ci-dessous permet d'afficher la source de la jointure de la couche sélectionnée.

Code:

Public Sub AfficheSourceJoin()

  ' Get the map
  Dim pDoc As IMxDocument
  Set pDoc = ThisDocument
  Dim pMap As IMap
  Set pMap = pDoc.FocusMap
  
  ' Get the selected layer or table
  Dim pSelItem As IUnknown
  Set pSelItem = pDoc.SelectedItem
  If Not TypeOf pSelItem Is IDisplayTable Then
    MsgBox "No Feature layer or table selected"
    Exit Sub
  End If
  
  ' Make sure the selected layer is joined
  Dim pDispTable As IDisplayTable
  Dim pTable As ITable
  Set pDispTable = pSelItem
  Set pTable = pDispTable.DisplayTable
  If Not TypeOf pTable Is IRelQueryTable Then
    MsgBox "The layer or table is not joined"
    Exit Sub
  Else
    Dim pRelQTab As IRelQueryTable
    Dim pDTable As ITable
    Set pRelQTab = pTable
    Set pDTable = pRelQTab.DestinationTable
    Dim pJoinDSet As IDataset
    Set pJoinDSet = pDTable

    Dim pJoinWorkspace As IWorkspace
    Set pJoinWorkspace = pJoinDSet.Workspace
    MsgBox "Join: " & pJoinWorkspace.PathName & "\" & pJoinDSet.Name
  End If

End Sub

Le code de l'outil List MXD Sources (ver.3) est donc modifiable pour générer un fichier texte listant toutes les couches d'un document ArcMap avec leur jointure éventuelle.

A+

Franck

Hors ligne

 

#11 Mon 06 January 2014 11:20

Razorbak
Participant assidu
Lieu: Clermont Ferrand
Date d'inscription: 7 Oct 2007
Messages: 505

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour et bonne année à tous,

Le code répond parfaitement à ce que je souhaite, mais à partir de quel endroit peut-on lancer un tel script ? Dans la fenêtre Python d'ArcMap ?

Merci

Hors ligne

 

#12 Wed 22 January 2014 11:19

Razorbak
Participant assidu
Lieu: Clermont Ferrand
Date d'inscription: 7 Oct 2007
Messages: 505

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,
Un petit up sur cette question SVP...
Il suffit de copier-coller ce bout de code de Frank dans le script de l'outil "List_MXD_Sources" ?

Merci beaucoup

Hors ligne

 

#13 Wed 22 January 2014 15:35

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Bonjour,

Pour utiliser le script "AfficheSourceJoin()", il faut : ouvrir l'éditeur VBA (Menu Personnaliser), copier:coller le code.
Pour utiliser le script "List_MXD_Sources", il faut : ouvrir l'éditeur VBA (Menu Personnaliser), importer le module vb.

Mais pour faire, ce que tu veux, il faut modifier le code du deuxième script à l'aide de l'exemple du premier...

Je dois l'avoir fait quelque part... si je le retrouve, le mettrait sur le forum.

A+

Franck

Hors ligne

 

#14 Wed 22 January 2014 16:12

Razorbak
Participant assidu
Lieu: Clermont Ferrand
Date d'inscription: 7 Oct 2007
Messages: 505

Re: [ArcGis 9.2] Source d'un fichier excel servant de jointure

Merci beaucoup !
Ça serait super...

Hors ligne

 

Pied de page des forums

Powered by FluxBB