You are on page 1of 25

Introduction la programmation VBA

sous Microsoft Excel 97


Mathieu

Peltier

E-Mail : Mathieu.Peltier@netcourrier.com
Homepage : http://altern.org/peltierm/welcome.htm
Mise jour du 6/2/2000  Typographie LATEX 2"
Ce guide est une introduction succincte la programmation VBA sous
Microsoft Excel 97. Loin d'tre exhaustif, il a pour ambition de fournir au
dbutant une premire approche de VBA.
Ce document est libre de droit. Vous pouvez le modier et le diuser
comme vous l'entendez. Une version en ligne est galement disponible sur le
site dont l'adresse est indique ci-dessus. N'hsitez pas me faire part de vos
commentaires et de vos conseils clairs !
Table des matires

1 Prsentation gnrale de VBA


1.1
1.2
1.3
1.4

Pour commencer . . . . . . . . . .
Qu'est-ce que VBA? . . . . . . . .
Notion de programmation objet . .
Avantages et inconvnients de VBA

2 L'environnement de programmation
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8

L'diteur intgr VBE .


Notion de projet . . . .
Les lments d'un projet
Les modules . . . . . . .
Les botes de dialogue .
Les modules de classe .
La fentre proprits . .
Obtenir de l'aide . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

3 Variables et constantes
3.1
3.2

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

Les types de donnes . . . . . . . . . . . . . . . . . . . . . . .


Nom des variables . . . . . . . . . . . . . . . . . . . . . . . .
1

3
3
3
3
4

5
5
5
5
5
6
6
7
7

7
7
8

TABLE DES MATIRES

3.3
3.4
3.5

Dclaration des variables . . . . . . . . . . . . . . . . . . . . .


La porte des variables . . . . . . . . . . . . . . . . . . . . . .
Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Principaux mots-cl du langage VBA


4.1

4.2
4.3

4.4

4.5

Les oprateurs . . . . . . . . . . .
4.1.1 Oprateurs arithmtiques. .
4.1.2 Oprateurs de comparaison.
4.1.3 Oprateurs logiques. . . . .
Structures conditionnelles . . . . .
4.2.1 If Then Else ElseIf . . . . .
4.2.2 Select Case . . . . . . . . .
Boucles . . . . . . . . . . . . . . .
4.3.1 Do While Loop . . . . . . .
4.3.2 Do Until Loop . . . . . . .
4.3.3 For Step Next . . . . . . . .
4.3.4 For Each In Next . . . . . .
Gestion des programmes . . . . . .
4.4.1 Exit . . . . . . . . . . . . .
4.4.2 End et Stop . . . . . . . . .
4.4.3 On Error GoTo . . . . . . .
Conversion de types . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

5 Procdures et fonctions
5.1
5.2
5.3
5.4

Les procdures . . . . . . . . . . . . .
Les fonctions . . . . . . . . . . . . . .
Passage d'arguments par valeur ou par
Les procdures vnements . . . . . . .

6 Conception de programme
6.1
6.2
6.3
6.4

Quelques conseils . . . . . .
Utiliser des rfrences . . .
Dbogage de programme . .
Les macros complmentaires

7 Un exemple pratique
7.1
7.2
7.3
7.4

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

. . . . . .
. . . . . .
rfrence
. . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Conception de la bote de dialogue . . .


Programmation des contrles de la bote
Amliorations possibles . . . . . . . . . .
Cration d'une commande spcique . .

8 Pour aller plus loin


8.1
8.2

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Utiliser l'aide en ligne ! . . . . . . . . . . . . . . . . . . . . . .


Quelques rfrences . . . . . . . . . . . . . . . . . . . . . . . .

9
9
10

10
10
10
11
11
11
11
12
12
12
12
13
13
13
13
14
14
15

15
15
16
16
17

17
17
18
18
19

19
20
21
23
24

24
24
24

PRSENTATION GNRALE DE VBA

Prsentation gnrale de VBA

1.1 Pour commencer


Il est possible de programmer sous Excel en n'crivant aucune ligne de
code ! Excel met pour cela disposition l'enregistrement automatique de
macro. La procdure suivre est la suivante :
 activer la commande Outils/Macro/Nouvelle macro ;
 entrer dans la bote de dialogue le nom de la macro qu'on souhaite
enregistrer (le bouton Arrter l'enregistrement devrait apparatre) ;
 raliser manuellement l'ensemble des commandes, qu'on veut voir enregistrer dans la macro 1 ;
 cliquer sur le bouton Arrter l'enregistrement pour stopper la procdure.
Une fois l'opration ralise, on dispose d'une nouvelle macro ralisant les
actions enregistres. Les macros cres peuvent tre excutes grce la commande Outils/Macro/Macros... (ALT+F8).
Ce procd peut tre trs utile pour raliser des macros simples. Il permet
galement de se familiariser avec la programmation VBA, en tudiant le code
VBA obtenu 2 . Cependant, le code obtenu est loin d'tre optimis. De plus,
pour des commandes complexes, l'enregistrement choue dans certains cas.

1.2 Qu'est-ce que VBA?


VBA est l'acronyme de Visual Basic for Applications. Il s'agit du langage
de programmation de l'ensemble des applications Microsoft Oce (Excel,
Word, Access, etc.), introduit partir de la version 97.
VBA permet d'automatiser certaines tches rbarbatives ou rptitives,
mais encore de raliser des applications compltes. Il s'agit d'un langage de
programmation orient objet comparable Visual Basic 3 . Les procdures
dveloppes sont galement appeles des macros.

1.3 Notion de programmation objet


VBA est un langage de programmation orient objet : on accde ainsi aux
dirents lments de l'application (classeur, feuilles de calcul, graphiques,
etc.) en utilisant ce qu'on appelle des objets, qui reprsentent prcisment
1. Il est recommand de ne pas faire d'erreur pendant l'enregistrement : les corrections
ventuelles sont en eet galement prises en compte.
2. cf. section 2 (page 5) pour savoir comment visualiser le code obtenu.
3. La dirence essentielle est que Visual Basic permet de raliser des programmes
excutables, alors que VBA ncessitera toujours la prsence du programme Oce, sous
lequel l'application a t dveloppe.

