====== Visual Basic For Applications====== Avec [[VBA]], l’utilisateur d’ArcGIS dispose d’une large palette d'outils de programmation provenant de Visual Basic de Microsoft lui permettant de répondre à la plupart de ses besoins de personnalisation (développement d’applications, création de nouvelles boîtes de dialogue et de contrôles graphiques pour ArcMap et ArcCatalog, etc.)\\ VBA inclut également des contrôles [[ActiveX]] permettant la création rapide d’interfaces utilisateur.\\ Ce niveau exige naturellement des prés-requi en programmation. Il a l’avantage de rester dans un environnement de développement familier aux développeurs utilisant Microsoft Visual Basic.\\ ===== Visual Basic pour Applications et la boîte de dialogue "Personnaliser" ===== Dans la boîte de dialogue "Personnaliser" on dispose déjà d’un accès à VBA pour créer des objets et leur attribuer des événements grâce à [[:fonctions:automatisation:interface:vba|Visual Basic pour Applications]].\\ Dans la catégorie [UIControls] de l’onglet [Commandes] de la boîte de dialogue "Personnaliser" (//Outil\Personnaliser...//), un double clic sur le bouton créé dans notre exemple précédant (Voir: [[:fonctions:automatisation:interface:personnalisation_a_l_aide_d_une_interface_graphique |Personnalisation à l'aide de l'interface graphique]]) nous fait basculer vers la fenêtre de VBA.\\ {{fonctions:automatisation:interface:personnaliser_vba_001_bis.jpg}}\\ Remarquez que dans la fenêtre de code la procédure sur l'évènement "Click" est déjà déclarée, il ne reste qu’à saisir une instruction.\\ Dans la fenêtre code on saisi la ligne de code : MsgBox "Bonjour, Nous sommes le " & Format(Date, "dddd d mmmm yyyy") Cette ligne de code permet d’afficher la date du jour après un clic (l’événement) sur le bouton (l’objet). Cela donne sur VBA :\\ {{ fonctions:automatisation:interface:personnaliser_vba_002.jpg }} Le résultat après l’exécution est : {{ fonctions:automatisation:interface:personnaliser_vba_004.jpg }} Si on remplace l’instruction : MsgBox "Bonjour, Nous sommes le " & Format(Date, "dddd d mmmm yyyy") Par l’instruction MsgBox Now On aura un box ArcMap qui affichera cette fois la date et l’heure (la fonction "Now" étant une fonction VBA renvoyant la date et l'heure). {{fonctions:automatisation:interface:personnaliser_vba_004.jpg}} ===== Nouvelle interface utilisateur ===== Il s’agit de créer une nouvelle interface par programmation pour faire exécuter à l’utilisateur des commandes déjà existantes sans qu’il ait à manipuler les menus d’ArcMap.\\ Le but, en général, est de créer une unique interface plus simple à manipuler et qui ne regroupera que les commandes, menus et barres d’outils d’ArcMap dont l’utilisateur a besoin. On peut par exemple créer une barre d’outils regroupant que les quelques commandes nécessaires.\\ Ce code VBA par exemple : (//Source E.N.S.G., 2003 : Introduction a la programmation en VBA sur ArcGis//) {{ fonctions:automatisation:interface:personnaliser_vba_005.jpg}} Sub CreateBar() Dim pCBs As ICommandBars Set pCBs = ThisDocument.CommandBars Dim pNewBar As ICommandBar Set pNewBar = pCBs.Create("Mes outils", esriCmdBarTypeToolbar) pNewBar.Add arcid.File_AddData pNewBar.Add arcid.PanZoom_FullExtent End Sub Créé une nouvelle barre d’outils appelée "Mes Outils" et ajoute les commandes "Ajouter des données" et « Vue générale » à cette barre d’outils. Le code suivant : Public Sub CreateMenu() Dim pMainMenuBar As ICommandBar Set pMainMenuBar = ThisDocument.CommandBars.Find(arcid.MainMenu) Dim pNewMenu As ICommandBar Set pNewMenu = pMainMenuBar.CreateMenu("MonMenu") pNewMenu.Add arcid.File_AddData pNewMenu.CreateMacroItem "Date et heure", 1, "Project.Module1.MaMacro" Dim pSousMenu As ICommandBar Set pSousMenu = pNewMenu.CreateMenu("Requêtes") pSousMenu.Add arcid.Query_AttributeSelect pSousMenu.Add arcid.Query_SelectByGraphics pSousMenu.Add arcid.Query_SelectFeatures End Sub Public Sub MaMacro() MsgBox Now End Sub Permet la création d’un nouveau menu dans la barre de menu principale et permet de regrouper quelques commandes ArcMap existantes telles que le bouton créer précédemment. {{ fonctions:automatisation:interface:personnaliser_vba_006.jpg | Menu et Sous Menus créer par code VBA }} ---- [[ArcGis]]