You are on page 1of 13

Universit de Lille Sciences et Technologies Introduction VBA

Introduction aux Macros


et
Visual Basic pour Applications
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.
- 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

2 Enregistrement et excution de macros


2.1. Enregistrement
Si la macro crer est simple, ou pour gnrer rapidement une premire bauche dune macro
plus complexe, on peut utiliser lenregistreur de macros. Celui-ci fonctionne comme un
magntoscope : il mmorise les actions que vous effectuez (slections, commandes, ) dans un
module Visual Basic pour pouvoir les reproduire le moment voulu.
L'enregistreur est accessible partir du menu Outils/Macro/Nouvelle macro On donne alors
le nom de la macro1, ventuellement une touche de raccourci et une description, ainsi quun document
de stockage2.
Lorsquon appuie sur OK, l'enregistrement commence : toutes les actions que vous effectuez
alors sont stockes dans le code de la macro et seront reproduites l'identique lors de son excution.
Pour terminer l'enregistrement, appuyer sur le bouton (ou Outils/Macro/Arrter l'enregistrement).

2.2. Excution et modification

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.

3 Lditeur Visual Basic (VBE)


3.1. Vue gnrale
A partir de la version 97 de la suite Office, la prsentation de l'diteur VBA a t homognise
(cf. figure 1 page suivante) ; il se prsente dans une fentre distincte de celle de lapplication hte, ce
qui permet de sparer le code des donnes.

3.1.1. Fentre Explorateur de Projet


Un projet regroupe l'ensemble des documents (i.e., sous Excel, les feuilles de calcul associes
un classeur, et sous Word, le document texte) et des macros. A partir de la racine de l'arborescence du
projet, les documents sont accessibles dans la branche Microsoft Excel|Word|PowerPoint Objects et
les macros dans la branche Modules.

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

Figure 1 : Fentre de lditeur VBA

3.1.2. Fentre de Code


Cest ici que vous modifiez le code gnr. En gnral, lenregistreur de macros gnre plus de
code que ncessaire ; il faut donc le dpoussirer en retirant les instructions et options de
commandes superflues afin de minimiser le temps dexcution de la macro.
Dans cette fentre, les mots-cls rservs apparaissent en bleu et les commentaires en vert (ceci
est personnalisable dans Outils/Options/Format de lditeur).

3.1.3. Fentres Espions et Variables locales


Voir la section 7. Excution pas pas et dbogage ci-aprs.

3.2. Aides l'dition


Outre l'enregistreur de macros, qui permet souvent de gnrer une premire bauche de votre
programme, vous disposez sous VBE de plusieurs systmes d'aide l'dition de code :
- 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 ;
- 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

4 Notions de Module et de Procdure


4.1. Procdure
4.1.1. Dfinition
En fait, le mot macro a t conserv par compatibilit de vocabulaire avec les versions
antrieures dOffice. Mais dornavant, le code VBA est organis en procdures, ce qui le rend plus
performant et lisible. Les mots macro et procdure dsignent donc la mme notion et seront employs
indiffremment.
Une macro dbute par le mot Sub (abrviation de langlais Subroutine = procdure), suivi du
nom de la macro, et se termine par les mots End Sub. Une procdure est une suite d'instructions,
chacune excutant une tche prcise.

4.1.2. Relation entre code gnr et procdure Sub


Lors de lenregistrement dune macro est gnre une procdure Sub portant le nom spcifi. Il
est possible de renommer celle-ci directement dans la fentre de code, ou bien dans lapplication hte.
De mme, la suppression des lignes comprises entre la ligne den-tte Sub et la fin de la macro repre
par End Sub quivaut choisir dans lapplication le menu Outils/Macro/Macros puis Supprimer.
Lexcution dune macro peut galement se lancer partir de lditeur en appuyant sur le bouton , le
curseur tant positionn dans le code correspondant.

4.1.3. Divers types de procdures


On peut dfinir deux types de macros :
- les macros commandes (de type Sub) qui accomplissent un ensemble dactions mais ne
retournent pas de valeur 1 :
[Private|Public] [static] Sub nomProcedure ([arguments])
Instructions
End Sub
- 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).

1 Lenregistreur gnre uniquement ce type de macros, sans argument.


4/13
Universit de Lille Sciences et Technologies Introduction VBA

5 Notions lies aux objets


5.1. Notion d'Objet
VBA est un langage orient objets : tous les lments de l'application hte sont des objets (ex.
sous Excel : un classeur, une feuille de calcul, une plage de cellules, etc.). Un objet est en ralit un
lment spcifique d'une application qui contient la fois des donnes et du code.
L'intrt principal d'un objet est d'offrir au programmeur des composants existants et
rutilisables, qu'il lui suffit d'intgrer et d'utiliser tels quels dans ses applications.

5.2. Notion de Proprit et de Mthode