PRSENTATION GNRALE DE VBA

ces lments. Par exemple, pour renommer le classeur Classeur1, il sura


d'entrer :
WorkBooks("Classeur1").name = nouveau_nom

Pour chaque objet est dni un ensemble de ce que l'on appelle des
proprits et des mthodes, auxquelles on accde au moyen des instructions :
<Objet>.<Proprit> et <Objet>.<Mthode>

Les proprits sont des caractristiques modiables ou non de l'objet.


Par exemple, Name est ici une proprit de l'objet WorkBooks("Classeur").
Une proprit peut galement tre un objet. Par exemple, pour changer le
nom de la feuille de calcul Feuil1 du classeur Classeur1, on crira :
Workbooks("Classeur1").Worksheets("Feuil1").Name = nouveau_nom

Les mthodes sont les actions rattaches l'objet en question. Par exemple,
la mthode close de l'objet WorkBooks("Classeur1") sert fermer le classeur :
WorkBooks("Classeur1").close

L'ensemble des objets contenus dans un objet particulier forme ce que


l'on appelle une collection. Consulter l'explorateur d'objets pour connatre
la hirarchie des objets 4 .

1.4 Avantages et inconvnients de VBA


Le principal avantage de VBA est sa simplicit. Il permet au non-spcialiste,
aprs un rapide apprentissage, de raliser des applications complexes, en
obtenant en particulier une interface de qualit. De plus, VBA permet de
programmer sur toutes les applications d'Oce.
Cependant, il faut garder l'esprit que les programmes dvelopps ne
pourront tre utiliss sans l'application sous laquelle ils ont t dvelopp.
De plus, VBA est relativement lent; les programmes ncessitent donc une
machine assez performante pour fonctionner confortablement. Il faut aussi
reconnatre que toutes les possibilits du langage 5 ne sont pas documentes.
Enn, dernire objection et non des moindres, Excel se rvle dans certains cas instable : le programmeur se retrouve parfois dans des situations
inextricables, cause des dysfonctionnements d'Excel. Dans ce cas, une certaine dose de calme est ncessaire !
4. cf. section 2.8 (page 7).
5. en particulier pour des utilisations avances.

L'ENVIRONNEMENT DE PROGRAMMATION

L'environnement de programmation

2.1 L'diteur intgr VBE


On dispose l'intrieur d'Excel d'un environnement de programmation
VBA puissant, nomm Visual Basic Editor ou VBE. On accde cet environnement grce la commande Outils/Macro/Visual Basic Editor
(Alt+F11). La barre d'outils attache l'diteur dire de la barre d'outils d'une feuille de calcul. Pour revenir l'cran standard, taper nouveau
Alt+F11.

2.2 Notion de projet


Une application sous Excel est appele projet. Un projet est rattach
en fait chaque classeur, et contient toutes les feuilles du classeur, mais
aussi les ventuels modules, les botes de dialogue, etc. comme on le verra
par la suite. Tout programme VBA un tant soit peu complexe contient en
eet plusieurs de ces lments. La commande Achage/Explorateur de
projet fait apparatre une fentre permettant d'explorer les projets de tous
les classeurs ouverts. Par dfaut, le projet associ un classeur quelconque
s'appelle VBAProject.

2.3 Les lments d'un projet


Un projet regroupe, comme on l'a vu, un ensemble d'lments comprenant des objets Microsoft Excel, qui sont les feuilles de calcul du classeur
considr, des botes de dialogue, des modules et des modules de classe 6 .
Il est possible d'insrer ces derniers lments grce aux commandes Insertion/Module, Insertion/Userform et Insertion/Module de classe.
Noter enn qu'il est possible d'importer et d'exporter chacun de ces lments sous la forme de chiers indpendants. Les commandes utiliser sont
Fichiers/Exporter un chier... et Fichiers/Importer un chier....

2.4 Les modules


Les modules contiennent le code d'une application. Il est possible 7 de
structurer les programmes en plusieurs modules. Chaque module contiendra
alors le code rattach une action particulire.
Excel ore des caractristiques trs intressantes, qui facilite l'dition
du code. Ainsi, le code est ach avec direntes couleurs permettant de
direncier les mots cls 8 , les commentaires, etc. De plus, la syntaxe est
6. Comme on le verra par la suite, un module de classe est un module particulier.
7. et vivement recommand pour des raisons de lisibilit ds que le programme devient
un tant soit peu complexe.
8. Ceux-ci sont galement formats automatiquement.

L'ENVIRONNEMENT DE PROGRAMMATION

automatiquement vrie en arrire plan et les procdures et fonctions (cf.


section 5, page 15) sont clairement spares.
Mais le plus intressant est certainement la compltion automatique des
instructions : par exemple, si l'utilisateur rentre le mot ActiveWorkBook 9
suivi d'un point, l'diteur prsente dans une liste droulante toutes les possibilits disponibles pour complter la saisie. L'utilisateur n'a plus qu' slectionner la ligne dsire en tapant le nombre susant de caractres, et
appuyer sur TAB pour valider la saisie. Ce procd acclre considrablement
la saisie, vite bien des erreur de syntaxe et permet galement de connatre
les proprits et mthodes associes un objet donn.

2.5 Les botes de dialogue


Les botes de dialogue ou userforms sont des feuilles particulires, destines grer les interactions entre l'utilisateur et le programme.
Lors de la conception de la bote de dialogue, le programmeur dispose
d'un certain nombre d'objets, qu'il peut insrer dans la bote de dialogue.
Ces objets font partie de la bote outils que l'on active par la commande
Achage/Bote outils. Il sut alors de slectionner l'lment dsir 10
et de les crer dans la bote de dialogue.
Il appartient ensuite au programmeur d'crire les procdures permettant
de grer la bote de dialogue obtenue, par exemple pour rcuprer la valeur
d'une saisie ralise dans une zone de saisie. Le code ad hoc est placer
dans le module de classe 11 associ la bote de dialogue, que l'on active par
exemple par le bouton ad hoc dans l'explorateur de projet, si la bote en
question est slectionne.

