You are on page 1of 67

Visual Basic pour Application

EXCEL 2000

Institut National Agronomique Paris-Grignon

Juliette Dibie-Barthlemy
novembre 2005

U.E.R. dInformatique

PLAN
I.

Introduction excel VBA_________________________________________________ 1

II.

Lenregistreur de macro________________________________________________ 2

II.1.

Enregistrer une macro____________________________________________________ 2

II.2.

Excuter une macro ______________________________________________________ 4

II.3.

Exercice________________________________________________________________ 4

III.

Lenvironnement Visual Basic Editor _____________________________________ 5

III.1.

Lexplorateur de projets __________________________________________________ 6

III.2.

Les modules de code______________________________________________________ 7

III.3.

Les procdures __________________________________________________________ 8

III.4.

Modifier une macro ______________________________________________________ 9

III.5.

Exercice_______________________________________________________________ 10

IV.

Les divers moyens pour excuter une macro ______________________________ 11

IV.1.

Excuter une macro partir d'un raccourci clavier___________________________ 11

IV.2.

Excuter une macro partir d'un bouton d'une barre d'outils__________________ 12

IV.3.

Excuter une macro partir d'un menu ____________________________________ 14

V.

Le modle objet dExcel _________________________________________________ 16


V.1.

Les objets _____________________________________________________________ 16

V.2.

Les collections__________________________________________________________ 16

V.3.

Laccs aux objets ______________________________________________________ 17

V.4.

Exercice_______________________________________________________________ 17

V.5.

Les proprits des objets _________________________________________________ 18

V.6.

Exercice_______________________________________________________________ 18

V.7.

Les mthodes des objets__________________________________________________ 19

V.8.

Exercice_______________________________________________________________ 19

V.9.

Les vnements_________________________________________________________ 20

V.10.

Exercice ____________________________________________________________ 22

V.11.

Lexplorateur dobjets ________________________________________________ 23

V.12.

Comment obtenir de laide : quelques astuces _____________________________ 25

VI.

Les fonctions dfinies par lutilisateur ___________________________________ 26

VI.1.

Crer une Fonction personnalise _________________________________________ 27

VI.2.

Exercice_______________________________________________________________ 28

VI.3.

Utiliser les fonctions intgres dExcel______________________________________ 29

VI.4.

Exercice_______________________________________________________________ 30

VII.

Le langage VBA _____________________________________________________ 31

VII.1.

Les variables et les constantes __________________________________________ 31

La dclaration des variables ___________________________________________________________


Le type des variables _________________________________________________________________
La porte des variables _______________________________________________________________
La dclaration des constantes __________________________________________________________
Linstruction With...End With __________________________________________________________
Exercice ___________________________________________________________________________

31
32
34
34
35
35

VII.2.

Excuter une procdure sans argument __________________________________ 36

VII.3.

Les entres et sorties standards _________________________________________ 37

La fonction MsgBox _________________________________________________________________ 37


La fonction InputBox ________________________________________________________________ 39

VII.4.

Rcapitulatif sur les parenthses et les listes darguments ___________________ 40

VII.5.

Exercice ____________________________________________________________ 41

VII.6.

Les noncs conditionnels ______________________________________________ 42

Linstruction If crite sur une seule ligne__________________________________________________ 42


Le bloc If __________________________________________________________________________ 42

VII.7.

Les noncs itratifs___________________________________________________ 44

La boucle Do...Loop_________________________________________________________________
Exercice ___________________________________________________________________________
La boucle For...Next_________________________________________________________________
La boucle For Each...Next____________________________________________________________
Linstruction Exit____________________________________________________________________
Exercice ___________________________________________________________________________

VII.8.

44
44
45
46
46
46

Les tableaux _________________________________________________________ 47

Exercice ___________________________________________________________________________ 47

VII.9.

Le dbogage _________________________________________________________ 48

Les erreurs de compilation et dexcution_________________________________________________ 48


Les erreurs Logiques _________________________________________________________________ 48

VIII.

Les objets UserForm _______________________________________________ 52

VIII.1.

Crer un objet UserForm ______________________________________________ 54

VIII.2.

Afficher et fermer un objet UserForm____________________________________ 56

Afficher un objet UserForm___________________________________________________________ 56


Fermer ou masquer un objet UserForm _________________________________________________ 56

VIII.3.

Associer du code un objet UserForm ___________________________________ 57

Associer du code un bouton de commande_______________________________________________


Exercice ___________________________________________________________________________
Initialiser un objet UserForm __________________________________________________________
Accder aux contrles dun objet UserForm ______________________________________________

VIII.4.

IX.

58
58
59
61

Afficher un objet UserForm partir dun bouton dune feuille de calcul _______ 63

Bibliographie _______________________________________________________ 64

I.

INTRODUCTION A EXCEL VBA

EXCEL VBA (Visual Basic pour Application) est un langage de programmation


permettant dutiliser du code Visual Basic pour excuter les nombreuses
fonctionnalits de lApplication EXCEL.
Un programme crit en VBA est souvent appel une macro.
Les macros permettent notamment dautomatiser des tches rptitives ralises
sous EXCEL. Elles peuvent aussi tre utilises pour crer des botes de dialogue
afin de rendre une application dveloppe sous EXCEL plus conviviale.

Une macro peut tre cre en utilisant l'enregistreur de macros, qui ne


ncessite aucune connaissance du langage VBA.
Cependant une macro ainsi cre ne sexcutera que sur un ensemble de cellules
donnes et le code produit ne sera pas toujours trs efficace. Pour pouvoir crer
des macros propres ses besoins, efficaces et interactives, il faut apprendre
programmer en VBA.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 1

II. LENREGISTREUR DE MACRO


Lenregistreur de macro permet dcrire du code VBA partir doprations
effectues manuellement sous EXCEL.

II.1. ENREGISTRER UNE MACRO


Crer une macro MACRO1 qui crit dans la cellule A1 le texte "INA P-G" en
caractres gras et dans la cellule G1 la date du jour en caractres italiques.
Avant de commencer lenregistrement, il faut se poser plusieurs questions :
penser la manire deffectuer les oprations manuelles ;
se demander quand commencer lenregistrement. Dans notre cas, la slection
de la cellule A1 fait partie de lenregistrement puisquon veut que le texte
"INA P-G" se trouve dans cette cellule. Si lenregistrement ne commence pas
par la slection de la cellule A1, le texte tap est crit dans la cellule active.
se demander quand arrter lenregistrement.
Question : que faire pour que la cellule active aprs lexcution de la macro
soit la cellule A1 ?

1) Ouvrir un nouveau classeur et lenregistrer sous TEST-MACRO.XLS.


2) Les cellules dans une macro sont identifies laide dune lettre (colonne)
suivie dun chiffre (ligne), comme par exemple la cellule A1. Afin de faciliter la
lecture du code VBA gnr, il est prfrable de choisir la mme identification
des cellules dans le classeur dans lequel est enregistr la macro. Si tel nest pas
le cas, activer la commande OUTILS OPTIONS, cliquer sur l'onglet GENERAL et
dcocher la case STYLE DE REFERENCE L1C1.
3) Positionner le curseur sur une autre cellule que la cellule A1 de la feuille de
calcul FEUIL1.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 2

4) Activer la commande OUTILS


MACRO NOUVELLE MACRO.
5) Taper MACRO1 dans la zone NOM
DE LA MACRO.
6) Dans la zone ENREGISTRER LA
MACRO DANS, slectionner l'option CE CLASSEUR ; la macro MACRO1 nest alors
disponible que dans le classeur TEST-MACRO.XLS.
Remarque : La zone ENREGISTRER LA MACRO DANS permet de dterminer
lendroit o la macro MACRO1 sera enregistre. Il existe trois options :
Avec l'option CLASSEUR DE MACROS PERSONNELLES, la macro est enregistre
dans un classeur spcial appel PERSO.XLS. Ce classeur est ouvert
automatiquement lors du lancement dEXCEL et ses macros sont donc
disponibles dans tous les classeurs ouverts. La commande FENETRE
AFFICHER permet dafficher ce classeur et la commande FENETRE MASQUER
de le masquer.
Loption NOUVEAU CLASSEUR permet denregistrer la macro dans un nouveau
classeur.
Loption CE CLASSEUR permet denregistrer la macro dans le classeur actif.
7) Cliquer sur le bouton OK.
8) La barre d'outils ARRET DE L'ENREGISTREMENT apparat, ce qui
marque le dbut de l'enregistrement. Par dfaut, l'enregistrement d'une
macro seffectue en utilisant des rfrences absolues aux cellules.
Remarque : Il est possible denregistrer une macro en utilisant des rfrences
relatives, en cliquant sur le bouton REFERENCE RELATIVE de la barre d'outils
ARRET DE L'ENREGISTREMENT.
9) Positionner le curseur sur la cellule A1, taper le texte "INA-PG", valider avec
le bouton et slectionner le style gras (G).
10) Positionner le curseur sur la cellule G1, taper la formule =AUJOURDHUI(),
valider avec le bouton et slectionner le style italique (I).

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 3

11) Arrter l'enregistrement en cliquant sur le carr bleu de la barre


d'outils ARRET DE L'ENREGISTREMENT.

NE JAMAIS OUBLIER DARRETER LENREGISTREMENT DUNE


MACRO.

II.2. EXECUTER UNE MACRO


1) Effacer le contenu des cellules A1 et G1.
2) Positionner le curseur sur une autre cellule que la cellule A1 de la feuille de
calcul FEUIL1.
3) Activer la commande
OUTILS MACRO MACROS.
4) Slectionner la macro
MACRO1 et cliquer sur le
bouton EXECUTER.

POUR SUPPRIMER UNE MACRO, ACTIVER LA COMMANDE OUTILS


MACRO MACROS, SELECTIONNER LA MACRO A SUPPRIMER ET
CLIQUER SUR LE BOUTON SUPPRIMER.

