Vous êtes sur la page 1sur 17

ECOLE THEMATIQUE

Gomatique, Analyse & Modlisation Spatiale en Archologie

ISA

Rseau

Information Spatiale et Archologie

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

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

Support de cours - Programmation Visual Basic pour ArcGIS


(T. Lohro, X. Rodier)

Chrono-Ecologie, UMR 6565, Besanon


Archologie, Culture et Socit, UMR 5594, Dijon

UMS 2913

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

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..

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).

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.

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.
2.
3.
4.
5.
6.

Sous
le
rpertoire
Atelier_Vb/fichiers_tlchargs_zipps,
ouvrer
le
fichier transformationDAO.zip .
Le dcompresser sous le rpertoire Atelier_VB/fichiers_dzipps.
Cliquer sur le fichier install.
Cliquer sur outils/personnaliser.
Parcourir le menu droulant des barres doutil, trouver la barre doutil gorfrencer
un fichier DAO.
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.
2.
3.
4.
5.

6.
7.
8.
9.
10.
11.

Sous
le
rpertoire
Atelier_VB/fichiers_tlchargs_zipps,
ouvrir
le
fichier Dropshadows.zip .
Le dcompresser sous le rpertoire Atelier_VB/fichiers_dzipps.
Dans ArcMap, cliquer sur outils/macros/editeur visuel basic.
Dans la fentre de projet, faire un clique droit sur module et slectionner importer un
fichier.
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.
Fermer lditeur visual basic.
Cliquer sur outils/personnaliser.
Slectionner longlet commande et faire dfiler la liste des contrles jusqu macro.
Une commande apparat portant le nom du fichier.bas.
Il suffit de la slectionner et de la faire glisser jusqu la barre doutil.
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.

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.
2.

Dans Arcmap, cliquer sur outils/macros/macros.


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
1.
2.
3.

utiliser des fichiers de type .cal .


Ouvrir un nouveau document ArcMap.
Ajouter ce document la couche country.shp .
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]

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.

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

indique une proprit en lecture criture par rfrence


Les mthodes
indique une mthode.
Les interfaces
-

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

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