You are on page 1of 21

Visual Basic for Applications

NOTIONS DE BASES
Par Frdric GRIMAUD Ecole des Mines de Saint-Etienne

Prsentation de Visual Basic Editor .................................................................................................................. 1 Introduction au langage de programmation VBA .............................................................................................. 2
1. Les diffrents types de Variables et Constantes.......................................................................................................................... 2 - Les Chanes de caractres.......................................................................................................................................................... 2 - Les Valeurs numriques .............................................................................................................................................................. 2 - Les valeurs boolennes ............................................................................................................................................................... 2 - Les Dates ...................................................................................................................................................................................... 3 - Les tableaux ................................................................................................................................................................................. 3 - Les type de donnes personnaliss ........................................................................................................................................... 3 - Les constantes ............................................................................................................................................................................. 3 La porte et la dure de vie des Variables et des Constantes ................................................................................................... 3 Les structures de contrle.............................................................................................................................................................. 4 - La boucle WhileWend .............................................................................................................................................................. 4 - La boucle Do Loop et ses 4 variantes ................................................................................................................................... 4 - La boucle For Next .................................................................................................................................................................. 4 Les strutures conditionnelles ......................................................................................................................................................... 4 - La structure If Then Else .................................................................................................................................................... 4 - La structure Select Case ............................................................................................................................................................. 5 La structure des programmes Visual Basic pour Application...................................................................................................... 5 La notion de Modules ..................................................................................................................................................................... 5 La notion de Procdure .................................................................................................................................................................. 5 Les composants de la bote outils.............................................................................................................................................. 6 - Le contrle Label......................................................................................................................................................................... 6 - Le contrle textBox....................................................................................................................................................................... 6 - Le contrle ComboBox ................................................................................................................................................................ 6 - Le contrle Frame ........................................................................................................................................................................ 6 - Le contrle ListBox....................................................................................................................................................................... 6 - Le contrle CheckBox .................................................................................................................................................................. 6 - Le contrle ToggleButton............................................................................................................................................................. 6 - Le contrle OptionButton ............................................................................................................................................................. 6 - Le contrle CommandButton....................................................................................................................................................... 6 - Le contrle TabStrip..................................................................................................................................................................... 6 - Le contrle ScrollBar.................................................................................................................................................................... 6 - Le contrle SpinButton................................................................................................................................................................. 6 Quelques proprits de ces contrles .......................................................................................................................................... 7 - La proprit Name........................................................................................................................................................................ 7 - La proprit Caption..................................................................................................................................................................... 7 - La proprit Value ........................................................................................................................................................................ 7 - La proprit Visible....................................................................................................................................................................... 7 - La proprit Enabled.................................................................................................................................................................... 7

2. 3.

4.

5.

Construction dune interface Utilisateur............................................................................................................. 6


1.

2.

3.

- La proprit Locked ..................................................................................................................................................................... 7 Cration des procdures vnementielles ................................................................................................................................... 7 - Les vnements ........................................................................................................................................................................... 7 - Accs une procdure vnementielle et saisie le code ......................................................................................................... 8 Les procdures Sub ....................................................................................................................................................................... 9 Les procdures Function................................................................................................................................................................ 9 Les arguments des procdures Sub ou Function ........................................................................................................................ 9 Utilisation dun module ................................................................................................................................................................. 10 - Lappel dune procdure Sub .................................................................................................................................................... 10 - Lappel dune procdure Function............................................................................................................................................. 10 - Le passage des arguments ....................................................................................................................................................... 10 Le modle Objet dExcel .............................................................................................................................................................. 11 - Accder au modle objet dExcel dans un module dfinit dans VBA Excel .......................................................................... 11 Accder au modle objet dExcel dans un module dfinit dans une autre application (VBA Compliant) quExcel ..... 11 Le modle objet Word .................................................................................................................................................................. 12 Le modle objet Direct Access Object DAO 3.6 ........................................................................................................................ 12 - Accder au modle objet dune base de donnes supportant les DAO dans un module VBA............................................ 12 Le modle objet Acces ................................................................................................................................................................. 12

Construction et Utilisation dun Module ............................................................................................................. 9


1. 2. 3. 4.

Traitements intra-application et inter-applications ......................................................................................... 11


1.

2. 3. 4.

Etude de cas .......................................................................................................................................................... 13


1. Cration du fichier EXCEL............................................................................................................................................................... 13 - Cration dune feuille nomme Change ............................................................................................................................. 13 - Cration dune feuille nomme Cours ................................................................................................................................ 13 2. Construction de linterface graphique de choix du pays................................................................................................................ 14 - Ouverture de VBE ...................................................................................................................................................................... 14 - Ouverture dune fentre graphique et placement des objets dinterface ............................................................................... 14 3. Construction de la Macro dactivation de cette fentre graphique dans Excel............................................................................ 15 4. Construction dune procdure de calcul du change ...................................................................................................................... 16 5. Construction de la procdure vnementielle Click sur le bouton Btn_OK ........................................................................... 16 6. Mise jour des valeurs de change partir dAccess .................................................................................................................... 18 - Construction de la base de donnes ........................................................................................................................................ 18 - Ajout de la rfrence DAO 3.6 dans le projet Excel ................................................................................................................ 18 - Construction de la macro de chargement des cours de change dAcces vers Excel ........................................................... 19

Prsentation de Visual Basic Editor