II.3. EXERCICE
Crer une macro MACROMOIS qui crit les noms de mois Janvier, Fvrier et
Mars en colonne partir de la cellule active. Utiliser lenregistreur de macro
avec rfrence relative aux cellules.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 4

III. LENVIRONNEMENT
EDITOR

VISUAL

BASIC

Nous avons vu comment crer une macro laide de lenregistreur de macro.


Nous allons maintenant examiner le code VBA produit. Pour ce faire, il faut
utiliser lditeur de Visual Basic, VISUAL BASIC EDITOR (VBE), qui sexcute
dans une fentre diffrente de celle dEXCEL.

Ouvrir VBE en activant la commande AFFICHAGE BARRE


D'OUTILS VISUAL BASIC et en cliquant sur l'objet VISUAL
BASIC EDITOR.
explorateur de projets

fentre proprits

Excel VBA INA-PG Juliette Dibie-Barthlemy

module de code

Page 5

III.1. LEXPLORATEUR DE PROJETS


A chaque classeur EXCEL ouvert est associ un projet VBA.
L'explorateur de projets affiche une liste hirarchise des diffrents projets
VBA associs aux classeurs EXCEL ouverts.
Un projet VBA associ un classeur regroupe les lments du classeur, comme
ses feuilles de calcul ou des botes de dialogue, et les procdures et les fonctions
associes au classeur et stockes dans un ou plusieurs modules de code.
Le projet VBA associ au classeur TEST-MACRO.XLS est compos de deux
dossiers :
le dossier MICROSOFT EXCEL OBJETS qui contient les lments attachs au
projet : le classeur TEST-MACRO.XLS (THISWORKBOOK) et ses feuilles de
calcul FEUIL1, FEUIL2 et FEUIL3 ;
le dossier MODULES qui contient les modules de code du projet : le module
MODULE1 qui contient la macro MACRO1.

SAUVEGARDER REGULIEREMENT SON TRAVAIL A LAIDE DE LA


COMMANDE FICHIER ENREGISTRER "NOMCLASSEUR.XLS".
LA COMMANDE FICHIER FERMER ET RETOURNER A MICROSOFT EXCEL
PERMET DE FERMER VBE ET DE RETOURNER DANS EXCEL.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 6

III.2. LES MODULES DE CODE


Lexplorateur de projets permet, laide du clic droit de la souris, douvrir un
module de code (option CODE), dinsrer un nouveau module de code (option
INSERTION) ou den supprimer un (option SUPPRIMER <NOMMODULE>).
La commande INSERTION MODULE permet galement dinsrer un nouveau
module de code.

Toutes les macros sont enregistres dans un module de code. Lenregistreur de


macro a insr le module de code MODULE1 qui contient la macro MACRO1. Un
module de code peut contenir plusieurs macros. On peut insrer autant de
modules de code quon le dsire.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 7

III.3. LES PROCEDURES


Une macro est appele en VBA une procdure, cest une suite d'instructions qui
ne retourne pas de valeur.
VBA permet galement dcrire des fonctions. Une fonction est une suite
d'instructions qui retourne une valeur. Nous les tudierons plus loin.
Lenregistreur de macro ne gnre que des procdures. Une procdure
commence par le mot cl Sub suivi du nom de la procdure et dune liste
darguments entre parenthses, qui peut tre vide. Elle se termine par le mot cl
End Sub. Une procdure a la syntaxe suivante :
Sub NomProcdure([argument_1,..., argument_n])
Instructions
...
End Sub
Remarque : Les crochets [ ] signifient que les arguments sont facultatifs.
Une instruction excute une tche prcise. Elle est gnralement crite sur une
seule ligne.
Exemple :
Range("A1").Select

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 8

III.4. MODIFIER UNE MACRO


Modifier la macro MACRO1 pour que la date du jour soit crite dans la cellule
G2 en caractres gras et italiques.

Avant de modifier la macro, voici quelques indications sur ses instructions :


Les lignes prcdes d'une apostrophe ' et de couleur verte sont des
commentaires.
Les mots de couleur bleue sont des mots cls (Sub, End Sub, True).
L'instruction Range("A1").Select slectionne (Select) une cellule (Range)
dsigne par sa ligne (1) et sa colonne (A)
L'instruction ActiveCell.FormulaR1C1 affecte une formule la cellule
active (ActiveCell).
L'instruction Selection.Font permet dappliquer un format de police
(Font.Bold ou Font.Italic) la cellule slectionne (Selection).

1) Pour que la date du jour soit crite dans la cellule G2 (et non dans la cellule
G1) en caractres gras et italiques (et non plus seulement en italique), il faut :
(a) modifier l'instruction Range("G1").Select en remplaant G1 par G2 ; (b)
ajouter la fin de la procdure l'instruction Selection.Font.Bold=True.
2) Activer la commande FICHIER ENREGISTRER TEST-MACRO.XLS.
3) Retourner dans EXCEL, effacer le contenu des cellules A1 et G1, puis
excuter la macro MACRO1 laide de la commande OUTILS MACRO MACROS.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 9

III.5. EXERCICE
La macro MACROMOIS doit avoir peu prs le code suivant :
Sub MacroMois()
ActiveCell.FormulaR1C1 = "Janvier"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "Fvrier"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "Mars"
End Sub
L'instruction ActiveCell.Offset(1,0).Range("A1").Select slectionne (Select)
une cellule (Range) qui est sur une ligne en dessous et sur la mme colonne
(Offset(dplacement_ligne, dplacement_colonne)) que la cellule active
(ActiveCell).
L'instruction ActiveCell.Offset(1,0).Range("A1").Select peut tre remplace
par linstruction ActiveCell.Offset(1,0).Select.
Modifier la macro pour que le nom de mois Avril soit crit, en caractres gras et
italiques, dans la cellule qui se trouve dans la colonne de droite et sur la mme
ligne que la cellule o est crit Janvier.
Janvier
Fvrier
Mars

Excel VBA INA-PG Juliette Dibie-Barthlemy

Avril

Page 10

IV. LES DIVERS MOYENS POUR EXECUTER


UNE MACRO
Nous vous prsentons plusieurs moyens pour excuter une macro dans EXCEL de
manire plus conviviale qu partir de la commande OUTILS MACRO MACROS.

IV.1. EXECUTER UNE MACRO A PARTIR D'UN


RACCOURCI CLAVIER
1) Retourner dans EXCEL et activer la commande OUTILS MACRO MACROS.
2) Slectionner la macro MACRO1 et cliquer sur le bouton OPTIONS
3) Taper g dans la zone TOUCHE
DE RACCOURCI.
4) La zone DESCRIPTION permet
de saisir un texte explicatif.
5) Cliquer sur le bouton OK.
6) Fermer la fentre MACRO en cliquant sur son bouton ANNULER ou sur son
bouton de fermeture (
).
7) Vrifier que le raccourci clavier Ctrl+g provoque l'excution de la macro
MACRO1.

SI LE RACCOURCI CLAVIER CHOISI ETAIT DEJA AFFECTE A UNE


COMMANDE EXCEL, IL SERA REATTRIBUE A LA MACRO SANS QUE
LON EN SOIT INFORME.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 11

IV.2. EXECUTER UNE MACRO A PARTIR D'UN


BOUTON D'UNE BARRE D'OUTILS
1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER
2)
Cliquer
sur
l'onglet
COMMANDES
et
slectionner
l'option MACROS dans la liste
CATEGORIES.
3)

Slectionner
BOUTON
PERSONNALISE
dans la liste
COMMANDES et le faire glisser
vers la barre d'outils.
4)

Le

bouton MODIFIER LA
SELECTION devient alors actif.
Cliquer dessus et activer la
UNE
commande
AFFECTER
MACRO
5) Slectionner la macro MACRO1 et cliquer sur le bouton OK.

6) Cliquer sur le bouton FERMER de la fentre PERSONNALISER.


nouveau bouton dans la barre d'outils

POUR SUPPRIMER UN BOUTON D'UNE BARRE D'OUTILS, ACTIVER


LA COMMANDE AFFICHAGE BARRE D'OUTILS PERSONNALISER,
SELECTIONNER LE BOUTON DANS LA BARRE D'OUTILS, CLIQUER
SUR LE BOUTON DROIT DE LA SOURIS ET ACTIVER LA COMMANDE
SUPPRIMER. CLIQUER SUR LE BOUTON FERMER DE LA FENETRE
PERSONNALISER.
Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 12

COMMENT CREER UNE NOUVELLE BARRE D'OUTILS ?

1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER


2) Cliquer sur l'onglet BARRES
D'OUTILS
et sur le bouton
NOUVELLE
3) Dans la zone NOM DE LA BARRE
D'OUTILS taper MA BARRE et
cliquer sur le bouton OK.
4) Une nouvelle barre
d'outils vide apparat.
5) On peut ajouter dans cette
nouvelle barre d'outils un bouton
pour excuter la macro MACRO1.

6) Cliquer sur le bouton FERMER de la fentre PERSONNALISER.

POUR SUPPRIMER UNE BARRE D'OUTILS, ACTIVER LA COMMANDE


AFFICHAGE BARRE D'OUTILS PERSONNALISER, CLIQUER SUR L'ONGLET
BARRES D'OUTILS SELECTIONNER MA BARRE DANS LA LISTE BARRE
D'OUTILS ET CLIQUER SUR LE BOUTON SUPPRIMER. CLIQUER SUR LE
BOUTON FERMER DE LA FENETRE PERSONNALISER.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 13

IV.3. EXECUTER UNE MACRO A PARTIR D'UN


