VBA Arcgis

Embed Size (px)

DESCRIPTION

Programmation VBA sur ArcGis

Citation preview

  • ISA

    Chrono-Ecologie, UMR 6565, BesanonArchologie, Culture et Socit, UMR 5594, Dijon

    U M S 2 9 1 3

    Rseau

    Information Spatiale et Archologie

    http://www.univ-tours.fr/isa

    Support de cours - Programmation Visual Basic pour ArcGIS(T. Lohro, X. Rodier)

    ECOLE THEMATIQUE

    Gomatique, Analyse & Modlisation Spatiale en Archologie

    du 12 au 17 septembre 2005 Messigny et Vantoux (Cte d'Or)

  • Atelier programmation ArcGis en visual basic. Introduction :

    Dans cet atelier notre ambition nest pas de faire de vous en 3 heures de parfaits connaisseurs du langage Visual basic appliqu Arcgis. Il va surtout sagir de vous permettre den connatre les grands principes de fonctionnement (linterface VBE, la norme COM, le modle dobjet ) ainsi que les diffrentes manires de sen servir depuis la personnalisation de son document de travail par la rcupration de fichiers dj dvelopps (.dll, .exe), en passant par la ralisation de calculs et jusqu lcriture de son propre code. Quil sagisse dArcInfo ou Arcgis il y a deux manires de personnaliser ces applications :

    - Soit en interne par la ralisation de script - Soit en externe en utilisant un environnement de dveloppement standard

    ArcInfo Workstation : Les scripts sont dvelopps en AML (Arc Macro Langage) Linterface de dveloppement est le kit ODE (Open Development Environnement) qui permet de mettre disposition des bibliothques dobjets (DLL, activeX). Le langage de dveloppement est le visual basic ou le C++. Arcgis Desktop :

    Les scripts sont dvelopps en VBA (Visual Basic for Application). Les dveloppements externes sont raliss partir de Visual basic qui permet lutilisation de composant active X (DLL ou OCX). Dans les deux cas on va utiliser la bibliothque dobjets ArcObject, mais avec VBA mme si la personnalisation de lapplication peut-tre trs pousse, le code est dit interprt donc beaucoup moins rapide que celui gnr par Visual basic qui est dit compil et qui permet de crer des applications indpendantes. Remarque : lutilisation de bibliothque ArcObject pour la cration de scripts et dapplications autonomes ncessite bien videmment de possder une licence Arcgis (Arcview, Arceditor ou Arcinfo. Il est aussi ncessaire de possder ces licences pour utiliser ces applications Dans cet atelier nous nous limiterons lenvironnement ArcGis desktop et lutilisation de son module de programmation Visual Basic Editor (VBE).

    I. Gnralits : A.Dfinitions :

    1.Notion dobjet : Visual basic est un langage dit orient objet .

    Lobjet est donc llment de base de ce langage. Il peut sagir dun contrle, dun formulaire, dune mise en page, etc. Chacun dentre eux se caractrise par des proprits, des mthodes et des vnements. Une proprit est un attribut de lobjet qui dfinit une de ses caractristiques (le nom, la couleur, la position, la taille, etc.) Remarque : Selon leur nature certaines proprits ne pourront tre dfinies que pendant la phase de conception, dautres pendant la phase de conception et dexcution, dautres encore ne pourront tre que lues. Dune manire gnrale elles sont toutes lisibles. Une mthode est une action quun objet peut raliser, par exemple Add associe un contrle de type listbox va permettre dajouter un lment la liste quil prsente. Les vnements sont des actions que reconnat lobjet. Un bouton dtecte le clic de la souris

    1

  • 2.Notion de classe : Tous les objets qui possdent les mmes proprits et les mmes mthodes, sont des instances dune mme entit quon appelle classe. On parle de classe dobjets.

    3.Le modle dobjet : Les relations qui existent entre les mthodes et les proprits appartenant une mme classe et celles entre les diffrentes classes constituent le modle dobjet et sont reprsentes par un diagramme qui utilise la modlisation UML. On parle dObject Model Diagram (O.M.D.) Chaque application possde un certain nombre dobjets qui lui sont propre, on parle de bibliothque dobjets. Celle dArcgis est appele ARCOBJECTS.

    4. Structuration du Code visual basic : Les instructions :

    Les instructions sont lunit de base du langage visual basic. Elles sont classes en trois grandes catgories qui sont : - les instructions de dclarations : Private myVar As string - les instructions daffectations : MyVar = Ecole thmatique

    - les instructions excutables : If MyVar = Empty then msgbox Vous navez rien saisi else msgbox Vous assistez l & Myvar end

    Les procdures :

    Une instruction peut rester seule ou tre combine dautres pour constituer une procdure afin de pouvoir tre excute(s). Il existe trois catgories de procdures :

    - les procdures vnementielles. Elles codent pour les vnements correspondant des actions qui affectent les objets. (click par exemple)

    Private Sub mybouton_Click() End Sub

    - les procdures routinires : Il sagit dune srie dinstructions qui nest pas rattache un objet contrairement au cas prcdent et quil va falloir appeler pour quelle sexcute. Ceci sert notamment pour toutes les actions qui se produisent diffrents endroits afin de ne pas avoir saisir plusieurs fois le code qui leur correspond.

    Private Sub Message_de_fin() End Sub

    - les fonctions : Il sagit de procdures routinires qui peuvent renvoyer une valeur.

    Private Sub conversion_m_hectare() End Sub

    Les modules : Ces procdures ou fonctions prsentes sont organises en modules selon leur rle et leur relation au sein du document Arcgis. Il y a 3 catgories de module :

    - Le module de feuille : Chaque formulaire prsent dans le document Arcgis possde un module de ce type. Ce module regroupe toutes les procdures vnementielles associes au formulaire ainsi que celles codant pour les contrles contenus par ce formulaire. Il contient en plus les donnes associes aux contrles.

    - Le module standard : Il runit toutes les procdures et fonctions qui ne sont pas rattaches un formulaire ou un contrle. Il ne contient que du code et pas de donne car pas de contrle..

    2

  • - Le module de classe : Il correspond du code et des donnes associes une classe dobjets qui nont pas dinterface graphique ou qui ont t crs par le dveloppeur.

    Le code contenu dans ces trois modules peut-tre export sparment pour resservir dans dautres documents Arcgis. Les modules de feuille gnrent des fichiers .frm , les modules standards gnrent des fichiers .bas et les modules de classe des fichiers .cls . B. Linterface Visual Basic editor :

    Figure 1. Lditeur visual basic reprsent figure 1/ci-dessus est accessible dans ArcMap partir du menu Outils/Macros/Editeurs_visual_basic. Il est compos de 7 fentres principales :

    - Lexplorateur de projet (1) : Elle numre les diffrents modules qui sont contenus dans le document Arcgis et qui sont autant de fichiers qui constituent le projet.

    - La fentre de proprit (2) : Elle numre les proprits de lobjet slectionn, dans le cas prsent il sagit du formulaire.

    - La fentre de code (3) : Elle permet de taper le texte du code du projet. Il en existe une pour chaque module.

    - La fentre de conception de feuille (4) : Elle permet la ralisation de linterface graphique de chaque formulaire. Il y en a une par formulaire.

    - La fentre explorateur dobjet (5) : Elle permet de parcourir les objets et leur mthode disponible pour notre projet et offre une aide prcieuse pour la rdaction du code.

    - La boite outil (6) : Elle possde tous les contrles ncessaires la conception dun formulaire.

    - La fentre dexcution (7) : Elle permet de tester les lignes de code tapes. Elle constitue avec les fentres variables locales et espions des outils trs utiles pour le dbogage de lapplication (ces 2 fentres ne sont pas prsentes sur la figure 1).

    3

  • Remarque : Dans le menu outils/options de lditeur de visual basic il est possible de personnaliser lditeur en y ajoutant des fonctionnalits daide la rdaction du code, telles que la saisie semi-automatique ou lobligation de dclaration des variables. II. Utilisation de code dj rdig et rdaction de macros :

    A. Enregistrement des modifications : Avant dentamer une personnalisation de notre application il est important de savoir comment la

    sauvegarder. Il existe trois niveaux denregistrement des personnalisations effectues dans lapplication :

    - Le niveau document Arcmap en cours, qui correspond au document ArcMap ouvert. Les modifications apportes nexisteront que dans ce seul fichier .mxd . Ceci se fait en utilisant le menu fichier/enregistrer sous et en choisissant comme type de fichier ArcMap documents .

    - Le niveau modle de base qui est un document qui possde des mises en pages

    prdfinies et qui permet de reproduire de nouvelles cartes rapidement. Tous les nouveaux documents qui utiliseront ce modle se verront affecter ses modifications. Ceci se fait en utilisant le menu fichier/enregistrer sous et en choisissant comme type de fichier ArcMap template . Ils ont comme extension .mxt .

    - Le niveau modle normal, modle spcial qui est automatiquement charg louverture

    dArcMap. Ceci se fait en utilisant le menu fichier enregistrer sous. Ainsi tous les documents ArcMap ouverts quel que soit le modle utilis possderont les modifications. Ils ont comme extension .mxt , la mme que prcdemment car il sagit aussi dun modle et non pas dun document.

    B. Personnalisation du document :

    Dans cette partie nous allons voir diffrents types de fichiers pouvant contenir du code en visual basic

    et les manires de lincorporer notre application. De nombreux fichiers de ce type sont en ligne sur le site desrifrance http://support.esrifrance.fr

    1. Cration dune barre doutil :

    La premire chose faire quand on veut rajouter une fonctionnalit son application est de rflchir lendroit ou elle va se positionner. Il peut sagir dune barre doutil, dun menu, etc. Exercice : Cration dune barre doutil

    1. Lancer ArcMap 2. Ouvrir un nouveau document vide. 3. Lenregistrer sous en lappelant Ecole_thmatique. 4. Cliquer sur outils/personnaliser. 5. Cliquer sur nouvelle dans longlet barre doutil. 6. Saisir un nom Ma barre doutil moi et choisir de lenregistrer dans le document Ecole thematique. 7.Positionner la nouvelle barre doutil dans la fentre ArcMap. Cette barre doutil va servir positionner de nouvelles fonctionnalits dans notre document.

    2. Fichiers exe ou dll :Ces deux types de fichiers sont raliss laide du logiciel visual basic, et ne peuvent en aucun cas tre faits avec lditeur visual basic de ArcMap. Il sagit de code compil.

    4

  • Exercice : Cration dun contrle partir dun fichier . dll .

    1. Sous le rpertoire Atelier_Vb/fichiers_tlchargs_zipps, ouvrir le fichier outildeflux.zip

    2. Le dcompresser sous le rpertoire Atelier_VB/fichiers_dezipps. 3. Dans ArcMap, cliquer sur outils/personnaliser. 4. Slectionner longlet commande et slectionner dans la liste loutil Uicontrols. 5. Cliquer sur ajouter depuis un fichier. 6. Parcourir larborescence et slectionner le fichier outildeflux.dll que vous venez de

    dcompresser. 7. Une nouvelle commande apparat dans la bote de dialogue. 8. Slectionner la et glisser la jusque sur la barre de contrle que vous avez cre dans

    lexercice prcdent. 9. Enregistrer votre document. 10. Cette nouvelle fonctionnalit est dsormais oprationnelle et fait partie de votre document

    Ecole thmatique . Exercice : Cration dun contrle partir dun fichier . exe .

    1. Sous le rpertoire Atelier_Vb/fichiers_tlchargs_zipps, ouvrer le fichier transformationDAO.zip .

    2. Le dcompresser sous le rpertoire Atelier_VB/fichiers_dzipps. 3. Cliquer sur le fichier install. 4. Cliquer sur outils/personnaliser. 5. Parcourir le menu droulant des barres doutil, trouver la barre doutil gorfrencer

    un fichier DAO. 6. Cocher-la. Elle apparat prte lemploi. Il vous suffit de la positionner dans votre

    fentre ArcMap et puis denregistrer votre document.

    3. Fichiers.bas.frm et.cls :

    Il sagit de fichiers qui peuvent tre gnrs par lditeur visual basic. Ces 3 types de fichiers correspondent aux 3 types de modules de code dcrits prcdemment. Ils ont t rdigs et enregistrs dans un de ces 3 modules puis exports. Exemple : Cration dun contrle partir dun fichier .bas .

    1. Sous le rpertoire Atelier_VB/fichiers_tlchargs_zipps, ouvrir le fichier Dropshadows.zip .

    2. Le dcompresser sous le rpertoire Atelier_VB/fichiers_dzipps. 3. Dans ArcMap, cliquer sur outils/macros/editeur visuel basic. 4. Dans la fentre de projet, faire un clique droit sur module et slectionner importer un

    fichier. 5. Parcourir larborescence et slectionner le fichier dropshadows.bas . Dans la

    fentre de projet un nouveau module est apparu, il sagit dun module standard correspondant lextension du fichier import, .bas et portant le mme nom. Si vous double-cliquer dessus vous verrez apparatre la fentre de code lui correspondant.

    6. Fermer lditeur visual basic. 7. Cliquer sur outils/personnaliser. 8. Slectionner longlet commande et faire dfiler la liste des contrles jusqu macro. 9. Une commande apparat portant le nom du fichier.bas. 10. Il suffit de la slectionner et de la faire glisser jusqu la barre doutil. 11. Sauvegarder ensuite votre document ArcMap.

    Le fonctionnement est le mme avec les fichiers .frm et .cls C. Rdaction dune macro : Jusqu prsent toutes les fonctionnalits rajoutes notre document ont t ralises partir de code rcupr.

    5

  • Dans cette partie il va sagir de rdiger son propre code et de lassocier la fentre ArcMap. Ce code correspondant une srie dinstructions utilise comme une commande unique, est appel aussi une Macro. Exercice Rdaction dune macro :

    1. Dans Arcmap, cliquer sur outils/macros/macros. 2. Dans la boite de dialogue saisir le nom de votre macro, indispensable avant de pouvoir la

    crer. Taper Macro.date_du_jour. 3. Cliquer sur crer. 4. Lditeur visual basic sest ouvert et un nouveau module intitul macro. Sa fentre de

    code sest galement ouverte et il pointe sur la procdure date_du_jour. 5. Taper dans cette procdure le code :

    Msgbox Aujourdhui nous sommes le & Format(Date, ddd d mmmm YYYY)

    6. Enregistrer le tout et rebasculer dans ArcMap. 7. Cliquer sur outils/personnaliser et dans longlet commandes. 8. Slectionner Macro et dans la fentre de droite doit apparatre la macro

    date_du_jour . 9. Faites-la glisser jusqu votre barre doutils. 10. Cliquer sur le nouveau bouton et la macro sexcute.

    D. Utilisation du langage Visual Basic avec la calculatrice :

    Lors de la mise jour des valeurs d'une table, il est possible d'utiliser la calculatrice. Celle-ci permet de

    rdiger des formules de calcul utilisant les valeurs des autres champs de la table, des tests conditionnels ou encore des fonctions internes dArcgis. L'utilisateur peut rdiger ses propres formules ou charger des formules pralablement enregistres, fichiers .cal . Exercice: Gnrer et utiliser des fichiers de type .cal .

    1. Ouvrir un nouveau document ArcMap. 2. Ajouter ce document la couche country.shp . 3. Ouvrir sa table et y ajouter 3 champs de type numrique dune longueur de 10 avec 2

    chiffres aprs la virgule, intituls : X, Y et Area. 4. Slectionner le champ area et lancer la calculatrice. 5. Taper dans la premire fentre le code suivant :

    Dim dblArea as double Dim pArea as IArea Set pArea = [shape] dblArea = pArea.area

    6. Taper dans la deuxime fentre le nom de la variable DblArea

    7. La surface de chaque polygone a ainsi t calcule. 8. Enregistrer ensuite ce code sous le rpertoire atelier_VB/formules en lintitulant Area. 9. Fermer la calculatrice, puis louvrir nouveau et charger la formule area en cliquant sur

    le bouton charger . Lexpression tape prcdemment a donc bien t enregistre et est rutilisable. Lextension de cette formule area est .cal

    10. Recommencer avec les champs X et Y en rdigeant les formules et en les sauvegardant : Dim pArea as IArea Dim pPoint as IPoint Dim dblX as Double Set pArea = [Shape] Set pPoint = pArea.Centroid dblX = pPoint.X Dim pArea as IArea Dim pPoint as IPoint Dim dblY as Double Set pArea = [Shape]

    6

  • Set pPoint = pArea.Centroid dblY = pPoint.Y

    III. La Norme COM et le diagramme du modle dobjet Arcobject :

    A. La Norme COM : La bibliothque dobjet dArcgis ArcObject sappuie sur la technologie Microsofts Component

    Object Model.(COM) La norme COM nest pas un langage de programmation mais un protocole. Elle permet de mettre en relation les classes dobjets constitutives de la bibliothque dobjet dun logiciel, mais aussi les classes des diffrentes bibliothques des diffrents logiciels installs sur votre ordinateur entre elles pour peu quils soient compatibles avec cette norme. Lutilisateur va donc pouvoir construire de nouvelles classes dobjets qui pourront tre leur tour changes. Ceci indpendamment de tout langage de programmation, ce qui assure une prennit de lapplication qui les utilise et lui garantissant la possibilit dvoluer au-del des volutions des langages et des logiciels. Il sagit dune approche oriente objet et non objet comme arcview3 qui impose tout dveloppement avec un langage propritaire Avenue. Avec cette norme lutilisateur ne traite pas avec les objets directement mais avec leurs mthodes et proprits qui sont runies au sein dune mme classe. Laccessibilit ces mthodes et proprits se fait par lintermdiaire dinterfaces. Une interface runit les proprits et les mthodes dune classe dobjet en fonction de leur caractristique. Chaque classe implmente (possde) plusieurs interfaces qui comprennent chacune une partie de leurs mthodes et de leurs proprits en les regroupant de faon de faon logique. Une fois rcupres ces mthodes et proprits pourront tre exploites travers un langage de dveloppement choisi par lutilisateur (Visual basic, Delphi, etc.) et ainsi permettront dinstancier (crer) un objet. Si le besoin se fait sentir de faire voluer les proprits ou mthodes dun objet, les nouvelles neffaceront pas les prcdentes, garantissant la prennit des dveloppements antrieurs, mais seront runies au sein dune nouvelle interface afin dtre utilisables. Il peut arriver que plusieurs classes dobjets partagent une mme interface, on parle alors de polymorphisme.

    B. Le Diagramme du modle dobjet Arcobject :

    La bibliothque dobjet dArcGis, ArcObject, est compose de nombreuses classes dobjet. Les relations quentretiennent ces classes entre elles et les mthodes et proprits que leurs interfaces possdent sont reprsentes laide du ArcObject Object Model Diagram. (OMD) Compte tenu de sa grande taille et de sa complexit, il a t dcoup par grandes classes dobjets. Ces diffrents OMD sont fournis avec Arcgis au format .pdf et sont stocks sous le rpertoire C:\\ArcGIS\DeveloperKit\Diagrams\Desktop. Ils sont reprsents selon la nomenclature UML. (Unified Modeling Language) Il est indispensable de savoir les lire et dy circuler si on veut faire du dveloppement avec ArcObject.

    7

  • Figure 2 Lgende des diagrammes (Classe diagram Key) La figure 2 reprsente la lgende des OMD. Les classes Il y a 3 types de classes :

    - Les Abstract class, elles sont reprsentes par un rectangle blanc. Elles runissent les proprits gnrales plusieurs sous-classes. Il nest pas possible dinstancier des objets partir de ce type de classe.

    - Les Class, elles sont reprsentes par un rectangle 3D. Il nest pas possible dinstancier directement des objets partir de ces class, ils ne peuvent ltre qu travers une mthode dune autre classe ou bien comme proprit dune autre classe.

    - Les CoClass (Component Object Class), elles sont reprsentes par un rectangle 3D gris.

    Il est possible dinstancier directement des objets partir de ces CoClass. Les relations Il existe 4 grands types de relations entre les classes :

    - Les relations dhritages, elles sont reprsentes de cette manire Une sous-class hrite des proprits et des mthodes de sa super classe.

    - Les relations dinstanciation, elles sont reprsentes de cette manire Ceci signifie quune classe possde une mthode permettant de crer un objet dune autre classe. (La classe dont on peut crer un objet se situe du cot de la pointe de la flche). - Les relations de composition, elles sont reprsentes de cette manire Dans ce type de relation les objets de la class parent contrlent lexistence des objets de la classe enfants. Sils sont dtruits, les autres disparaissent galement. - Les relations dassociation, elles sont reprsentes de cette manire Cela signifie simplement que 2 classes sont associes entre elles. Les cardinalits Elles existent pour les relations de composition et dassociation uniquement.

    - 1 signifie quun objet peut tre en relation avec un et un seul objet.

    - 0..1 signifie quun objet peut tre en relation avec zro ou un objet.

    - M..N signifie que M Objets peuvent tre en relation avec N objets.

    - * ou 0..* signifie quun objet peut tre en relation avec zro ou plusieurs objets

    - 1..* signifie quun objet peut tre en relation avec un ou plusieurs objets

    Les proprits

    - ou indique une proprit en lecture seule - indique une proprit en lecture criture par valeur

    8

  • - indique une proprit en lecture criture par rfrence Les mthodes

    - indique une mthode. Les interfaces

    - I indique une interface. Il existe un petit utilitaire intitul EOBrowser.exe qui va permettre dexplorer de faon plus prcise quavec lexplorateur dobjet VBA et avec plusieurs modes de reprsentation diffrents. Il est situ dans le rpertoire c:\ ArcGIS\DeveloperKit\tools IV Manipulations dobject : Raliser un dveloppement dans ArcGis sous visual basic va donc consister naviguer au sein de cet OMD en passant dune interface lautre afin daccder la classe dobjet recherche, de linstancier et enfin de travailler sur lobjet souhait. Variables Globales Dans ArcObject il existe 2 variables qui sont accessibles tout le temps, sans dclaration ni initialisation et qui vont servir de cls dentre dans lOMD.

    Application qui pointe sur linterface Iapplication de la classe Application. Thisdocument qui pointe sur linterface Idocument de la Classe Mxdocument. (Document

    Arcmap) Le pointeur tant plac sur un de ces deux objets, il va sagir de le dplacer. Exercice

    1. Ouvrer un nouveau document ArcMap. 2 .Renommer le bloc de donnes. 3. Ouvrer lditeur visual basic. 4. Crer un nouveau module standard. 5. Ouvrer sa fentre de code. 6. Crer une nouvelle procdure intitule recupnomcouches

    7. Saisir le code suivant dans cette procdure : Dim pMxDOc as Imxdocument Set pMxDOc= thisdocument Msgbox pMxDoc.focusmap.name

    8. Basculer dans le document arcMap. 9. Rajouter un bouton linterface avec comme code la macro recupnomcouche. 10.Executer la macro.

    11.Enregistrer le document arcMap en lui donnant un nom. REMARQUE : Dans le code prcdent le pointeur est pass de linterface Imxdocument linterface Idocument, toutes les deux appartenant la classe ImxDocument. Ceci en plaant le curseur sur une premire interface et ensuite en crant une deuxime variable qui pointe sur la seconde interface vers laquelle on fait basculer le pointeur laide de linstruction SET Ceci sappelle une QUERY INTERFACE

    9

  • Figure 3 Extrait de lOMG ArcMapUIModel Exercice : 1. Dans le mme document ArcMap que celui de lexercice prcdent, rajouter des

    couches au bloc de donnes. 2. Basculer dans lditeur visual basic et crer un nouveau module standard avec une

    nouvelle procdure intituls listecouches 3.Taper le code suivant : Dim pMxDoc as Imxdocument Dim Pmap as Imap Dim pEnumlayer as IenumLayer Dim player as Ilayer

    Dim lareponse as string

    Set pMxDoc = thisdocument Set pMap =pMxDoc.FocusMap

    Lareponse=La carte est constitue de & pmap.LayerCount & couches : &vbCrlf Set pEnumLayer =pMap.Layers Set pLayer = pEnumLayer.Next Do While Not player is Nothing Lareponse = lareponse & player.name & vbCrlf Set player = pEnumlayer.Next Loop

    MsgBox lareponse 4. Basculer dans le document ArcMap.

    5. Rajouter un bouton linterface avec comme code la macro listecouches. 6. Excuter la macro.

    7. Enregistrer le document ArcMap et le fermer. REMARQUE :

    Dans les lignes de codes prcdents les changements dinterface se sont produits en utilisant la capacit dune classe dimplmenter un objet dune autre classe laide dune mthode quelle possde

    Set pMap =pMxDoc.FocusMap .

    10

  • Exercice Dans ce dernier exercice nous allons rcapituler tout ce qui a t vu au tout au long de cet atelier. Il va sagir de raliser un formulaire qui va afficher la liste des cartes prsentes dans un document ArcMap. Ce mme formulaire, aprs slection dune de ces cartes affichera la liste des couches quelle possde et enfin dans une 3me liste saffichera la liste des champs de la table de la couche slectionne.

    1. Ouvrer le document ArcMap, intitul Formulaire situ sous le rpertoire C:\Atelier_VB\Documents Arcmap.

    2. Lancer lditeur Visual Basic. 3. Crer un module de feuille et le nommer listing.

    4. Crer 3 contrles de type listbox, que vous nommer respectivement lstmaps, lstlayers et lstfields. (cf. figure 4) 5. Crer 1 contrle de type bouton de commande, que vous nommer fermer.

    6. Renseigner la proprit Caption de ce bouton de commande par Quitter et par formulaire celle du formulaire.

    Figure 4 : le formulaire listing 7.Accder la fentre de code de ce formulaire et naviguer jusqu la section

    General Declaration de la feuille. 8. Saisir le code suivant :

    Dim pMxDoc As IMxDocument Dim pMaps As IMaps Dim Pmap As IMap Dim pLayers As IEnumLayer Dim player As ILayer Dim Txtmap As Variant Dim TxtLayer As Variant Dim TxtField As Variant

    Attention la syntaxe des variables et lalternance des majuscules et minuscules qui nest pas tant

    pour faire joli que pour vous faciliter la tche en vitant les fautes de frappe. En effet VB va les reconnatre dans les diffrentes procdures ou vous aller saisir du code et reproduire leur syntaxe telle quelle a t dfinie ici. Si ce nest pas le cas cela signifie quil ne reconnat pas la variable et donc quil y a vraisemblablement une faute de frappe. Il sagit de dclarer toutes les variables utilises par ce formulaire. 9. Naviguer jusqu la procdure vnementielle correspondant lvnement Initialize du formulaire et y saisir le code suivant :

    Dim i As Integer Dim intMapcount As Integer Set pMxDoc = ThisDocument

    11

  • Set pMaps = pMxDoc.Maps i = 0 intMapcount = pMaps.Count For i = 0 To intMapcount - 1

    lstmaps.AddItem pMaps.Item(i).Name Next i

    Ceci permet au formulaire son ouverture, quand il sinitialise, de rcuprer les cartes prsentes dans le document ArcMap.

    10. Naviguer jusqu la procdure vnementielle Click du contrle Fermer et y inscrire le code suivant :

    Unload Me

    11.Tester votre code en excutant le formulaire Normalement le formulaire doit souvrir et afficher la liste des cartes prsentes dans le document. 12. Cliquer sur le bouton Quitter. 13. Naviguer jusqu la procdure vnementielle Click du contrle Listmaps et saisir le code suivant :

    Txtmap = "" Txtmap = lstmaps.Value Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMaps As IMaps Dim i As Integer Set pMaps = pMxDoc.Maps i = 0 Dim c As Integer c = pMaps.Count Dim Pmap As IMap lstlayers.Clear Lstfields.Clear TxtLayer = "" TxtField = "" For i = 0 To c - 1 If pMaps.Item(i).Name = Txtmap Then Dim pLayers As IEnumLayer Set pLayers = pMaps.Item(i).Layers Dim player As ILayer Set player = pLayers.Next Do Until player Is Nothing lstlayers.AddItem player.Name Set player = pLayers.Next Loop End If Next i

    Il sagit de dterminer la valeur slectionne dans la liste des cartes pour ensuite rcuprer la liste des couches quelle possde et les afficher dans ce contrle. Tester votre code en excutant le formulaire nouveau. Dans la liste des cartes qui saffiche en slectionner une ,Les couches qui la constituent doivent apparaitrent

    12

  • 14. Naviguer jusqu la procdure venementielle Click du contrle listlayer et y saisir le code suivant :

    TxtLayer = lstlayers.Value Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMaps As IMaps Set pMaps = pMxDoc.Maps Dim i As Integer i = 0 Dim c As Integer c = pMaps.Count Dim Pmap As IMap For i = 0 To c - 1 If pMaps.Item(i).Name = Txtmap Then Dim pLayers As IEnumLayer Set pLayers = pMaps.Item(i).Layers Dim player As ILayer Set player = pLayers.Next Do Until player Is Nothing If player.Name = TxtLayer Then Dim pfields As IFields Dim pLayerclass As IClass Set pLayerclass = player Set pfields = pLayerclass.Fields Dim fieldcount As Integer fieldcount = pfields.fieldcount Dim x As Integer x = 0 Lstfields.Clear TxtField = "" For x = 0 To fieldcount - 1 Lstfields.AddItem pfields.Field(x).Name Next x End If Set player = pLayers.Next Loop End If Next i

    Il ne vous reste plus qu tester une dernire fois votre code en relanant le formulaire et faire afficher la liste des champs dans le 3me listing. Vous aller maintenant crer une procdure pour raliser louverture de votre formulaire partir de votre document ArcMap et non depuis lditeur visual basic. Cette nouvelle procdure va tre rdige dans un module standard du projet que vous allez crer et ensuite vous lassocierez un contrle sur linterface du document ArcMap. 15. Dans le projet, crer un module standard et le nommer standard . 16. Crer une procdure appeler ouvertureformulaire 17. Saisir le code suivant dans cette nouvelle procdure :

    Load Listing Listing.Show

    13

  • 18. Basculer dans Arcmap et rajouter une commande linterface dArcmap avec cette procdure associe. Tester votre nouvelle commande. 19. Retourner dans lditeur visual basic et partir de la fentre de ^projet exporter les modules standard et listing dans le rpertoire C:\Atelier_Vb\export.

    20. Ouvrer un nouveau document ArcMap. Ouvrer lditeur visual basic et importer les 2 fichiers listing.frm et standard.bas que vous venez de crer. Excuter le formulaire listing.

    14

  • 15