Professional Documents
Culture Documents
1. Gnralits et dfinitions
Dans une application Microsoft de la suite Office (Excel, Word, Access ou PowerPoint),
chaque fois qu'une mme squence d'actions doit tre effectue priodiquement, il est possible
d'enregistrer celles-ci dans une macro-commande de manire les raliser ensuite automatiquement,
autant de fois qu'on le dsire. Une macro-commande (macro en abrg) est donc une suite de
commandes et permet d'automatiser certaines tches que l'on est amen effectuer de manire
rptitive, ventuellement avec des donnes diffrentes (ex. : mise en forme dun tableau, recherche ou
formatage de donnes, ).
Avec les macros, on peut crer des commandes complexes, de nouvelles fonctions, des
interfaces graphiques avec menus, botes de dialogue, boutons personnaliss, En un mot, les macros
permettent chacun de crer des outils adapts ses propres besoins. Avant de crer une macro pour
automatiser une tche, on doit toutefois s'assurer qu'aucune solution intgre n'est fournie. Par
exemple, si on veut slectionner toutes les cellules vides dune feuille Excel, il suffit de choisir le
menu Edition/Atteindre et de cliquer sur Cellules dans la bote de dialogue.
Une macro est un programme qui excute une suite de tches bien dfinies, grce des
instructions crites :
jusqu' rcemment (version 5 d'Excel, 6 de Word), dans un langage macro ; le programme tait
alors dit dans un document classique (feuille de calcul ou document Word par exemple) ;
actuellement en Visual Basic pour Applications (VBA), qui est un sous-ensemble du langage de
programmation Visual Basic, et possde de nombreux avantages :
- Portabilit. La macro est dite dans une fentre ddie (l'diteur) dont la prsentation est la
mme pour toutes les applications Office. De plus, les macros sont stockes dans des modules,
ce qui permet de les retrouver et de les rutiliser aisment.
- Orientation objet. Les lments manipuls sont spcifiques chaque application hte : il sagit
par exemple de blocs de texte sous Word, de plages de cellules sous Excel ou de donnes
stockes dans une table sous Access. Appele objets, ceux-ci possdent certaines
caractristiques bien dfinies, ainsi quun comportement propre (on dit quils sont encapsuls).
Ainsi, toute commande que vous pourriez raliser sur un objet (ex. suppression dun bloc de
texte, formatage dune plage de cellules ou dition dun enregistrement dune table) possdent
un quivalent sous forme de code VBA (procdure). Lensemble des objets dune application
est regroup dans une bibliothque.
- Fonctionnalits intgres de dbogage et possibilit de compiler les modules de code en
macros complmentaires distribuables pour raliser des applications professionnelles
scurises.
Par ailleurs, les applications Office contiennent un enregistreur de macros, outil intgr qui
cre le code VBA notre place.
1/13
Introduction VBA Universit de Lille Sciences et Technologies
Pour excuter une macro, ou grer les diffrentes macros attaches au document
(modification, suppression, ), utiliser la commande Outils/Macro/Macros En appuyant sur l'un des
boutons Crer ou Modifier de la mme bote de dialogue, on accde l'diteur Visual Basic pour,
respectivement, crer de toutes pices ou modifier une macro enregistre.
1 Le nom de la macro doit commencer par une lettre, ne pas comporter despace ni de caractre de ponctuation, et ne peut
tre un mot rserv de VBA ; viter galement les caractres accentus.
2 Une macro est lie un document qui la contient ; elle ne peut tre excute que si ce dernier est ouvert. La macro peut
tre enregistre avec le document courant, mais pour la rendre accessible en permanence, il est aussi possible de la
placer :
- Sous Word, dans le modle global NORMAL.DOT.
- Sous Excel, dans un classeur de macros personnelles, nomm PERSO.XLS, et plac dans le rpertoire XLOUVRIR
pour quil soit ouvert chaque dmarrage dExcel (il reste cependant invisible ; activer le menu Fentre/afficher pour
pouvoir modifier les macros quil contient).
- Sous Powerpoint, cela est impossible (la macro nest accessible que de la prsentation o elle est enregistre).
En phase de mise au point, stockez dabord vos macros dans le document courant et transfrez-les dans la bibliothque
t de macros personnelles lorsquelles sont au point.
2/13
Universit de Lille Sciences et Technologies Introduction VBA
Fentre Proprits
Permet de visualiser et
Explorateur de Projet modifier les proprits
Visualise les lments associes aux objets
constitutifs des projets constitutifs d'un projet.
en cours (notamment
les documents ouverts
dans l'application Fentre Espions
hte).
Visualise la valeurs et
le type des variables ou
Explorateur d'objets expressions
Affiche les classes, "espionnes" dfinies.
proprits, mthodes,
vnements, constantes Fentre Var. Locales
disponibles dans les
Visualise la valeurs et
bibliothques d'objets
et procdures du le type des variables
projet. locales.
Fentre de Code
Fentre User Form et sa Bote Outils
Permet d'diter le code des
Espace dans lequel on conoit les feuilles VBA. La bote outils propose
projets
des contrles (cases cocher, zones de liste droulantes,) placer sur une
feuille qui constitue une interface pour l'application
t Tapez donc tout en minuscules; si votre code est correct, il sera format automatiquement.
- aide contextuelle : placer le curseur dans un mot, ou slectionner celui-ci, puis appuyer sur F1 ;
- aide classique, avec son sommaire et ses fonctions de recherche. La rubrique Objets Microsoft
Word | Excel | PowerPoint permet notamment de parcourir la hirarchie des classes d'objets ;
- affichage des proprits et mthodes applicables un objet lorsque l'on tape le . de sparation ;
- explorateur d'objets : affiche les membres (proprits , mthodes et vnements ) des objets
(cf. plus loin pour ces diffrentes notions).
3/13
Introduction VBA Universit de Lille Sciences et Technologies
Le nom nomProcedure peut ensuite tre utilis pour appeler la procdure partir d'autres
procdures, en respectant les arguments requis. L'instruction Call permet d'appeler une procdure Sub.
Pour la dclaration des arguments d'une procdure (passage par valeur ou par adresse, types des
arguments, arguments optionnels, ), voir dans l'aide la rubrique correspondant l'instruction Sub ou
Function ; pour lutilisation ou non des parenthses, voir Appel de procdures Sub et Function .
4.2. Module
Les macros d'un projet sont stockes dans des modules, un module pouvant contenir plusieurs
macros. Un module peut tre sauvegard individuellement (menu Fichier/Exporter un fichier) dans un
fichier d'extension .BAS afin de le rintgrer dans un autre projet (grce Fichier/Importer un fichier).
1 On nomme ici les paramtres ; leur valeur est prcde de := et leur ordre est quelconque. Voir les rubriques daide
Appel de procdures Sub et Function , Passage efficace d'arguments et Arguments nomms et facultatifs .
5/13
Introduction VBA Universit de Lille Sciences et Technologies
6/13
Universit de Lille Sciences et Technologies Introduction VBA
Les objets peuvent tre trs nombreux (ex. plus de 100 dans Excel). Pour visualiser le document
t prsentant leur arborescence et accder ainsi graphiquement aux diffrents objets, procder ainsi :
- dans lditeur, placer le curseur dans un nom dobjet (ex. Application) et appuyer sur F1.
- dans laide, rechercher puis afficher la rubrique Objets Microsoft Word|Excel|Poxerpoint ,
au besoin en activant loption rechercher les mots dans lordre exact
Les objets les plus frquemment utiliss dans Word et Excel sont prsents en annexes.
Concernant laccs aux objets, voir encore les remarques 1 et 2 au bas de cette page.
1 Les variables de type Variant peuvent aussi contenir les valeurs spciales suivantes :
- Null indique que la variable ne contient aucune donne valide ;
- Empty dsigne une variable non initialise (la variable de type Variant quivaut alors 0 si elle est utilise dans un
contexte numrique et une chane de longueur nulle ("") dans un contexte de chane) ;
- Error permet d'indiquer qu'une condition d'erreur s'est produite dans une procdure.
8/13
Universit de Lille Sciences et Technologies Introduction VBA
une variable de ce type pourra, selon le contexte et les ncessits de lexcution, prendre la valeur
numrique 13 ou tre reprsente sous forme de la chane de caractres "13" ; il sera possible dappliquer
cette variable des oprateurs ou fonctions portant aussi bien sur les nombres (ex. + ou cos) que
sur les chanes (ex. & ou Len).
Attention : il faut quand mme savoir que le type Variant est gourmand en mmoire.
- les variables destines contenir des objets peuvent prendre comme type soit lun de ceux
prdfinis dans lapplication hte (ex. Range), soit le type Object. En ralit, ces variables se
dclarent comme nimporte quelle autre (voir paragraphe suivant), mais pour leur affecter une
valeur, il faut utiliser linstruction Set1.
1 En ralit, une variable objet ne contient quune rfrence un objet. Lorsque vous utilisez l'instruction Set, la variable
pointe dsormais vers un objet, mais aucune copie de ce dernier n'est cre (pour crer rellement une nouvelle
instance de l'objet, utilisez le mot cl New dans l'instruction Set). Si plusieurs variables objets font rfrence au mme
objet, toute modification apporte l'objet est rpercute sur toutes les variables associes. Par ailleurs, pour mettre fin
lassociation entre la variable et lobjet, utilisez la syntaxe : Set NomVariable = Nothing.
2 Les indices des tableaux commencent par dfaut 0, moins d'avoir spcifi Option Base 1. La dclaration Dim
tabJours(50) cre donc un tableau de 51 lments (indices de 0 50).
3 L'instruction ReDim permet de changer le nombre d'lments, les dimensions, ou les limites infrieure et suprieure de
chaque dimension. Par dfaut, les valeurs sont perdues lors du redimensionnement, sauf si l'on utilise Redim Preserve.
9/13
Introduction VBA Universit de Lille Sciences et Technologies
Une constante permet dassocier un nom une valeur : ce sont des chanes de caractres, mais
en ralit, elles reprsentent en gnral des valeurs numriques. Par exemple, chacune des touches
correspond une constante (vbKeyTab, vbKeyA, ), ce qui vite d'avoir se souvenir de son code
ASCII. Les constantes amliorent la lisibilit du code et rendent l'application plus facile maintenir.
Lorsqu'une proprit accepte un nombre dtermin d'tats, ceux-ci correspondent souvent des
constantes (ex. pour dfinir ltat dune fentre, la proprit WindowState dun objet Window peut
prendre les valeurs wdWindowStateMaximize, wdWindowStateMinimize ou wdWindowStateNormal).
VBA comporte plusieurs dizaines de constantes prdfinies qui conservent la mme valeur et sont
accessibles de nimporte o dans le code. Les constantes utilises par les objets Word commencent par
les lettres wd, dans Excel par xl, dans Powerpoint par pp, celles communes avec Visual Basic par vb,
avec Microsoft Office par mso. Il est possible de dclarer ses propre constantes grce la syntaxe :
Const nomConst [As type] = expression
o Type ne peut tre ni un type personnalis, ni Object.
6.2.2. Porte
La visibilit (ou accessibilit) est la disponibilit d'une variable, constante ou procdure, dans
le reste du code. La portion de code dans laquelle une variable est visible est appele porte. En VBA,
il existe 3 niveaux de porte : niveau de procdure, niveau de module priv et niveau de module
public. La dclaration d'une variable se fait donc soit dans une procdure (Function, Property ou Sub),
soit au niveau d'un module (dans la section des dclarations, avant les procdures). Gnralement, la
dclaration s'effectue avec l'instruction Dim, mais les mots-cls Public et Private permettent de nuancer
la porte des variables dclares, comme l'indique le tableau suivant :
Remarque : La dclaration des procdures peut aussi tre prcde des mots-cls Public (valeur par dfaut) ou
Private. Dans ce dernier cas, la procdure n'est accessible qu'aux procdures du mme module ; de
plus, elle ne peut plus tre affecte un menu, une touche de raccourci ou un contrle, ni tre
excute comme une macro indpendante.
10/13
Universit de Lille Sciences et Technologies Introduction VBA
6.3. Instructions
1 Les noms de procdures, constantes, variables et arguments suivent les restrictions suivantes :
- le premier caractre doit tre une lettre ;
- majuscules et minuscules ne sont pas diffrencies, bien que la casse soit respecte ;
- ne pas utiliser de point, despace, ni $, !, #, & et @. En rgle gnrale, nutiliser que des lettres (ventuellement
accentues), des chiffres et le trait de soulignement (_) ;
- ne pas utiliser les noms rservs de Visual Basic (rechercher mots cls dans laide pour une liste complte) ;
- ne pas dclarer plusieurs fois le mme nom de variable ou de constante dans un mme niveau de porte ;
- ne pas dpasser 255 caractres ni donner une Function un nom ressemblant une adresse de cellule Excel !
11/13
Introduction VBA Universit de Lille Sciences et Technologies
End If
If condition1 Then Excute les instructions1 si la condition1 est vraie ; dans le cas contraire, fait
instructions1 un nouveau test sur condition2. Si celle-ci est vraie, les instructions2 sont
ElseIf condition2 Then excutes ; sinon, on fait un nouveau test sur condition3, et ainsi de suite.
instructions2
Si la clause Else est prsente, alors les instructionsElse sont excutes si
ElseIf condition3 Then
instructions3
toutes les conditions prcdentes sont fausses.
[Else
instructionsElse]
End If
Select Case expressionTeste En fonction de la valeur dune expressionTeste, branche le programme sur
Case listeValeurs1 tel ou tel jeu dinstructions. Si lexpression a pour valeur lune de celles
instructions1 contenues dans listeValeurs1, ce sont les instructions1 qui sont excutes, et
Case listeValeurs2 ainsi de suite pour toutes les listes de valeurs. Si la clause Case else est
instructions2
prsente et quaucune liste de valeurs ne contient lexpressionTeste, alors
[Case Else ce sont les instructionsElse qui sont excutes en dfinitive.
instructionsElse]
End Select
Linstruction Exit For permet de quitter une boucle For ou For Each (lexcution se continue
la ligne suivant le Next), et Exit Do quitte directement une boucle Do. Ces instructions sont toutefois
viter, dans la mesure du possible, car elles nuisent la lisibilit du code.
Signalons encore que lobjet Err contient des informations relatives aux erreurs survenant lors de
lexcution dun code, et que deux autres instructions peuvent tre utiles dans ce contexte :
- Error (codeErreur) retourne le message associ lerreur portant le code spcifi ;
- Error codeErreur permet de simuler loccurrence de lerreur de code spcifi.
12/13
Universit de Lille Sciences et Technologies Introduction VBA
Le schma gnral de linstruction On Error Goto ligne, pris sur lexemple dune procdure Sub, est le
suivant (ils serait identique avec une Function ou une Property) :
Sub nomProcdure ()
On Error Goto ligne
' corps de la procdure
Exit Sub ' vite dexcuter la routine de gestion derreur en labsence derreur
ligne : ' dbut de la routine de gestion derreur
instructions si erreur
Resume { 0 | Next | etiquette } ' etiquette doit se trouver dans le corps de la mme procdure
End Sub
Le menu Dbogage de lditeur donne accs plusieurs possibilits pour mettre au point le
code saisi. Il est possible de contrler lexcution en la stoppant tout moment et dinspecter la valeur
de variables ou dexpressions.
13/13