MENU
1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER
2) Cliquer sur l'onglet COMMANDES
et slectionner l'option MACROS
dans la liste CATEGORIES.
3) Dans la barre de menu dEXCEL,
cliquer sur le menu FORMAT pour y
insrer le nouveau sous-menu.
4) Slectionner ELEMENT DE MENU
PERSONNALISE
dans la liste
COMMANDES et le faire glisser vers
le menu FORMAT, sous le sousmenu STYLE
5) Slectionner le nouveau sous-menu
ELEMENT DE MENU PERSONNALISE et
cliquer sur le bouton droit de la souris
(affichage du menu contextuel).
6) Dans la zone NOM taper &TITRE (&
provoque le soulignement du caractre
qui suit).
7) Activer la commande AFFECTER UNE
MACRO,
slectionner la macro
MACRO1 et cliquer sur le bouton OK.
8) Cliquer sur le bouton FERMER de la
fentre PERSONNALISER.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 14

COMMENT CREER UN NOUVEAU MENU ?

1) Activer la commande AFFICHAGE BARRE D'OUTILS PERSONNALISER


2)
Cliquer
sur
l'onglet
COMMANDES et slectionner
l'option NOUVEAU MENU dans
la liste CATEGORIES.
3)

Slectionner NOUVEAU
MENU dans la liste COMMANDES
et le faire glisser vers la barre
de menu entre les menus
FENETRE et ? dEXCEL.

4) Slectionner le nouveau menu NOUVEAU MENU et


cliquer sur le bouton droit de la souris.
5) Dans la zone NOM taper MENU &PERSO.
6) On peut ajouter dans ce nouveau menu un sousmenu TITRE pour excuter la macro MACRO1.

7) Cliquer sur le bouton FERMER de la fentre


PERSONNALISER.

POUR SUPPRIMER UN MENU (SOUS-MENU), ACTIVER LA


COMMANDE AFFICHAGE BARRE D'OUTILS PERSONNALISER,
SELECTIONNER LE MENU (SOUS-MENU), CLIQUER SUR LE BOUTON
DROIT DE LA SOURIS ET ACTIVER LA COMMANDE SUPPRIMER.
CLIQUER SUR LE BOUTON FERMER DE LA FENETRE PERSONNALISER.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 15

V. LE MODELE OBJET DEXCEL


Le langage de programmation VBA dpend de lapplication MICROSOFT OFFICE
laquelle il est attach (WORD, EXCEL, ACCESS...).
Chaque application de MICROSOFT OFFICE possde un ensemble dobjets
clairement dfinis, organiss en fonction des relations qui les unissent. Cette
organisation sappelle le modle objet de lapplication. Par exemple, dans
WORD, les objets manipuls sont des documents, des paragraphes, des mots...
Dans EXCEL, les objets manipuls sont des classeurs, des feuilles de calcul, des
plages, des cellules...
Nous prsentons, dans ce chapitre, le modle objet dEXCEL.

V.1. LES OBJETS


VBA est un langage de programmation oriente objet attach une
application. Tout est objet.
Exemple dobjets :
EXCEL est un objet Application ;
un classeur est un objet Workbook ;
une feuille de calcul est un objet Worksheet ;
une plage de cellules (qui peut se limiter une cellule) est un objet Range.

V.2. LES COLLECTIONS


De nombreux objets appartiennent une collection d'objets, la collection tant
elle-mme un objet.
Exemple de collections :
Dans lobjet Application, il existe une collection Workbooks qui contient
tous les objets Workbook ouverts. Chaque objet Workbook comporte une
collection Worksheets qui contient tous les objets Worksheet de ce
classeur. Chaque objet Worksheet contient des objets Range.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 16

V.3. LACCES AUX OBJETS


VBA permet de faire rfrence un objet de diffrentes faons. Nous illustrons
laccs aux objets EXCEL travers plusieurs exemples.
Pour faire rfrence une plage de cellules donne, il faut utiliser lobjet
Range.
Exemple : Range("A1:B4") permet de faire rfrence la plage de cellules
A1:B4 et renvoie un objet Range.
Pour faire rfrence un objet dans une collection, on peut soit utiliser le
numro de sa position dans la collection, soit son nom.
Exemple :
Worksheets(1) permet de faire rfrence la premire feuille de calcul du
classeur actif et renvoie un objet Worksheet.
Workbooks("Classeur1.xls").Worksheets("Feuil1") permet de faire rfrence
la feuille de calcul de nom Feuil1 du classeur de nom Classeur1.xls et
renvoie un objet Worksheet.
Remarque : La notation Workbooks("Classeur1.xls").Worksheets("Feuil1")
est une notation raccourcie pour Application.Workbooks("Classeur1.xls").
Worksheets("Feuil1").
Lobjet Application peut, en effet, toujours tre omis.

V.4. EXERCICE
Ecrire linstruction qui permet de faire rfrence la cellule B2 dans la
deuxime feuille de calcul de nom FEUIL2 du classeur TEST-MACRO.XLS.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 17

V.5. LES PROPRIETES DES OBJETS


Chaque objet est dfini par un ensemble de proprits, qui reprsentent les
caractristiques de lobjet.
Pour faire rfrence une proprit dun objet donn, il faut utiliser la syntaxe
Objet.Proprit.
Exemple :
La proprit Value de lobjet Range dsigne la valeur de lobjet spcifi.
Range("A1").Value = "INA P-G" affecte la valeur INA P-G la cellule A1.
La proprit ActiveCell de lobjet Application renvoie un objet Range, qui
fait rfrence la cellule active de la feuille de calcul.
ActiveCell.Font.Bold = True permet daffecter le style gras la cellule
slectionne (Font est une proprit de lobjet Range qui retourne un objet
Font contenant les attributs de police (taille, couleur, style, ...) de lobjet
Range. Bold est une proprit boolenne de lobjet Font qui correspond au
style gras).
La proprit Selection de lobjet Application renvoie lobjet slectionn
dans la fentre active. Le type de l'objet renvoy dpend de la slection en
cours.
Remarque : La proprit ActiveCell ne permet de faire rfrence qu une seule
cellule, alors que la proprit Selection permet de faire rfrence une plage de
cellules.

V.6. EXERCICE
Ecrire linstruction qui permet daffecter la valeur de la cellule B2 de la
deuxime feuille de calcul du classeur TEST-MACRO.XLS la cellule active.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 18

V.7. LES METHODES DES OBJETS


Les mthodes reprsentent les actions qui peuvent tre effectues par un objet
ou que l'on peut appliquer un objet.
Pour faire rfrence une mthode dun objet donn, il faut utiliser la syntaxe
Objet.Mthode.
Exemple :
La mthode Select de lobjet Range permet de slectionner une cellule ou une
plage de cellules.
Range("A1").Select slectionne la cellule A1.

V.8. EXERCICE
Expliquer ce que fait la macro suivante ?
Sub MacroSelection()
Range("A1:B6").Select
Selection.Font.Bold = True
Selection.Value = "Bonjour"
End Sub
Complter cette macro pour que Bonsoir soit crit dans la cellule B6.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 19

V.9. LES EVENEMENTS


Un vnement est une action reconnue par un objet. La reconnaissance dun
vnement par un objet permet de dclencher lexcution dune procdure
lorsque cet vnement survient. Un clic souris ou la frappe dune touche au
clavier sont des exemples dvnements qui peuvent tre interprts par du code
VBA.
Nous verrons plus loin que les contrles placs dans une bote de dialogue
(boutons de commande, zones de texte, ...) peuvent rpondre des vnements.
Les classeurs et les feuilles de calcul peuvent galement rpondre des
vnements.
Pour quun objet rponde un vnement, il faut crire du code VBA dans la
procdure associe lvnement considr.

Ecrire une procdure qui dtecte chaque nouvelle plage de cellules ou cellule
slectionne par lutilisateur dans la feuille de calcul FEUIL1 du classeur TESTMACRO.XLS et colorie son fond en bleu.
Avant dcrire cette procdure, il faut se poser plusieurs questions :
identifier lobjet dont on veut traiter lvnement. Dans notre cas, il sagit de
la feuille de calcul FEUIL1 qui est un objet Worksheet ;
identifier lvnement traiter dans la liste des vnements associs lobjet
considr. Dans notre cas, on sintresse chaque nouvelle slection dune
plage de cellules ou cellule dans la feuille de calcul, ce qui correspond
lvnement SelectionChange ;
crire le code VBA appropri dans la procdure associe lvnement
choisi.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 20

1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic (activer la


commande AFFICHAGE BARRE D'OUTILS VISUAL BASIC et cliquer sur l'objet
VISUAL BASIC EDITOR).
2) Dans lexplorateur de projets, selectionner la feuille de calcul FEUIL1 et
ouvrir son module de code laide du clic droit de la souris et de loption CODE.
3) Dans la liste de gauche au sommet du module de code, slectionner loption
WORKSHEET. Dans la liste de droite au sommet du module de code, slectionner
lvnement SELECTIONCHANGE.

zone Objet qui rfrence


tous les objets contenus
dans le module de code.

zone Procdure qui rfrence


toutes les procdures et fonctions
associes lobjet slectionn dans
la zone Objet

On voit alors apparatre dans le module de code len-tte de procdure suivant :


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On veut prsent crire les instructions VBA permettant de colorier le fond
dune cellule ou dune plage de cellules en bleue. Pour trouver ces instructions,
il existe deux possibilits :
utiliser lenregistreur de macro,
ou explorer les proprits de lobjet Range pour trouver comment modifier
sa couleur de fond.
Le moyen le plus facile pour dcouvrir les instructions ncessaires pour
accomplir une opration donne consiste utiliser lenregistreur de macro.
4) Aller dans EXCEL et enregistrer une nouvelle macro MacroCouleurFond
qui permet de modifier la couleur de fond dune cellule.
5) Retourner dans lditeur de Visual Basic et tudier le code de la macro
MacroCouleurFond.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 21

Linstruction Selection.Interior.ColorIndex = 41 semble intressante


