Académique Documents
Professionnel Documents
Culture Documents
Introduction VBA
Olivier Losson
Note prliminaire
Il est surtout fait rfrence ici aux interfaces, commandes et fonctions de Word, Excel et Powerpoint
(celles d'Access en diffrent sensiblement).
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.
Par ailleurs, les applications Office contiennent un enregistreur de macros, outil intgr qui
cre le code VBA notre place.
1/13
Introduction VBA
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).
t
2/13
En phase de mise au point, stockez dabord vos macros dans le document courant et transfrez-les dans la bibliothque
de macros personnelles lorsquelles sont au point.
Introduction VBA
Fentre Proprits
Permet de visualiser et
modifier les proprits
associes aux objets
constitutifs d'un projet.
Explorateur de Projet
Visualise les lments
constitutifs des projets
en cours (notamment
les documents ouverts
dans l'application
hte).
Fentre Espions
Visualise la valeurs et
le type des variables ou
expressions
"espionnes" dfinies.
Explorateur d'objets
Affiche les classes,
proprits, mthodes,
vnements, constantes
disponibles dans les
bibliothques d'objets
et procdures du
projet.
Fentre de Code
Permet d'diter le code des
projets
vrification automatique de la syntaxe : si cette option est active, lors du passage la ligne
suivante, l'diteur signale les erreurs syntaxiques les plus videntes (par ex. s'il manque then aprs
if) et met en majuscules les objets, proprits et mthodes qu'il connat.
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 ;
, mthodes
3/13
Introduction VBA
les macros fonctions (de type Function) qui retournent une valeur :
[Private|Public] [Static] Function nomProcedure ([arguments]) [As Type]
Instructions
nomProcedure = expression
'Valeur retourne par la fonction
End Function
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).
4/13
Introduction VBA
Dans cet exemple, on accde dabord la proprit Font de lobjet Selection, puis la proprit
ColorIndex de lobjet Font (comme quelques autres proprits, Font retourne un objet).
Pour modifier la caractristique d'un objet, il faut accder la proprit (comme prcdemment), puis
affecter une valeur celle-ci en la faisant suivre dun signe gal et de sa nouvelle valeur. Ainsi,
pour affecter la couleur rouge (de code 6) aux caractres de la slection courante :
Selection.Font.ColorIndex = 6
Certaines proprits sont en lecture seule et ne peuvent se voir affecter de valeur (par exemple, les
caractres contenus dans la slection courante Selection.Characters).
5.2.1. Excution de mthodes
Pour dclencher une mthode sur un objet, on utilise galement la notation pointe (par
exemple Selection.Copy pour copier la slection courante dans le presse-papiers).
Les mthodes ont parfois des arguments qui en prcisent l'excution. L'exemple ci-dessous expose les
deux faons de transmettre des paramtres une mthode ; il imprime les 3 premires pages du
document Word courant :
-
passage de paramtres (les virgules sont obligatoires pour sparer les arguments optionnels omis)
ActiveDocument.PrintOut , , wdPrintFromTo, , "1", "3"
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
par ex.
Les annexes prsentent les diffrents vnements associs aux objets courants, avec leurs paramtres.
5.4. Notion de collection
Une collection est un ensemble dobjets connexes (en gnral du mme type), appels items.
Ainsi, tous les paragraphes d'un document Word sont contenus dans une seule collection d'objets
(Paragraphs). Une collection est elle-mme un objet, possdant ses proprits et mthodes propres.
Dans une collection, chaque objet porte un numro (comme dans un tableau) et un nom (ou cl,
comme dans un dictionnaire) permettant d'y accder. Par exemple, la deuxime feuille dun classeur
Excel (nomme Feuil2 ) est accessible par Worksheets(2) ou Worksheets("Feuil2"). Ceci permet
daccder aux objets et donc, en utilisant la notation pointe comme expliqu prcdemment, de
modifier leurs proprits ou de leur appliquer des mthodes (ex. pour fermer le premier document
ouvert dans Word, on utilise Documents(1).Close).
Une collection dispose souvent de mthodes et de proprits qui peuvent tre utilises pour
modifier la totalit des objets quelle contient (ex. Documents.Save enregistre tous les documents
ouverts dans Word).
Remarque : En gnral, les collections dobjet portent le mme nom que le type des objets qu'elles
contiennent, suffix de la lettre s (Documents = collection de Document).
5.5. Hirarchie des objets
5.5.1. Prsentation
Les objets sont classifis en une organisation hirarchique de classes : certains objets en
contiennent dautres (ils sont alors appels conteneurs). Au sommet de la hirarchie se trouve lobjet
Application, qui reprsente l'application hte, et constitue le conteneur dobjets le plus vaste. Dans
Excel, il englobe notamment des objets Workbooks, CommandBars et Dialogs reprsentant
respectivement des classeurs, des barres de menus et des botes de dialogue. Un objet WorkBook (un
classeur) contient son tour des objets Worksheets et Charts reprsentant respectivement des feuilles
de calcul et des feuilles graphiques. Et ainsi de suite Voici un extrait des classes les plus utiles dans
Word et Excel :
Application EXCEL
Classeurs de l'application
Feuilles de calcul de chaque classeur
Plage de cellules (slection, ligne,)
6/13
Application WORD
Documents de l'application
Zone contigu de texte
Introduction VBA
Les objets peuvent tre trs nombreux (ex. plus de 100 dans Excel). Pour visualiser le document
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.
Ici, la proprit ActiveWindow de l'Application renvoie un objet Window (qui est la fentre active). La
constante d'agrandissement (wdWindowStateMaximize) est affecte sa proprit WindowState.
Si lon doit accder plusieurs proprit dun objet, ou lui appliquer plusieurs mthodes, le
mcanisme prcdent peut devenir lourd. Aussi est-il possible, pour allger le code, dutiliser
linstruction With <un objet> End With, qui permet de dfinir plusieurs proprits de cet objet en en
vitant la rcriture. Par exemple,
With Application.Documents("VBA")
.Activate
' Equivaut Application.Documents("VBA.doc").Activate
.EmbedTrueTypeFonts = True
Application.Documents("VBA.doc").EmbedTrueTypeFonts = True
With .Paragraphs(1)
.Alignment = wdAlignParagraphJustify
' Application.Documents("VBA.doc").Paragraphs(1).Alignment = wdAlignParagraphJustify
nbCaracPremPara = .Range.Characters.Count
' nbCaracPremPara = Application.Documents("VBA.doc").Paragraphs(1).Range.Characters.Count
End With
End With
Concernant laccs aux objets, voir encore les remarques 1 et 2 au bas de cette page.
5.5.3. Proprits et mthodes globales
Afin dallger la notation, la plupart des proprits et mthodes associes l'objet Application
peuvent tre utilises sans qualifier explicitement cet objet ; elles sont directement accessibles (par
exemple, ActiveDocument ou Selection sous Word, ActiveWindow ou ActiveCell sous Excel nont pas
besoin dtre prcds de Application. pour tre utilises). Les proprits et mthodes qui peuvent
tre utilises sans le qualificateur Application sont considres comme globales . Pour afficher
celles-ci, dans l'Explorateur d'objets, cliquez sur global en haut de la liste figurant dans la zone
Classes. Dans cette liste figurent aussi les constantes globales prdfinies (cf. cette notion plus loin).
Ici, la proprit Documents (sous-entendu, de Application) retourne la collection Documents, laquelle la mthode Add
ajoute un objet Document en retournant cet objet. La mthode Save est ensuite applique cet objet Document.
Pour connatre la hirarchie d'un objet, et les proprits et mthodes qui lui sont applicables, rendez-vous dans
lExplorateur d'objets (en appuyant sur F2). Par exemple, dans Word, la mthode Close de l'objet Document indique :
Sub Close([SaveChanges], [OriginalFormat], [RouteDocument])
Membre de Word.Document
Les 3 paramtres optionnels de cette mthode sont affichs (entre crochets), de mme que la hirarchie de l'objet sur
lequel elle s'applique. Les liens hypertextes permettent de naviguer dans cette hirarchie.
7/13
Introduction VBA
Description
Octet
Boolen
Entier
Entier long
Rel en simple
prcision
Rel en double
prcision
Nombre virgule fixe
(ex. montaire)
Date
Chane de longueur
variable
Chane de longueur
fixe
Notes
Plage : 0..255
Ne peut prendre que les valeurs True ou False
Plage : -32 768..32 767
Plage : environ -2.109..+2.109
Plages : -3,4.1038..-1,4.10-45 et 1,4.10-45..3,4.1038
Taille (octets)
1
2
2
4
4
8
10+longueur
de la chane
longueur de la
chane
les types de donnes dfinis par lutilisateur sapparentent aux enregistrements des langages C et
Pascal ; ils sont crs grce linstruction Type au niveau module :
Type NomTypePerso
NomElment1 As Type
NomElment2 As Type
End Type
Ce type sutilise alors comme nimporte quel autre ; pour accder aux lments, employer la
notation pointe.
-
les variables de type Variant peuvent contenir des donnes de tout type (sauf une chane de longueur
fixe et un type dfini par lutilisateur)1. Ceci simplifie l'criture et offre plus de souplesse dans le traitement
des donnes, car les conversions d'un type l'autre sont alors automatiques et transparentes. Par exemple,
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
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.
Il est possible de dclarer plusieurs variables avec une seule instruction, en sparant par une
virgule les diffrents noms et en spcifiant le type pour chacune. Par ailleurs, le type dune variable
peut tre spcifi de manire implicite en suffixant son nom par lun des caractres du tableau suivant.
Suffixe
%
&
!
Type de donnes
Integer
Long
Single
Suffixe
#
@
$
Type de donnes
Double
Currency
String
2
3
Dclaration de
Variable de type par dfaut (Variant)
Variable de type donn par le suffixe
Variable de type donn explicitement
Variable chane de taille fixe donne
Deux variables en une seule instruction
Tableau unidimensionnel de type donn2
Tableau bidimensionnel (de Variant)
Tableau avec limites d'indices explicites
Tableau dynamique (redimensionnable3)
Exemples
Dim anyValue
Dim Nom$
Dim x As Integer
Dim x As String * 5
Dim unVariant, choix As Boolean
Dim tabJours(50) As Date
Dim matrice(3,4) As Integer
Dim mat(1 To 5, 4 To 9) As
Double
Dim MyArray() As Single
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.
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).
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
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
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
Introduction VBA
6.3. Instructions
6.3.1. Diffrents types dinstructions
Les instructions de dclaration servent nommer une variable, constante ou procdure1
Les instructions d'affectation utilisent l'oprateur = pour affecter une valeur une variable,
constante ou proprit. Ainsi, pour stocker dans une variable la valeur d'une proprit d'un objet,
ou affecter une valeur une proprit, on utilise respectivement les syntaxes :
nomVar = Expression.Proprit
ou
Expression.Proprit = valeur
o Expression a pour rsultat un objet (la variable et la proprit doivent avoir le mme type).
-
Les instructions excutables accomplissent des actions en appelant une mthode ou une fonction.
Les instructions de contrle (cf. paragraphe suivant) sont aussi considres comme excutables.
Lexcution dune mthode sur un objet se fait suivant la syntaxe dj rencontre Objet.mthode.
Les commentaires sont des instructions particulires introduites par le mot-cl Rem ou
simplement une apostrophe (') ; tout ce qui suit sur la mme ligne est ignor lexcution.
Syntaxe(s)
Boucles
Do Until condition
instructions
Loop
Do While condition
instructions
Loop
Do
instructions
Loop Until condition
Do
instructions
Loop While condition
For compteur=dbut to fin [step pas]
Instructions
Next compteur
For Each element In groupe
instructions
Next element
Effet
Excute les instructions jusqu ce que la condition soit vraie. Si la
condition est vraie ds le premier test, les instructions ne sont jamais
excutes.
Excute les instructions tant que la condition est vraie. Si la condition est
fausse ds le premier test, les instructions ne sont jamais excutes.
Excute les instructions jusqu ce que la condition soit vraie.
Les instructions sont au moins excutes une fois.
Excute les instructions tant que la condition est vraie.
Les instructions sont au moins excutes une fois.
Excute les instructions le nombre de fois dtermin par le compteur. Ce
dernier compte de dbut fin par pas spcifi (pas de 1 par dfaut).
Pour chaque lment du groupe spcifi (tableau ou collection), excute
les instructions en utilisant le nom element pour dsigner le n-ime
lment.
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
Instructions conditionnelles
If condition Then
instructions1
[Else
instructions2]
End If
If condition1 Then
instructions1
ElseIf condition2 Then
instructions2
ElseIf condition3 Then
instructions3
[Else
instructionsElse]
End If
Select Case expressionTeste
Case listeValeurs1
instructions1
Case listeValeurs2
instructions2
[Case Else
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.
6.3.3. Gestion des erreurs
Pour viter linterruption de lexcution lorsquune erreur survient, il est possible dindiquer,
dans le programme mme, la marche suivre dans ce cas grce aux instructions ci-dessous. De
manire gnrale, un bon programmeur essaie de prvoir le maximum possible de cas derreurs et de
les traiter, car certaines erreurs ninterrompent pas le droulement de lexcution mais peuvent
nanmoins entraner un comportement imprvisible.
Le traitement des erreurs comporte les instructions suivantes :
-
On Error , qui indique ce que doit faire le programme lorsquune erreur est gnre ; 3 solutions
sont possibles :
- On Error Goto ligne branche le programme vers une routine de gestion derreur nomme ligne ;
- On Error Resume Next spcifie que lexcution doit se poursuivre la ligne suivante ;
- On Error Goto 0 dsactive la gestion des erreurs (annule un prcdent On Error)
-
Resume , place la fin de la routine de gestion derreur, qui indique o continuer lexcution
12/13
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
entrer dans le code de celle-ci, et ce de manire rcursive (touche F8, mode pas pas dtaill) ;
ou bien excuter lappel comme une seule instruction, sans entrer dans le code de la procdure
(touches Shift+F8, mode pas pas principal).
Les points darrt permettent de stopper lexcution en un endroit donn du code, pour ensuite
continuer en mode pas pas ou inspecter la valeur dune variable ou dune expression. Pour placer un
point darrt au niveau dune ligne de code, placez-y le curseur et appuyez sur F9 (un nouvel appui sur
F9 annule le point darrt) ; le menu Dbogage permet alors dexcuter le code jusqu ce point.
La rinitialisation du code (Menu Excution ou bouton
) stoppe dfinitivement lexcution
, qui marque une pause) et effectue une remise zro des variables. Ceci est utile
(contrairement
lorsquune erreur est survenue : avant de relancer une excution, une rinitialisation est obligatoire.
7.2. Inspection de variables
Il est tout moment possible de connatre la valeur dune variable ou dune expression.
Plusieurs possibilits se prsentent pour cela :
-
inclure dans le code une instruction Debug.Print nomVariable, ce qui a pour effet dimprimer le
contenu dune variable dans lobjet Debug, cest--dire la fentre dexcution (si celle-ci est
masque, rendez-vous dans le menu Affichage) ;
13/13