Visual Basic for Applications

33
Visual Basic for Applications NOTIONS DE BASES Par Frédéric GRIMAUD Ecole des Mines de Saint-Etienne Présentation de Visual Basic Editor............................1 Introduction au langage de programmation VBA.....................2 1. Les différents types de Variables et Constantes.........................2 - Les Chaînes de caractères.............................................2 - Les Valeurs numériques................................................2 - Les valeurs booléennes................................................2 - Les Dates.............................................................3 - Les tableaux..........................................................3 - Les type de données personnalisés.....................................3 - Les constantes........................................................3 2. La portée et la durée de vie des Variables et des Constantes............3 3. Les structures de contrôle..............................................4 - La boucle While…Wend..................................................4 - La boucle Do … Loop et ses 4 variantes................................4 - La boucle For … Next..................................................4 4. Les strutures conditionnelles...........................................4 - La structure If … Then … Else.........................................4 - La structure Select Case..............................................5 5. La structure des programmes Visual Basic pour Application...............5 La notion de Modules....................................................5 La notion de Procédure..................................................5 Construction d’une interface Utilisateur.........................6 1. Les composants de la boîte à outils.....................................6 - Le contrôle Label....................................................6 - Le contrôle textBox...................................................6 - Le contrôle ComboBox..................................................6 - Le contrôle Frame.....................................................6 - Le contrôle ListBox...................................................6 - Le contrôle CheckBox..................................................6 - Le contrôle ToggleButton..............................................6 - Le contrôle OptionButton..............................................6 - Le contrôle CommandButton.............................................6 - Le contrôle TabStrip..................................................6

Transcript of Visual Basic for Applications

Visual Basic for Applications NOTIONS DE BASES

Par Frédéric GRIMAUDEcole des Mines de Saint-Etienne

Présentation de Visual Basic Editor............................1Introduction au langage de programmation VBA.....................2

1. Les différents types de Variables et Constantes.........................2- Les Chaînes de caractères.............................................2- Les Valeurs numériques................................................2- Les valeurs booléennes................................................2- Les Dates.............................................................3- Les tableaux..........................................................3- Les type de données personnalisés.....................................3- Les constantes........................................................3

2. La portée et la durée de vie des Variables et des Constantes............33. Les structures de contrôle..............................................4

- La boucle While…Wend..................................................4- La boucle Do … Loop et ses 4 variantes................................4- La boucle For … Next..................................................4

4. Les strutures conditionnelles...........................................4- La structure If … Then … Else.........................................4- La structure Select Case..............................................5

5. La structure des programmes Visual Basic pour Application...............5La notion de Modules....................................................5La notion de Procédure..................................................5

Construction d’une interface Utilisateur.........................61. Les composants de la boîte à outils.....................................6

- Le contrôle Label....................................................6- Le contrôle textBox...................................................6- Le contrôle ComboBox..................................................6- Le contrôle Frame.....................................................6- Le contrôle ListBox...................................................6- Le contrôle CheckBox..................................................6- Le contrôle ToggleButton..............................................6- Le contrôle OptionButton..............................................6- Le contrôle CommandButton.............................................6- Le contrôle TabStrip..................................................6

- Le contrôle ScrollBar.................................................6- Le contrôle SpinButton................................................6

2. Quelques propriétés de ces contrôles....................................7- La propriété Name.....................................................7- La propriété Caption..................................................7- La propriété Value....................................................7- La propriété Visible..................................................7- La propriété Enabled..................................................7- La propriété Locked...................................................7

3. Création des procédures événementielles.................................7- Les événements........................................................7- Accés à une procédure événementielle et saisie le code................8

Construction et Utilisation d’un Module..........................91. Les procédures Sub......................................................92. Les procédures Function.................................................93. Les arguments des procédures Sub ou Function............................94. Utilisation d’un module................................................10

- L’appel d’une procédure Sub..........................................10- L’appel d’une procédure Function.....................................10- Le passage des arguments.............................................10

Traitements intra-application et inter-applications.............111. Le modèle Objet d’Excel................................................11

- Accéder au modèle objet d’Excel dans un module définit dans VBA Excel 11- Accéder au modèle objet d’Excel dans un module définit dans une autre application (VBA Compliant) qu’Excel...................................11

2. Le modèle objet Word...................................................123. Le modèle objet Direct Access Object DAO 3.6...........................12

- Accéder au modèle objet d’une base de données supportant les DAO dans un module VBA..........................................................12

4. Le modèle objet Acces..................................................12Etude de cas....................................................13

1. Création du fichier EXCEL..............................................13- Création d’une feuille nommée « Change ».............................13- Création d’une feuille nommée « Cours »..............................13

2. Construction de l’interface graphique de choix du pays.................14- Ouverture de VBE.....................................................14- Ouverture d’une fenêtre graphique et placement des objets d’interface 14

3. Construction de la Macro d’activation de cette fenêtre graphique dans Excel.....................................................................154. Construction d’une procédure de calcul du change.......................165. Construction de la procédure événementielle « Click sur le bouton Btn_OK »..................................................................16

6. Mise à jour des valeurs de change à partir d’Access....................18- Construction de la base de données...................................18- Ajout de la référence DAO 3.6 dans le projet Excel...................18- Construction de la macro de chargement des cours de change d’Acces versExcel..................................................................19

Présentation de Visual Basic EditorVisual Basic Editor (VBE) est l’environnement de développement intégré de VBA(Visual Basic for Application). On accède toujours à VBE à partir d’uneapplication hôte en sélectionnant la séquence Outils/Macro/Visual BasicEditor (ou le raccourci Alt-F11). Dans cet environnement VBE, on retrouve :- L’explorateur de projet : il permet de visualiser les différents projets