puisquelle parle de couleur. Pour obtenir de laide sur cette instruction,
slectionner dans le code la proprit ColorIndex et appuyer sur la touche F1.
Laide en ligne de lditeur de Visual Basic permet dobtenir les informations
suivantes :
La proprit Interior dun objet Range renvoie un objet Interior qui
correspond la couleur de fond dune plage de cellules.
La proprit ColorIndex dun objet Interior permet de dterminer la couleur
de fond.
Pour obtenir de laide sur un objet, une proprit ou une mthode donne,
slectionner dans le code cet objet, cette proprit ou cette mthode et
appuyer sur la touche F1.
6) Retourner dans le module de code associ la feuille de calcul FEUIL1 et
complter la procdure Worksheet_SelectionChange comme suit :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Interior.ColorIndex = 41
End Sub
La variable Target qui est un objet Range reprsente la plage de cellules ou
cellule slectionne par lutilisateur dans la feuille de calcul FEUIL1.
7) Enregistrer la procdure et retourner dans EXCEL pour la tester (slectionner
une plage de cellules ou cellule et vrifier que sa couleur de fond devient bleue).

V.10. EXERCICE
Ecrire une procdure qui affiche Bonjour ! dans la cellule active avec la police
suivante : taille 12, style italique, couleur rouge, chaque fois que lutilisateur
active la feuille de calcul FEUIL2.
Avant dcrire cette procdure, il faut se poser plusieurs questions :
identifier lobjet dont on veut traiter lvnement ;
identifier lvnement traiter dans la liste des vnements associs lobjet
considr ;
crire le code VBA appropri dans la procdure associe lvnement
choisi.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 22

V.11. LEXPLORATEUR DOBJETS


Lexplorateur dobjets recense lensemble des objets disponible dans VBA, leurs
proprits, leurs mthodes et les vnements qui leur sont associs.
On appelle membres dun objet ses proprits, mthodes et vnements
associs.
Pour ouvrir lexplorateur dobjets, aller dans lditeur de Visual Basic et activer
la commande AFFICHAGE EXPLORATEUR D'OBJETS.
La zone PROJET/BIBLIOTHEQUE permet de slectionner le projet ou la
bibliothque dobjets de son choix. Vous pouvez ne slectionner que la
bibliothque EXCEL.

La zone RECHERCHER TEXTE permet de rechercher un lment (objet ou


membre) dans lexplorateur dobjets. Taper llment recherch et appuyer sur
la touche ENTREE. Le rsultat de la recherche saffiche dans la zone RESULTATS
DE LA RECHERCHE.
Double cliquer sur lobjet voulu dans la colonne CLASS (le membre dans la
colonne MEMBRE) de la zone RESULTATS DE LA RECHERCHE, pour le voir
apparatre dans la zone CLASSES (la zone MEMBRES) situe en dessous.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 23

La zone CLASSES affiche lensemble des objets disponibles dans la bibliothque


slectionne.
La zone MEMBRES contient lensemble des membres de lobjet slectionn dans
la zone CLASSES. Les membres dun objet sont par dfaut classs par ordre
alphabtique. Pour les classer par catgorie (proprits, mthodes et
vnements), cliquer sur le bouton droit de la souris dans la zone MEMBRES et
choisir loption MEMBRES DU GROUPE.
Des icnes permettent de distinguer les objets, les proprits, les mthodes et les
vnements.
icne dsignant un objet
icne dsignant une proprit
icne dsignant une mthode
icne dsignant un vnement
La zone DETAILS situe en dessous de la zone CLASSES affiche un bref descriptif
de llment slectionn dans la zone CLASSES ou dans la zone MEMBRES.
Pour obtenir de laide sur un objet ou un membre, slectionner cet objet dans
la zone CLASSES ou ce membre dans la zone MEMBRES et cliquer sur la touche
F1.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 24

V.12. COMMENT
OBTENIR
QUELQUES ASTUCES

DE

LAIDE :

Utiliser lenregistreur de macro pour dcouvrir les instructions VBA


ncessaires pour accomplir une opration donne.
Utiliser lexplorateur dobjets pour dcouvrir les objets disponibles dans VBA
et les proprits, mthodes et vnements qui leur sont associs.
Utiliser la touche F1 pour obtenir de laide sur un objet, une proprit, une
mthode ou un vnement, dans un module de code ou dans lexplorateur
dobjets.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 25

VI. LES
FONCTIONS
LUTILISATEUR

DEFINIES

PAR

VBA offre la possibilit de crer ses propres fonctions, qui peuvent tre utilises
dans EXCEL comme nimporte quelle fonction intgre.
Une fonction est une suite d'instructions qui retourne une valeur. Elle
commence par le mot cl Function suivi du nom de la fonction et dune liste
darguments entre parenthses, qui peut tre vide. Elle se termine par le mot cl
End Function. Une fonction a la syntaxe suivante :
Function NomFonction([argument_1,..., argument_n])
Instructions
...
NomFonction = Expression
valeur de retour
...
End Function
Une fonction indique la valeur retourner en initialisant son nom avec la valeur
de retour.
Remarque : Les crochets [ ] signifient que les arguments sont facultatifs.
Attention : Dans VBA, les arguments dune fonction sont spars par des
virgules, alors que dans EXCEL ils sont spars par des points-virgules.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 26

VI.1. CREER UNE FONCTION PERSONNALISEE


Ecrire une fonction qui calcule la surface dun cercle partir de son rayon.
1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic.
2) Insrer un nouveau module de code MODULE2 et crire la fonction suivante :
Function SurfaceCercle(Rayon As Double) As Double
SurfaceCercle = WorksheetFunction.Pi() * Rayon * Rayon
End Function
SurfaceCercle est une fonction un argument : le rayon du cercle Rayon, qui
est une variable de type rel. Elle renvoie la surface du cercle de rayon Rayon,
qui est de type rel. Pi est une fonction intgre dEXCEL.
Attention : Dans VBA les rels sont crits avec des points, alors quils sont
crits avec des virgules dans EXCEL.

3) Retourner dans EXCEL et saisir les donnes suivantes


dans la feuille de calcul FEUIL1 :

4) Dans la cellule B6, saisir la formule =SurfaceCercle(A6).

Lorsquon crit =SurfaceCercle(A6) dans la cellule B6 la valeur de la cellule


A6 est transmise la fonction SurfaceCercle par le biais de largument
Rayon. La fonction SurfaceCercle initialise alors son propre nom avec le
rsultat calcul (WorksheetFunction.Pi() * Rayon * Rayon). Le rsultat est
ensuite retourn la cellule B6.
5) Recopier la formule =SurfaceCercle(A6) dans les cellules B7 et B8.
La fonction SurfaceCercle peut tre utilise comme nimporte quelle fonction
intgre dEXCEL (commande INSERTION FONCTION... puis CATEGORIE DE
FONCTIONS : PERSONNALISEES). Par contre, elle n'apparat pas dans la liste des
macros dEXCEL (commande OUTILS MACRO MACROS).

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 27

VI.2. EXERCICE
Ecrire une fonction qui permet de calculer la surface dun rectangle
(hauteur*largeur) et la tester dans EXCEL.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 28

VI.3. UTILISER LES FONCTIONS INTEGREES


DEXCEL
Pour utiliser une fonction intgre dEXCEL dans VBA, il faut prciser VBA
o peut tre trouve cette fonction. Pour cela, il faut faire prcder le nom de la
fonction de lobjet WorkSheetFunction.
Attention : Toutes les fonctions intgres dEXCEL ne sont pas disponibles dans
VBA !
Pour connatre les fonctions intgres dEXCEL disponibles dans VBA, activer la
commande AFFICHAGE EXPLORATEUR D'OBJETS dans lditeur de Visual Basic et
rechercher les membres de lobjet WorkSheetFunction.

Attention : Il est fortement conseill dutiliser une fonction intgre dEXCEL


pour faire un calcul donn, si cette dernire existe, plutt que de dfinir sa
propre fonction, qui serait moins efficace en terme de temps de calcul.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 29

VI.4. EXERCICE
Ecrire une fonction permettant de calculer lcart entre la valeur maximale et la
valeur minimale dune plage de cellules passe en argument laide des
fonctions intgres dEXCEL Max et Min et la tester dans EXCEL.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 30

VII. LE LANGAGE VBA


Nous prsentons dans ce chapitre les lments du langage VBA qui sont
communs toutes les applications MICROSOFT OFFICE et plus largement aux
langages de programmation, mme si la syntaxe et les mots cls varient dun
langage lautre.

VII.1. LES VARIABLES ET LES CONSTANTES


La dclaration des variables
Une variable permet de stocker une valeur pouvant tre modifie au cours de
lexcution dun programme.
Le mot cl Dim permet de dclarer explicitement une variable :
Dim NomVariable
o NomVariable est une suite de caractres forms avec des lettres, des chiffres
et le caractre soulign _. Le premier caractre est obligatoirement une lettre.
Les minuscules sont distingues des majuscules.
Le langage VBA permet de ne pas dclarer explicitement les variables. Un des
intrts de la dclaration explicite des variables est dviter les erreurs de
frappes malheureusement trs frquentes en programmation.
Exemple :
Sub MacroTestVariable()
valeur = Range("A1").value
If valleur >= 18 And valleur <= 20 Then Range("B1").value = "OK"
End Sub
Quelque soit la valeur de la cellule A1, cette macro ncrira pas "OK" dans la
cellule B1. Pourtant VBA ne dtecte aucune erreur dans le code.
Il est donc prfrable de forcer la dclaration explicite des variables en VBA.
Pour ce faire, il suffit de placer linstruction Option Explicit en haut des
modules de code avant toutes procdures et toutes fonctions.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 31

Option Explicit
Sub MacroTestVariable()
Dim valeur
valeur = Range("A1").value
If valleur >= 18 And valleur <= 20 Then Range("B1").value = "OK"
End Sub
VBA dtecte une erreur la compilation : la variable valleur nest pas dfinie.
Pour ajouter automatiquement linstruction Option Explicit tous les nouveaux
modules de code crs, activer la commande OUTILS OPTIONS..., cliquer sur
longlet EDITEUR et cocher la case DECLARATION DES VARIABLES OBLIGATOIRE.

Le type des variables


