Sie sind auf Seite 1von 13

Universit des Sciences et Technologies de Lille

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 des Sciences et Technologies de Lille

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.

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.

Universit des Sciences et Technologies de Lille

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 Var. Locales


Visualise la valeurs et
le type des variables
locales.

Fentre de Code
Permet d'diter le code des
projets

Fentre User Form et sa Bote Outils


Espace dans lequel on conoit les feuilles VBA. La bote outils propose
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


(cf. plus loin pour ces diffrentes notions).

, mthodes

et vnements ) des objets

3/13

Introduction VBA

Universit des Sciences et Technologies de Lille

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).

Lenregistreur gnre uniquement ce type de macros, sans argument.

4/13

Universit des Sciences et Technologies de Lille

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

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 des Sciences et Technologies de Lille

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
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

Universit des Sciences et Technologies de Lille

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.

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).

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.
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 des Sciences et Technologies de Lille

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
Byte
Boolean
Integer
Long
Single
Double
Currency
Date
String
(lg variable)
String
(lg fixe)

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

Plages : -1,8.10308..-4,9.10-324 et 4,9.10-324..1,8.10308

Plage : environ 922.109..+922.109

Plages : 01/01/0100..31/12/9999 et 00:00:00..23:59:59


0 environ 2 milliards de caractres
0 environ 65 400 caractres

8
10+longueur
de la chane
longueur de la
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,

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 des Sciences et Technologies de Lille

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
Integer
Long
Single

Suffixe
#
@
$

Type de donnes
Double
Currency
String

Le tableau ci-dessous donne des exemples de dclarations de variables.


Instruction
Dim nomVar
Dim nomVarSuffix
Dim nomVar As type
Dim nomVar As String * taille
Dim premVar, secVar As type
Dim nomVar(taille) As type
Dim nomVar(taille,taille)
Dim nomVar(indice To indice)
Dim nomVar()As type

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

Universit des Sciences et Technologies de Lille

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
Procdure
Dim
Module
Procdure
Public
Module
Procdure
Private
Module

Accessibilit de la variable/constante ainsi dclare


Locale la procdure
Locale au module (accessible de toutes les procdures du module)
<Interdit : le mot-cl Public est rserv au niveau module>
Toutes les procdures de tous les modules du projet
Locale la procdure (comme avec Dim)
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 des Sciences et Technologies de Lille

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)

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

Universit des Sciences et Technologies de Lille

If condition Then instructions

Excute les instructions si la condition est vraie.

(Le tout sur une seule ligne)

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

Excute les instructions1 si la condition est vraie.


Si la clause Else est prsente, alors excute les instructions2 si la condition
nest pas vraie.
Excute les instructions1 si la condition1 est vraie ; dans le cas contraire, fait
un nouveau test sur condition2. Si celle-ci est vraie, les instructions2 sont
excutes ; sinon, on fait un nouveau test sur condition3, et ainsi de suite.
Si la clause Else est prsente, alors les instructionsElse sont excutes si
toutes les conditions prcdentes sont fausses.

En fonction de la valeur dune expressionTeste, branche le programme sur


tel ou tel jeu dinstructions. Si lexpression a pour valeur lune de celles
contenues dans listeValeurs1, ce sont les instructions1 qui sont excutes, et
ainsi de suite pour toutes les listes de valeurs. Si la clause Case else est
prsente et quaucune liste de valeurs ne contient lexpressionTeste, alors
ce sont les instructionsElse qui sont excutes en dfinitive.

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)
- Error codeErreur

12/13

retourne le message associ lerreur portant le code spcifi ;


permet de simuler loccurrence de lerreur de code spcifi.

Universit des Sciences et Technologies de Lille

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
, 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) ;

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

Das könnte Ihnen auch gefallen