Visual Basic Editor (VBE) est lenvironnement de dveloppement intgr de VBA (Visual Basic for Application). On accde toujours VBE partir dune application hte en slectionnant la squence Outils/Macro/Visual Basic Editor (ou le raccourci Alt-F11). Dans cet environnement VBE, on retrouve : - Lexplorateur de projet : il permet de visualiser les diffrents projets et les diffrents lments qui les composent (Objets, Modules, Modules de Classe, Feuille, ) sur lesquels nous reviendrons uttrieurement et galement daccder ces lments et au code qui leur est attach. - La fentre Proprits : elle permet de visualiser et de modifier lensemble des proprits des objets constituant le projet - La fentre Code : elle permet dditer le code associ aux lments du projet - La fentre UserForm et la Bote Outils : elle permet de concevoir les feuilles (Interfaces graphiques) partir dlments de base (bouton, case cocher, zone de liste modifiable, ) disponible dans la bote Outils. Ces diffrents lments ne sont pas obligatoirement prsents lcran simultanment. Il est cependant conseill de garder constamment lcran lexplorateur de projet, partir duquel vous pourrez toujours activer les autres outils.

Figure 1 : Lenvironnement de dveloppement VBE (Visual Basic Editor)

Page 1 sur 21

Introduction au langage de programmation VBA