La plupart des langages de programmation imposent de dterminer le type de
donnes qui peut tre stocke dans une variable lors de sa dclaration. En VBA,
ce nest pas obligatoire.
Par dfaut, une variable non type est du type Variant, qui permet de stocker
nimporte quel type de donnes.
Dans un soucis defficacit du code, il est prfrable de typer ses variables. Une
variable de type Variant prend, en effet, plus de mmoire que nimporte quel
autre type et utilise plus de ressource systme pour son traitement (identification
du type effectif de la variable et ventuellement conversion).
La dclaration du type dune variable se fait comme suit :
Dim NomVariable As Type o Type dtermine le type de la valeur qui peut
tre stocke dans la variable.
Les diffrents types de donnes disponibles en VBA sont les suivants (cf. aide
en ligne de VBA, commande ? SOMMAIRE ET INDEX, onglet SOMMAIRE, option
REFERENCE DU LANGAGE VISUAL BASIC) :
Byte, Integer et Long pour les entiers ;
Single, Double et Currency pour les rels ;
Boolean pour les boolens (True ou False) ;
String pour les chanes de caractres ;
Date pour les dates ;
Object pour faire rfrence un objet ;
Variant pour nimporte quel type.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 32

Exemple :
Dim Nom As String
Nom = "Jean " & "Dupond"

loprateur & permet de concatner des


chanes de caractres

Dim Age As Byte


Age = 23
Dim MaPlage As Object
Set MaPlage = Range("A1:B5")

variable de type Object


linstruction Set attribue une
rfrence d'objet une variable

Dim MaFeuille As Worksheet


variable de type Worksheet
Set MaFeuille = ThisWorkbook.Sheets(1)

Remarque : On peut typer les arguments dune procdure ou dune fonction et la


valeur de retour dune fonction.
Exemple :
Function SurfaceCercle (Rayon As Double) As Double
SurfaceCercle = WorksheetFunction.Pi() * Rayon * Rayon
End Function

Remarque sur linitialisation des variables : Selon leur type, les variables ne sont
pas initialises avec la mme valeur :
les variables de type Byte, Integer ou Long sont initialises 0 ;
les variables de type Single, Double ou Currency sont initialises 0 ;
les variables de type Boolean sont initialises False ;
les variables de type String sont initialises "" (la chane vide) ;
les variables de type Date sont initialises 00:00:00 ;
les variables de type Variant sont initialises "" (la chane vide) (il en est
de mme pour les variables dclares implicitement).

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 33

La porte des variables


La porte dune variable dfinit quelles procdures ou fonctions peuvent utiliser
cette variable.
Les variables dclares lintrieur dune procdure ou dune fonction ne sont
accessibles qu lintrieur de cette procdure ou de cette fonction.
Exemple :
Sub InitialiseAge()
Dim Age As Integer
Age = 25
End Sub
La variable Age nest accessible que dans la procdure AfficheAge.
Pour quune variable soit accessible lensemble des procdures et des
fonctions dun module, elle doit tre dclare au dbut du module lextrieur
de toute procdure et de toute fonction.
Pour quune variable soit accessible lensemble des procdures et des
fonctions dun projet, elle doit tre dclare au dbut dun module lextrieur
de toute procdure et de toute fonction, laide du mot cl Public.
Exemple :
Public Age As Integer
Sub AfficheAge()
Age = 25
End Sub

La dclaration des constantes


Une constante permet dattribuer un nom une valeur fixe. La dclaration dune
constante se fait laide du mot cl Const comme suit :
Const NomConstante [As Type] = valeur
Une constante a la mme porte quune variable.
Exemple :
Public Const Pi As Single = 3.14159265358979
Function SurfaceCercle (Rayon As Double) As Double
SurfaceCercle = Pi * Rayon * Rayon
End Function

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 34

Linstruction With...End With


Linstruction With...End With est utile lorsque les rfrences un objet sont
rptes plusieurs fois dans une petite section de code.
Exemple :
Sub ModifiePolice(MaPlage As Range)
MaPlage.Select
Selection.Font.Size = 12
Selection.Font.ColorIndex = 3
Selection.Font.Italic = True
End Sub
La macro ModifiePolice peut tre rcrite plus simplement comme suit :
Sub ModifiePolice(MaPlage As Range)
MaPlage.Select
With Selection.Font
.Size = 12
.ColorIndex = 3
.Italic = True
End With
End Sub
Tout ce qui commence par un point dans un bloc dinstructions With...End
With est une proprit ou une mthode de lobjet qui suit linstruction With.

Exercice
En saidant ventuellement de laide en ligne de lditeur de Visual Basic,
expliquer ce que fait cette procdure.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim NbFeuilles As Integer
Dim n As Integer
Dim nom As String
Dim chaine As String
NbFeuilles = ThisWorkbook.Sheets.Count
n = Sh.Index
nom = Sh.Name
chaine = "Feuille " & n & "/" & NbFeuilles & " : " & nom
Range("A1").Value = chaine
End Sub

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 35

VII.2. EXECUTER
ARGUMENT

UNE

PROCEDURE

SANS

Attention : Seules les procdures sans argument peuvent tre excutes


directement !
Les procdures avec arguments et les fonctions ne peuvent tre excutes que
par dautres procdures ou fonctions et n'apparaissent pas dans la liste des
macros de la bote de dialogue MACRO (commande OUTILS MACRO MACROS de
EXCEL).
Pour excuter une procdure sans argument, positionner le curseur dessus et
activer la commande EXECUTION EXECUTER SUB/USERFORM ou cliquer sur
licne
Pour arrter l'excution dune procdure sans argument si une erreur
survient, utiliser la commande EXECUTION REINITIALISER ou cliquer sur
licne

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 36

VII.3. LES ENTREES ET SORTIES STANDARDS


Nous prsentons deux fonctions dentres/sorties standards de VBA : la fonction
MsgBox et la fonction InputBox.

La fonction MsgBox
La fonction MsgBox affiche un message dans une bote de dialogue, attend que
l'utilisateur clique sur un bouton, puis renvoie un entier indiquant le bouton
choisi par l'utilisateur. Elle a la syntaxe suivante (les arguments entre crochets
sont facultatifs) :
MsgBox(prompt[,buttons][,title][,helpfile, context])
o prompt est le message affich dans la bote de dialogue, buttons correspond
au type de boutons de la bote de dialogue et title est le titre de la bote de
dialogue (cf. aide en ligne de lditeur de Visual Basic laide de la touche F1.).
1) Ouvrir le classeur TEST-MACRO.XLS, puis lditeur de Visual Basic.
2) Insrer un nouveau module de code laide de la commande INSERTION
MODULE et saisir la macro suivante :
Sub MacroTestMessage()
Call MsgBox("Bonjour ! ", , "Accueil")
End Sub
3) Excuter la macro laide de la commande EXECUTION
EXECUTER SUB/USERFORM ou cliquer sur licne

Les valeurs des arguments de la fonction MsgBox peuvent tre spcifies de


deux manires : par position ou par nom.
Exemple :
Dans linstruction Call MsgBox("Bonjour ! ", , "Accueil"), les valeurs des
arguments sont spcifies par position : les arguments doivent alors tre saisis
dans le bon ordre et des virgules supplmentaires doivent tre inclues pour les
arguments manquants.
Cette instruction peut tre rcrite en spcifiant les valeurs des arguments par
nom comme suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil")
Lordre entre les arguments na alors plus dimportance et il ny a pas besoin de
virgules supplmentaires pour les arguments manquants.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 37

Il existe deux manires de spcifier les valeurs des arguments dune


fonction : par position ou par nom. Lorsque les valeurs des arguments sont
spcifies par nom, il faut utiliser le signe := entre le nom de largument et
sa valeur.
4) Saisir la macro suivante et lexcuter.
Sub MacroTestMessage2()
Call MsgBox(prompt:="Avez-vous pass une bonne journe? ",
Buttons:=4, Title:="Accueil !")
End Sub

Largument Buttons:=4 permet dafficher les boutons Oui et Non. Au lieu


dutiliser la valeur numrique 4 pour largument Buttons, on aurait pu utiliser la
constante associe vbYesNo (cf. aide en ligne de lditeur de Visual Basic), qui
rend le code plus lisible.
Call MsgBox(prompt:="Avez-vous pass une bonne journe? ",
Buttons:=vbYesNo, Title:="Accueil !")
Lutilisation de constantes VBA intgres rend le code plus lisible.

Dans lexemple prcdent, une question est pose lutilisateur, mais sa rponse
nest pas rcupre : on ne sait pas sil a pass une bonne journe. Il se pose
alors le problme de rcuprer la valeur de retour de la fonction MsgBox. Pour
ce faire, il ne faut pas utiliser linstruction Call pour appeler MsgBox.
reponse = MsgBox(prompt:="Avez-vous pass une bonne journe?")
On peut tester la valeur de retour de la fonction MsgBox (cf. aide en ligne de
lditeur de Visual Basic), comme suit :
Sub MacroTestMessage3()
Dim reponse As String
reponse = MsgBox(prompt:="Avez-vous pass une bonne journe? ",
Buttons:=vbYesNo, Title:="Accueil !")
If reponse = vbYes Then
Call MsgBox("Bonjour ! ", , "Accueil")
Else
Call MsgBox("Bonsoir ! ", , "Accueil")
End If
End Sub
Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 38

La fonction InputBox
La fonction InputBox affiche une invite dans une bote de dialogue, attend que
l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la
zone de texte sous la forme d'une chane de caractre. Elle a la syntaxe suivante
(les arguments entre crochets sont facultatifs) :
InputBox(prompt[,title][,default][,xpos][,ypos] [,helpfile,context])
o prompt est le message affich dans la bote de dialogue et title est le titre de
la bote de dialogue (cf. aide en ligne de lditeur de Visual Basic).
Si lutilisateur ne saisit rien dans la zone de texte, la fonction InputBox renvoie
la chane de caractres vide "".
5) Saisir la macro suivante et lexcuter.
Sub MacroTestDialogue()
Dim reponse As String
reponse = InputBox("Quel age avez-vous ?", "Saisie age")
If reponse = "" Then
Call MsgBox("Vous n'avez pas rpondu la question !", , "Erreur")
Else
Call MsgBox("Vous avez " & reponse & " ans", , "Age")
End If
End Sub
Loprateur & permet de concatner des chanes de caractres. Par exemple, si la
rponse donne par lutilisateur est 22, alors on a :
"Vous avez " & reponse & " ans" = "Vous avez 22 ans"

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 39