2.6 Les modules de classe


Les modules de classe sont des modules particuliers o est plac le code
VBA rattach un objet particulier.
Un exemple typique est le module de classe ThisWorkbook : ce module
contient toutes les procdures grant le classeur en cours. Il est par exemple
possible d'crire une procdure vnement 12 associe l'ouverture du classeur. Une telle procdure, dont le nom est Workbook_open, devra tre crite
dans le module de classe ThisWorkBook.
Un autre exemple de module de classe est le module o est stock le
code associ chaque bote de dialogue. C'est galement dans ce module
que seront programmes les procdures qui grent la bote de dialogue 13 .
9. Cet objet reprsente le classeur actif, comme son nom l'indique.
10. Ces lments sont appels des contrles.
11. Voir section suivante.
12. cf. section 5.4 (page 17).
13. Ne serait-ce que par exemple les procdures rgissant le comportement des boutons
de commandes de la bote de dialogue.

VARIABLES ET CONSTANTES

2.7 La fentre proprits


A chaque objet est associ toute une srie de proprits, contenues dans
la fentre proprits. Pour visualiser ces proprits, utiliser la commande
Achage/Fentre Proprits.
Il est par exemple possible de transformer sa guise la couleur de fond
d'une bote de dialogue, en modiant sa proprit BackColor 14 ou encore de
modier le type de police grce la proprit Font.
Il est galement souhaitable de renommer les lments contenus dans
le projet, an de donner des noms plus explicites que les noms par dfaut
aects par Excel. Dans le mme ordre d'ide, on peut galement renommer
le projet.
An d'tre plus ecace, il est conseill de travailler sous l'diteur avec la
fentre proprits et l'explorateur de projets en permanence ouverts, le reste
de l'cran servant visualiser l'lment slectionn.

2.8 Obtenir de l'aide


Il y a de nombreuses possibilits pour obtenir de l'aide sous l'environnement VBE. Le compagnon Oce peut tout d'abord tre interrog grce au
bouton Assistant Oce de la barre d'outils standard. Si la rponse n'est
pas satisfaisante 15 , procder la recherche grce la commande ?/Sommaire et Index. En outre, tout moment la touche F1 permet d'obtenir
une aide contextuelle.
Une autre possibilit intressante pour se retrouver dans la masse des
proprits et mthodes mises disposition pour chaque objet est d'utiliser
l'explorateur d'objets grce la commande Achage/Explorateur d'objets (F2). Cet outil permet de chercher une proprit ou une mthode donne
grce un index.
Enn, comme signal prcdemment, l'enregistreur de macro peut tre
galement un bon moyen de dterminer les commandes utiliser pour une
action particulire. Il sura alors de raliser l'action manuellement et de voir
ensuite comment Excel l'a traduite en VBA.
3

Variables et constantes

3.1 Les types de donnes


VBA autorise la cration de la plupart des types de donnes classiques.
Les principaux types de donnes disponibles sont les suivants :
 Integer : entier court ;
14. Pour cela, cliquer sur la ligne BackColor et utiliser le slecteur qui apparat.
15. comme souvent...

VARIABLES ET CONSTANTES











Long : entier long ;


Single : rel simple ;
Double : rel en double prcision ;
Currency : nombre montaire ;
Date : date et heure 16 ;
String : chane de caractres ;
Boolean : boolen (True ou False ) ;
Object : rfrence quelconque un objet ;
Variant : type particulier pouvant tre n'importe quel autre type.

Outre ces types lmentaires, il est galement possible de crer des tableaux et des types personnaliss. Les deux exemples de dclarations suivantes illustrent le fonctionnement de ces deux types de donnes :
Dim tab[1 to 20] As Integer
Type personne
nom As String * 20
adresse As String * 50
anniversaire As Date
End Type

L'instruction Dim sert dclarer la variable tab comme un tableau,


comme on le verra la section suivante.
L'instruction Type permet de dnir le type personnalis personne. On
accde ensuite chaque champs d'un type personnalis en spciant la dsignation du champs la suite du nom de la variable. On crira par exemple :
Dim zaza As personne
zaza.nom = ''x''
zaza.anniversaire = ''12/02/1979''

3.2 Nom des variables


Les noms des variables doivent commencer par un caractre alphabtique
et ne pas comporter les caractres suivants :
. % & ! # @ $

De plus, ils ne peuvent pas excder 255 caractres. Pour faciliter la lisibilit des programmes, on s'eorcera d'utiliser des minuscules pour les variables
utilises par le programme.
16. Le problme du passage l'an 2000 est pris en compte !

VARIABLES ET CONSTANTES

3.3 Dclaration des variables


Par dfaut, il n'est pas ncessaire de dclarer les variables utilises. On
peut donc utiliser n'importe quelle variable sans se proccuper de sa dclaration pralable. Cependant, ce type de fonctionnement n'est pas satisfaisant.
En eet, d'une part, les variables non dclares ont en fait toutes le type
variant, qui peut contenir n'importe quel autre type. Il va de soit que la taille
des variables cres est alors loin d'tre optimise, ce qui ralentit l'excution
et consomme de la mmoire inutilement.
D'autre part, la dclaration explicite des variables permet d'viter certaines erreurs diciles dtecter, ds que le programme devient un tant soit
peu complexe. Il vaut donc mieux opter pour la dclaration explicite des
variables : on crira cet eet la ligne Option Explicit au dbut de chaque
module de code 17 .
L'instruction utilise pour dclarer une variable est Dim comme on l'a
dj vu 18 :
Dim ma_variable As Integer

3.4 La porte des variables