et les différents éléments qui les composent (Objets, Modules, Modules deClasse, Feuille, …) sur lesquels nous reviendrons uttérieurement etégalement d’accéder à ces éléments et au code qui leur est attaché.

- La fenêtre Propriétés : elle permet de visualiser et de modifierl’ensemble des propriétés des objets constituant le projet

- La fenêtre Code : elle permet d’éditer le code associé aux éléments duprojet

- La fenêtre UserForm et la Boîte à Outils : elle permet de concevoir lesfeuilles (Interfaces graphiques) à partir d’éléments de base (bouton, caseà cocher, zone de liste modifiable, …) disponible dans la boîte à Outils.

Ces différents éléments ne sont pas obligatoirement présents à l’écransimultanément. Il est cependant conseillé de garder constamment à l’écran

l’explorateur de projet, à partir duquel vous pourrez toujours activer lesautres outils.

Page 1 sur 34

Figure 1 : L’environnement de développement VBE (Visual Basic Editor)

Page 2 sur 34

Introduction au langage de programmation VBA1. Les différents types de Variables et Constantes

Pour créer une variable, vous devez la déclarer. Cette déclaration peut êtreexplicite ou implicite (il est conseillé de rendre les déclaration devariables explicite en commençant la saisie du code d’un Module, d’un Modulede Classe ou d’une Feuille par l’instruction Option Explicit. Le nom d’unevariable ne doit pas commencer par une letttre, peut contenir jusqu’à 255caractères sans y inclure d’espace ni de mot réservé VBA ni de . ! @ & $ # - Les Chaînes de caractères Pour déclarer une variable de type Chaîne de caractères, il faut utiliser laséquence « Dim NomVariable as String ». L’affectation d’une chaîne decaractère à une variable de type String se réalise en placant cette chaîne decaractère entre guillemets (‘’ ‘’ ). L’opérateur de concaténation de chaînede caractère est le mot réservé &.- Les Valeurs numériquesPour déclarer une variable numérique, il faut utiliser la séquence  «  DimNomVariable as Type » ou Type peut prendre les valeurs décrites dans le tableausuivant :

Type de données Valeurs acceptées Mémoire occupée

Byte Nombre entier, compris ente 0 et 2551 octet

Integer Nombre entier, compris entre -32768 et 327672 octet

Long Nombre entier, compris entre -2147483648 et 21474836474 octet

Single Nombre réel compris entre -3,4 E+38 et 3,4 E +384 octet

Double Nombre réel compris entre -1,8 E+308 et 1,8 E+3088 octet

Notons que le séparateur décimal dans VBA est le point. Les opérateursarithmétiques utilisables sur les variables numériques sont décrits dans letableau suivant :

Opérateur Description

+ Addition- Soustraction* Multiplication

Page 3 sur 34

/ Division\ Division entière : seule la partie entière du résultat de la

division est renvoyée^ Elévation à la puissance

Les opérateurs relationnels utilisables sur les variables numériques sontdécrits dans le tableau suivant :

Opérateur Description

= Egal à> Supérieur à< Inférieur à<> Différent de>= Supérieur ou égal à<= Inférieur ou égal à

Notons que VBA intègre de nombreuses fonctions permettant de manipuler lesvaleurs numériques, comme par exemple les fonction Abs et Sqr qui renvoientrespectivement la valeur absolue et la racine carrée. La liste des fonctionsVBA est consultable dans l’aide en ligne (Manuel de référence / Fonctions)- Les valeurs booléennesPour déclarer une variable de type Booléenne, il faut utiliser la séquence« Dim NomVariable as Boolean ». Une variable de type Booléenne peut prendrela valeur true (1) ou False (0) et occupe 2 octets en mémoire.

Les opérateurs logiques utilisables sur les variables booléennes sont décritsdans le tableau suivant :

Opérateur Description

Or OuAnd EtXor Ou ExclusifNot Non

- Les DatesPour déclarer une variable de type Date, il faut utiliser la séquence « DimNomVariable as Date ». Une variable de type Date peut prendre une valeurcomprise ente le 01/01/100 et le 31/12/9999 et occupe 8 octets en mémoiresous forme d’un nombre réel. La partie entière de la variable de type Datereprésente le jour et la valeur 0 correspond au 30/12/1899.

Page 4 sur 34

Notons que VBA intègre de nombreuses fonctions permettant de manipuler lesdates, par exemple les fonctions Date, Time et Now renvient respectivement ladate courante, l’heure courante et la date courante suivie de l’heurecourante.- Les tableauxPour déclarer une variable de type tableau, il faut utiliser la séquence« Dim NomVariable(Nbr1, Nbr2, …) as Type » ou la séquence « DimNomVariable(Début1 to Fin1, Début2 to Fin2, … ) as Type » où Nbri réprésente lavaleur de la dimension i du tableau et où Début i et Fin i correspondent auindice de début et de fin pour la dimension i (alors égale à Fin i - Début i+ 1).- Les type de données personnalisésPour déclarer une variable de type Type de données personnalisés, il faututiliser la séquence suivante dans la partie Déclaration d’un module :

Type NomTypeDonnées1 as Type 1Données2 as Type 2…

End TypeOn peut alors déclarer une variable de ce nouveau type avec la séquenceclassique Dim NomVariable as NomType

- Les constantesLes constantes permettent d’attribuer un nom à une valeur fixe qui ne pourradonc pas évoluer pendant le déroulement du programme. Pour déclarer uneconstante, il faut utiliser la séquence « Const NomConstante as Type =Valeur ». Pour déclarer une constante accessible à toutes les procédures d’unmodule, il faut la déclarer dans la partie Déclaration d’un module.

2. La portée et la durée de vie des Variables et des ConstantesEn plus de leur type et de leur valeur, les variables et les constantes sontcaractérisées par leur portée. Elle désigne son accessibilité pour lesprocédures et les modules du projet. Les variables et les constantes peuventêtre accessibles :- Uniquement à l’intérieur d’une procédure : c’est le cas si la déclaration

est effectuée à l’intérieur de la procédure- à l’ensemble des procédures d’un module : c’est le cas si la déclaration

est effectuée dans la partie Déclaration d’un Module, c’est-à-dire àl’extérieur de toute procédure, avec les séquences « Dim NomVariable asType » ou « Private NomVariable as Type »

- ou encore à l’ensemble des modules du projet en cours : : c’est le cas sila déclaration est effectuée dans la partie Déclaration d’un Module,c’est-à-dire à l’extérieur de toute procédure, avec la séquence « PublicNomVariable as Type »

Page 5 sur 34

La durée de vie d’une variable désigne le temps pendant lequel la variableconserve sa valeur. Une variable peut :- conserver sa valeur tant qu’une procédure s’exécute et être réinitialisée

lorsque la procédure est terminée : c’est la cas si l’on utilise laséquence classique « Dim NomVariable as type »

- ou conserver sa valeur entre les différents appels de la procédure : c’estle cas si l’on utilise la séquence « Static NomVariable as Type »

3. Les structures de contrôle- La boucle While…WendLa structure While…Wend permet de répéter une série d’instruction tant que lacondition spécifiée est remplie. La syntaxe est :

While ConditionSérie d’instructions

Wend- La boucle Do … Loop et ses 4 variantes

La structure Do While … Loop permet de répéter une série d’instructiontant que la condition spécifiée est remplie. La syntaxe est :

Do While ConditionSérie d’instructions

LoopLa structure Do Until … Loop permet de répéter une série d’instructionjusqu’à ce que la condition spécifiée soit remplie. La syntaxe est :

Do Until ConditionSérie d’instructions

LoopLa structure Do … Loop While permet d’exécuter une série d’instructionspuis de la répéter tant que la condition spécifiée est remplie. Lasyntaxe est :

Do Série d’instructions

Loop While ConditionLa structure Do … Loop Until permet d’exécuter une série d’instructionspuis de la répéter jusqu’à ce que la condition spécifiée soit remplie. Lasyntaxe est :

Do Until Série d’instructions

Loop Until Condition

- La boucle For … NextLa structure For … Next permet de répéter une série d’instruction un nombrede fois déterminée dans le code, en utilisant un compteur. La syntaxe est :

Page 6 sur 34

For compteur = x to y Step PasSérie d’instructions

Next compteurCette séquence permet d’exécuter en boucle la série d’instruction spécifiéeentre For et Next en incrémentant la variable compteur de la valeur de Pas àchaque itération.

4. Les strutures conditionnelles- La structure If … Then … Else La syntaxe est :

If Condition 1 ThenSérie d’instructions 1

[ ElseIf Condition 2Série d’instructions 2

ElseIf Condition 3Série d’instructions 3

… Else

Série d’instructions n ]EndIf

La partie entre crochet [] n’est pas obligatoire. Les conditions sontévaluées dans l’ordre d’apparition à l’intérieur de la structure. - La structure Select CaseLa structure Select case permet d’envisager différentes valeurs pour unemême expression et de déterminer des instructions spécifiques pour chaque casenvisagé. La syntaxe est :

Select Case ExpressionCase Valeur 1

Série d’instructions 1Case Valeur 2

Série d’instructions 2…Case Valeur n

Série d’instructions n-1[ Case Else

Série d’instructions ]End Select

Lorsque la valeur renvoyé par Expression correspond à l’une des valeursproposées derrière les Case, les instructions correspondants sont exécutés etla procédure se poursuit avec l’instruction qui suit le End Select. Sinon,les instructions attachées à Case Else sont exécutées.

Page 7 sur 34

5. La structure des programmes Visual Basic pour ApplicationLa notion de ModulesComme il est précisé dans le § précédent, on distingue dans un projet VBA lesmodules de Code, les modules de Classe et les Feuilles. Ces éléments sontappelés à interagir pour constituer le programme complet :- Le code standard se trouve dans des modules de codes, stockés dans le

dossier Modules.- Le code décrivant les objets développés pour votre projet est stocké dans

le dossier Modules de Classe- Le code décrivant l’interface d’un programme et le code affecté aux

différents événements associés à cette interface sont stockés dans desfichiers UserForms, eux même stockés dans le dossier Feuilles.

La notion de ProcédureA l’intérieur d’un même module, le code est structuré en procédures. Uneprocédure est une séquence d’instructions. On qualifie de procédureévénementielle une procédure déclenchée par un événement (clic de souris,frappe d’une touche du clavier, ..) par opposition aux procédures standardsindépendantes de tout événement de l’interface utilisateur :- Dans les dossiers Feuilles, les procédures sont déterminées : il existe

une procédure pour chaque événement pouvant affecter un élément del’interface utilisateur. Il s’agit alors uniquement de créer le code àexécuter lors du déclenchement de cet événement.

- Dans les dossiers Modules ou Modules de Classe, c’est au concepteur ducode de créer les différentes procédures. Il s’agit alors de créer lastructure de la procédure (Procédure, Fonction, …) et de créer le code àexécuter lors de l’appel à cette dernière.

Page 8 sur 34

Construction d’une interface UtilisateurLes feuilles sont les zones sur lesquelles nous allons placer des Contrôles (Case à cocher, zones de texte, …). Ces contrôles placés sur une feuille forment alors une interface graphique permettant une itéraction simple et intuitive entre l’utilisateur final et le programme.Comme indiqué précédemment, les événements utilisateurs (clic de souris, …)sont automatiquement détectés par le programme sui exécute alors le codeassocié à cet événement. On parle de procédure événementielle.Les phases de développement des feuilles sont :1. Détermination des besoins : Quelles fonctions doit avoir cette interface ?

De quels contrôles doit-elle être composée ? Comment seront-ils organiséssur la feuille ? A quels événements utilisateurs doivent-ils répondre ?

2. Création visuelle de la feuille : Pendant cette phase, il faut placer lescontrôles voulus sur la feuille en mode création dans le VBE et lesparamétrer en mettant à jour les valeurs dans la fenêtre Propriétés.

3. Ecriture du code attaché à cette feuille : Pendant cette phase, ondétermine le comportement de la feuille face aux différents événementsutilisateurs

1. Les composants de la boîte à outilsLa boîte à outils contient les contrôles que vous pouvez placer sur votrefeuille. Au même titre que la feuille elle-même , les contrôles sont desobjets, avec des méthodes et propriétés. Pour pouvoir utiliser cescontrôles, vous devez uniquement connaître ces méthodes et propriétés. - Le contrôle LabelLe contrôle Label permet de placé un intitulé informatif sur une feuille- Le contrôle textBoxLe contrôle textBox permet de placer une zone de texte sur la feuille, danslaquelle l’utilisateur pourra saisir des informations- Le contrôle ComboBoxLe contrôle ComboBox permet de placer une zone de liste modifiable sur lafeuille, permettant à l’utilisateur de saisir une valeur manuellement ou dela sélectionner dans une liste. La saisie manuelle peut être désactivée.- Le contrôle FrameLe contrôle Frame permet de placer un cadre présentant un intitulé. Ce cadrepourra à son tour recevoir des contrôles- Le contrôle ListBoxLe contrôle ListBox permet de placer une zone de liste non modifiables, danslaquelle l’utilisateur pourra saisir une ou plusieurs valeurs.

Page 9 sur 34

- Le contrôle CheckBoxLe contrôle CheckBox permet de placer une case à cocher qui peut être alorsactivée ou désactivée par l’utilisateur- Le contrôle ToggleButtonIdem Contrôle CheckBox avec une présentation graphique différente.- Le contrôle OptionButtonLe contrôle OptionButton permet de proposer à l’utilisateur un choix parmiplusieurs options. Si plusieurs contrôles OptionButton sont associés ( enles mettant dans un contrôle Frame par exemple ou avec la propriétéGroupName), un seul choix est possible parmi toutes les options proposées.- Le contrôle CommandButtonLe contrôle CommandButton permet de proposer un bouton de commande àl’utilisateur. - Le contrôle TabStripLe contrôle TabStrip permet de mettre en place un ensemble de page géré paronglet- Le contrôle ScrollBarLe contrôle ScrollBar permet de mettre en place une barre de défilement .- Le contrôle SpinButtonLe contrôle SpinButton permet de mettre en place un bouton « Toupie » composéde 2 flèches

6. Quelques propriétés de ces contrôles- La propriété NameElle correspond au nom de l’objet. Ce nom doit être utilisé pour faireréférence à l’objet dans le code. Un même nom ne peut être utilisé pourplusieurs objets d’une même feuille.- La propriété CaptionElle correspond au texte descriptif du contrôle. Cela correspond par exempleau texte qui s’affiche à l’intérieur d’un bouton, ou en haut à gauche d’unefeuille par exemple.- La propriété ValueElle correspond à la valeur du contrôle. Cela peut varier en fonction ducontrôle choisi, par exemple la propriété value d’un contrôle CheckBoxcorrespond à un booléen qui est à Vrai si la case est cochée, à Faux sinon.La liste des valeurs prises la propriété Value en fonction des types decontrôles est donnée dans le tableau suivant :

Contrôle Valeur acceptée par la propriété Value

Page 10 sur 34

CheckBox, Valeur de type Boolean indiquant l’état ducontrôle : True s’il est activé, et False sinon

OptionButton,ToggleButtonTextBox Valeur de type String représentant le texte dans la zone

d’édition du contrôleComboBox Valeur représentant l’élément selectionné dans la

liste des éléments du contrôleListBoxScrollBar Valeur de type Integer comprise entre les valeurs

des propriétés Min et Max du contrôleSpinButton

- La propriété VisibleElle correspond à la visibilité d’un contrôle par l’utilisateur ou non (True= Visible, False = Invisible)- La propriété EnabledElle correspond à l’accessibilité (écrire un texte dans une TextBox, cocherune case, …) d’un contrôle par l’utilisateur ou non (True = Accessible, False= Inaccessible). L- La propriété LockedElle correspond à l’autorisation ou non d’une modification d’un contrôle(écrire un texte dans une TextBox, cocher une case, …) par l’utilisateur ounon (True = Modifiable, False = Non Modifiable).

7. Création des procédures événementiellesLes contrôles placés sur une feuille sont réceptifs aux événementsutilisateur qui les affectent. Nous allons apprendre à créer des procéduredites événementielles, qui se déclencheront lorsqu l’événement correspondantsera repéré.Une procédure événementielle doit être décrite directement dans la fenêtre decode de la Feuille, en sélectionnant une des méthodes proposées- Les événementsLes événements sont nombreux et varient selon les contrôles. Pour accéder àla liste des événements gérés par un type de contrôle, sélectionnez lecontrôle en question sur une feuille et tapez sur la touche F1 pour ouvrir larubrique d’aide associée. Sélectionnez alors Evéenements pour les afficher.Nous avons sélectionné les plus couramment utilisé et les définitionsbrièvement :

- Evénement AfterUpdate : Détecté lorsque la valeur du contrôle estmodifié suite à un changement de focus (un autre contrôle estsélectionné).

Page 11 sur 34

- Evénement Change : Détecté lors de chaque modification de la valeurd’un contrôle.- Evénement Click : Détecté lorsque l’utilisateur clique sur un contrôleou que l’équivalent clavier est effectué.- Evénement DblClick  : Détecté lorsque l’utilisateur double-clique sur uncontrôle - Evénement KeyPress : Détecté lorsqu’une touche du clavier est enfoncé

- Acces à une procédure événementielle et saisie le codePour accéder à une procédure événementielle d’un contrôle, double-cliquez surle contrôle, et sélectionnez dans la liste déroulante en haut à droite de lafenêtre qui s’est ouverte l’événement qui vous voulez maîtriser. Saisissezalors le code correspondant dans le masque la procédure généréautomatiquement comme par exemple

Private Sub CommandButton1_Click()

End Subpour l’événement Click du bouton ayant CommandButton1 comme Propriété Namedans mon projet.

Le code est composé d’instructions telles que présentés dans le chapitre 2 etd’appels à des procédures et fonctions décrites dans les Modules et/ou à desobjets décrits dans les Modules de Classes

Page 12 sur 34

Construction et Utilisation d’un ModuleUn module est composé de définitions de Constantes, de Variables (locales aumodule ou non) et de procédures créées par l’utilisateur. Nous nousintéressons dans ce chapitre à construire des procédures.

1. Les procédures SubUne procédure Sub est une série d’instructions exécutant une tâche déterminéeau sein du projet, sans renvoyer de valeur. La syntaxe est :

[Private | Public] [Static] Sub NomDeLaProcédure( [Arguments] )Déclaration de variables localesSérie d’instructions

End Sub

Private ou Public (par défaut) indique s’il s’agit d’une procédure privée oupublique :

- Une procédure publique peut être invoquée par n’importe quelleprocédure du projet, y compris celles stockées dans d’autres modules.

- Une procédure privée ne peut être invoquée qu’à partir d’une procédurestockée dans le même module.

L’option Static indique que les variables locales de la procédure Subconservent leurs valeurs entre les différents appels de la procédure.

La sortie d’une procédure avant la fin de son exécution peut être activée enplaçant le mot-clé Exit Sub dans la série d’instruction

8. Les procédures FunctionUne procédure Function est une série d’instructions exécutant une tâchedéterminée au sein du projet, et renvoyant une valeur, qui pourra êtreexploité par d’autres procédures. La syntaxe est :

[Private | Public] [Static] Function NomDeLaProcédure( [Arguments] )Déclaration de variables localesSérie d’instructions…NomDeLaProcédure = Expression…

End Function NomDeLaProcédure = Expression permet d’affecter une valeur à la fonction.C’est cette valeur qui sera renvoyée lorsque l’exécution de la fonctionsera terminée.

Les mot-sclés Private ou Public (par défaut) indique s’il s’agit d’uneprocédure privée ou publique :

Page 13 sur 34

- Une procédure publique peut être invoquée par n’importe quelleprocédure du projet, y compris celles stockées dans d’autres modules.

- Une procédure privée ne peut être invoquée qu’à partir d’une procédurestockée dans le même module.

L’option Static indique que les variables locales à la procédure Functionconservent leurs valeurs entre les différents appels de la procédure.

La sortie d’une procédure Function avant la fin de son exécution peut êtreactivée en plaçant le mot-clé Exit Function dans la série d’instruction

9. Les arguments des procédures Sub ou FunctionArguments représente les arguments passés à la procédure Sub ou Function parla procédure appelante. La virgule sert de séparateur entre les différentesvaleurs transmises.Chacun des arguments de Arguments répond à la syntaxe suivante :

[Optional] [ByVal | ByRef] NomVariable [As Type] [= ValeurParDéfaut]

Les signification des mots-clé sont donnés par le tableau ci-dessous :

Elément Description Optional ce mot-clé indique que les arguments transmis sont

facultatifs (Les arguments facultatifs doivent êtreplacé en fin de liste des arguments

ByVal L’argument est passé par Valeur. C’est la valeur de lavariable et non son adresse qui est transmise à laprocédure appelée. Autrement dit, la valeur de lavariable passée est exploitée par la procédure appeléemais ne peut être modifiée.

ByRef L’argument est passé par Référence. C’est l’adresse dela variable et non sa valeur qui est transmise à laprocédure appelée. Autrement dit, la procédure peutmodifier la valeur de cette variable. (Passage deparamètre par défaut).

As Le type de donnée de l’argument passé est spécifié à laprocédure

= ValeurParDéfaut ce mot-clé indique une valeur par défaut pour l’argumentsi Optional a été utilisé pour cet argument.

10. Utilisation d’un moduleAppeler une procédure consiste à demander à une procédure de s’exécuter àpartir d’une autre procédure. La procédure appelée est exécutée et laprocédure appelante reprend la main.

Page 14 sur 34

- L’appel d’une procédure SubPour appeler une procédure de type Sub, il faut utiliser la syntaxe « CallNomProcédure »Evidemment, pour pouvoir appeler une procédure Sub, il faut que cetteprocédure soit visible pour la procédure appelante.- L’appel d’une procédure FunctionPour appeler une procédure de type Function, il suffit de placer le nom dela la procédure dans une expression à l’emplacement ou une valeur estattendue. Evidemment, pour pouvoir appeler une procédure Function, il faut que cetteprocédure soit visible pour la procédure appelante.- Le passage des argumentsPour passer les arguments à une procédure, il faut que les argumentscoincident en terme de Type de Donnée et soit déclarés dans le même ordreque lors de la déclaration de la procédure dans le module.

Page 15 sur 34

Traitements intra-application et inter-applications

1. Le modèle Objet d’ExcelVoir documentation en ligne de Microsoft Office - Rubrique « Objets MicrosoftExcel » pour connaître le modèle objet de Excel.

- Accéder au modèle objet d’Excel dans un module définit dans VBA Excel1. Il existe un pointeur appelé ThisWorkBook qui permet d’atteindre les

objets composant le fichier .xls associé au projet courant.2. A partir de cette référence, on accède par exemple à la valeur de la case

A1 de la feuille Feuil1 par la séquenceThisWorkBook.WorkSheet(‘’Feuil1’’).Range(‘’A1’’).Value

Ensuite, il faut maîtriser le modèle objet pour travailler utilement. Par exemple, l’objet Application.WorksheetFunction permet d’accéder à l’ensembledes fonctions prédéfinies dans Excel.

- Accéder au modèle objet d’Excel dans un module définit dans une autreapplication (VBA Compliant) qu’ExcelUne variable objet peut être affectée à un projet d’une application autre quel’application hôte du projet (pour exploiter par exemple des données issuesd’une feuille de calcul Excel dans un programme VBA Word.Pour qu’un projet puisse accéder à la bibliothèque d’objets d’une autreapplication, celle-ci doit être référencé dans le projet.

0. Ne pas oubliez de référencer la bibliothèque d’objets Excel dans le projeten coursPour référencer une bibliothèque d’objets, il faut choisir les optionsOutils/Références, puis choisir la bibliothèque à référencer en la cochantcomme montré dans la figure 2.

Page 16 sur 34

Figure 2 : Les Références du projet

1. Déclarez les variables objet qui feront référence aux objets de l'autre application en tant que types spécifiques. Veillez à qualifier chaque typeà l'aide du nom de l'application dont l'objet est issu. Par exemple, l'instruction suivante déclare une variable pointant un classeur MicrosoftExcel :

Dim wbXL As Excel.Workbook2. Utilisez la fonction CreateObject avec l’identificateur 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 propriété Visible.

Dim appXL As Excel.ApplicationSet appXL = CreateObject("Excel.Application")appXL.Visible = True

3. Appliquez les propriétés et les méthodes à l'objet contenu dans la variable

4. Lorsque vous avez terminé de travailler dans l'autre application, utilisezla méthode Quit pour la fermer, comme indiqué dans l'exemple suivant. appXL.Quit

11. Le modèle objet WordLe principe est le même que pour Excel, en remplacant Excel par Word dansles déclarations de objets concernés (Word.Application par exemple).

Ensuite, il faut maîtriser le modèle objet pour travailler utilement …

Page 17 sur 34

12. Le modèle objet Direct Access Object DAO 3.6Les DAO (objets d'accès aux données) vous permettent d'utiliser un langage deprogrammation pour extraire et manipuler des données dans des bases dedonnées locales ou distantes basées sur le moteur de base de donnéesMicrosoft Jet. Ils vous permettent également de gérer des bases de données(notamment Acces puisque cet outil est basé du Microsoft Jet) , ainsi que lesobjets et la structure de ces dernières.

- Accéder au modèle objet d’une base de données supportant les DAO dans unmodule VBA 0. Ne pas oubliez de référencer la bibliothèque d’objets DAO 3.5 (Direct Access Object) dans le projet en cours1. Appliquez les propriétés et les méthodes à l'objet contenu dans la

variableDans l’exemple ci-dessous on accède au fichier MaBase.mdb, et on consulteles enregistrements de la table MaTable. Les champs de la table MaTablesont MonChamp1 et MonChamp2. Lorsque la valeur de MonChamp1 est 1 alors onmet la chaine de caractère ‘’E’’ dans le champ MonChamp2.

Public Mydb As Database ‘Pointeur vers une base de données

Public MyContenu As Recordset ‘ Pointeur vers une table d’une base de données

Set Mydb = OpenDatabase(“MaBase”) ‘ Pointer vers la base de donnée MaBase durépertoire courant

Set MyContenu = Mydb.OpenRecordset("MaTable") ‘ Pointer la table MaTableMyContenu.MoveFirst ‘ Se positionner sur le premier

enregistrement de la tableDo Until MyContenu.EOF ‘ Tant qu’il y a des

enregistrement, pour l’enr courant If MyContenu![Champ1] = 1 Then MyContenu.Edit ‘ On accède en écriture au Champ2 de l’enregistrement courant

MyContenu![Champ2] = "E"MyContenu.Update ‘ On modifie l’enregistrement

courantEnd IfMyContenu.MoveNext ‘ On passé à l’enregistrement

suivant si il existeLoop

Page 18 sur 34

13. Le modèle objet AccesLe principe est le même que pour Excel, en remplacant Excel par Access dansles déclarations de objets concernés (Acces.Application par exemple).

Ensuite, il faut maîtriser le modèle objet pour travailler utilement …

Page 19 sur 34

Etude de cas

Nous souhaitons mettre en place un outils EXCEL dans lequel un utilisateurnon-expert en informatique doit etre capable de faire des calculs deconversion entre différentes monnaies. Nous allons détaillé dans la suite decet exposé, la construction d’un tel outil basé sur les concepts définis dansla cours VBA.

1. Création du fichier EXCEL

- Création d’une feuille nommée « 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 payssélectionné ». Grisez la case E4 pour indiquer à l’utilisateur l’endroit oùil doit saisir la valeur en francs. Insérez un bouton que vous placerez etnommerez comme indiqué sur la figure ci-dessous.

- Création d’une feuille nommée « Cours »

Dans la case B1, saisissez Allemagne, et dans la case C1, saisir la valeur de1 DM en francs. Dans la case B2, saisissez Angleterre, et dans la case C2,saisir la valeur de 1 £ en francs. Répétez l’opération précédente pour vousconstituer un jeu d’essai suffisamment représentatif.

Page 20 sur 34

Enregistrer votre fichier EXCEL dans un répertoire TEST sous le nom TEST.XLS

2. Construction de l’interface graphique de choix du pays

- Ouverture de VBE

Ouvrir VBE avec les menus Outils/Macros/Visual Basic Editor

- Ouverture d’une fenêtre graphique et placement des objets d’interface

Sélectionnez le menu Insertion/UserForm pour insérer une nouvelle UserFormdans notre projet. Rappelons que UserForm correspond à une fenêtre de notreinterface graphique. Une nouvelle fenêtre apparaît, avec une fenetre griséevide de tout objet. C’est dans cette fenêtre que nous allons définir notreinterface graphique.

Page 21 sur 34

Nommons notre Userform avec un nom plus significatif. A la place deUserForm1, sur la ligne (Name) de la fenêtre Propriétés, saisissez ChoixPays.Votre UserForm s’appelle donc maintenant ChoixPays.

Plaçons un objet Bouton dans notre UserForm ChoixPays . Cliquez dans la boiteà outils sur le contrôle Bouton, et faites un Drag and Drop sur la fenêtreChoixPays. Viens se placer un bouton s’appelant CommandButton1. De la mêmemanière que pour le nom de la Userform1, nous allons changer la valeur de(Name) pour le CommandButton1, en remplaçant ce terme dans le fenêtrePropriétés par Btn_OK. Pour faire apparaître OK comme message écrit àl’intérieur du bouton, sélectionnez la propriété Caption de l’objet Btn_OK,et saisissez OK comme valeur de cette propriété.

Remarquez que lorsque vous sélectionnez un objet de votre environnement VBA, les propriétéscorrespondantes à cet objet apparaissent dans la fenêtre propriétés.

Placez maintenant un objet Zone de liste modifiable. Appelez cet objetListePays. Saisissez dans la propriétés BoundColumn la valeur 0, indiquantque le résultat renvoyé par la propriété Value, sera l’index du pays choisidans l’ordre d’insertion dans la liste. Placez ensuite un objet Intitulé, etsaisissez dans la propriété Caption, le texte « Choisir un Pays, et cliquezsur OK pour revenir à Excel ». Ajustez les tailles de ces objets et de lafenêtre pour obtenir une configuration équivalent à la figure 4.

Page 22 sur 34

3. Construction de la Macro d’activation de cette fenêtre graphique dans Excel

Il nous faut maintenant activer l’affichage de cette interface graphiqueChoixPays lorsque l’utilisateur clique sur le bouton « Choisir un Pays » dela feuille de donnée » Change ». Pour y parvenir, nous allons créer uneprocédure Sub sans paramètre que nous allons stocker dans un Module pourqu’elle soit accessible depuis n’importe quel endroit de notre projet.Insérons un nouveau module, en sélectionnant les menus Insertion/Module del’environnement VBA. Une nouvelle fenêtre apparaît. C’est dans cette fenêtreque nous allons créer notre procédure Afficher_IG_ChoixPays. Saisissez letexte Public Sub Afficher_IG_ChoixPays dans cette nouvelle fenetre et appuyezsur la touche Entrée de votre clavier. Automatiquement, apparaît la structurevide de votre nouvelle procédure, comme le montre la figure 5

Page 23 sur 34

Il ne vous reste plus qu’à insérer le code de votre procédure entre le Sub etle 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 ?

L’instruction « Dim i As Integer » permet de déclarer une variable de typeentier qui ne sera accessible que dans cette procédure. L’instruction « ChoixPays.ListePays.Clear » permet d’activer la méthode Clear de l’objetZone de liste modifiable ListePays qui se trouve dans le userform ChoixPaysde notre projet. Cette méthode vide le contenu de la zone de listemodifiable. Nous trouvons ensuite une boucle qui scrute les valeurs des casesBi (avec i initialisé à 1) et qui s’arrêtera lorsque la valeur trouvée seraégale à « vide ». Pour chaque ligne non vide trouvée, on insère grace à laméthode AddItem de l’objet ListePays la valeur de la case Bi. De cettemanière, on charge la zone de liste avec les valeurs stockées dans la feuilleCours. Une fois ce chargement effectué, l’instruction « ChoixPays.Show »permet d’activer la méthode Show de l’objet ChoixPays qui fait apparaître àl’écran la fenetre ChoixPays.

Page 24 sur 34

La procédure est écrite, il nous reste à la faire exécuter lorsquel’utilisateur clique que le bouton « Choisir un pays » dans la fenêtre« Change ». Il faut revenir dans l’environnement Excel, et cliquez avec lebouton droite de votre souris sur l’objet Bouton. Sélectionnez alors l’option« Affecter une macro ». Apparaît alors une fenetre dans laquelle vous devezretrouver le nom de la procédure que l’on vient d’écrire dans VBA, à savoirAfficher_IG_ChoisPays. Sélectionnez cette procédure et cliquez sur OK.

4. Construction d’une procédure de calcul du change

Il faut maintenant créer la procédure qui va calculer la valeur de la sommeen francs dans la devise choisie. Comme précédemment, nous allons créer unenouvelle procédure, qui sera cette fois ci une procédure Function,, quipermet de renvoyer un résultat. Saisissez le code

Public Function Calcule(ByVal Montant As Double, ByVal taux As Double) As DoubleCalcule = Montant / taux

End Function

Rappelons que ByVal permet de passer un paramètre par valeur. Cette fonctionrenvoie donc la valeur de Montant dans la devise correspondant au taux dechange Taux.

5. Construction de la procédure événementielle « Click sur le bouton Btn_OK »

Nous devons maintenant écrire le code correspondant au déclenchement del’événement Click du bouton Btn_OK. Dans ce code, il nous faudra récupérerles valeurs de la somme à changer, du pays, activer la fonction Calcule etrenvoyer le résultat de cette fonction dans les cases Excel appropriées.Pour trouver la procédure Click du bouton Btn_OK, cliquez avec le boutondroit de la souris sur l’objet Btn_OK et sélectionnez l’option Code. Unefenetre apparaît. Sélectionnez alors la méthode Click et apparaitraautomatiquement le code :

Private Sub Btn_OK_Click()End Sub

Placez dans cette procédure le code suivant :

Dim MonMontant As DoubleDim MonTaux As Double

Page 25 sur 34

MonMontant = ThisWorkbook.Worksheets("Change").Range("E4").ValueMonTaux = 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)).ValueThisWorkbook.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 déclarer des variables de type réelles codées sur 8 octets. Cesvariables sont internes à la procédure. L’instruction MonMontant =ThisWorkbook.Worksheets("Change").Range("E4").Value permet de stocker dans lavariable MonMontant le contenu de la case E4 de la feuille « Change » duprojet Excel. L’instruction ChoixPays.ListePays.Value permet de récupérer lerang du pays sélectionné dans la liste des pays (premier pays, valeur 0,deuxième pays, valeur 1, …).

L’instruction ChoixPays.Hide permet de cacher la fenêtre ChoixPays.

Notez l’appel à la fonction Calcule, créée précédemment.

Page 26 sur 34

Le code que nous venons d’écrire ne permet pas de tester toutes les erreurs. Si vous saisissez par exempleTOTO dans la case E4, le programme ne s’exécutera pas correctement. Il faudrait prendre en compte tousces cas de figures pour obtenir un résultat professionnel …

Page 27 sur 34

6. Mise à jour des valeurs de change à partir d’Access

Nous souhaitons dans cette partie, récupérer dans Excel, les valeurs dechange stockée dans une base de données.

- Construction de la base de données

Nous supposerons que nous avons à notre disposition, dans le répertoire TEST,une base de donnée Access, dans laquelle nous avons une table CoursChange.Cette table est composée des champs NomPays, CoursChangePays. La figure ci-dessous nous donne une vue de cette base de donnée sous Access.

- Ajout de la référence DAO 3.6 dans le projet Excel

Pour ajouter cette référence, il faut sélectionner les menusOutils/Références et sélectionnez Microsoft DAO 3.6 Object Library commeindiqué sur la figure ci-dessous :

Page 28 sur 34

Après avoir cliqué sur OK, nous avons maintenant accès dans notreenvironnement Excel, aux objets de manipulation de bases de données baséessur le moteur Microsoft Jet. Access en faisant partie, nous allons pouvoiraccéder au contenu d’une base Access.

- Construction de la macro de chargement des cours de change d’Acces vers Excel

Dans le module Module1 que nous avons créé précédemment, nous allons rajouterune nouvelle procédure intitulée Charger_Cours sans paramètre, doncdirectement appelable depuis un bouton d’une feuille Excel.

Saisissez le code suivant dans cette procédure :

Public Sub Charge_Cours()

Dim Mydb As DatabaseDim MyContenu As RecordsetDim i As Integer

Set Mydb = OpenDatabase("Test")Set MyContenu = Mydb.OpenRecordset("CoursChange")i = 1MyContenu.MoveFirstDo 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.MoveNextLoop

Page 29 sur 34

Mycontenu.close

End Sub

A quoi correspond ce code ?

Les variables  « Mydb » et « MyContenu » pointe respectivement vers la basede données « Test.mdb » stockée dans le même répertoire que le projet Excelet la table « CoursChange » de cette base. Les méthodes « MoveFirst »,« MoveNext » permettent de se déplacer dans les enregistrements de la table,l’instruction « MyContenu ![NomPays] » permet de récupérer la valeur duchamps NomPays pour l’enregistrement courant.

Il nous faut maintenant rajouter dans la feuille Excel « Cours » un boutonque l’on associera à la procédure Charge_Cours et que l’on nommera « MAJ desCours »

Testez différentes modifications dans la base de données, et cliquez sur lebouton pour constater la mise à jour des valeurs sous Excel.

Bon courage !!

Page 30 sur 34