VII.4. RECAPITULATIF SUR LES PARENTHESES


ET LES LISTES DARGUMENTS
Les procdures et les fonctions peuvent avoir des arguments. Voici un petit
rcapitulatif sur leur appel avec arguments.
Pour rcuprer la valeur de retour dune fonction, il ne faut pas utiliser
linstruction Call pour lappeler.
Exemple : reponse = InputBox("Quel age avez-vous ?", "Saisie age")
Pour appeler une procdure ou ne pas rcuprer la valeur de retour dune
fonction, il faut utiliser linstruction Call.
Exemple : Call MsgBox("Bonjour ! ", , "Accueil")
Attention : Il ne faut pas mettre despace entre le nom dune fonction ou
dune procdure et la liste de ses arguments placs entre parenthses.
Il existe un autre moyen pour appeler une procdure ou une fonction dont on ne
veut pas rcuprer la valeur de retour : ne pas utiliser linstruction Call et ne pas
placer ses arguments entre parenthses.
Exemple :
MsgBox "Bonjour ! ", , "Accueil"

Lors de lappel dune procdure ou dune fonction, les valeurs de ses arguments
peuvent tre spcifies par position ou par nom.
Exemple :
arguments spcifis par position
Call MsgBox("Bonjour ! ", , "Accueil")
arguments spcifis par nom
Call MsgBox(prompt :="Bonjour ! ", Title :="Accueil")

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 40

VII.5. EXERCICE
Ecrire une procdure qui calcule la surface dun cercle partir du rayon donn
par lutilisateur.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 41

VII.6. LES ENONCES CONDITIONNELS


VBA permet de traiter les noncs conditionnels laide de linstruction If. On
distingue linstruction If crite sur une seule ligne et le bloc If.

Linstruction If crite sur une seule ligne


Linstruction If crite sur une seule ligne a la syntaxe suivante :
If condition Then Inst_si_vrai [Else Inst_si_faux]
Les sections Then et Else dune instruction If ne peuvent contenir quune seule
instruction et doivent tre crites sur une seule ligne.
Exemple :
If test = True Then Call MsgBox("Vrai") Else Call MsgBox("Faux")

Le bloc If
La structure de bloc If permet aux sections Then et Else de contenir plusieurs
instructions. Elle peut avoir lune des deux syntaxes suivantes :
If condition Then
If condition_1 Then
Instructions_si_vrai
Instructions_1
[Else
ElseIf condition_2 Then
Instructions_si_faux]
Instructions_2
End If
ElseIf condition_3 Then
Instructions_3
...
Else
Instructions_n
End If
Dans une structure de bloc If, il faut imprativement aller la ligne aprs le
Then.
Remarque : Les crochets [ ] signifient que le bloc Else est facultatif.
Lorsque le bloc If contient une ou plusieurs sections ElseIf, les diffrentes
conditions sont testes jusqu ce quune soit value vraie. Si aucune
condition nest vrifie, les instructions de la section Else, si elle existe, sont
excutes. Si aucune condition nest vrifie et si la section Else nexiste pas, le
bloc If ne fait rien.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 42

VBA offre la possibilit dutiliser les oprateurs logiques suivants : Or, Xor (ou
exclusif), And, Not.
Exemple :
Sub BonjourHeureIf()
Dim heure As Integer
Dim mes As String
heure = Left(Time, 2)

'rcupration de l'heure, 2 caractres les plus gauche


de la valeur de retour de la fonction Time

If heure > 7 And heure < 12 Then


mes = "Bonjour"
ElseIf heure >= 12 And heure < 18 Then
mes = "Bon aprs-midi"
ElseIf heure >= 18 And heure < 22 Then
mes = "Bonne soire"
Else
mes = "Bonne nuit"
End If
Call MsgBox(mes)
End Sub

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 43

VII.7. LES ENONCES ITERATIFS


VBA fournit deux structures pour rpter en boucle les mmes instructions :
linstruction Do...Loop et linstruction For...Next.

La boucle Do...Loop
La boucle Do...Loop est utilise lorsque lon veut que la rptition des
instructions sarrte quand une condition donne est vrifie. On distingue
plusieurs syntaxes possibles.
Do While condition
Instructions
Loop

Tant que la condition est vraie, les instructions


sont excutes

Do Until condition
Instructions
Loop

Jusqu' ce que la condition devienne vraie, les


instructions sont excutes

Avec ces deux boucles, les instructions peuvent ne jamais tre excutes. Pour
quelles soient excutes au moins une fois, on peut utiliser lune des deux
syntaxes suivantes :
Do
Instructions
Loop While condition
Do
Instructions
Loop Until condition

les instructions sont excutes tant que la


condition reste vraie

les instructions sont excutes jusqu ce que la


condition devienne vraie

Exercice
Que fait la boucle suivante (la fonction LCase convertit tous les caractres en
minuscules) ? La Rcrire avec linstruction Do...Loop While.
Do
rep = InputBox("Voulez-vous continuer ? (O/N)")
Loop Until LCase(rep) = "n"

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 44

La boucle For...Next
La boucle For...Next est utilise lorsque lon connait lavance le nombre de
fois o lon veut que les instructions soient rptes.
For compteur = nbdbut To nbfin [Step nbpas]
Instructions
instructions excutes un nombre dtermin de fois
Next compteur
Les instructions de la boucle For...Next sont excutes un nombre dtermin de
fois. Lorsque loption Step nest pas renseigne, le compteur est incrment de
1 chaque itration et les instructions sont excutes nbdbut - nbfin fois.
Exemple :
La procdure suivante calcule la somme des n premiers entiers :
Sub SommeEntiers()
Dim somme As Integer
Dim compteur As Integer
Dim n As Integer
n = InputBox("Donner un entier :", "Saisie entier")
For compteur = 1 To n
somme = somme + compteur
Next compteur
Call MsgBox("Somme des " & n & " premiers entiers : " & somme)
End Sub
Le compteur peut tre, chaque itration, incrment de la valeur de nbpas.
Exemple :
For compteur = 20 To 0 Step -2
Call MsgBox(compteur)
Next compteur

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 45

La boucle For Each...Next


La boucle For Each...Next permet daccder aux objets dune collection.
Exemple :
Sub ColorieCellule()
Dim MaPlage As Range
Dim Cellule As Range
Dim i As Integer
Set MaPlage = Range("A1:B5")
For Each Cellule In MaPlage
Cellule.Interior.ColorIndex = i
i=i+1
Next Cellule
End Sub

Linstruction Exit
Linstruction Exit permet de quitter un bloc Do...Loop, For...Next, Function,
ou Sub. Sa syntaxe est la suivante :
Exit Do
Exit For
Exit Function
Exit Sub
Exemple :
La boucle suivante sarrte lorsque la rponse rep est n ou N :
Do
Rep = InputBox("Voulez-vous continuer ? (O/N)")
If LCase(rep) = "n" Then Exit Do
Loop

Exercice
Ecrire la fonction CompteLignes qui permet de compter le nombre de lignes de
la plage de cellules MaPlage passe en argument et la tester dans EXCEL.
Function CompteLignes(MaPlage As Range) As Integer
Vous pourrez utiliser la boucle For Each...Next. pour parcourir les lignes
(proprit Rows de lobjet Range) de la plage de cellules MaPlage.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 46

VII.8. LES TABLEAUX


Un tableau est une variable permettant de stocker plusieurs valeurs.
La dclaration dun tableau prcise le nombre dlments du tableau et
ventuellement leur type :
Dim NomTableau(dimension) [As Type]
On appelle taille dun tableau, le nombre dlments du tableau.
Les lments dun tableau sont indexs de 0 dimension1. NomTableau(i)
dsigne le ime lment du tableau de nom NomTableau, i devant tre compris
entre 0 et dimension1.
Exemple :
Dim TabInt(10) As Integer
TabInt(0)=12
TabInt(9)=36

tableau de 10 entiers
accs au premier lment du tableau
accs au dernier lment du tableau

Les tableaux sont trs utiles pour traiter des listes dlments. La fonction Array
renvoie une variable de type Variant contenant un tableau.
Exemple :
Dim ListeJours As Variant
ListeJours = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi",
"Samedi", "Dimanche")
La fonction UBound renvoie la valeur maximale des index dun tableau.
Exemple :
UBound(ListeJours) renvoie 6.

Exercice
Ecrire la fonction VerifierJours(Jour As String) qui permet de vrifier que la
chane de caractres passe en argument est bien un jour de la semaine et qui
renvoie un boolen, et la tester dans EXCEL.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 47

VII.9. LE DEBOGAGE
Le dbogage consiste rgler les erreurs directement lies au code dun
programme. Trois types derreur peuvent affecter un programme crit en VBA :
des erreurs de compilation qui surviennent lorsque VBA rencontre une
instruction quil ne reconnat pas ;
des erreurs dexcution ;
des erreurs logiques : le programme sexcute mais le rsultat obtenu ne
correspond pas celui attendu.

Les erreurs de compilation et dexcution


La premire tape pour tester un programme consiste compiler le programme
laide de la commande DEBOGAGE COMPILER VBAPROJECT. Les erreurs de
compilation sont mises en vidence. Recommencer la compilation jusqu ce
que toutes les erreurs de compilation soient corriges.
Lorsquil ny a plus derreurs de compilation, excuter le programme laide
de la commande EXECUTION EXECUTER SUB/USERFORM.
Si une erreur dexcution est gnre, linstruction coupable est mise en
vidence. Corriger lerreur et rinitialiser le programme laide de la
commande EXECUTION REINITIALISER. Recommencer lexcution jusqu
ce que toutes les erreurs dexcution soient corriges.