Toutes les variables n'ont pas la mme porte. On distingue les variables
locales et les variables globales ou publiques.
Les variables locales sont dclares par l'instruction Dim au niveau d'une
procdure ou d'une fonction 19 . Elles ne sont accessibles qu' l'intrieur d'une
procdure ou de la fonction l'intrieur de laquelle elles apparaissent. Leur
dure de vie est d'ailleurs limite l'existence de la procdure ou de la
fonction dans laquelle elles sont dnies.
La porte des variables globales s'tend au niveau du module dans lesquelles elles sont dclares. Les dclarations s'eectuent au dbut du module,
et les variables concernes seront disponibles pour toutes les procdures et
fonctions du module.
Il est galement possible de dnir des variables globales, utilisables dans
tous les autres modules, grce l'instruction Public :
Public var_publique As Integer

Les variables globales ont une dure de vie beaucoup plus importante que
les variables locales : leur contenu est en eet conserv jusqu' l'initialisation
du programme 20 .
17. Cocher la case Dclaration explicite des variables dans la bote de dialogue obtenue
par la commande
sous VBE (onglet Editeur ).
18. En fait, il existe d'autres possibilits (cf. section 3.4, page 9).
19. cf. section 5, page 15.
20. Cette initialisation n'est pas automatique. Elle a lieu la premire excution du
programme et peut tre obtenu grce l'instruction end.

Outils/Options...

PRINCIPAUX MOTS-CL DU LANGAGE VBA

10

Des conits entre les direntes variables peuvent apparatre dans certains programmes. Dans ce cas, VBA applique une rgle simple : les variables
prises en compte sont celles qui ont le domaine de validit le plus restreint.

3.5 Les constantes


Il se trouve souvent dans un programme des valeurs qui doivent tre
utilises, mais qui ne sont pas susceptibles de varier. Dans le but d'amliorer
la lisibilit des programmes mais aussi de faciliter la modication ultrieure
du programme, on aura tout intrt dnir des constantes symboliques,
dans un module particulier.
L'instruction Const sert dclarer les constantes, qui peuvent tre types
ou non :
Dim taux_interet = 0,03
Dim nb_max As Integer = 100

Pour le nom des constantes, les mmes rgles que dans le cas des variables
s'appliquent.
Il est noter qu'au sein de VBA sont dnies un grand nombre de
constantes auxquelles on peut accder, dans n'importe quel programme. Ces
constantes ont t implmentes pour faciliter la tache des programmeurs,
qui peuvent par exemple utiliser des constantes prdnies au nom explicite
pour exploiter certaines valeurs retournes par des fonctions prprogrammes. Consulter l'aide en ligne pour obtenir plus d'informations.
4

Principaux mots-cl du langage VBA

VBA comprend un grand nombre d'instructions. Cette section prsente


quelques mots cls importants et couramment utiliss. La plupart des mots
cls prsents ici sont en fait les mmes que ceux utiliss dans la plupart
des langages. Attention, de nombreuses instructions utiles ne sont pas cites
dans cette section 21 . Pour plus d'informations, consulter l'aide en ligne la
rubrique Mots cls.

4.1 Les oprateurs


4.1.1 Oprateurs arithmtiques.
Les oprateurs suivants permettent de raliser les oprations lmentaires :
+ - * /

21. Il existe en particulier des instructions permettant de grer les chiers, les entres/sorties, etc.

PRINCIPAUX MOTS-CL DU LANGAGE VBA

11

De plus, les oprateurs Mod et n permettent de dterminer respectivement le reste et le quotient d'une division entire. Enn & permet de
concatner deux chanes de caractres 22 .

4.1.2 Oprateurs de comparaison.


Les oprateurs suivants permettent de raliser les comparaisons classiques :
= <> < > <= >=

Il n'y a donc pas de dirence entre l'oprateur d'aectation et l'oprateur de comparaison. Les oprateurs Like et Is permettent, de plus, respectivement de comparer deux chanes de caractres et deux variables de type
objet. Consulter l'aide en ligne pour plus de prcisions.

4.1.3 Oprateurs logiques.


Les principaux oprateurs suivants permettent les oprations classiques :
Not And Or Xor

4.2 Structures conditionnelles


4.2.1 If Then Else ElseIf
L'instruction If Then Else permet d'crire une structure conditionnelle.
La syntaxe est la suivante 23 :
If <condition> then
<instructions>
Else
<instructions>
End If

Lorsque la condition est ralise, la premire suite d'instructions est excute. Dans le cas contraire, c'est bien sr la deuxime suite d 'instructions
qui est excute. Noter que l'instruction Else est facultative.
Dans le cas o il est ncessaire d'imbriquer plusieurs structures conditionnelles, on peut utiliser l'instruction ElseIf :
If <condition> Then
<instructions>
ElseIf <condition>
<instructions>
End If

22. On peut galement pour cela utiliser l'oprateur +.


23. Lorsque la structure conditionnelle ne prsente qu'une instruction, il est galement
possible de l'crire sur une seule ligne en omettant l'instruction End If. La syntaxe propose ici a l'avantage d'tre plus claire et de permettre le rajout ultrieur d'instructions
supplmentaires.

PRINCIPAUX MOTS-CL DU LANGAGE VBA

12

4.2.2 Select Case


L'instruction Select Case permet d'crire une structure conditionnelle
dans laquelle une expression doit tre compare plusieurs valeurs. Elle
remplace alors avantageusement l'instruction ElseIf. La syntaxe est la suivante :
Select Case <variable>
Case valeur1:
<instructions>
Case valeur2:
<instructions>
...
Case Else:
<instructions>
End Select

Lorsque la variable est gale une valeur rpertorie, les instructions


correspondantes sont excutes, et l'instruction Select Case se termine. La
ligne Case Else permet d'inclure toutes les occurrences de la variable non
rpertories auparavant. Elle est facultative.

4.3 Boucles
4.3.1 Do While Loop
L'instruction Do While Loop permet de raliser une boucle conditionnelle.
La syntaxe est la suivante :
Do While <condition>
<instructions>
Loop

