Professional Documents
Culture Documents
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.
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
2. 3. 4.
Page 1 sur 21
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
Page 3 sur 21
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.
Page 5 sur 21
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
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
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.
Page 10 sur 21
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
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.
- 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
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
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.
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.
Page 16 sur 21
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
- 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