Les erreurs Logiques


Il sagit maintenant de corriger les erreurs logiques qui sont les plus difficiles
reprer. Lditeur de Visual Basic propose plusieurs outils de dbogage dans le
menu DEBOGAGE.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 48

1) Ouvrir le classeur ELEVES.XLS.

2) Ouvrir lditeur de Visual Basic partir du classeur ELEVES.XLS.


3) Ouvrir un nouveau module de code laide de la commande INSERTION
MODULE. Une fentre code MODULE1 souvre.
4) Dans le module de code MODULE1, saisir la procdure suivante qui permet de
supprimer les lignes vides de la liste de donnes :
Sub SupprLignesVides()
Dim MaPlage As Range
Dim Cellule As Range
Set MaPlage = Range("A1:A19")
For Each Cellule In MaPlage
If IsEmpty(Cellule) Then
Rows(Cellule.Row).Delete
supprime toute la ligne
End If
Next Cellule
End Sub
La fonction IsEmpty permet de tester si une cellule est vide.
5) Excuter la procdure SupprLignesVides. On constate que sil existe deux
lignes vides conscutives, la deuxime ligne nest pas supprime.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 49

6) Insrer de nouveau des lignes dans la liste de donnes pour obtenir la mme
liste de donnes que celle du point (1).
7) Dans lditeur de Visual Basic, espionner la valeur des variables
Cellule.Row et Cellule laide de la commande DEBOGAGE AJOUTER UN
ESPION. La fentre ESPIONS souvre.
8) Rduire la fentre de lditeur de Visual Basic de faon voir le classeur
EXCEL au second plan.
9) Excuter pas pas la procdure SupprLignesVides laide de la commande
DEBOGAGE PAS A PAS DETAILLE (touche F8). Observer attentivement leffet de
chaque instruction de la procdure sur le classeur EXCEL et examiner les valeurs
prises par les variables Cellule.Row et Cellule.
Valeur de Cellule.Row Valeur de Cellule
Action
1
"nom"
2
"Detila"
3
"Gautier"
4
""
Suppression de la ligne 4
5
"Leforet"
6
"Michelet"
Lorsque la procdure atteint la cellule A4, la ligne 4 est supprime. Cela a pour
consquence de dcaler toutes les cellules vers le haut. La cellule A5 passe alors
en A4, la cellule A6 en A5... La boucle For Each...Next traite ensuite la cellule
suivante soit la cellule A5. Le contenu de la cellule prcdemment en A5 ne sera
donc pas trait, puisque cette cellule est passe en A4.
10) Arrter lexcution de la procdure laide de la commande EXECUTION
ARRET.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 50

11) Une solution possible au bogue est de drouler une boucle commenant par
la dernire cellule de la liste de donnes.
Sub SupprLignesVidesCorrige()
Dim compteur As Integer
Dim DerLigne As Integer
Dim MaPlage As Range
Set MaPlage = Range("A1:A19")
DerLigne = MaPlage.Rows.Count
For compteur = DerLigne To 1 Step -1
If IsEmpty(Range("A" & compteur)) Then Rows(compteur).Delete
Next compteur
End Sub

Pour information
Les principaux outils de dbogage proposs par lditeur de Visual Basic dans le
menu DEBOGAGE sont les suivants.
Excution pas pas : pour excuter un programme pas pas, placer le
curseur dans la procdure excuter et activer la commande DEBOGAGE PAS
A PAS DETAILLE. Lexcution dune procdure pas pas permet den
examiner le droulement instruction aprs instruction. La procdure est dite
en mode arrt. On peut tout moment retourner un mode dexcution
normal.
Les bulles daide : pour visualiser la valeur dune variable, activer la
commande OUTILS OPTIONS, cliquer sur longlet EDITEUR et cocher la case
INFO-BULLES AUTOMATIQUES. Lorsque le curseur est plac au dessus dune
variable, la valeur de celle-ci apparat dans une bulle daide.
La fentre Variables locales : pour visualiser la valeur des variables et
constantes aux diffrents stades de lexcution pas pas dun programme,
activer la commande AFFICHAGE FENETRE VARIABLES LOCALES.
Les points darrt : les points darrt permettent dinterrompre lexcution
dun programme sur une instruction prcise. Pour dfinir un point darrt sur
une instruction douteuse, activer la commande DEBOGAGE BASCULER LE
POINT DARRET.
Les espions : pour espionner la valeur dune variable, activer la commande
DEBOGAGE AJOUTER UN ESPION. Pour afficher la fentre ESPIONS, activer la
commande AFFICHAGE FENETRE ESPIONS.
La pile dappels : la pile dappels recense toutes les procdures ou fonctions
en cours dexcution, selon leur ordre dappel. Pour afficher la pile des
appels, activer la commande AFFICHAGE PILE DES APPELS.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 51

VIII.

LES OBJETS USERFORM

Les objets UserForm sont des botes de dialogue dfinies par lutilisateur.
Ce chapitre explique comment crer une bote de dialogue permettant de saisir
les clients dune entreprise, comme le montre la capture dcran suivante :

1) Ouvrir un nouveau classeur et lenregistrer sous SAISIECLIENTS.XLS.


2) Pour renommer la feuille de calcul FEUIL1, cliquer avec le bouton droit sur
l'onglet FEUIL1, activer la commande RENOMMER et taper CLIENTS.
3) Saisir dans la feuille de calcul CLIENTS, les donnes suivantes :

4) Renommer DIVERS la feuille de calcul FEUIL2 et saisir les donnes suivantes :

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 52

On peut distinguer deux phases dans la cration dun objet UserForm :


le dessin de lobjet UserForm
Le dessin dun objet UserForm consiste placer des contrles sur lobjet.
Les contrles sont les lments constitutifs dun objet UserForm tels quune
case cocher, une zone de texte, une zone de liste modifiable ou un bouton de
commande permettant une intervention de lutilisateur.
Un contrle est un objet : il possde des proprits, des mthodes et des
vnements dfinis.
lassociation de code lobjet UserForm et ses diffrents contrles
Il sagit de dterminer le comportement de lobjet UserForm et de ses contrles
face aux diffrents vnements utilisateur pouvant laffecter et dcrire le code
permettant dexploiter les actions effectues par lutilisateur.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 53

VIII.1. CREER UN OBJET USERFORM


1) Ouvrir lditeur de Visual Basic et activer la commande INSERTION
USERFORM. Un objet UserForm1 apparat, ainsi qu'une bote outils
permettant d'ajouter des contrles lobjet.
Dans lexplorateur de projets, les botes de dialogue sont regroupes dans un dossier FEUILLES
objet USERFORM1 qui est un objet de type FEUILLE et qui permet de dessiner une bote de dialogue

fentre objet associe


lobjet USERFORM1

bote outils qui


apparat lorsque la
fentre objet associe
lobjet USERFORM1
est slectionne

proprits de l'objet USERFORM1

Lexplorateur de projets permet dafficher le code dun objet USERFORM laide


du clic droit de la souris et de loption CODE ; ou dafficher lobjet lui-mme
laide du clic droit de la souris et de loption AFFICHER LOBJET.
2) Modifier le nom de lobjet UserForm par dfaut, UserForm1, en
FenetreSaisieClients dans la proprit NAME de la fentre PROPRIETES. Ce
nom est le nom qui sera utilis dans le code pour faire rfrence lobjet
UserForm.
3) La proprit CAPTION de lobjet UserForm correspond au libell qui apparat
dans sa barre de titre. Modifier cette proprit en Saisie Clients.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 54

On veut crer lobjet UserForm suivant :


Zone de texte

Zone de liste modifiable

Intitul

bouton de commande

Cet objet est compos des contrles suivants : un INTITULE et une ZONE DE LISTE
MODIFIABLE pou saisir le titre du client (Madame, Mademoiselle ou Monsieur),
trois INTITULES et trois ZONES DE TEXTE pour saisir le nom, le prnom et le
tlphone du client et deux BOUTONS DE COMMANDE OK et Annuler.
Pour placer un contrle dans lobjet UserForm, cliquer sur lobjet voulu de
la BOITE A OUTILS et le faire glisser vers lobjet UserForm. Ds quun contrle a
t plac sur lobjet UserForm, dfinir son nom grce la proprit NAME.
Attention : Il est recommand dutiliser des noms vocateurs pour ses contrles,
qui permettent didentifier le type dobjet quils reprsentent et leur utilit.
4) Placer les diffrents contrles de lobjet UserForm et modifier leurs
proprits comme suit :
Contrle
proprit NAME proprit CAPTION proprit FONT
INTITULE
Titre :
police TIMES NEW
IntitulTitre
ROMAN, taille 10
ZONE DE LISTE ComboBoxTitre
"
MODIFIABLE

INTITULE
ZONE DE TEXTE
INTITULE
ZONE DE TEXTE
INTITULE
ZONE DE TEXTE
BOUTON
DE

IntitulNom
TextBoxNom
IntitulPrnom
TextBoxPrnom
IntitulTl
TextBoxTl
ButtonOK

Nom :
Prnom :
Tlphone :

"
"
"
"
"
"

OK

COMMANDE

BOUTON

DE

ButtonAnnuler

Annuler

COMMANDE

Remarque : Il est possible de copier/coller des contrles.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 55

VIII.2. AFFICHER
USERFORM

ET

FERMER

UN

OBJET

Afficher un objet UserForm


Linstruction Load permet de charger un objet UserForm en mmoire sans
lafficher. La mthode Show de lobjet UserForm permet dafficher un objet
UserForm et de le charger en mmoire, si cela na pas dj t fait.

Ecrire la procdure qui permet dafficher la bote de dialogue de saisie dun