La condition est value au dbut du traitement. Si elle est vraie, les


instructions sont excutes. Ensuite la condition est rvalue, et ainsi de
suite.

4.3.2 Do Until Loop


L'instruction Do Until Loop est similaire Do While Loop. Cependant, les
instructions contenues dans le corps de l'instruction sont d'abord excutes,
la suite de quoi la condition est value. La syntaxe est donc la suivante :
Do
<instructions>
Loop Until <condition>

PRINCIPAUX MOTS-CL DU LANGAGE VBA

13

4.3.3 For Step Next


L'instruction For Step Next est utilise pour rpter une action selon un
nombre d'itrations dtermin. La syntaxe est la suivante :
For <variable> = valeur1 To valeur2 Step <pas>
<instructions>
Next <variable>

Step sert indiquer le pas d'itration. Cette prcision est toutefois facultative : par dfaut, la valeur du pas utilis est 1.

4.3.4 For Each In Next


For Each In Next est une variante de l'instruction For Step Next. Elle
permet de raliser une itration en parcourant tous les objets contenus dans
une collection 24 . La syntaxe est la suivante :
For Each <objet> In <collection>
<instructions>
Next <object>

Le code suivant permet par exemple de renommer toutes les feuilles de


calcul du classeur actif :
Dim i As Integer
Dim feuille As sheet
...
i = 0
For Each feuille In ActiveWorkbook.Sheets
i = i + 1
'Cstr (i) permet de convertir l'entier i en une chane de caractres
feuille.Name = "Feuil" + CStr(i)
Next feuille

A noter dans le programme ci-dessus la ligne de commentaire introduite


par une apostrophe.

4.4 Gestion des programmes


4.4.1 Exit
L'instruction Exit permet de sortir de la squence en cours. Par exemple,
pour terminer prmaturment une procdure, on crira :
Sub essai()
...
If <condition> Then
Exit Sub

24. cf. section 1.3 (page 3).

PRINCIPAUX MOTS-CL DU LANGAGE VBA

14

End If
...
End Sub

De mme, les commandes Exit Do et Exit Next permettent de quitter


une structure conditionnelle et une boucle For Next.

4.4.2 End et Stop


L'instruction End permet de mettre n une squence, comme on l'a
dj vu avec les instructions End Sub, End Function ou End If.
L'emploi de End de faon isole est plus intressant et permet de mettre
n au programme en cours, en liminant de la mmoire les variables utilises, les botes de dialogue ventuellement charges, les chiers ouverts par
la commande Open, etc. En eet, par dfaut, toutes ces informations sont
conserves en mmoire la n de l'excution d'un programme.
L'instruction Stop stoppera de faon analogue le programme en cours,
mais conservera cette fois l'ensemble des informations en cours.

4.4.3 On Error GoTo


L'instruction On Error Goto permet de grer les erreurs qui peuvent
apparatre dans un programme. Le programmeur a ainsi la possibilit de
prvoir les erreurs possibles, en ragissant en consquence. La syntaxe est la
suivante :
Sub essai()
On Error GoTo <tiquette>
...
<tiquette>:
'traitement de l'erreur
End Sub

L'instruction On Error GoTo 0 permet tout moment d'invalider le


contrle des erreurs par la squence On Error GoTo. Pour traiter correctement l'erreur, il est possible d'utiliser la proprit Number de l'objet Err.
Celle-ci renvoie le numro d'erreur 25 . Enn, l'instruction Resume permet de
reprendre le cours normal du programme en ignorant la cause de l'erreur et
la commande On Error Resume Next permet d'ignorer systmatiquement les
erreurs, en sautant les instructions correspondantes.
Voici une illustration du mcanisme de traitement des erreurs 26 :
Sub essai()
Dim i As Integer

25. Consulter l'aide pour connatre l'erreur correspondante.


26. L'instruction MsgBox permet d'acher automatiquement une bote de dialogue.
Consulter l'aide en ligne pour plus d'informations.

PROCDURES ET FONCTIONS

15

On Error GoTo erreur


'ouverture du fichier 'classeur1.xls'
Workbooks.Open ("classeur1.xls")
...
erreur:
'message d'information
i = MsgBox("Impossible d'ouvrir le fichier 'classeur1.xls'!", vbCritical)
'reprise du programme
Resume
End Sub

4.5 Conversion de types


Il est parfois ncessaire d'oprer des conversions de types. VBA permet
d'eectuer ces oprations grce une srie d'instructions, dont voici quelques
exemples :






CInt : conversion en type de donnes entier ;


CStr : conversion en type de donnes string ;
CBdl : conversion en type de donnes double ;
CDate : conversion en type de donnes date ;
CVar : conversion en type de donnes variant.

Un exemple d'utilisation d'une telle instruction a t donn la section


4.3.4 (page 13).
5

Procdures et fonctions

Un programme est gnralement compos d'une succession de sous-programmes,


ralisant des actions indpendantes. Ces sous-programmes sont appels procdures ou fonctions. La dirence entre les deux est qu'une fonction renvoie
une valeur l'inverse d'une procdure.

5.1 Les procdures


L'instruction Sub permet de dclarer une procdure. Par dfaut, une
procdure est de type Public, c'est--dire qu'on peut l'utiliser partir de
tous les modules. En revanche, l'utilisation du mot cl Private restreint la
validit de la dclaration au module dans lequel la procdure est dclare.
Voici deux exemples :
Sub ma_procdure()
'dclarations des variables ventuelles
...
'corps d'une procdure publique

PROCDURES ET FONCTIONS

16

...
End Sub
Private Sub ma_procdure()
'dclarations des variables ventuelles
...
'corps d'une procdure prive
...
End Sub

5.2 Les fonctions


De faon analogue aux procdures, l'instruction Function permet de dclarer une fonction. Les rgles de porte qui s'appliquent sont les mmes que
dans le cas des procdures. Le type de la valeur que renvoie la fonction doit
tre dclar comme le montre l'exemple suivant :
Function ma_fonction() As Boolean
'dclarations des variables ventuelles
...
'corps d'une fonction publique renvoyant un boolen
...
End Function