Chaque objet possde certaines caractristiques (appeles proprits), qui contrlent son
apparence et son comportement, et peut excuter un certain nombre dactions (les mthodes). Par
exemple, la slection courante possde la proprit Characters (les caractres englobs dans la
slection) et peut, entre autres, se voir appliquer la mthode Copy (pour copier la slection dans le
presse-papiers). Autre exemple, on peut vrifier l'orthographe d'une plage de caractres dans Word ou
de cellules dans Excel, en appliquant la mthode CheckSpelling cet objet.

5.2.1. Lecture et modification des proprits


Pour connatre la caractristique d'un objet, il faut accder la valeur de la proprit
correspondante, ce qui est ralis en faisant suivre la rfrence cet objet d'un . et du nom de la
proprit. Ainsi, pour rcuprer la couleur des caractres de la slection courante sous Word :
Selection.Font.ColorIndex
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"
- utilisation darguments nomms1 ( utiliser prfrentiellement, car plus lisible)
Document.PrintOut From:=1, To:=3

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

5.3. Notion d'vnement


Un vnement est une action de l'utilisateur ou du logiciel qu'il est intressant de dtecter. Il
peut s'agir par exemple de la slection d'une cellule, la saisie d'une valeur, l'ouverture d'un document,
l'activation d'un menu, etc. Il est possible d'associer un vnement un fragment de code appel
procdure vnementielle. Ce code va s'excuter lorsque survient l'vnement, et permet entre autres
de contrler les manipulations de l'utilisateur ou d'enrichir les commandes intgres de l'application.
Un vnement est associ un objet donn (que cet objet soit intgr dans l'application ou ait
t cr par l'utilisateur ou par programmation). Pour associer une procdure vnementielle un
objet, double-cliquer sur celui-ci dans l'explorateur de projet puis, dans la fentre de code, choisir dans
la liste suprieure droite l'vnement traiter. Le nom de la procdure se prsente alors sous la forme :
<Objet>_<Evnement>() par ex. Worksheet_Activate() sur activation d'une feuille de calcul
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 Application WORD


Classeurs de l'application Documents de l'application
Feuilles de calcul de chaque classeur Zone contigu de texte
Plage de cellules (slection, ligne,)

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.

5.5.2. Accs aux objets


Pour accder un objet, il faut indiquer le chemin parcourir pour latteindre dans la
hirarchie des objets. A partir de l'objet racine (Application), on applique en cascade des mthodes
ou des proprits pour parvenir cet objet. Une fois celui-ci atteint, on peut lui appliquer une mthode
ou proprit comme expliqu au 5.2 :
Application.ActiveWindow.WindowState = wdWindowStateMaximize
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).

1 Les mthodes et proprits peuvent tre appliques en cascade, par exemple :


Documents.Add.Save
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.
2 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 Universit de Lille Sciences et Technologies

6 Structure du langage VBA


6.1. Types de donnes
Comme on a pu sen apercevoir jusquici, certaines proprits dobjets contiennent du texte ;
dautres nacceptent que des valeurs numriques ou des boolens. De mme, lorsque vous dclarez une
variable, vous pouvez prciser, en plus de son nom, le type de donnes quelle doit contenir. Cette
section prsente les types de donnes reconnus par VBA, valables pour les proprits des objets
comme pour les variables dfinies par lutilisateur.

6.1.1. Types standards


Ces types sont communs la plupart des langages de programmation (cf. tableau ci-aprs).

Type Description Notes Taille (octets)


Byte Octet Plage : 0..255 1
Boolean Boolen Ne peut prendre que les valeurs True ou False 2
Integer Entier Plage : -32 768..32 767 2
Long Entier long Plage : environ -2.109..+2.109 4
Single Rel en simple Plages : -3,4.1038..-1,4.10-45 et 1,4.10-45..3,4.1038 4
prcision
Double Rel en double Plages : -1,8.10308..-4,9.10-324 et 4,9.10-324..1,8.10308 8
prcision
Currency Nombre virgule fixe Plage : environ 922.109..+922.109 8
(ex. montaire)
Date Date Plages : 01/01/0100..31/12/9999 et 00:00:00..23:59:59 8
String Chane de longueur 0 environ 2 milliards de caractres 10+longueur
(lg variable) variable de la chane
String Chane de longueur 0 environ 65 400 caractres longueur de la
(lg fixe) fixe chane

6.1.2. Types particuliers


Visual Basic possde en outre trois types particuliers de variables :
- 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,

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.

6.2. Variables et constantes


6.2.1. Dclaration
Il existe deux faons de dclarer des variables : implicitement ou explicitement. En effet, la
dclaration des variables est facultative : l'apparition d'un mot non reconnu dans une affectation cre
implicitement une nouvelle variable de type Variant. La dclaration explicite de variables se fait
gnralement par l'instruction Dim, parfois par Public, Private ou Static si l'on souhaite modifier la
porte ou la dure de vie de la variable (voir plus loin). Dans tous les cas, la syntaxe (simplifie) est la
suivante :
Dim nomVar [ ( indices ) ] [As type]
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 Suffixe Type de donnes


% Integer # Double
& Long @ Currency
! Single $ String
Le tableau ci-dessous donne des exemples de dclarations de variables.

Instruction Dclaration de Exemples