client.
1) Dans lditeur de Visual Basic, activer la commande INSERTION MODULE. Un
module de code MODULE1 souvre. Renommer le ModuleSaisieClients laide
de la proprit NAME.
2) Saisir la procdure suivante dans le module de code :
Sub ProgPrincSaisieClients()
Sheets("Clients").Activate
activation de la feuille Clients
FenetreSaisieClients.Show
End Sub
3) Excuter cette procdure (pour fermer la bote
FenetreSaisieClients, cliquer sur son bouton de fermeture ).

de

dialogue

Fermer ou masquer un objet UserForm


Linstruction Unload permet de fermer un objet UserForm et de leffacer de la
mmoire, les valeurs de ses contrles sont alors perdues. La mthode Hide de
lobjet UserForm permet de faire disparatre un objet UserForm de lcran
sans le supprimer de la mmoire.
Linstruction Unload ou la mthode Hide sont gnralement places dans les
procdures vnementielles attaches aux boutons de validation de lobjet
UserForm, comme par exemple les boutons de commande OK et Annuler.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 56

VIII.3. ASSOCIER
USERFORM

DU

CODE

UN

OBJET

Les contrles placs sur un objet UserForm et lobjet UserForm lui mme sont
rceptifs aux vnements utilisateurs qui les affectent (clic souris sur un bouton
de commande, saisie d'une valeur dans une zone de texte). On peut ainsi crer
des procdures dites procdures vnementielles, qui se dclencheront lorsque
lvnement correspondant sera repr.
La syntaxe dune procdure vnementielle attache un contrle de nom
NomContrle (proprit NAME) et dclenche par un vnement
NomEvnement est la suivante :
Private Sub NomContrle_NomEvnement()
...
End Sub
Dans le cas dune procdure vnementielle attache un objet UserForm, le
nom de lobjet UserForm (proprit NAME) napparat pas dans les instructions
de dclaration de la procdure. Il est remplac par le mot cl UserForm comme
suit :
Private Sub UserForm_Nomvnement ()
...
End Sub

Les vnements sont nombreux et varient dun contrle lautre. En voici,


quelques uns :
vnement Change : dtect lors de la modification de la valeur (proprit
VALUE) dun contrle (par exemple une zone de texte).
vnement Click : dtect lorsque lutilisateur clique sur un contrle (par
exemple un bouton de commande).
vnement dblClick : dtect lorsque lutilisateur double-clique sur un
contrle.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 57

Associer du code un bouton de commande


Associer le code ncessaire au bouton de commande OK pour que la bote de
dialogue soit ferme lorsque lon clique dessus.
1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets,
slectionner lobjet UserForm de nom FenetreSaisieClients et ouvrir son
module de code laide du clic droit de la souris et de loption CODE (ou en
double-cliquant dessus).
2) Dans la liste de gauche au sommet du module de code, slectionner loption
ButtonOK. Dans la liste de droite au sommet du module de code, slectionner
lvnement Click.

3) Complter la procdure vnementielle ButtonOK_Click qui apparat comme


suit :
Private Sub ButtonOK_Click()
Call Unload(Me)
End Sub
La proprit Me de lobjet UserForm renvoie lobjet UserForm actif.
4) Pour tester cette procdure, excuter la procdure ProgPrincSaisieClients
du module de code ModuleSaisieClients.

Exercice
Associer le code ncessaire au bouton Annuler pour que la bote de dialogue
soit ferme lorsque lon clique dessus.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 58

Initialiser un objet UserForm


Lvnement Initialize dun objet UserForm est dtect lorsque lobjet
UserForm est charg, laide de la mthode Show ou de linstruction Load.
Attention : Lorsque la mthode Show est applique un objet UserForm
masqu par la mthode Hide, lobjet UserForm nest pas recharg mais
uniquement affich. Lvnement Initialize nest alors pas reconnu.
La procdure vnementielle associe lvnement Initialize dun objet
UserForm sexcute avant laffichage de lobjet et a la syntaxe suivante :
Private Sub UserForm_Initialize()
...
End Sub
Cette procdure permet deffectuer des rglages dans lobjet UserForm avant
son chargement.

Ecrire le code ncessaire pour affecter les valeurs Madame, Mademoiselle


et Monsieur la zone de liste modifiable ComboBoxTitre, en utilisant les
valeurs qui se trouvent dans la plage de cellule A1:A3 de la feuillle de calcul
DIVERS.

1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets,


selectionner lobjet UserForm de nom FenetreSaisieClients et ouvrir son
module de code laide du clic droit de la souris et de loption CODE.
2) Dans la liste de gauche au sommet du module de code, slectionner loption
UserForm. Dans la liste de droite au sommet du module de code, slectionner
lvnement Initialize.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 59

3) Complter la procdure vnementielle UserForm_Initialize qui apparat


comme suit :
Private Sub UserForm_Initialize()
Dim i As Integer
i=1
Do Until IsEmpty(Worksheets("Divers").Range("A" & i))
Call Me.ComboBoxTitre.AddItem(Worksheets("Divers"). _
Range("A" & i).Value)
i=i+1
Loop
End Sub
Remarque : Pour crire une instruction sur plusieurs lignes, il faut, la fin de
chaque ligne, taper sur la barre despace et sur le trait continu (_).
4) Pour tester cette procdure, excuter la procdure ProgPrincSaisieClients
du module de code ModuleSaisieClients.

Pour information : Il existe une autre mthode pour initialiser la zone de


liste modifiable ComboBoxTitre avec les valeurs Madame, Mademoiselle
et Monsieur, en la liant la plage de cellule A1:A3 de la feuillle de calcul
DIVERS.
Pour lier un contrle une plage de cellules, il faut renseigner la proprit
ROWSOURCE du contrle avec la plage de cellules voulue (dans notre cas,
Divers!A1:A3) ou encore mieux avec le nom de la plage de cellules voulue, ce
qui suppose de nommer cette plage de cellules.
Remarque : La proprit CONTROLSOURCE permet de lier un contrle une seule
cellule.
Attention: Cette mthode, contrairement la prcdente, ne pourra pas prendre
en compte les ventuelles modifications faites sur le titre dun client (ajout ou
suppression dun titre). La zone de liste modifiable ComboBoxTitre est lie la
plage de cellule fixe A1:A3 de la feuillle de calcul DIVERS.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 60

Accder aux contrles dun objet UserForm


Jusqu prsent, nous avons cr un objet UserForm pour saisir de nouveaux
clients, et, ouvert et ferm cet objet. Cependant, si lutilisateur saisit des donnes
dans lobjet UserForm, ces dernires ne sont pas recopies dans liste de
donnes EXCEL correspondante.

La mise jour de la liste de donnes EXCEL correspondant aux donnes du client


doit tre faite lorsque lutilisateur clique sur le bouton OK. Elle consiste
insrer une nouvelle ligne dans la liste de donnes et recopier les valeurs des
contrles de lobjet UserForm dans les bonnes cellules de la nouvelle ligne.
1) Aller dans lditeur de Visual Basic. Dans lexplorateur de projets,
selectionner lobjet UserForm de nom FenetreSaisieClients, ouvrir son
module de code et complter la procdure vnementielle ButtonOK_Click
comme suit :
Private Sub ButtonOK_Click()
Sheets("Clients").Rows(2).Insert
Range("A2:D2").Font.Bold = False
Sheets("Clients").Range("A2").Value=Me.ComboBoxTitre.Text
Sheets("Clients").Range("B2").Value = Me.TextBoxNom.Text
Sheets("Clients").Range("C2").Value=Me.TextBoxPrnom.Text
Sheets("Clients").Range("D2").Value = Me.TextBoxTl.Text
'tri de la liste de donnes dans l'ordre croissant des noms (deuxime colonne).

Call Sheets("Clients").Range("A1"). _
Sort(Key1:= Sheets ("Clients").Columns("B"), Header:=xlYes)
Call Unload(Me)
End Sub

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 61

Attention : Si, dans les procdures vnementielles ButtonOK_Click et


ButtonAnnuler_Click, on utilise la mthode Hide pour masquer lobjet
UserForm la place de linstruction Unload, les ressources mmoires de
lobjet UserForm ne sont pas libres. Lors dun nouvel affichage de lobjet
UserForm avec la mthode Show, les diffrents contrles de lobjet ont alors
les mmes valeurs que lorsquil a t masqu.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 62

VIII.4. AFFICHER UN OBJET USERFORM A


PARTIR DUN BOUTON DUNE FEUILLE DE
CALCUL
On veut pouvoir afficher la bote de dialogue FenetreSaisieClients partir
d'un bouton de commande de la feuille de calcul CLIENTS.

1) Aller dans EXCEL et cliquer sur longlet CLIENTS. Positionner le curseur sur
une cellule vide de la feuille de calcul CLIENTS et activer la commande
AFFICHAGE BARRE D'OUTILS FORMULAIRES.
2) Une barre d'outils FORMULAIRES apparat. Cliquer sur l'objet
BOUTON, puis cliquer sur la feuille de calcul CLIENTS.
3) Dans la nouvelle fentre AFFECTER UNE MACRO qui apparat,
slectionner la macro ProgPrincSaisieClients et cliquer sur le
bouton OK.
4) Cliquer sur le bouton BOUTON 1 et renommer le SAISIE CLIENTS.

5) Fermer la barre d'outils FORMULAIRES et tester le bouton SAISIE CLIENTS.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 63

IX. BIBLIOGRAPHIE
Anne Caracache. Excel 5 pour Windows, Formation Rapide, Perfectionnement.
Dunod, 1994.
Jean-Franois Sehan. Excel 5 pour Windows, Macros Visual Basic, Formation
Rapide, Perfectionnement. Dunod, 1995.
Paul McFedries. Excel pour Windows 95, Secrets dexperts. SAMS, 1995.
Mikal Bidault. Excel & VBA. CampusPress, 2002.
Rob Bovey, Stephen Bullen, John Green, Robert Rosenberg. VBA pour Excel
2002 La rfrence du programmeur. CampusPress, 2002.

Excel VBA INA-PG Juliette Dibie-Barthlemy

Page 64

You might also like