5.3 Passage d'arguments par valeur ou par rfrence


Il est possible de passer des arguments une procdure ou une fonction.
L'appel au sous-programme considr peut tre ralis grce l'instruction
Call suivie du nom du sous-programme et de la liste des arguments placs
entre parenthses :
Call ma_fonction(23)

On distingue deux types de mcanismes en ce qui concerne le passage


d'arguments : le passage par valeur et le passage par rfrence. Lorsqu'une
variable est transmise par rfrence, la procdure ne peut modier la variable concerne : elle ne travaille en fait que sur une copie temporaire de
la variable en question. A l'inverse, lors d'un passage par valeur, la variable
considre est rellement utilise par la procdure, qui est donc susceptible
de la modier.
Par dfaut, les variables sont transmises par rfrence. Pour transmettre
un argument par valeur, il faut utiliser le mot cl ByVal, comme le montre
l'exemple suivant :
Sub rfrence(i As Integer)
'passage par rfrence
i = 1

CONCEPTION DE PROGRAMME

17

End Sub
Sub valeur(ByVal i As Integer)
'passage par valeur
i = 2
End Sub
'procdure principal
Sub essai()
Dim i As Integer
i = 0
Call valeur(i)
'i vaut 0, malgr l'appel prcdent
Call rfrence(i)
'i vaut 1 maintenant
End Sub

5.4 Les procdures vnements


Les procdures vnements sont des procdures particulires. Comme on
l'a vu la section 2.6 (page 6), ce type de procdures est implment dans
des modules de classe.
Elles servent dnir les actions devant intervenir pour un certain nombre
d'vnement prprogramms et grs automatiquement par Excel.
L'diteur permet de dterminer dans chaque module quels sont les vnements qu'on peut grer pour un objet donn.
A cet eet, il sut d'utiliser le slecteur d'objets en haut gauche de
chaque module de classe. Une fois l'objet souhait slectionn, on pourra slectionn l'vnement dsir grce la liste droulante de droite. Excel cre
alors directement le corps de la procdure correspondante. Il est noter que
parfois les procdures vnements ont galement des arguments. Ces arguments sont utiliss en interne par Excel, comme l'illustre l'exemple suivant :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'si le classeur actif n'est pas protg, Cancel devient False
'Excel interromp alors le processus de fermeture du fichier
Cancel = Not (ActiveWorkbook.Protect)
End Sub
6

Conception de programme

6.1 Quelques conseils


Comme pour tous les langages de programmation, il convient de ne pas
sous-estimer la dicult des programmes que l'on dveloppe. On insrera
ainsi le maximum de commentaires explicitant le code.
'Ceci est un commentaire pertinent

CONCEPTION DE PROGRAMME

18

En VBA, les commentaires peuvent tre saisis n'importe o aprs un


apostrophe : la ligne suivant une apostrophe sera ignore lors de la compilation. Par dfaut, les commentaires apparaissent en vert dans l'diteur.
De plus, an de prserver la lisibilit du programme, on aura tout intrt
indenter rigoureusement le code source et ne saisir qu 'une instruction
par ligne 27 . Dans le cas o une ligne est trop longue, il est possible de la
((couper)) en deux grce un underscore _.
Enn, il est conseill de sauvegarder le plus souvent possible son travail,
surtout s'il s'agit d'un projet relativement complexe. 28 .

6.2 Utiliser des rfrences


De nombreuses bibliothques sont disponibles dans Excel et permettent
de raliser des oprations particulires. Pour visualiser les bibliothques auxquelles le projet en cours fait rfrence, utiliser la commande Outils/Rfrences...
de l'diteur.
Certaines bibliothques contiennent le corps du langage VBA et sont
intgres par dfaut au projet en cours. C'est le cas par exemple de la bibliothque Visual Basic For Applications. Les autres sont utilises pour des
utilisations spciques et ne doivent tre rfrences qu'en cas de besoin 29 .
Par exemple, la bibliothque Microsoft DAO 3.51 Object Library permet
de grer depuis Excel une base de donnes Access. L'ajout d'une rfrence
rajoute une nouvelle collection d'objets, qui apportent de nouvelles fonctionnalits Excel.

6.3 Dbogage de programme


L'diteur VBE ore de nombreuses possibilits pour dboguer un programme. Il est par exemple possible de tester une macro en mode pas pas,
d'utiliser des points d'arrt, ou encore des espions.
Le mode pas pas permet d'excuter le programme instruction par instruction, la touche F8 entranant l'excution de l'instruction suivante. Les
points arrts permettent d'interrompre temporairement l'excution du programme le temps de visualiser par exemple le contenu des variables, grce
un espion 30 .
La touche F5 permet de relancer l'excution du programme jusqu'au
prochain point d'arrt.
27. Il est cependant possible de saisir plusieurs instructions par ligne en les sparant par
un double point.
28. Excel se rvle en eet parfois assez instable ; une erreur fatale peut toujours se
produire.
29. La rfrence une bibliothque consomme en eet de la mmoire.
30. Il est noter que, quand l'excution d'un programme est interrompue, il est possible
de visualiser le contenu d'une variable en pointant sur l'expression considre le pointeur
de la souris. Pour les expressions complexes, il est prfrable d'utiliser des espions.

UN EXEMPLE PRATIQUE

19

Dans la plupart des cas, il est possible de corriger en temps rel les erreurs
dtectes. On peut alors relancer l'excution du programme sans tre oblig
d'initialiser le programme. Avant de tester l'excution d'un programme, utiliser la commande Dbogage/Compiler <projet> 31 et corriger les erreurs
signales, pour gagner du temps.
Enn, la touche ESC permet d'interrompre le programme pendant son
excution.

6.4 Les macros complmentaires