1. Les diffrents types de Variables et Constantes
Pour crer une variable, vous devez la dclarer. Cette dclaration peut tre explicite ou implicite (il est conseill de rendre les dclaration de variables explicite en commenant la saisie du code dun Module, dun Module de Classe ou dune Feuille par linstruction Option Explicit. Le nom dune variable ne doit pas commencer par une letttre, peut contenir jusqu 255 caractres sans y inclure despace ni de mot rserv VBA ni de . ! @ & $ # - Les Chanes de caractres Pour dclarer une variable de type Chane de caractres, il faut utiliser la squence Dim NomVariable as String . Laffectation dune chane de caractre une variable de type String se ralise en placant cette chane de caractre entre guillemets ( ). Loprateur de concatnation de chane de caractre est le mot rserv &. - Les Valeurs numriques Pour dclarer une variable numrique, il faut utiliser la squence Dim NomVariable as Type ou Type peut prendre les valeurs dcrites dans le tableau suivant : Type de donnes Byte Integer Long Single Double Valeurs acceptes Nombre entier, compris ente 0 et 255 Nombre entier, compris entre -32768 et 32767 Nombre entier, compris entre -2147483648 et 2147483647 Nombre rel compris entre -3,4 E+38 et 3,4 E +38 Nombre rel compris entre -1,8 E+308 et 1,8 E+308 Mmoire occupe 1 octet 2 octet 4 octet 4 octet 8 octet

Notons que le sparateur dcimal dans VBA est le point. Les oprateurs arithmtiques utilisables sur les variables numriques sont dcrits dans le tableau suivant : Oprateur + * / \ ^ Description Addition Soustraction Multiplication Division Division entire : seule la partie entire du rsultat de la division est renvoye Elvation la puissance

Les oprateurs relationnels utilisables sur les variables numriques sont dcrits dans le tableau suivant : Oprateur = > < <> >= <= Description Egal Suprieur Infrieur Diffrent de Suprieur ou gal Infrieur ou gal

Notons que VBA intgre de nombreuses fonctions permettant de manipuler les valeurs numriques, comme par exemple les fonction Abs et Sqr qui renvoient respectivement la valeur absolue et la racine carre. La liste des fonctions VBA est consultable dans laide en ligne (Manuel de rfrence / Fonctions) - Les valeurs boolennes Pour dclarer une variable de type Boolenne, il faut utiliser la squence Dim NomVariable as Boolean . Une variable de type Boolenne peut prendre la valeur true (1) ou False (0) et occupe 2 octets en mmoire.

Page 2 sur 21

Les oprateurs logiques utilisables sur les variables boolennes sont dcrits dans le tableau suivant : Oprateur Or And Xor Not - Les Dates Pour dclarer une variable de type Date, il faut utiliser la squence Dim NomVariable as Date . Une variable de type Date peut prendre une valeur comprise ente le 01/01/100 et le 31/12/9999 et occupe 8 octets en mmoire sous forme dun nombre rel. La partie entire de la variable de type Date reprsente le jour et la valeur 0 correspond au 30/12/1899. Notons que VBA intgre de nombreuses fonctions permettant de manipuler les dates, par exemple les fonctions Date, Time et Now renvient respectivement la date courante, lheure courante et la date courante suivie de lheure courante. - Les tableaux Pour dclarer une variable de type tableau, il faut utiliser la squence Dim NomVariable(Nbr1, Nbr2, ) as Type ou la squence Dim NomVariable(Dbut1 to Fin1, Dbut2 to Fin2, ) as Type o Nbri rprsente la valeur de la dimension i du tableau et o Dbut i et Fin i correspondent au indice de dbut et de fin pour la dimension i (alors gale Fin i - Dbut i + 1). - Les type de donnes personnaliss Pour dclarer une variable de type Type de donnes personnaliss, il faut utiliser la squence suivante dans la partie Dclaration dun module : Type NomType Donnes1 as Type 1 Donnes2 as Type 2 End Type On peut alors dclarer une variable de ce nouveau type avec la squence classique Dim NomVariable as NomType - Les constantes Les constantes permettent dattribuer un nom une valeur fixe qui ne pourra donc pas voluer pendant le droulement du programme. Pour dclarer une constante, il faut utiliser la squence Const NomConstante as Type = Valeur . Pour dclarer une constante accessible toutes les procdures dun module, il faut la dclarer dans la partie Dclaration dun module. Description Ou Et Ou Exclusif Non

2. La porte et la dure de vie des Variables et des Constantes


En plus de leur type et de leur valeur, les variables et les constantes sont caractrises par leur porte. Elle dsigne son accessibilit pour les procdures et les modules du projet. Les variables et les constantes peuvent tre accessibles : - Uniquement lintrieur dune procdure : cest le cas si la dclaration est effectue lintrieur de la procdure - lensemble des procdures dun module : cest le cas si la dclaration est effectue dans la partie Dclaration dun Module, cest--dire lextrieur de toute procdure, avec les squences Dim NomVariable as Type ou Private NomVariable as Type - ou encore lensemble des modules du projet en cours : : cest le cas si la dclaration est effectue dans la partie Dclaration dun Module, cest--dire lextrieur de toute procdure, avec la squence Public NomVariable as Type La dure de vie dune variable dsigne le temps pendant lequel la variable conserve sa valeur. Une variable peut : - conserver sa valeur tant quune procdure sexcute et tre rinitialise lorsque la procdure est termine : cest la cas si lon utilise la squence classique Dim NomVariable as type - ou conserver sa valeur entre les diffrents appels de la procdure : cest le cas si lon utilise la squence Static NomVariable as Type

Page 3 sur 21

3. Les structures de contrle


- La boucle WhileWend La structure WhileWend permet de rpter une srie dinstruction tant que la condition spcifie est remplie. La syntaxe est : While Condition Srie dinstructions Wend - La boucle Do Loop et ses 4 variantes La structure Do While Loop permet de rpter une srie dinstruction tant que la condition spcifie est remplie. La syntaxe est : Do While Condition Srie dinstructions Loop La structure Do Until Loop permet de rpter une srie dinstruction jusqu ce que la condition spcifie soit remplie. La syntaxe est : Do Until Condition Srie dinstructions Loop La structure Do Loop While permet dexcuter une srie dinstructions puis de la rpter tant que la condition spcifie est remplie. La syntaxe est : Do Srie dinstructions Loop While Condition La structure Do Loop Until permet dexcuter une srie dinstructions puis de la rpter jusqu ce que la condition spcifie soit remplie. La syntaxe est : Do Until Srie dinstructions Loop Until Condition - La boucle For Next La structure For Next permet de rpter une srie dinstruction un nombre de fois dtermine dans le code, en utilisant un compteur. La syntaxe est : For compteur = x to y Step Pas Srie dinstructions Next compteur Cette squence permet dexcuter en boucle la srie dinstruction spcifie entre For et Next en incrmentant la variable compteur de la valeur de Pas chaque itration.

4. Les strutures conditionnelles


- La structure If Then Else La syntaxe est : If Condition 1 Then Srie dinstructions 1 [ ElseIf Condition 2 Srie dinstructions 2 ElseIf Condition 3 Srie dinstructions 3 Else Srie dinstructions n ] EndIf

Page 4 sur 21

La partie entre crochet [] nest pas obligatoire. Les conditions sont values dans lordre dapparition lintrieur de la structure. - La structure Select Case La structure Select case permet denvisager diffrentes valeurs pour une mme expression et de dterminer des instructions spcifiques pour chaque cas envisag. La syntaxe est : Select Case Expression Case Valeur 1 Srie dinstructions 1 Case Valeur 2 Srie dinstructions 2 Case Valeur n Srie dinstructions n-1 [ Case Else Srie dinstructions ] End Select Lorsque la valeur renvoy par Expression correspond lune des valeurs proposes derrire les Case, les instructions correspondants sont excuts et la procdure se poursuit avec linstruction qui suit le End Select. Sinon, les instructions attaches Case Else sont excutes.

5. La structure des programmes Visual Basic pour Application


La notion de Modules Comme il est prcis dans le prcdent, on distingue dans un projet VBA les modules de Code, les modules de Classe et les Feuilles. Ces lments sont appels interagir pour constituer le programme complet : - Le code standard se trouve dans des modules de codes, stocks dans le dossier Modules. - Le code dcrivant les objets dvelopps pour votre projet est stock dans le dossier Modules de Classe - Le code dcrivant linterface dun programme et le code affect aux diffrents vnements associs cette interface sont stocks dans des fichiers UserForms, eux mme stocks dans le dossier Feuilles. La notion de Procdure A lintrieur dun mme module, le code est structur en procdures. Une procdure est une squence dinstructions. On qualifie de procdure vnementielle une procdure dclenche par un vnement (clic de souris, frappe dune touche du clavier, ..) par opposition aux procdures standards indpendantes de tout vnement de linterface utilisateur : - Dans les dossiers Feuilles, les procdures sont dtermines : il existe une procdure pour chaque vnement pouvant affecter un lment de linterface utilisateur. Il sagit alors uniquement de crer le code excuter lors du dclenchement de cet vnement. - Dans les dossiers Modules ou Modules de Classe, cest au concepteur du code de crer les diffrentes procdures. Il sagit alors de crer la structure de la procdure (Procdure, Fonction, ) et de crer le code excuter lors de lappel cette dernire.

Page 5 sur 21

Construction dune interface Utilisateur


Les feuilles sont les zones sur lesquelles nous allons placer des Contrles (Case cocher, zones de texte, ). Ces contrles placs sur une feuille forment alors une interface graphique permettant une itraction simple et intuitive entre lutilisateur final et le programme. Comme indiqu prcdemment, les vnements utilisateurs (clic de souris, ) sont automatiquement dtects par le programme sui excute alors le code associ cet vnement. On parle de procdure vnementielle. Les phases de dveloppement des feuilles sont : 1. Dtermination des besoins : Quelles fonctions doit avoir cette interface ? De quels contrles doit-elle tre compose ? Comment seront-ils organiss sur la feuille ? A quels vnements utilisateurs doivent-ils rpondre ? 2. Cration visuelle de la feuille : Pendant cette phase, il faut placer les contrles voulus sur la feuille en mode cration dans le VBE et les paramtrer en mettant jour les valeurs dans la fentre Proprits. 3. Ecriture du code attach cette feuille : Pendant cette phase, on dtermine le comportement de la feuille face aux diffrents vnements utilisateurs

1. Les composants de la bote outils


La bote outils contient les contrles que vous pouvez placer sur votre feuille. Au mme titre que la feuille elle-mme , les contrles sont des objets, avec des mthodes et proprits. Pour pouvoir utiliser ces contrles, vous devez uniquement connatre ces mthodes et proprits. - Le contrle Label Le contrle Label permet de plac un intitul informatif sur une feuille - Le contrle textBox Le contrle textBox permet de placer une zone de texte sur la feuille, dans laquelle lutilisateur pourra saisir des informations - Le contrle ComboBox Le contrle ComboBox permet de placer une zone de liste modifiable sur la feuille, permettant lutilisateur de saisir une valeur manuellement ou de la slectionner dans une liste. La saisie manuelle peut tre dsactive. - Le contrle Frame Le contrle Frame permet de placer un cadre prsentant un intitul. Ce cadre pourra son tour recevoir des contrles - Le contrle ListBox Le contrle ListBox permet de placer une zone de liste non modifiables, dans laquelle lutilisateur pourra saisir une ou plusieurs valeurs. - Le contrle CheckBox Le contrle CheckBox permet de placer une case cocher qui peut tre alors active ou dsactive par lutilisateur - Le contrle ToggleButton Idem Contrle CheckBox avec une prsentation graphique diffrente. - Le contrle OptionButton Le contrle OptionButton permet de proposer lutilisateur un choix parmi plusieurs options. Si plusieurs contrles OptionButton sont associs ( en les mettant dans un contrle Frame par exemple ou avec la proprit GroupName), un seul choix est possible parmi toutes les options proposes. - Le contrle CommandButton Le contrle CommandButton permet de proposer un bouton de commande lutilisateur. - Le contrle TabStrip Le contrle TabStrip permet de mettre en place un ensemble de page gr par onglet - Le contrle ScrollBar Le contrle ScrollBar permet de mettre en place une barre de dfilement . - Le contrle SpinButton Le contrle SpinButton permet de mettre en place un bouton Toupie compos de 2 flches
Page 6 sur 21

2. Quelques proprits de ces contrles


- La proprit Name Elle correspond au nom de lobjet. Ce nom doit tre utilis pour faire rfrence lobjet dans le code. Un mme nom ne peut tre utilis pour plusieurs objets dune mme feuille. - La proprit Caption Elle correspond au texte descriptif du contrle. Cela correspond par exemple au texte qui saffiche lintrieur dun bouton, ou en haut gauche dune feuille par exemple. - La proprit Value Elle correspond la valeur du contrle. Cela peut varier en fonction du contrle choisi, par exemple la proprit value dun contrle CheckBox correspond un boolen qui est Vrai si la case est coche, Faux sinon. La liste des valeurs prises la proprit Value en fonction des types de contrles est donne dans le tableau suivant : Contrle CheckBox, OptionButton, ToggleButton TextBox ComboBox ListBox ScrollBar SpinButton - La proprit Visible Elle correspond la visibilit dun contrle par lutilisateur ou non (True = Visible, False = Invisible) - La proprit Enabled Elle correspond laccessibilit (crire un texte dans une TextBox, cocher une case, ) dun contrle par lutilisateur ou non (True = Accessible, False = Inaccessible). L - La proprit Locked Elle correspond lautorisation ou non dune modification dun contrle (crire un texte dans une TextBox, cocher une case, ) par lutilisateur ou non (True = Modifiable, False = Non Modifiable). Valeur accepte par la proprit Value Valeur de type Boolean indiquant ltat du contrle : True sil est activ, et False sinon

Valeur de type String reprsentant le texte dans la zone ddition du contrle Valeur reprsentant llment selectionn dans la liste des lments du contrle Valeur de type Integer comprise entre les valeurs des proprits Min et Max du contrle

3. Cration des procdures vnementielles


Les contrles placs sur une feuille sont rceptifs aux vnements utilisateur qui les affectent. Nous allons apprendre crer des procdure dites vnementielles, qui se dclencheront lorsqu lvnement correspondant sera repr. Une procdure vnementielle doit tre dcrite directement dans la fentre de code de la Feuille, en slectionnant une des mthodes proposes - Les vnements Les vnements sont nombreux et varient selon les contrles. Pour accder la liste des vnements grs par un type de contrle, slectionnez le contrle en question sur une feuille et tapez sur la touche F1 pour ouvrir la rubrique daide associe. Slectionnez alors Evenements pour les afficher. Nous avons slectionn les plus couramment utilis et les dfinitions brivement : - Evnement AfterUpdate : Dtect lorsque la valeur du contrle est modifi suite un changement de focus (un autre contrle est slectionn). - Evnement Change : Dtect lors de chaque modification de la valeur dun contrle. - Evnement Click : Dtect lorsque lutilisateur clique sur un contrle ou que lquivalent clavier est effectu. - Evnement DblClick : Dtect lorsque lutilisateur double-clique sur un contrle - Evnement KeyPress : Dtect lorsquune touche du clavier est enfonc

Page 7 sur 21

- Acces une procdure vnementielle et saisie le code Pour accder une procdure vnementielle dun contrle, double-cliquez sur le contrle, et slectionnez dans la liste droulante en haut droite de la fentre qui sest ouverte lvnement qui vous voulez matriser. Saisissez alors le code correspondant dans le masque la procdure gnr automatiquement comme par exemple Private Sub CommandButton1_Click() End Sub pour lvnement Click du bouton ayant CommandButton1 comme Proprit Name dans mon projet. Le code est compos dinstructions telles que prsents dans le chapitre 2 et dappels des procdures et fonctions dcrites dans les Modules et/ou des objets dcrits dans les Modules de Classes

Page 8 sur 21

Construction et Utilisation dun Module


Un module est compos de dfinitions de Constantes, de Variables (locales au module ou non) et de procdures cres par lutilisateur. Nous nous intressons dans ce chapitre construire des procdures.

1. Les procdures Sub


Une procdure Sub est une srie dinstructions excutant une tche dtermine au sein du projet, sans renvoyer de valeur. La syntaxe est : [Private | Public] [Static] Sub NomDeLaProcdure( [Arguments] ) Dclaration de variables locales Srie dinstructions End Sub Private ou Public (par dfaut) indique sil sagit dune procdure prive ou publique : - Une procdure publique peut tre invoque par nimporte quelle procdure du projet, y compris celles stockes dans dautres modules. - Une procdure prive ne peut tre invoque qu partir dune procdure stocke dans le mme module. Loption Static indique que les variables locales de la procdure Sub conservent leurs valeurs entre les diffrents appels de la procdure. La sortie dune procdure avant la fin de son excution peut tre active en plaant le mot-cl Exit Sub dans la srie dinstruction

2. Les procdures Function


Une procdure Function est une srie dinstructions excutant une tche dtermine au sein du projet, et renvoyant une valeur, qui pourra tre exploit par dautres procdures. La syntaxe est : [Private | Public] [Static] Function NomDeLaProcdure( [Arguments] ) Dclaration de variables locales Srie dinstructions NomDeLaProcdure = Expression End Function NomDeLaProcdure = Expression permet daffecter une valeur la fonction. Cest cette valeur qui sera renvoye lorsque lexcution de la fonction sera termine. Les mot-scls Private ou Public (par dfaut) indique sil sagit dune procdure prive ou publique : - Une procdure publique peut tre invoque par nimporte quelle procdure du projet, y compris celles stockes dans dautres modules. - Une procdure prive ne peut tre invoque qu partir dune procdure stocke dans le mme module. Loption Static indique que les variables locales la procdure Function conservent leurs valeurs entre les diffrents appels de la procdure. La sortie dune procdure Function avant la fin de son excution peut tre active en plaant le mot-cl Exit Function dans la srie dinstruction

3. Les arguments des procdures Sub ou Function


Arguments reprsente les arguments passs la procdure Sub ou Function par la procdure appelante. La virgule sert de sparateur entre les diffrentes valeurs transmises. Chacun des arguments de Arguments rpond la syntaxe suivante : [Optional] [ByVal | ByRef] NomVariable [As Type] [= ValeurParDfaut] Les signification des mots-cl sont donns par le tableau ci-dessous :
Page 9 sur 21

Elment Optional ByVal

ByRef

As = ValeurParDfaut

Description ce mot-cl indique que les arguments transmis sont facultatifs (Les arguments facultatifs doivent tre plac en fin de liste des arguments Largument est pass par Valeur. Cest la valeur de la variable et non son adresse qui est transmise la procdure appele. Autrement dit, la valeur de la variable passe est exploite par la procdure appele mais ne peut tre modifie. Largument est pass par Rfrence. Cest ladresse de la variable et non sa valeur qui est transmise la procdure appele. Autrement dit, la procdure peut modifier la valeur de cette variable. (Passage de paramtre par dfaut). Le type de donne de largument pass est spcifi la procdure ce mot-cl indique une valeur par dfaut pour largument si Optional a t utilis pour cet argument.

4. Utilisation dun module


Appeler une procdure consiste demander une procdure de sexcuter partir dune autre procdure. La procdure appele est excute et la procdure appelante reprend la main. - Lappel dune procdure Sub Pour appeler une procdure de type Sub, il faut utiliser la syntaxe Call NomProcdure Evidemment, pour pouvoir appeler une procdure Sub, il faut que cette procdure soit visible pour la procdure appelante. - Lappel dune procdure Function Pour appeler une procdure de type Function, il suffit de placer le nom de la la procdure dans une expression lemplacement ou une valeur est attendue. Evidemment, pour pouvoir appeler une procdure Function, il faut que cette procdure soit visible pour la procdure appelante. - Le passage des arguments Pour passer les arguments une procdure, il faut que les arguments coincident en terme de Type de Donne et soit dclars dans le mme ordre que lors de la dclaration de la procdure dans le module.

Page 10 sur 21

Traitements intra-application et inter-applications


1. Le modle Objet dExcel
Voir documentation en ligne de Microsoft Office - Rubrique Objets Microsoft Excel pour connatre le modle objet de Excel. - Accder au modle objet dExcel dans un module dfinit dans VBA Excel 1. 2. Il existe un pointeur appel ThisWorkBook qui permet datteindre les objets composant le fichier .xls associ au projet courant. A partir de cette rfrence, on accde par exemple la valeur de la case A1 de la feuille Feuil1 par la squence ThisWorkBook.WorkSheet(Feuil1).Range(A1).Value

Ensuite, il faut matriser le modle objet pour travailler utilement. Par exemple, lobjet Application.WorksheetFunction permet daccder lensemble des fonctions prdfinies dans Excel. Accder au modle objet dExcel dans un module dfinit dans une autre application (VBA Compliant) quExcel

Une variable objet peut tre affecte un projet dune application autre que lapplication hte du projet (pour exploiter par exemple des donnes issues dune feuille de calcul Excel dans un programme VBA Word. Pour quun projet puisse accder la bibliothque dobjets dune autre application, celle-ci doit tre rfrenc dans le projet. 0. Ne pas oubliez de rfrencer la bibliothque dobjets Excel dans le projet en cours Pour rfrencer une bibliothque dobjets, il faut choisir les options Outils/Rfrences, puis choisir la bibliothque rfrencer en la cochant comme montr dans la figure 2.

Figure 2 : Les Rfrences du projet 1. Dclarez les variables objet qui feront rfrence aux objets de l'autre application en tant que types spcifiques. Veillez qualifier chaque type l'aide du nom de l'application dont l'objet est issu. Par exemple, l'instruction suivante dclare une variable pointant un classeur Microsoft Excel : Dim wbXL As Excel.Workbook Utilisez la fonction CreateObject avec lidentificateur de programmation OLE de l'objet sur lequel vous voulez travailler dans l'autre application, comme indiqu dans l'exemple suivant. Pour voir la session de l'autre application, affectez la valeur True la proprit Visible. Dim appXL As Excel.Application

2.

Page 11 sur 21

Set appXL = CreateObject("Excel.Application") appXL.Visible = True 3. 4. Appliquez les proprits et les mthodes l'objet contenu dans la variable Lorsque vous avez termin de travailler dans l'autre application, utilisez la mthode Quit pour la fermer, comme indiqu dans l'exemple suivant. appXL.Quit

2. Le modle objet Word


Le principe est le mme que pour Excel, en remplacant Excel par Word dans les dclarations de objets concerns (Word.Application par exemple). Ensuite, il faut matriser le modle objet pour travailler utilement

3. Le modle objet Direct Access Object DAO 3.6


Les DAO (objets d'accs aux donnes) vous permettent d'utiliser un langage de programmation pour extraire et manipuler des donnes dans des bases de donnes locales ou distantes bases sur le moteur de base de donnes Microsoft Jet. Ils vous permettent galement de grer des bases de donnes (notamment Acces puisque cet outil est bas du Microsoft Jet) , ainsi que les objets et la structure de ces dernires. - Accder au modle objet dune base de donnes supportant les DAO dans un module VBA 0. Ne pas oubliez de rfrencer la bibliothque dobjets DAO 3.5 (Direct Access Object) dans le projet en cours 1. Appliquez les proprits et les mthodes l'objet contenu dans la variable Dans lexemple ci-dessous on accde au fichier MaBase.mdb, et on consulte les enregistrements de la table MaTable. Les champs de la table MaTable sont MonChamp1 et MonChamp2. Lorsque la valeur de MonChamp1 est 1 alors on met la chaine de caractre E dans le champ MonChamp2. Public Mydb As Database Public MyContenu As Recordset Set Mydb = OpenDatabase(MaBase) Set MyContenu = Mydb.OpenRecordset("MaTable") MyContenu.MoveFirst Do Until MyContenu.EOF If MyContenu![Champ1] = 1 Then MyContenu.Edit MyContenu![Champ2] = "E" MyContenu.Update End If MyContenu.MoveNext Loop Pointeur vers une base de donnes Pointeur vers une table dune base de donnes Pointer vers la base de donne MaBase durpertoire courant Pointer la table MaTable Se positionner sur le premier enregistrement de la table Tant quil y a des enregistrement, pour lenr courant On accde en criture au Champ2 de lenregistrement courant On modifie lenregistrement courant On pass lenregistrement suivant si il existe

4. Le modle objet Acces


Le principe est le mme que pour Excel, en remplacant Excel par Access dans les dclarations de objets concerns (Acces.Application par exemple). Ensuite, il faut matriser le modle objet pour travailler utilement

Page 12 sur 21

Etude de cas
Nous souhaitons mettre en place un outils EXCEL dans lequel un utilisateur non-expert en informatique doit etre capable de faire des calculs de conversion entre diffrentes monnaies. Nous allons dtaill dans la suite de cet expos, la construction dun tel outil bas sur les concepts dfinis dans la cours VBA.

1. Cration du fichier EXCEL


- Cration dune feuille nomme Change Dans la case B4, saisissez Montant en Francs , dans la case B6 saisir Pays , et dans la case B8 saisissez Montant en devise du pays slectionn . Grisez la case E4 pour indiquer lutilisateur lendroit o il doit saisir la valeur en francs. Insrez un bouton que vous placerez et nommerez comme indiqu sur la figure ci-dessous.

- Cration dune feuille nomme Cours Dans la case B1, saisissez Allemagne, et dans la case C1, saisir la valeur de 1 DM en francs. Dans la case B2, saisissez Angleterre, et dans la case C2, saisir la valeur de 1 en francs. Rptez lopration prcdente pour vous constituer un jeu dessai suffisamment reprsentatif.

Enregistrer votre fichier EXCEL dans un rpertoire TEST sous le nom TEST.XLS
Page 13 sur 21

2. Construction de linterface graphique de choix du pays


- Ouverture de VBE Ouvrir VBE avec les menus Outils/Macros/Visual Basic Editor - Ouverture dune fentre graphique et placement des objets dinterface Slectionnez le menu Insertion/UserForm pour insrer une nouvelle UserForm dans notre projet. Rappelons que UserForm correspond une fentre de notre interface graphique. Une nouvelle fentre apparat, avec une fenetre grise vide de tout objet. Cest dans cette fentre que nous allons dfinir notre interface graphique.

Nommons notre Userform avec un nom plus significatif. A la place de UserForm1, sur la ligne (Name) de la fentre Proprits, saisissez ChoixPays. Votre UserForm sappelle donc maintenant ChoixPays. Plaons un objet Bouton dans notre UserForm ChoixPays . Cliquez dans la boite outils sur le contrle Bouton, et faites un Drag and Drop sur la fentre ChoixPays. Viens se placer un bouton sappelant CommandButton1. De la mme manire que pour le nom de la Userform1, nous allons changer la valeur de (Name) pour le CommandButton1, en remplaant ce terme dans le fentre Proprits par Btn_OK. Pour faire apparatre OK comme message crit lintrieur du bouton, slectionnez la proprit Caption de lobjet Btn_OK, et saisissez OK comme valeur de cette proprit. Remarquez que lorsque vous slectionnez un objet de votre environnement VBA, les proprits correspondantes cet objet apparaissent dans la fentre proprits. Placez maintenant un objet Zone de liste modifiable. Appelez cet objet ListePays. Saisissez dans la proprits BoundColumn la valeur 0, indiquant que le rsultat renvoy par la proprit Value, sera lindex du pays choisi dans lordre dinsertion dans la liste. Placez ensuite un objet Intitul, et saisissez dans la proprit Caption, le texte Choisir un Pays, et cliquez sur OK pour revenir Excel . Ajustez les tailles de ces objets et de la fentre pour obtenir une configuration quivalent la figure 4.

Page 14 sur 21

3. Construction de la Macro dactivation de cette fentre graphique dans Excel


Il nous faut maintenant activer laffichage de cette interface graphique ChoixPays lorsque lutilisateur clique sur le bouton Choisir un Pays de la feuille de donne Change . Pour y parvenir, nous allons crer une procdure Sub sans paramtre que nous allons stocker dans un Module pour quelle soit accessible depuis nimporte quel endroit de notre projet. Insrons un nouveau module, en slectionnant les menus Insertion/Module de lenvironnement VBA. Une nouvelle fentre apparat. Cest dans cette fentre que nous allons crer notre procdure Afficher_IG_ChoixPays. Saisissez le texte Public Sub Afficher_IG_ChoixPays dans cette nouvelle fenetre et appuyez sur la touche Entre de votre clavier. Automatiquement, apparat la structure vide de votre nouvelle procdure, comme le montre la figure 5

Page 15 sur 21

Il ne vous reste plus qu insrer le code de votre procdure entre le Sub et le End Sub. Saisissez le code suivant :
Dim i As Integer ChoixPays.ListePays.Clear i = 1 Do While ThisWorkbook.Worksheets("Cours").Range("B" & i) <> "" ChoixPays.ListePays.AddItem ThisWorkbook.Worksheets("Cours").Range("B" & i) i = i + 1 Loop ChoixPays.Show

A quoi correspond ce code ? Linstruction Dim i As Integer permet de dclarer une variable de type entier qui ne sera accessible que dans cette procdure. Linstruction ChoixPays.ListePays.Clear permet dactiver la mthode Clear de lobjet Zone de liste modifiable ListePays qui se trouve dans le userform ChoixPays de notre projet. Cette mthode vide le contenu de la zone de liste modifiable. Nous trouvons ensuite une boucle qui scrute les valeurs des cases Bi (avec i initialis 1) et qui sarrtera lorsque la valeur trouve sera gale vide . Pour chaque ligne non vide trouve, on insre grace la mthode AddItem de lobjet ListePays la valeur de la case Bi. De cette manire, on charge la zone de liste avec les valeurs stockes dans la feuille Cours. Une fois ce chargement effectu, linstruction ChoixPays.Show permet dactiver la mthode Show de lobjet ChoixPays qui fait apparatre lcran la fenetre ChoixPays. La procdure est crite, il nous reste la faire excuter lorsque lutilisateur clique que le bouton Choisir un pays dans la fentre Change . Il faut revenir dans lenvironnement Excel, et cliquez avec le bouton droite de votre souris sur lobjet Bouton. Slectionnez alors loption Affecter une macro . Apparat alors une fenetre dans laquelle vous devez retrouver le nom de la procdure que lon vient dcrire dans VBA, savoir Afficher_IG_ChoisPays. Slectionnez cette procdure et cliquez sur OK.

4. Construction dune procdure de calcul du change


Il faut maintenant crer la procdure qui va calculer la valeur de la somme en francs dans la devise choisie. Comme prcdemment, nous allons crer une nouvelle procdure, qui sera cette fois ci une procdure Function,, qui permet de renvoyer un rsultat. Saisissez le code
Public Function Calcule(ByVal Montant As Double, ByVal taux As Double) As Double Calcule = Montant / taux End Function

Rappelons que ByVal permet de passer un paramtre par valeur. Cette fonction renvoie donc la valeur de Montant dans la devise correspondant au taux de change Taux.

5. Construction de la procdure vnementielle Click sur le bouton Btn_OK


Nous devons maintenant crire le code correspondant au dclenchement de lvnement Click du bouton Btn_OK. Dans ce code, il nous faudra rcuprer les valeurs de la somme changer, du pays, activer la fonction Calcule et renvoyer le rsultat de cette fonction dans les cases Excel appropries. Pour trouver la procdure Click du bouton Btn_OK, cliquez avec le bouton droit de la souris sur lobjet Btn_OK et slectionnez loption Code. Une fenetre apparat. Slectionnez alors la mthode Click et apparaitra automatiquement le code :
Private Sub Btn_OK_Click() End Sub

Page 16 sur 21

Placez dans cette procdure le code suivant :


Dim MonMontant As Double Dim MonTaux As Double MonMontant = ThisWorkbook.Worksheets("Change").Range("E4").Value MonTaux = ThisWorkbook.Worksheets("Cours").Range("C" & (ChoixPays.ListePays.Value + 1)).Value ThisWorkbook.Worksheets("Change").Range("E6").Value = ThisWorkbook.Worksheets("Cours").Range("B" & (ChoixPays.ListePays.Value + 1)).Value ThisWorkbook.Worksheets("Change").Range("E8").Value = Calcule(MonMontant, MonTaux) ChoixPays.Hide

Comme mentionn dans la figure suivante :

A quoi correspond ce code ? Les instructions Dim MonMontant As Double et Dim MonTaux As Double permettent de dclarer des variables de type relles codes sur 8 octets. Ces variables sont internes la procdure. Linstruction MonMontant = ThisWorkbook.Worksheets("Change").Range("E4").Value permet de stocker dans la variable MonMontant le contenu de la case E4 de la feuille Change du projet Excel. Linstruction ChoixPays.ListePays.Value permet de rcuprer le rang du pays slectionn dans la liste des pays (premier pays, valeur 0, deuxime pays, valeur 1, ). Linstruction ChoixPays.Hide permet de cacher la fentre ChoixPays. Notez lappel la fonction Calcule, cre prcdemment. Le code que nous venons dcrire ne permet pas de tester toutes les erreurs. Si vous saisissez par exemple TOTO dans la case E4, le programme ne sexcutera pas correctement. Il faudrait prendre en compte tous ces cas de figures pour obtenir un rsultat professionnel

Page 17 sur 21

6. Mise jour des valeurs de change partir dAccess


Nous souhaitons dans cette partie, rcuprer dans Excel, les valeurs de change stocke dans une base de donnes. - Construction de la base de donnes Nous supposerons que nous avons notre disposition, dans le rpertoire TEST, une base de donne Access, dans laquelle nous avons une table CoursChange. Cette table est compose des champs NomPays, CoursChangePays. La figure cidessous nous donne une vue de cette base de donne sous Access.

- Ajout de la rfrence DAO 3.6 dans le projet Excel Pour ajouter cette rfrence, il faut slectionner les menus Outils/Rfrences et slectionnez Microsoft DAO 3.6 Object Library comme indiqu sur la figure ci-dessous :

Aprs avoir cliqu sur OK, nous avons maintenant accs dans notre environnement Excel, aux objets de manipulation de bases de donnes bases sur le moteur Microsoft Jet. Access en faisant partie, nous allons pouvoir accder au contenu dune base Access.

Page 18 sur 21

- Construction de la macro de chargement des cours de change dAcces vers Excel Dans le module Module1 que nous avons cr prcdemment, nous allons rajouter une nouvelle procdure intitule Charger_Cours sans paramtre, donc directement appelable depuis un bouton dune feuille Excel. Saisissez le code suivant dans cette procdure :
Public Sub Charge_Cours() Dim Mydb As Database Dim MyContenu As Recordset Dim i As Integer Set Mydb = OpenDatabase("Test") Set MyContenu = Mydb.OpenRecordset("CoursChange") i = 1 MyContenu.MoveFirst Do Until MyContenu.EOF ThisWorkbook.Worksheets("Cours").Range("B" & i).Value = MyContenu![NomPays] ThisWorkbook.Worksheets("Cours").Range("C" & i).Value = MyContenu![CoursChangePays] i = i + 1 MyContenu.MoveNext Loop Mycontenu.close End Sub

A quoi correspond ce code ? Les variables Mydb et MyContenu pointe respectivement vers la base de donnes Test.mdb stocke dans le mme rpertoire que le projet Excel et la table CoursChange de cette base. Les mthodes MoveFirst , MoveNext permettent de se dplacer dans les enregistrements de la table, linstruction MyContenu ![NomPays] permet de rcuprer la valeur du champs NomPays pour lenregistrement courant. Il nous faut maintenant rajouter dans la feuille Excel Cours un bouton que lon associera la procdure Charge_Cours et que lon nommera MAJ des Cours

Testez diffrentes modifications dans la base de donnes, et cliquez sur le bouton pour constater la mise jour des valeurs sous Excel. Bon courage !!

Page 19 sur 21

You might also like