Dim nomVar Variable de type par dfaut (Variant) Dim anyValue
Dim nomVarSuffix Variable de type donn par le suffixe Dim Nom$
Dim nomVar As type Variable de type donn explicitement Dim x As Integer
Dim nomVar As String * taille Variable chane de taille fixe donne Dim x As String * 5
Dim premVar, secVar As type Deux variables en une seule instruction Dim unVariant, choix As Boolean
Dim nomVar(taille) As type Tableau unidimensionnel de type donn2 Dim tabJours(50) As Date
Dim nomVar(taille,taille) Tableau bidimensionnel (de Variant) Dim matrice(3,4) As Integer
Dim nomVar(indice To indice) Tableau avec limites d'indices explicites Dim mat(1 To 5, 4 To 9) As
Dim nomVar()As type Tableau dynamique (redimensionnable3) Double
Dim MyArray() As Single

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 :

Instruction Dclaration au niveau Accessibilit de la variable/constante ainsi dclare


Procdure Locale la procdure
Dim
Module Locale au module (accessible de toutes les procdures du module)
Procdure <Interdit : le mot-cl Public est rserv au niveau module>
Public
Module Toutes les procdures de tous les modules du projet
Procdure Locale la procdure (comme avec Dim)
Private
Module Locale au module (comme avec Dim)

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.

6.2.3. Dure de vie


Dans une procdure, toute variable est (r)initialise lors de sa dclaration (nombres 0,
chanes "" (chane vide), variables de type variant Empty, objets Nothing). L'instruction Static
permet, au niveau procdure, de dclarer des variables conservant leur valeur pendant toute la dure de
l'excution du module. La dure de vie de ces variables est alors identique celle d'une variable de
niveau module. Il est aussi possible de dclarer une procdure comme Static, moyennant quoi toutes
les variables dclares dans cette procdure seront statiques.

10/13
Universit de Lille Sciences et Technologies Introduction VBA

6.3. Instructions

6.3.1. Diffrents types dinstructions


- Les instructions de dclaration servent nommer une variable, constante ou procdure1
Exemples : Sub uneProcedure() , Dim uneVariable As String , Const uneConstante="Salut"
- 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.

6.3.2. Structures de contrle


Les structures de contrles servent effectuer des boucles ou des branchements conditionnels ;
on les retrouve dans tous les langages de programmation structurs. Le tableau ci-dessous rsume
celles dont on dispose en VBA.

Type Syntaxe(s) Effet


Do Until condition Excute les instructions jusqu ce que la condition soit vraie. Si la
instructions condition est vraie ds le premier test, les instructions ne sont jamais
Loop excutes.
Do While condition Excute les instructions tant que la condition est vraie. Si la condition est
instructions fausse ds le premier test, les instructions ne sont jamais excutes.
Loop
Do Excute les instructions jusqu ce que la condition soit vraie.
Boucles

instructions Les instructions sont au moins excutes une fois.


Loop Until condition
Do Excute les instructions tant que la condition est vraie.
instructions Les instructions sont au moins excutes une fois.
Loop While condition
For compteur=dbut to fin [step pas] Excute les instructions le nombre de fois dtermin par le compteur. Ce
Instructions dernier compte de dbut fin par pas spcifi (pas de 1 par dfaut).
Next compteur
For Each element In groupe Pour chaque lment du groupe spcifi (tableau ou collection), excute
instructions les instructions en utilisant le nom element pour dsigner le n-ime
Next element lment.

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

If condition Then instructions Excute les instructions si la condition est vraie.


(Le tout sur une seule ligne)
If condition Then Excute les instructions1 si la condition est vraie.
instructions1 Si la clause Else est prsente, alors excute les instructions2 si la condition
[Else nest pas vraie.
instructions2]
Instructions conditionnelles

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.

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
une fois lerreur traite. L encore, 3 possibilits soffrent nous :
- Resume 0 reprend lexcution la ligne mme qui a gnr lerreur ;
- Resume Next reprend lexcution la ligne qui suit celle qui a gnr lerreur ;
- Resume etiquette reprend lexcution la ligne portant ltiquette spcifie.

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

7. Excution pas pas et dbogage

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.

7.1. Contrle de lexcution


Lorsque vous excutez une macro en mode pas pas, linterprteur de commandes s'arrte
chaque ligne de code. Lorsquil rencontre un appel une procdure ou fonction, il peut :
- 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
(contrairement , qui marque une pause) et effectue une remise zro des variables. Ceci est utile
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) ;
- amener le curseur de la souris sur un nom de variable, de constante, ou une expression, et ly
laisser un petit moment, jusqu ce que la valeur correspondante soit affiche dans une bulle
daide ;
- espionner la valeur en slectionnant lexpression souhaite, puis en slectionnant le menu
Dbogage/Espion express (pour une inspection ponctuelle) ou Dbogage/Ajouter un espion . Cette
dernire option affiche en permanence la valeur de lexpression dans la fentre Espions, fentre qui
permet de plus dinspecter les objets en profondeur, en parcourant leur hirarchie.

13/13

You might also like