Les macros complmentaires ne sont rien d'autres que des programmes
VBA, ralisant des tches particulires ou fournissant des fonctions supplmentaires. Les macros utilises dans la session en cours peuvent tre visualises par la commande Outils/Macros complmentaires... de l'diteur.
Comme dans le cas des rfrences, il ne faut les activer qu'en cas de besoin.
Par exemple, la macro complmentaire Utilitaire d'analyseVBA fournit des
fonctions et procdures VBA, qui vous permettent d'utiliser de nombreuses
fonctions nancires et des outils d'analyse statistique.
L'un des principaux avantages d'une macro complmentaire est qu'elle
est pr compile, ce qui acclre son excution.
Les macros complmentaires peuvent tre ralisaes trs facilement, en
enregistrant simplement le programme dvelopp en tant que macro complmentaire. Pour utiliser le chier gnr, il faudra ensuite activer la macro
grce la commande Outils/Macros complmentaires.... Le programmeur doit cependant garder l'esprit un certain nombre de remarques :
 une macro complmentaire ne peut tre modie. Il faut donc conserver
une version sous la forme d'un chier classique pour pouvoir apporter
des modications la macro par la suite ;
 le classeur d'une macro complmentaire ne peut tre modi : si l'on
veut stocker des informations de manire permanente, il faudra les
enregistrer ventuellement dans un autre classeur ; de mme, il faut
gnralement prvoir des botes de dialogue pour grer l'interface utilisateur ;
 la macro complmentaire n'est pas le classeur actif : les rfrences aux
feuilles de la macro doivent tre prcdes par exemple du nom du
classeur.
7

Un exemple pratique

On se propose de raliser une macro permettant la saisie d'informations


l'cran. Plus prcisment, on souhaite concevoir une bote de dialogue dans
31. Il vaut mieux prendre l'habitude de sauvegarder son travail avant de lancer la compilation. Celle-ci peut en eet parfois entraner des erreurs fatales...

UN EXEMPLE PRATIQUE

20

laquelle l'utilisateur rentrera son nom, sa qualit et sa date de naissance. Les


informations saisies devront alors tre reportes dans une feuille de calcul 32 .

7.1 Conception de la bote de dialogue


La premire tape consiste crer la bote de dialogue. Pour cela, insrer une nouvelle bote de dialogue sous l'diteur en utilisant la commande
Insertion/UserForm. Faire ensuite apparatre la bote outils grce la
commande Achage/bote outils. Crer deux zones d'dition (TextBox ) pour la saisie du nom et de la date de naissance, en indiquant avec
deux zones de texte (Label ) le nom du champ considr. Pour la saisie de
la qualit, une liste droulante permettant le choix entre plusieurs champs
prdnis (Mlle, Mme et M.) est tout indiqu. Crer enn les deux boutons
classiques OK et Annuler.
Penser dnir correctement les proprits Cancel et Default des boutons 33 . Ne pas oublier enn de donner un titre la bote de dialogue (proprit Caption ) et galement de se proccuper de l'ordre de tabulation 34 .
Lors de la conception d'une bote de dialogue, utiliser la barre d'outils
Userform et le menu Format de l'diteur pour amliorer sa mise en forme.
La bote de dialogue nale devrait ressembler la gure 1.

Fig.

1  Un exemple de bote de dialogue

Une fois la bote de dialogue cre, il reste aecter des noms personnaliss aux dirents contrles utiliss. Cette opration n'est pas obligatoire
32. L'intrt d'un tel programme est avant tout pdagogique...
33. Ces deux proprits dnissent quel bouton est activ par les touches RETURN et
ESC. Aecter ici Cancel True pour le bouton Annuler et Default False pour le bouton
OK. Procder l'opration inverse pour le bouton Annuler
34. La commande
permet de dnir l'ordre dans
lequel l'utilisateur pourra se dplacer parmi les contrles grce la touche TAB.

Achage/Ordre de tabulation

UN EXEMPLE PRATIQUE

21

mais facilitera la programmation par la suite. Pour cela, acher les proprits de chaque objet 35 et modier le champ nom. On choisira par exemple les
noms suivants :







zone de saisie du nom : nom ;


zone de saisie de la date de naissance : date_naissance ;
zone droulante : qualit ;
bouton OK : bouton_ok ;
bouton Annuler : bouton_annuler ;
bote de dialogue elle-mme : bote_saisie.

Il est inutile d'aecter un nom aux zones de texte, dans la mesure o


elles ne seront pas manipules dans le code par la suite.

7.2 Programmation des contrles de la bote


Une fois la bote cre, il est ncessaire de programmer le comportement
des dirents contrles. Il faut pour cela inclure du code dans le module de
classe associ la bote de dialogue 36 .
Il est ncessaire tout d'abord de prvoir, lors de l'initialisation de la bote
de dialogue, le remplissage de la zone droulante. Ensuite, il faut programmer
le comportement des deux boutons crs. Lorsque l'utilisateur appuie sur
Annuler, il faut fermer la bote de dialogue. Un clic sur OK devra provoquer
la fermeture de la bote de dialogue et l'criture des informations saisies dans
une feuille de calcul. Voici le code permettant de raliser ces traitements :
'force la dclaration explicite des variables
Option Explicit
'procdure vnement grant un clic sur le bouton OK
Private Sub bouton_ok_Click()
'criture des saisies dans la feuille de calcul
'Feuil1 (cellules A1, B1 et C1)
With Sheets("Feuil1")
.Range("A1").Value = qualit.Text
.Range("B1").Value = nom.Text
.Range("C1").Value = date_naissance.Text
End With
'fermeture de la bote de dialogue
Hide
End Sub

35. Pour cela, faire apparatre la fentre proprits grce la commande

chage/Fentres Proprits et slectionner simplement chaque objet.


36. cf. section 2.6 (page 6)

A-

UN EXEMPLE PRATIQUE

22

'procdure vnement grant un clic sur le bouton Annuler


