Académique Documents
Professionnel Documents
Culture Documents
PROGRAMMATION EN VBA(*)
POUR EXCEL
U.F.R. DINFORMATIQUE
Christine MARTIN
Anne 2012-2013
Le VBA (Visual Basic pour Application) est un langage de programmation permettant dutiliser du
code dont la syntaxe est proche du langage Visual Basic pour excuter les nombreuses
fonctionnalits notamment des applications Microsoft Office et par exemple de lApplication EXCEL
que vous tes amens utiliser frquemment dans votre spcialit.
Crer des programmes en VBA permet notamment dautomatiser des tches rptitives ralises
sous EXCEL grce la possibilit de manipuler les objets propres
Excel (Classeurs, feuilles, cellules, ), de stocker de linformation, deffectuer des instructions sous
conditions et, ventuellement, plusieurs reprises en fonction dun ou plusieurs critres.
Le langage VBA permet galement de contrler la quasi-totalit de l'IHM1 notamment dExcel, ce qui
inclut la possibilit de manipuler les fonctionnalits de l'interface utilisateur comme les menus, les
barres d'outils et le fait de pouvoir personnaliser les botes de dialogue et les formulaires utilisateurs.
Cela permet notamment de rendre une application dveloppe sous EXCEL plus conviviale.
Il permet enfin de contrler une application partir d'une autre (par exemple, crer
automatiquement un document WORD partir de donnes sous EXCEL).
Ce document organis en sections constitue une synthse des possibilits offertes par la
programmation en VBA sous Excel.
1
Interface Homme-Machine : c'est--dire tous les mdias qui permettent un utilisateur dinteragir avec la
machine
1.2.6 Excuter directement dans VBE une procdure sans argument ................................................... 13
Un programme crit en VBA est souvent appel, par abus de langage, une macro.
Dans un premier temps, une macro peut tre cre en utilisant l'enregistreur de macros, qui ne
ncessite aucune connaissance du langage VBA.
Lenregistreur de macro est un outil accessible notamment sous Excel et permettant dcrire du code
VBA partir doprations effectues manuellement dans lapplication.
A limage dune camra, toute la squence d'actions effectues entre le dbut et la fin de
l'enregistrement est traduite en instructions VBA et stocke dans une procdure VBA sans
arguments, qui pourra tre excute nouveau l'identique.
Une procdure est un ensemble dinstructions VBA identifis par un nom et ne renvoyant pas de
valeur.
L'enregistreur de macro sous Excel (Outils / Macro / Nouvelle Macro) permet donc de gnrer
facilement du code VBA et de dcouvrir les mots cls et syntaxes employer pour crire ensuite
directement ses propres programmes.
1) Paramtrage de la macro
La fentre prsente en
Figure 1 apparat lcran et vous permet de paramtrer la macro qui va tre cre c'est--dire :
de prciser son nom dans le champ : Nom de la macro,
de prciser quel classeur elle sera rattache par lintermdiaire du menu droulant Enregistrer
la macro dans,
dy associer si besoin un raccourci clavier afin de faciliter son lancement futur : Touche de
raccourci
Ce classeur,
Nouveau classeur,
Classeur de macros personnelles.
2) Lancement de lenregistrement
Une fois votre macro paramtre suivant vos besoins, Cliquer sur le bouton OK.
Lenregistrement est alors lanc et partir de l tout les actions que vous fates dans Excel sont
enregistres, traduites en code VBA puis sauvegardes dans une procdure portant le nom que vous
avez spcifi ltape prcdente. Par exemple Macro1 comme indiqu dans la
Figure 1.
Cette fentre permet galement de dterminer le mode suivant lequel les cellules seront
considres dans le programme final.
Soit on a une vision absolue : par exemple on considre la cellule A1 qui a une position
dtermine dans une page de calcul Excel
Soit on a une vision relative : on veut par exemple quune action soit faite toujours 2 cellules
en dessous de celle slectionne ce moment l.
Par ailleurs, les cellules dans une macro sont identifies laide dune lettre (colonne) suivie dun
chiffre (ligne), comme par exemple la cellule A1. Aussi et afin de faciliter la lecture du code VBA
gnr, il est prfrable de choisir la mme identification des cellules dans le classeur dans lequel est
enregistr la macro. Si tel nest pas le cas, activer la commande OUTILS OPTIONS, cliquer sur l'onglet
GENERAL et dcocher la case STYLE DE REFERENCE L1C1.
3) Arrt de l'enregistrement
Une fois que vous avez ralis toutes les actions que vous souhaitiez enregistrer pour les rejouer
ultrieurement, larrt de lenregistrement se fait en cliquant sur le carr bleu de la barre d'outils
ARRET DE L'ENREGISTREMENT (Figure 2).
Attention : noubliez pas darrter lenregistrement dune macro ! Dans le cas contraire vos actions
continueraient tre enregistres et vous ne seriez pas en mesure de relancer cette macro.
Lenregistreur de macro permet de manire rapide et simple de crer des macros. Cependant une
macro ainsi cre ne sexcutera que sur un ensemble de cellules donnes et possdera des
fonctionnalits limites. Pour pouvoir crer des macros propres ses besoins, efficaces et
interactives, la connaissance du langage VBA est ncessaire et il sera prsent dans les sections
suivantes.
Dans lexemple prsent en Figure 3, seule la macro nomme Macro1 est disponible.
Pour cela on dispose sous Excel dun environnement spcifique appel Visual Basic Editor qui
sexcute dans une fentre diffrente de celle dEXCEL.
Cet environnement permet de modifier des codes existants (produits par exemple par lenregistreur
de macros), de crer de nouveaux programmes from scratch (ex nihilo, partir de rien),
dorganiser ses programmes suivants leurs rles dans des modules, de crer des procdures et
fonctions (ensemble dinstructions identifies par un nom unique et renvoyant une valeur, qui
pourront tre communes diffrents programmes ou utilisables directement dans les feuilles de
calcul, (cf. section 3.2)
Lenvironnement souvre :
Figure 4 : Barre d'Outils Visual Basic (licne entoure permet de lancer VBE)
Dans les deux cas de figure, la fentre prsente en Figure 5 souvre et vous donne accs de
nouvelles fonctionnalits.
Les particularits de ces zones sont dtailles dans les sections suivantes.
Un programme est une suite dinstructions. Une instruction excute une tche prcise. Elle est
gnralement crite sur une seule ligne.
Exemple :
Range("A1").Select
Lenregistreur de macro ne gnre que des procdures sans arguments. Une procdure commence
par le mot cl Sub suivi du nom de la procdure et dune liste darguments entre parenthses, qui
peut tre vide. Elle se termine par le mot cl End Sub. Une procdure a la syntaxe suivante :
Par exemple, dans la Figure 6, la fentre daffichage de modules de codes affiche le module nomm
Module1 (cf. bandeau de la fentre). Ce module contient une seule macro nomme Macro1 (terme
suivant le mot cl Sub).
Lorsque cette macro est lance on observe donc dans Excel le rsultat suivant :
Compte tenu de la syntaxe fournie ci-dessus, pour crer une nouvelle procdure directement dans
VBE (sans passer par lenregistreur de macros), il suffit de taper dans lditeur de texte de VBE, dans
un module de code et en dehors de toute autre procdure, le mot cl Sub suivi du nom que vous
voulez attribuer votre macro, par exemple PrintValue, puis des parenthses avec lintrieur les
paramtres associs cette procdure. Lorsque vous passez la ligne, le mot cl End Sub de fin de
procdure est automatique rajout. Vous navez alors plus qu la complter en fonctions de la tche
quelle doit remplir.
Pour utiliser une procdure dans une autre, il faut utiliser le mot cl Call suivi du nom de la
procdure que lon souhaite utiliser.
Par exemple, ci-dessous, la procdure PrintValue est utilise dans la procdure TestPrintValue.
Sub TestPrintValue()
Call PrintValue(1.22)
End Sub
Remarque : Seules les procdures sans arguments sont excutables directement par les menus ou
icnes. Toute procdure ayant des arguments devra donc tre appele dans une autre procdure
pour pouvoir tre excute. Dans lexemple prcdent et en labsence dautres procdures, la
procdure PrintValue ne pourra tre excute que par lintermdiaire de la procdure
TestPrintValue.
Pour supprimer une procdure directement dans VBE, il vous suffit dans lditeur de slectionner le
texte correspondant depuis le mot cl Sub jusquau mot cl End Sub et de le supprimer.
Dans la Figure 8, on peut constater quun module est uniquement caractris par un nom que lon
peut modifier par simple saisie dans cas se situant droite du mot cl (Name).
1.2.4 Sauvegarde
Pour que les programmes produits soient conservs, il faut les sauvegarder laide de la commande :
FICHIER/ENREGISTRER ou le raccourci clavier CTRL+S.
L'explorateur de projets (partie en haut gauche de la fentre VBE (cf. Figure 5) affiche une liste
hirarchise des diffrents projets VBA associs aux classeurs EXCEL ouverts (cf. Figure 9).
Un projet VBA associ un classeur regroupe les lments du classeur, comme ses feuilles de calcul,
les procdures et les fonctions associes ce classeur et stockes dans un ou plusieurs modules de
code.
Par exemple, le projet VBA associ au classeur TEST-MACRO.XLS visible en Figure 9 est compos de
deux dossiers :
le dossier MICROSOFT EXCEL OBJETS qui contient les lments attachs au projet : le classeur TEST-
MACRO.XLS (THISWORKBOOK) et ses feuilles de calcul FEUIL1, FEUIL2 et FEUIL3 ;
le dossier MODULES qui contient les modules de code du projet : le module MODULE1 qui contient
la macro MACRO1.
Figure 10 : Fentre ouverte par clic droit sur l'explorateur de projets dans VBE
Louverture dun module de code peut galement se faire par double-click sur celui-ci dans
lexplorateur de projets.
On peut insrer autant de modules de code quon le dsire en fonction des besoins recenss. Dans la
pratique, on cherche regrouper dans un mme module tous les lments de programmes qui se
rapportent un ensemble de fonctionnalits donn. Par exemple, si lon cre des fonctions de calcul
mathmatiques, on les regroupera dans un mme module que lon pourrait nommer Maths.
Les procdures avec arguments et les fonctions ne peuvent tre excutes que par dautres
procdures ou fonctions et n'apparaissent pas dans la liste des macros de la bote de dialogue MACRO
(commande OUTILS MACRO MACROS de EXCEL).
Pour excuter une procdure sans argument, positionner le curseur dessus et activer la commande
Pour arrter l'excution dune procdure sans argument si une erreur survient, utiliser la
Le langage de programmation VBA dpend de lapplication MICROSOFT OFFICE laquelle il est attach
(WORD, EXCEL, ACCESS...).
Chaque application de MICROSOFT OFFICE possde un ensemble dobjets clairement dfinis, organiss
en fonction des relations qui les unissent. Cette organisation sappelle le modle objet de
lapplication. Comme nous le dtaillerons dans les sections suivantes, dans EXCEL, les objets
manipuls sont des classeurs, des feuilles de calcul, des plages, des cellules...
Exemple dobjets :
EXCEL est un objet Application ;
un classeur est un objet Workbook ;
une feuille de calcul est un objet Worksheet ;
une plage de cellules (qui peut se limiter une cellule) est un objet Range.
Exemple de collections :
Dans lobjet Application, il existe une collection Workbooks qui contient tous les objets
Workbook ouverts.
Chaque objet Workbook comporte une collection Worksheets qui contient tous les objets
Worksheet de ce classeur.
Par exemple, pour faire rfrence une plage de cellules donne, il faut utiliser lobjet Range.
Pour faire rfrence un objet dans une collection, on peut soit utiliser le numro de sa position
dans la collection, soit son nom.
Exemple :
Pour faire rfrence une proprit dun objet donn, il faut utiliser la syntaxe Objet.Proprit.
Exemple :
La proprit ActiveCell de lobjet Application renvoie un objet Range, qui fait rfrence la
cellule active de la feuille de calcul.
ActiveCell.Font.Bold = True permet daffecter le style gras la cellule slectionne (Font est une
proprit de lobjet Range qui retourne un objet Font contenant les attributs de police (taille,
couleur, style, ...) de lobjet Range. Bold est une proprit boolenne de lobjet Font qui
correspond au style gras).
Remarque : La proprit ActiveCell ne permet de faire rfrence qu une seule cellule, alors que la
proprit Selection permet de faire rfrence une plage de cellules.
Pour faire rfrence une mthode dun objet donn, il faut utiliser la syntaxe Objet.Mthode
analogue la syntaxe daccs aux proprits des objets.
Exemple :
La mthode Select de lobjet Range permet de slectionner une cellule ou une plage de cellules.
Range("A1").Select slectionne la cellule A1.
WorkSheetFunction.Min()
Attention : Toutes les fonctions intgres dEXCEL ne sont pas disponibles dans VBA ! Nanmoins, il
est fortement conseill dutiliser une fonction intgre dEXCEL pour faire un calcul donn, si cette
dernire existe, plutt que de dfinir sa propre fonction, qui serait moins efficace en terme de temps
de calcul.
Pour quun objet rponde un vnement, il faut crire du code VBA dans la procdure associe
lvnement considr. Ces procdures sont stockes dans les modules de codes associs aux objets
concerns.
Pour cela, lexplorateur dobjets recense lensemble des objets disponible dans VBA, leurs proprits,
leurs mthodes et les vnements qui leur sont associs.
Le premier menu droulant (cf. Figure 11) en haut gauche (zone PROJET/BIBLIOTHEQUE) permet de
slectionner le projet ou la bibliothque dobjets de son choix pour restreindre le champ des
recherches. Vous pouvez par exemple ne slectionner que la bibliothque EXCEL afin de ne
La zone de saisie qui se situe juste en dessous (RECHERCHER TEXTE) permet de rechercher un lment
(objet, proprit, fonction, vnement) dans lespace dfini dans le menu prcdent. Taper llment
recherch et appuyer sur la touche ENTREE. Le rsultat de la recherche saffiche dans la zone
RESULTATS DE LA RECHERCHE qui se situe dans la partie basse de la fentre.
Double cliquer sur lobjet voulu dans la colonne CLASS (le membre dans la colonne MEMBRE) de la
zone RESULTATS DE LA RECHERCHE, pour le voir apparatre dans la zone CLASSES (la zone MEMBRES) situe
en dessous.
La zone CLASSES affiche lensemble des objets disponibles dans la bibliothque slectionne.
La zone MEMBRES contient lensemble des membres de lobjet slectionn dans la zone CLASSES. Les
membres dun objet sont par dfaut classs par ordre alphabtique. Pour les classer par catgorie
(proprits, mthodes et vnements), cliquer sur le bouton droit de la souris dans la zone MEMBRES
et choisir loption MEMBRES DU GROUPE.
Des icnes permettent de distinguer les objets, les proprits, les mthodes et les vnements.
La zone DETAILS situe en dessous de la zone CLASSES affiche un bref descriptif de llment
slectionn dans la zone CLASSES ou dans la zone MEMBRES.
Pour obtenir de laide sur un objet ou un membre, slectionner cet objet dans la zone CLASSES ou ce
membre dans la zone MEMBRES et cliquer sur la touche F1.
Pour connatre, par exemple les fonctions intgres dEXCEL lies lobjet Feuille de calcul et
disponibles dans VBA (cf. section 2.5.1), activer la commande AFFICHAGE EXPLORATEUR D'OBJETS dans
lditeur de Visual Basic et rechercher parmi les membres de lobjet WorkSheetFunction.
La Figure 12 prsente une vue des rsultats propos par lexplorateur dobjets pour cette recherche.
1) Utiliser lenregistreur de macro pour dcouvrir les instructions VBA ncessaires pour accomplir
une opration donne.
Une bonne mthode pour apprendre se servir de VBA et dcouvrir de nouvelles instructions
est de :
tout d'abord enregistrer la squence des actions dont on souhaite connatre les instructions
correspondantes (cf. section 1.1.1)
puis excuter pas pas (touche F8) dans l'outil VBA afin de savoir les actions effectues par
chacune des lignes de code et de sen servir par exemple pour crire, modifier ou complter
un programme.
2) Utiliser lexplorateur dobjets pour dcouvrir les objets disponibles dans VBA et les proprits,
mthodes et vnements qui leur sont associs.
3) Utiliser la touche F1 pour obtenir de laide sur un objet, une proprit, une mthode ou un
vnement, dans un module de code ou dans lexplorateur dobjets.
Une variable permet de stocker une valeur pouvant tre modifie au cours de lexcution dun
programme.
Syntaxe :
Dim NomVariable
o NomVariable est une suite de caractres forms avec des lettres, des chiffres et le caractre
soulign _.
Le premier caractre est obligatoirement une lettre. Les minuscules sont distingues des majuscules.
En VBA la dclaration des variables nest, par dfaut, pas obligatoire. Nanmoins, il est prfrable de
forcer la dclaration explicite des variables notamment pour faciliter le contrle du comportement
du programme et traquer les erreurs de frappe trs frquentes en programmation.
Exemple :
Sub MacroTestVariable()
valeur = Range("A1").Value
Range("B1").Value = valleur
End Sub
En effet, dans lexemple prcdent, quelle que soit la valeur de la cellule A1, cette macro ncrira rien
dans la cellule B1. Pourtant VBA ne dtecte aucune erreur dans le code. Il considre quil y a deux
variables distinctes valeur et valleur.
Il est donc prfrable de forcer la dclaration explicite des variables en VBA. Pour ce faire, il suffit de
placer linstruction Option Explicit en haut (en premire ligne) des modules de code avant toutes
procdures et toutes fonctions.
Option Explicit
Sub MacroTestVariable()
valeur = Range("A1").Value
Range("B1").Value = valleur
End Sub
Pour ajouter automatiquement linstruction Option Explicit tous les nouveaux modules de code
crs, activer la commande OUTILS OPTIONS..., cliquer sur longlet EDITEUR et cocher la case
DECLARATION DES VARIABLES OBLIGATOIRE.
La plupart des langages de programmation imposent de dterminer le type de donnes qui peut tre
stocke dans une variable lors de sa dclaration. En VBA, ce nest pas obligatoire.
Par dfaut, une variable non type est du type Variant, qui permet de stocker nimporte quel type de
donnes.
Dans un souci defficacit du code, il est prfrable de typer ses variables. Une variable de type
Variant prend, en effet, plus de mmoire que nimporte quel autre type et utilise plus de ressource
systme pour son traitement (identification du type effectif de la variable et ventuellement
conversion).
Dim NomVariable As Type o Type dtermine le type de la valeur qui peut tre stocke dans la
variable.
Les diffrents types de donnes disponibles en VBA sont les suivants (cf. aide en ligne de VBA,
commande ? SOMMAIRE ET INDEX, onglet SOMMAIRE, option REFERENCE DU LANGAGE VISUAL BASIC) :
Exemple :
Remarque sur linitialisation des variables : Selon leur type, les variables ne sont pas initialises avec
la mme valeur :
La porte dune variable dfinit quelles procdures ou fonctions peuvent utiliser cette variable.
Les variables dclares lintrieur dune procdure ou dune fonction ne sont accessibles qu
lintrieur de cette procdure ou de cette fonction.
Exemple :
Sub InitialiseAge()
Dim Age As Integer
Age = 25
End Sub
Pour quune variable soit accessible lensemble des procdures et des fonctions dun module, elle
doit tre dclare au dbut du module lextrieur de toute procdure et de toute fonction.
Pour quune variable soit accessible lensemble des procdures et des fonctions dun projet, elle
doit tre dclare au dbut dun module lextrieur de toute procdure et de toute fonction,
laide du mot cl Public.
Exemple :
Sub ModifieAge()
Age = 27
End Sub
Exemple :
Linstruction With...End With est utile lorsque les rfrences un objet sont rptes plusieurs fois
dans une petite section de code.
Exemple :
3.2.1 Dfinition
Une fonction est une suite d'instructions qui retourne une valeur. Elle commence par le mot cl
Function suivi du nom de la fonction et dune liste darguments entre parenthses, qui peut tre
vide. Elle se termine par le mot cl End Function.
Attention : Dans VBA, les arguments dune fonction sont spars par des virgules, alors que dans
EXCEL ils sont spars par des points-virgules.
Une fonction indique la valeur retourner en initialisant son nom avec la valeur de retour (cf.
commentaire dans le cadre prcdent).
Par exemple, une fonction fournissant la surface dun cercle tant donn son rayon pourrait scrire
comme suit :
Remarque : On peut typer les arguments dune procdure ou dune fonction et la valeur de
retour dune fonction.
Ici, SurfaceCercle est une fonction ayant un argument : le rayon du cercle Rayon, qui est une
variable de type rel. Elle renvoie la surface du cercle de rayon Rayon, qui est de type rel. Pi est
une fonction intgre dEXCEL.
Attention : Dans VBA les rels sont crits avec des points, alors quils sont crits avec des virgules
dans EXCEL.
Si lon note dans la cellule B6, la formule =SurfaceCercle(A6), et que lon procde de manire
analogue pour les cellules suivantes, on obtient le rsultat suivant :
La fonction SurfaceCercle peut tre utilise comme nimporte quelle fonction intgre dEXCEL
(commande INSERTION FONCTION... puis CATEGORIE DE FONCTIONS : PERSONNALISEES). Par contre, elle
n'apparat pas dans la liste des macros dEXCEL (commande OUTILS MACRO MACROS).
Par exemple, la fonction SurfaceCercle telle que dfinie en section 3.2.1 peut tre utilise dans la
procdure MacroTestFonction dont le code est fourni ci-dessous.
Sub MacroTestFonction()
Dim valeur As Double
valeur = SurfaceCercle(1.5)
Range("B1").Value = valeur
End Sub
Ici la variable valeur reoit le rsultat de la function SurfaceCercle pour un rayon donn gal 1.5.
Syntaxes :
Dans une structure de bloc If, il faut imprativement aller la ligne aprs le Then.
Lorsque le bloc If contient une ou plusieurs sections ElseIf, les diffrentes conditions sont testes
jusqu ce quune soit value vraie. Si aucune condition nest vrifie, les instructions de la section
Else, si elle existe, sont excutes. Si aucune condition nest vrifie et si la section Else nexiste pas,
le bloc If ne fait rien.
VBA offre la possibilit dutiliser les oprateurs logiques suivants : Or, Xor (ou exclusif), And, Not.
Exemple :
La boucle Do...Loop
La boucle Do...Loop est utilise lorsque lon veut que la rptition des instructions sarrte quand
une condition donne est vrifie. On distingue plusieurs syntaxes possibles.
Avec ces deux boucles, les instructions peuvent ne jamais tre excutes. Pour quelles soient
excutes au moins une fois, on peut utiliser lune des deux syntaxes suivantes :
La boucle For...Next est utilise lorsque lon connait lavance le nombre de fois o lon veut que les
instructions soient rptes.
Les instructions de la boucle For...Next sont excutes un nombre dtermin de fois. Lorsque
loption Step nest pas renseigne, le compteur est incrment de 1 chaque itration et les
instructions sont excutes nbdbut - nbfin fois.
Exemple :
Sub SommeEntiers()
Dim somme As Integer
Dim compteur As Integer
Dim n As Integer
n = Range("A1").Value
For compteur = 1 To n
somme = somme + compteur
Next compteur
Range("A2").Value = "Somme des " & n & " premiers entiers : "
Range("B2").Value = somme
End Sub
Exemple :
Exemple :
Sub ColorieCellule()
Dim MaPlage As Range
Dim Cellule As Range
Dim i As Integer
Set MaPlage = Range(A1:B5)
For Each Cellule In MaPlage
Cellule.Interior.ColorIndex = i
i = i + 1
Next Cellule
End Sub
Exemples :
Exit Do, Exit For, Exit Function, Exit Sub,
La boucle suivante sarrte lorsque la rponse rep est n ou N :
Do
Rep = InputBox( Voulez-vous continuer ? (O/N) )
If Lcase(rep) = n Then Exit Do
Loop
La fonction InputBox permet de crer une bote de dialogue. Pour plus dinformations ce sujet
reportez-vous au Tutoriel : Les entres et sorties standards page 32.
Un vnement, comme dfini en section 2.6, est une action reconnue par un objet. La
reconnaissance dun vnement par un objet permet de dclencher lexcution dune procdure
lorsque cet vnement survient. Un clic souris ou la frappe dune touche au clavier sont des
exemples dvnements qui peuvent tre interprts par du code VBA.
Nous verrons plus loin que les contrles placs dans une bote de dialogue (boutons de commande,
zones de texte, ...) peuvent rpondre des vnements. Les classeurs et les feuilles de calcul peuvent
galement rpondre des vnements.
Pour quun objet rponde un vnement, il faut crire du code VBA dans la procdure associe
lvnement considr.
Lobjectif de ce tutoriel est dcrire une procdure qui dtecte chaque nouvelle plage de cellules ou
cellule slectionne par lutilisateur dans la feuille de calcul FEUIL1 du classeur nomm ici pour
lexemple TEST-MACRO.XLS et colorie son fond en bleu.
identifier lobjet dont on veut traiter lvnement. Dans notre cas, il sagit de la feuille de calcul
FEUIL1 qui est un objet Worksheet ;
puis identifier lvnement traiter dans la liste des vnements associs lobjet considr.
Dans notre cas, on sintresse chaque nouvelle slection dune plage de cellules ou cellule dans
la feuille de calcul, ce qui correspond lvnement SelectionChange ;
enfin, crire le code VBA appropri dans la procdure associe lvnement choisi.
1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic (activer la commande AFFICHAGE
BARRE D'OUTILS VISUAL BASIC et cliquer sur l'objet VISUAL BASIC EDITOR).
2) Dans lexplorateur de projets, slectionner la feuille de calcul FEUIL1 et ouvrir son module de code
laide du clic droit de la souris et de loption CODE.
3) Dans la liste de gauche au sommet du module de code, slectionner loption WORKSHEET. Dans la
liste de droite au sommet du module de code, slectionner lvnement SELECTIONCHANGE.
On veut prsent crire les instructions VBA permettant de colorier le fond dune cellule ou dune
plage de cellules en bleue. Pour trouver ces instructions, il existe deux possibilits :
Le moyen le plus facile pour dcouvrir les instructions ncessaires pour accomplir une opration
donne consiste utiliser lenregistreur de macro.
4) Aller dans EXCEL et enregistrer une nouvelle macro MacroCouleurFond qui permet de modifier la
couleur de fond dune cellule.
La proprit Interior dun objet Range renvoie un objet Interior qui correspond la couleur de
fond dune plage de cellules.
La proprit ColorIndex dun objet Interior permet de dterminer la couleur de fond.
Pour obtenir de laide sur un objet, une proprit ou une mthode donne, slectionner dans le
code cet objet, cette proprit ou cette mthode et appuyer sur la touche F1.
6) Retourner dans le module de code associ la feuille de calcul FEUIL1 et complter la procdure
Worksheet_SelectionChange comme suit :
Target.Interior.ColorIndex = 41
End Sub
La variable Target qui est un objet Range reprsente la plage de cellules ou cellule slectionne par
lutilisateur dans la feuille de calcul FEUIL1.
7) Enregistrer la procdure et retourner dans EXCEL pour la tester (slectionner une plage de cellules
ou cellule et vrifier que sa couleur de fond devient bleue).
Dans ce tutoriel sont prsentes deux fonctions dentres/sorties standards de VBA : la fonction
MsgBox et la fonction InputBox.
1 La fonction MsgBox
La fonction MsgBox affiche un message dans une bote de dialogue, attend que l'utilisateur clique
sur un bouton, puis renvoie un entier indiquant le bouton choisi par l'utilisateur. Elle a la syntaxe
suivante (les arguments entre crochets sont facultatifs) :
MsgBox(prompt[,buttons][,title][,helpfile, context])
o prompt est le message affich dans la bote de dialogue, buttons correspond au type de boutons
de la bote de dialogue et title est le titre de la bote de dialogue (cf. aide en ligne de lditeur de
Visual Basic laide de la touche F1.).
2) Insrer un nouveau module de code laide de la commande INSERTION MODULE et saisir la macro
suivante :
Sub MacroTestMessage()
End Sub
3) Excuter la macro laide de la commande EXECUTION EXECUTER SUB/USERFORM ou cliquer sur licne
Les valeurs des arguments de la fonction MsgBox peuvent tre spcifies de deux manires : par
position ou par nom.
Exemple :
Cette instruction peut tre rcrite par nom en spcifiant les valeurs des arguments par nom comme
suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil"). Dans ce cas, comme dans lexemple
prcdent, il faut utiliser le signe := entre le nom de largument et sa valeur.
Lordre entre les arguments na alors plus dimportance et il ny a pas besoin de virgules
supplmentaires pour les arguments manquants.
Sub MacroTestMessage2()
Call MsgBox(prompt:="Avez-vous pass une bonne journe? ", Buttons:=4, Title:="Accueil !")
End Sub
Largument Buttons:=4 permet dafficher les boutons Oui et Non. Au lieu dutiliser la valeur
numrique 4 pour largument Buttons, on aurait pu utiliser la constante associe vbYesNo (cf. aide
en ligne de lditeur de Visual Basic), qui rend le code plus lisible.
Dans lexemple prcdent, une question est pose lutilisateur, mais sa rponse nest pas
rcupre : on ne sait pas sil a pass une bonne journe. Il se pose alors le problme de rcuprer la
valeur de retour de la fonction MsgBox. Pour ce faire, il ne faut pas utiliser linstruction Call pour
appeler MsgBox mais la syntaxe suivante :
On peut tester la valeur de retour de la fonction MsgBox (cf. aide en ligne de lditeur de Visual
Basic), comme suit :
Sub MacroTestMessage3()
Dim reponse As String
reponse = MsgBox(prompt:="Avez-vous pass une bonne journe? ",
Buttons:=vbYesNo, Title:="Accueil !")
If reponse = vbYes Then
Call MsgBox("Bonjour ! ", , "Accueil")
Else
2 La fonction InputBox
La fonction InputBox affiche une invite dans une bote de dialogue, attend que l'utilisateur tape du
texte ou clique sur un bouton, puis renvoie le contenu de la zone de texte sous la forme d'une chane
de caractre. Elle a la syntaxe suivante (les arguments entre crochets sont facultatifs) :
InputBox(prompt[,title][,default][,xpos][,ypos] [,helpfile,context])
o prompt est le message affich dans la bote de dialogue et title est le titre de la bote de dialogue
(cf. aide en ligne de lditeur de Visual Basic).
Si lutilisateur ne saisit rien dans la zone de texte, la fonction InputBox renvoie la chane de
caractres vide "".
Sub MacroTestDialogue()
Dim reponse As String
reponse = InputBox("Quel age avez-vous ?", "Saisie age")
If reponse = "" Then
Call MsgBox("Vous n'avez pas rpondu la question !", , "Erreur")
Else
Call MsgBox("Vous avez " & reponse & " ans", , "Age")
End If
End Sub
Loprateur & permet de concatner des chanes de caractres. Par exemple, si la rponse donne
par lutilisateur est 22, alors on a :
"Vous avez " & reponse & " ans" = "Vous avez 22 ans"
Les procdures et les fonctions peuvent avoir des arguments. Voici un petit rcapitulatif sur leur
appel avec arguments.
Pour rcuprer la valeur de retour dune fonction, il ne faut pas utiliser linstruction Call pour
lappeler.
Exemple : reponse = InputBox("Quel age avez-vous ?", "Saisie age")
Pour appeler une procdure ou ne pas rcuprer la valeur de retour dune fonction, il faut utiliser
linstruction Call.
Exemple : Call MsgBox("Bonjour ! ", , "Accueil")
Attention : Il ne faut pas mettre despace entre le nom dune fonction ou dune procdure et la
liste de ses arguments placs entre parenthses.
Il existe un autre moyen pour appeler une procdure ou une fonction dont on ne veut pas rcuprer
la valeur de retour : ne pas utiliser linstruction Call et ne pas placer ses arguments entre
parenthses.
Exemple :
Lors de lappel dune procdure ou dune fonction, les valeurs de ses arguments peuvent tre
spcifies par position ou par nom.
Exemple :
Les objets UserForm sont des botes de dialogue dfinies par lutilisateur.
Ce tutoriel explique comment crer une bote de dialogue permettant de saisir les clients dune
entreprise, comme le montre la capture dcran suivante :
2) Pour renommer la feuille de calcul FEUIL1, cliquer avec le bouton droit sur l'onglet FEUIL1, activer la
commande RENOMMER et taper CLIENTS.
Les contrles sont les lments constitutifs dun objet UserForm tels quune case cocher, une
zone de texte, une zone de liste modifiable ou un bouton de commande permettant une intervention
de lutilisateur.
Un contrle est un objet : il possde des proprits, des mthodes et des vnements dfinis.
1) Ouvrir lditeur de Visual Basic et activer la commande INSERTION USERFORM. Un objet UserForm1
apparat, ainsi qu'une bote outils permettant d'ajouter des contrles lobjet.
Dans lexplorateur de projets, les botes de dialogue sont regroupes dans un dossier FEUILLES
objet USERFORM1 qui est un objet de type FEUILLE et qui permet de dessiner une bote de dialogue
Lexplorateur de projets permet dafficher le code dun objet USERFORM laide du clic droit de la
souris et de loption CODE ; ou dafficher lobjet lui-mme laide du clic droit de la souris et de
loption AFFICHER LOBJET.
Intitul
bouton de
commande
On veut crer lobjet UserForm suivant :
Cet objet est compos des contrles suivants : un INTITULE et une ZONE DE LISTE MODIFIABLE pou saisir le
titre du client (Madame, Mademoiselle ou Monsieur), trois INTITULES et trois ZONES DE TEXTE pour saisir
le nom, le prnom et le tlphone du client et deux BOUTONS DE COMMANDE OK et Annuler.
Pour placer un contrle dans lobjet UserForm, cliquer sur lobjet voulu de la BOITE A OUTILS et le
faire glisser vers lobjet UserForm. Ds quun contrle a t plac sur lobjet UserForm, dfinir son
nom grce la proprit NAME.
Attention : Il est recommand dutiliser des noms vocateurs pour ses contrles, qui permettent
didentifier le type dobjet quils reprsentent et leur utilit.
4) Placer les diffrents contrles de lobjet UserForm et modifier leurs proprits comme suit :
Ecrire la procdure qui permet dafficher la bote de dialogue de saisie dun client.
1) Dans lditeur de Visual Basic, activer la commande INSERTION MODULE. Un module de code
MODULE1 souvre. Renommer le ModuleSaisieClients laide de la proprit NAME.
Sub ProgPrincSaisieClients()
Sheets("Clients").Activate activation de la feuille
Clients
FenetreSaisieClients.Show
End Sub
3) Excuter cette procdure (pour fermer la bote de dialogue FenetreSaisieClients, cliquer sur son
bouton de fermeture).
Linstruction Unload ou la mthode Hide sont gnralement places dans les procdures
vnementielles attaches aux boutons de validation de lobjet UserForm, comme par exemple les
boutons de commande OK et Annuler.
Les contrles placs sur un objet UserForm et lobjet UserForm lui mme sont rceptifs aux
vnements utilisateurs qui les affectent (clic souris sur un bouton de commande, saisie d'une valeur
dans une zone de texte). On peut ainsi crer des procdures dites procdures vnementielles, qui
se dclencheront lorsque lvnement correspondant sera repr.
vnement Change : dtect lors de la modification de la valeur (proprit VALUE) dun contrle
(par exemple une zone de texte).
vnement Click : dtect lorsque lutilisateur clique sur un contrle (par exemple un bouton de
commande).
vnement dblClick : dtect lorsque lutilisateur double-clique sur un contrle.
1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets, slectionner lobjet UserForm
de nom FenetreSaisieClients et ouvrir son module de code laide du clic droit de la souris et de
loption CODE (ou en double-cliquant dessus).
2) Dans la liste de gauche au sommet du module de code, slectionner loption ButtonOK. Dans la
liste de droite au sommet du module de code, slectionner lvnement Click.
Call Unload(Me)
End Sub
5) Associer le code ncessaire au bouton Annuler pour que la bote de dialogue soit ferme lorsque
lon clique dessus.
Attention : Lorsque la mthode Show est applique un objet UserForm masqu par la mthode
Hide, lobjet UserForm nest pas recharg mais uniquement affich. Lvnement Initialize nest
alors pas dclench.
La procdure vnementielle associe lvnement Initialize dun objet UserForm sexcute avant
laffichage de lobjet et a la syntaxe suivante :
Ecrire le code ncessaire pour affecter les valeurs Madame, Mademoiselle et Monsieur la
zone de liste modifiable ComboBoxTitre, en utilisant les valeurs qui se trouvent dans la plage de
cellule A1:A3 de la feuillle de calcul DIVERS.
1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets, selectionner lobjet UserForm
de nom FenetreSaisieClients et ouvrir son module de code laide du clic droit de la souris et de
loption CODE.
2) Dans la liste de gauche au sommet du module de code, slectionner loption UserForm. Dans la
liste de droite au sommet du module de code, slectionner lvnement Initialize.
Pour lier un contrle une plage de cellules, il faut renseigner la proprit ROWSOURCE du contrle
avec la plage de cellules voulue (dans notre cas, Divers!A1:A3) ou encore mieux avec le nom de la
plage de cellules voulue, ce qui suppose de nommer cette plage de cellules.
Attention: Cette mthode, contrairement la prcdente, ne pourra pas prendre en compte les
ventuelles modifications faites sur le titre dun client (ajout ou suppression dun titre). La zone de
liste modifiable ComboBoxTitre est lie la plage de cellule fixe A1:A3 de la feuille de calcul DIVERS.
La mise jour de la liste de donnes EXCEL correspondant aux donnes du client doit tre faite
lorsque lutilisateur clique sur le bouton OK. Elle consiste insrer une nouvelle ligne dans la liste de
donnes et recopier les valeurs des contrles de lobjet UserForm dans les bonnes cellules de la
nouvelle ligne.
1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets, slectionner lobjet UserForm
de nom FenetreSaisieClients, ouvrir son module de code et complter la procdure
vnementielle ButtonOK_Click comme suit :
1) Aller dans EXCEL et cliquer sur longlet CLIENTS. Positionner le curseur sur une cellule vide de la
feuille de calcul CLIENTS et activer la commande AFFICHAGE BARRE D'OUTILS FORMULAIRES.
2) Une barre d'outils FORMULAIRES apparat. Cliquer sur l'objet BOUTON, puis cliquer sur la
feuille de calcul CLIENTS.
3) Dans la nouvelle fentre AFFECTER UNE MACRO qui apparat, slectionner la macro
ProgPrincSaisieClients et cliquer sur le bouton OK.
Sub CopieWord()
Dim AppWord As Object
Set AppWord = CreateObject("Word.Application")
With AppWord
.Documents.Add
.Selection.TypeText Text:="Liste des Clients"
.Selection.TypeParagraph sauter une ligne
on copie le contenu de A1 dans le document Word
.Selection.TypeText Text:="" & Range("A1").Value
.Documents.Save
.Visible = True
End With
End Sub
Lenregistreur de macro existe galement sous Word et vous permettra de dcouvrir les
instructions utiles vos besoins.
Dans un programme VBA on peut accder des outils extrieurs tels que des requtes internet par
lintermdiaire de la fonction suivante :
ActiveWorkbook.FollowHyperlink(Url)
Url reprsente ici des donnes concernant le service auquel on souhaite se rfrer. Cette
fonction envoie alors une requte travers le navigateur par dfaut.
Tout site internet est accessible par ce biais. Le format des requtes dpend de chaque service
notamment au niveau des mots cls utiliss (pour google q reprsente la recherche formule).
Envoie de mails
Grce linstruction fournie prcdemment, on peut galement dclencher lenvoie dun mail par
lintermdiaire dune url du type :
mailto:adresse_mail?subject=le_sujet&body=le_contenu_du_message