Private Sub bouton_annuler_Click()
'fermeture de la bote de dialogue
Hide
End Sub
'procdure vnement s'excutant l'apparition de la bote de dialogue
Private Sub UserForm_Initialize()
'remplissage de la zone droulante
With qualit
.AddItem ("Mlle")
.AddItem ("Mme")
.AddItem ("M.")
'valeur par dfaut
'les valeurs d'une liste droulante sont repres avec des indices
'dont le premier commence 0. Ecrire 1 pour "Mme" et 2 pour "M."
.ListIndex = 0
End With
End Sub

Pour remplir la liste droulante, on peut galement crire les trois champs
concerns dans une feuille de calcul et aecter les plages concernes la proprit RowSource de la liste droulante. Si on saisit par exemple les champs
dans les cellules A1, A2 et A3 de la feuille Feuil2, on peut aecter directement la valeur Feuil2!A1:A3 cette proprit.
A noter que dans le module de classe, il est implicite que les objets cits
font rfrence la bote de dialogue. Il n'est donc pas ncessaire de prciser
le nom de la bote de dialogue chaque fois qu'on manipule un contrle, en
crivant par exemple :
Sheets("Feuil1").Range("A1").Value = Bote_saisie.qualit.Text

Le langage VBA permet de nombreuses critures implicites de ce type.


Par exemple, dans le code ci-dessus, la rfrence la feuille Feuil1 sousentend qu'il s'agit de la feuille Feuil1 du classeur actif.
Il est enn ncessaire de crer une procdure servant acher la bote
de dialogue de saisie. C'est en quelque sorte le programme principal. Cette
procdure n'est pas rattache un objet quelconque. On doit donc la programmer dans un module gnral 37 .
Voici la procdure en question :
Public Sub saisie()
'lancement de la bote de dialogue
Bote_saisie.Show
End Sub

37. Utiliser la commande

Insertion/Module pour insrer un nouveau module.

UN EXEMPLE PRATIQUE

23

Cette procdure doit tre publique pour pouvoir tre excute par exemple
par la commande Outils/Macro/Macros....

7.3 Amliorations possibles


Le programme prcdent est satisfaisant. Cependant, il prsente quelques
imperfections. Par exemple, il serait souhaitable que le programme vrie que
l'utilisateur a bien saisi les informations demandes.
De plus, il serait bon de vrier que l'utilisateur a bien rentr une date
comprhensible par Excel. Voici le code de la nouvelle procdure bouton_ok_Click
tenant compte de ces modications :
'procdure vnement grant un clic sur le bouton OK
Private Sub bouton_ok_Click()
Dim i As Integer
If nom.Text <> "" And date_naissance.Text <> "" Then
'vrifie si la date entre est valide
If Not (IsDate(date_naissance.Value)) Then
'message d'erreur
'MsgBox sert afficher un message au moyen d'une bote
'de dialogue automatique, consulter l'aide en ligne pour
'plus de renseignements
i = MsgBox("La date saisie est incorrecte!", vbCritical)
'effacement de la saisie et positionnement du focus sur
'le contrle date_naissance
With date_naissance
.SetFocus
.Text = ""
End With
'fin de la procdure
Exit Sub
End If
'criture des saisies dans la feuille de calcul
'Feuil1 (cellules A1, B1 et C1)
With Sheets("Feuil1")
.Range("A1").Value = qualit.Text
.Range("B1").Value = nom.Text
.Range("C1").Value = date_naissance.Text
End With
'fermeture de la bote de dialogue
Hide

POUR ALLER PLUS LOIN

24

Else
'message d'erreur
i = MsgBox("Veuillez entrer les donnes manquantes!", _
vbCritical, "Erreur")
End If
End Sub

7.4 Cration d'une commande spcique


On souhaite maintenant crer une commande spcique qui dclencherait
la procdure de saisie. Il est possible de raliser cette opration manuellement
ou par programmation. Voyons ici la mthode manuelle :
 activer la commande Achage/Barres d'outils/Personnaliser... ;
 crer une nouvelle barre d'outils (utilisez le bouton Nouvelle... de l'onglet Barre d'outils ) ;
 cliquer sur l'onglet Commandes et choisir la catgorie Macros ;
 cliquer sur la commande lment de menu personnalis et, tout en laissant appuy le bouton de la souris, dplacer l'lment dans la nouvelle
barre d'outils 38 ;
 modier le nom du nouveau menu introduit et lui aecter la macro
Saisie en utilisant le menu contextuel du nouveau menu.
8

Pour aller plus loin

8.1 Utiliser l'aide en ligne !


Ce guide n'est qu'une introduction au langage VBA. Le sujet est nanmoins particulirement vaste et de nombreux aspects du langage n'ont pas
t abord. Pour aller plus loin, consulter l'aide en ligne et utiliser l'explorateur d'objets, pour se retrouver dans la hirarchie des objets.

8.2 Quelques rfrences


Cette introduction a t rdige en grande partie grce La Bible Microsoft Excel 97 39 . Malgr des imperfections, ce livre constitue une bonne
rfrence pour les personnes voulant s'initier la programmation VBA.
Sur Internet, on pourra consulter avec prot le site de L. Longre
l'adresse suivante :
http://longre.free.fr/

38. Il sut pour cela de se positionner au dessus de la barre d'outils et de relcher le


bouton de la souris.
39. La rfrence exacte est : Microsoft Excel 97  Expertise et Programme de A. Dahms,
B. Van almsick et G. Hagemeister, collection La Bible, Micro Application, 1997.

POUR ALLER PLUS LOIN

25

Ce site est consacr Excel en gnral et la programmation VBA


en particulier. Il contient une mine d'informations, propose des exemples
tlcharger et recense galement un grand nombre de liens sur Excel.
On pourra aussi visiter le site de Philippe Noss, dveloppeur informatique indpendant, qui propose des exemples, des trucs et astuces, des liens,
etc., sur Excel. L'adresse est la suivante :
http://www.cybercable.tm.fr/~pnoss/index.html

On peut galement participer au forum suivant consacr Excel et la


programmation VBA (en langue franaise) :
microsoft.public.excel.fr.