Académique Documents
Professionnel Documents
Culture Documents
PROGRAMMATION EN VBA(*)
POUR EXCEL
U.F.R. DINFORMATIQUE
Christine MARTIN
Anne 2012-2013
Introduction
Le VBA (Visual Basic pour Application) est un langage de programmation permettant dutiliser du
code dont la syntaxe est proche du langage Visual Basic pour excuter les nombreuses
fonctionnalits notamment des applications Microsoft Office et par exemple de lApplication EXCEL
que vous tes amens utiliser frquemment dans votre spcialit.
Crer des programmes en VBA permet notamment dautomatiser des tches rptitives ralises
sous
EXCEL grce
la
possibilit
de
manipuler
les
objets
propres
Excel (Classeurs, feuilles, cellules, ), de stocker de linformation, deffectuer des instructions sous
conditions et, ventuellement, plusieurs reprises en fonction dun ou plusieurs critres.
Le langage VBA permet galement de contrler la quasi-totalit de l'IHM1 notamment dExcel, ce qui
inclut la possibilit de manipuler les fonctionnalits de l'interface utilisateur comme les menus, les
barres d'outils et le fait de pouvoir personnaliser les botes de dialogue et les formulaires utilisateurs.
Cela permet notamment de rendre une application dveloppe sous EXCEL plus conviviale.
Il permet enfin de contrler une application partir d'une autre (par exemple, crer
automatiquement un document WORD partir de donnes sous EXCEL).
Ce document organis en sections constitue une synthse des possibilits offertes par la
programmation en VBA sous Excel.
Interface Homme-Machine : c'est--dire tous les mdias qui permettent un utilisateur dinteragir avec la
machine
Page 1
1.1.2
1.1.3
1.2
1.2.1
1.2.2
1.2.3
1.2.4
Sauvegarde .................................................................................................................................... 12
1.2.5
1.2.6
1.2.7
2.2
2.3
2.4
2.5
2.5.1
2.6
2.7
2.7.1
2.7.2
2.8
3
Page 2
3.1
3.2
3.2.1
Dfinition ....................................................................................................................................... 23
3.2.2
3.2.3
3.3
3.4
3.5
.................................................................................................. 30
............................................................................. 32
........................................................................................... 37
Page 3
Page 4
1) Paramtrage de la macro
Activer la commande Outils Macro Nouvelle macro.
La fentre prsente en
Figure 1 apparat lcran et vous permet de paramtrer la macro qui va tre cre c'est--dire :
de prciser son nom dans le champ : Nom de la macro,
de prciser quel classeur elle sera rattache par lintermdiaire du menu droulant Enregistrer
la macro dans,
dy associer si besoin un raccourci clavier afin de faciliter son lancement futur : Touche de
raccourci
Excel VBA DA GIA AgroParisTech Christine MARTIN
Page 5
Ce classeur,
Nouveau classeur,
Classeur de macros personnelles.
2) Lancement de lenregistrement
Une fois votre macro paramtre suivant vos besoins, Cliquer sur le bouton OK.
Lenregistrement est alors lanc et partir de l tout les actions que vous fates dans Excel sont
enregistres, traduites en code VBA puis sauvegardes dans une procdure portant le nom que vous
avez spcifi ltape prcdente. Par exemple Macro1 comme indiqu dans la
Figure 1.
La barre d'outils ARRET DE L'ENREGISTREMENT apparat, ce qui marque le dbut de l'enregistrement.
Cette fentre permet galement de dterminer le mode suivant lequel les cellules seront
considres dans le programme final.
Il existe en effet deux moyens de voir les choses :
Soit on a une vision absolue : par exemple on considre la cellule A1 qui a une position
dtermine dans une page de calcul Excel
Soit on a une vision relative : on veut par exemple quune action soit faite toujours 2 cellules
en dessous de celle slectionne ce moment l.
Page 6
Attention : Vrifier toujours le mode dans lequel vous vous trouvez au lancement de
lenregistrement et avant deffectuer la moindre action sans quoi votre macro pourrait avoir un
comportement diffrent de celui que vous attendiez car non enregistre dans le mode adquate.
Par ailleurs, les cellules dans une macro sont identifies laide dune lettre (colonne) suivie dun
chiffre (ligne), comme par exemple la cellule A1. Aussi et 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) Arrt de l'enregistrement
Une fois que vous avez ralis toutes les actions que vous souhaitiez enregistrer pour les rejouer
ultrieurement, larrt de lenregistrement se fait en cliquant sur le carr bleu de la barre d'outils
ARRET DE L'ENREGISTREMENT (Figure 2).
Attention : noubliez pas darrter lenregistrement dune macro ! Dans le cas contraire vos actions
continueraient tre enregistres et vous ne seriez pas en mesure de relancer cette macro.
Lenregistreur de macro permet de manire rapide et simple de crer des macros. Cependant une
macro ainsi cre ne sexcutera que sur un ensemble de cellules donnes et possdera des
fonctionnalits limites. Pour pouvoir crer des macros propres ses besoins, efficaces et
interactives, la connaissance du langage VBA est ncessaire et il sera prsent dans les sections
suivantes.
1.1.2 Excuter une macro
Pour excuter une macro dj enregistre, donc connue du systme, il faut :
1) Activer la commande OUTILS MACRO/MACROS.
La fentre prsente en Figure 3 souvre.
Page 7
Le menu droulant Macros dans vous permet de faire un tri dans les macros disponibles et de
nafficher par exemple que celles enregistres dans votre classeur personnel.
1.1.3 Supprimer une macro
Si vous devez supprimer une macro dj cre, suivez les instructions suivantes :
1) Activer la commande Outils Macro macros.
La fentre prsente en Figure 3 souvre.
2) Slectionner dans la liste la macro dsire et cliquer sur le bouton SUPPRIMER.
Lenvironnement souvre :
Figure 4 : Barre d'Outils Visual Basic (licne entoure permet de lancer VBE)
Dans les deux cas de figure, la fentre prsente en Figure 5 souvre et vous donne accs de
nouvelles fonctionnalits.
Page 8
Les particularits de ces zones sont dtailles dans les sections suivantes.
1.2.2 Fentre de lecture, criture et modification dun programme
Toutes les instructions VBA sont enregistres dans un module de code qui est affich dans la fentre
principale de VBE droite (cf. Figure 5 et Figure 6).
Page 9
Cette fentre se comporte comme un diteur de texte classique avec quelques fonctionnalits
supplmentaires telles que la coloration du texte en fonction de la nature de ce qui est crit :
Un programme est une suite dinstructions. Une instruction excute une tche prcise. Elle est
gnralement crite sur une seule ligne.
Exemple :
Range("A1").Select
Cette instruction permet de slectionner la cellule nomme A1 dans le classeur courant.
Lenregistreur de macro ne gnre que des procdures sans arguments. 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
Par exemple, dans la Figure 6, la fentre daffichage de modules de codes affiche le module nomm
Module1 (cf. bandeau de la fentre). Ce module contient une seule macro nomme Macro1 (terme
suivant le mot cl Sub).
Dans cette macro, il y a 5 lignes de commentaires (commenant par un ) puis 6 instructions.
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).
Lorsque cette macro est lance on observe donc dans Excel le rsultat suivant :
Page 10
Les macros produites par lintermdiaire de lenregistreur de macro sont galement stockes dans
des modules de codes.
Un module de code peut contenir plusieurs macros ou fonctions.
Sub TestPrintValue()
Call PrintValue(1.22)
End Sub
Remarque : Seules les procdures sans arguments sont excutables directement par les menus ou
icnes. Toute procdure ayant des arguments devra donc tre appele dans une autre procdure
pour pouvoir tre excute. Dans lexemple prcdent et en labsence dautres procdures, la
procdure PrintValue ne pourra tre excute que par lintermdiaire de la procdure
TestPrintValue.
Page 11
Dans la Figure 8, on peut constater quun module est uniquement caractris par un nom que lon
peut modifier par simple saisie dans cas se situant droite du mot cl (Name).
1.2.4 Sauvegarde
Pour que les programmes produits soient conservs, il faut les sauvegarder laide de la commande :
FICHIER/ENREGISTRER ou le raccourci clavier CTRL+S.
1.2.5 Retrouver un programme enregistr : lexplorateur de projets
A chaque classeur EXCEL ouvert est associ un projet VBA.
L'explorateur de projets (partie en haut gauche de la fentre VBE (cf. Figure 5) affiche une liste
hirarchise des diffrents projets VBA associs aux classeurs EXCEL ouverts (cf. Figure 9).
Un projet VBA associ un classeur regroupe les lments du classeur, comme ses feuilles de calcul,
les procdures et les fonctions associes ce classeur et stockes dans un ou plusieurs modules de
code.
Par exemple, le projet VBA associ au classeur TEST-MACRO.XLS visible en Figure 9 est compos de
deux dossiers :
le dossier MICROSOFT EXCEL OBJETS qui contient les lments attachs au projet : le classeur TESTMACRO.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.
Page 12
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>).
Figure 10 : Fentre ouverte par clic droit sur l'explorateur de projets dans VBE
Louverture dun module de code peut galement se faire par double-click sur celui-ci dans
lexplorateur de projets.
La commande INSERTION MODULE permet galement dinsrer un nouveau module de code.
On peut insrer autant de modules de code quon le dsire en fonction des besoins recenss. Dans la
pratique, on cherche regrouper dans un mme module tous les lments de programmes qui se
rapportent un ensemble de fonctionnalits donn. Par exemple, si lon cre des fonctions de calcul
mathmatiques, on les regroupera dans un mme module que lon pourrait nommer Maths.
1.2.6 Excuter directement dans VBE une procdure sans argument
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
Page 13
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.
Page 14
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 :
2.4
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 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).
Page 15
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.
Attention : Toutes les fonctions intgres dEXCEL ne sont pas disponibles dans VBA ! Nanmoins, 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.
Page 16
2.7.2
Page 17
rechercher que dans les fonctionnalits spcifiques Excel et non dans celles communes toutes les
applications VBA par exemple.
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.
Pour connatre, par exemple les fonctions intgres dEXCEL lies lobjet Feuille de calcul et
disponibles dans VBA (cf. section 2.5.1), activer la commande AFFICHAGE EXPLORATEUR D'OBJETS dans
lditeur de Visual Basic et rechercher parmi les membres de lobjet WorkSheetFunction.
Page 18
La Figure 12 prsente une vue des rsultats propos par lexplorateur dobjets pour cette recherche.
Utiliser lenregistreur de macro pour dcouvrir les instructions VBA ncessaires pour accomplir
une opration donne.
Une bonne mthode pour apprendre se servir de VBA et dcouvrir de nouvelles instructions
est de :
tout d'abord enregistrer la squence des actions dont on souhaite connatre les instructions
correspondantes (cf. section 1.1.1)
puis excuter pas pas (touche F8) dans l'outil VBA afin de savoir les actions effectues par
chacune des lignes de code et de sen servir par exemple pour crire, modifier ou complter
un programme.
2)
Utiliser lexplorateur dobjets pour dcouvrir les objets disponibles dans VBA et les proprits,
mthodes et vnements qui leur sont associs.
3)
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.
Page 19
Cette section a pour but de prsenter ou rappeler suivant les cas les lments du langage VBA qui
sont communs toutes les applications MICROSOFT OFFICE voire dans certains cas tout langage de
programmation.
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.
En VBA la dclaration des variables nest, par dfaut, pas obligatoire. Nanmoins, il est prfrable de
forcer la dclaration explicite des variables notamment pour faciliter le contrle du comportement
du programme et traquer les erreurs de frappe trs frquentes en programmation.
Exemple :
Sub MacroTestVariable()
valeur = Range("A1").Value
Range("B1").Value = valleur
End Sub
En effet, dans lexemple prcdent, quelle que soit la valeur de la cellule A1, cette macro ncrira rien
dans la cellule B1. Pourtant VBA ne dtecte aucune erreur dans le code. Il considre quil y a deux
variables distinctes valeur et valleur.
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 (en premire ligne) des modules de code avant toutes
procdures et toutes fonctions.
Si maintenant on reprend lexemple prcdent en forant la dclaration des variables :
Option Explicit
Sub MacroTestVariable()
valeur = Range("A1").Value
Range("B1").Value = valleur
End Sub
Excel VBA DA GIA AgroParisTech Christine MARTIN
Page 20
Maintenant, VBA dtecte une erreur la compilation car la variable valleur nest pas dfinie (cf.
Figure 13).
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.
Exemple :
Dim Nom As String
Excel VBA DA GIA AgroParisTech Christine MARTIN
Page 21
Remarque sur linitialisation des variables : Selon leur type, les variables ne sont pas initialises avec
la mme valeur :
Page 22
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
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.
Page 23
...
End Function
Remarque : On peut typer les arguments dune procdure ou dune fonction et la valeur de
retour dune fonction.
Ici, SurfaceCercle est une fonction ayant 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.2.2 Utilisation sous Excel
Lutilisation dune fonction dfinie par lutilisateur se fait dans Excel comme toute fonction intgre.
Par exemple, pour la feuille de calcul suivante :
Si lon note dans la cellule B6, la formule =SurfaceCercle(A6), et que lon procde de manire
analogue pour les cellules suivantes, on obtient le rsultat suivant :
Page 24
alors son propre nom avec le rsultat calcul (WorksheetFunction.Pi() * Rayon * Rayon). Le
rsultat est ensuite retourn la cellule B6.
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).
3.2.3 Utilisation dans un programme VBA
Contrairement une procdure, une fonction retourne une valeur qui lorsquon utilise cette fonction
dans une autre fonction ou une autre procdure doit tre sauvegarde dans une variable.
Par exemple, la fonction SurfaceCercle telle que dfinie en section 3.2.1 peut tre utilise dans la
procdure MacroTestFonction dont le code est fourni ci-dessous.
Sub MacroTestFonction()
Dim valeur As Double
valeur = SurfaceCercle(1.5)
Range("B1").Value = valeur
End Sub
Ici la variable valeur reoit le rsultat de la function SurfaceCercle pour un rayon donn gal 1.5.
If condition_1 Then
Instructions_1
ElseIf condition_2 Then
Instructions_2
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.
VBA offre la possibilit dutiliser les oprateurs logiques suivants : Or, Xor (ou exclusif), And, Not.
Exemple :
Excel VBA DA GIA AgroParisTech Christine MARTIN
Page 25
Sub BonjourHeureIf()
Dim heure As Integer
Dim mes As String
heure = Left(Time, 2)
'rcupration de l'heure (2 caractres
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
Range("A1").Value = mes
End Sub
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
Do Until condition
Instructions
Loop
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
Page 26
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 = Range("A1").Value
For compteur = 1 To n
somme = somme + compteur
Next compteur
Range("A2").Value = "Somme des " & n & " premiers entiers : "
Range("B2").Value = somme
End Sub
Page 27
La fonction InputBox permet de crer une bote de dialogue. Pour plus dinformations ce sujet
reportez-vous au Tutoriel : Les entres et sorties standards page 32.
Page 28
Excel-VBA et lIHM
Sont prsentes dans ce qui suit sous forme de tutoriels des fonctionnalits de VBA spcifiques
linterfaage entre lutilisateur et Excel.
30
32
37
Page 29
identifier lobjet dont on veut traiter lvnement. Dans notre cas, il sagit de la feuille de calcul
FEUIL1 qui est un objet Worksheet ;
puis 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 ;
enfin, crire le code VBA appropri dans la procdure associe lvnement choisi.
Page 30
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 :
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.
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).
Page 31
1 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 :
Page 32
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 par nom en spcifiant les valeurs des arguments par nom comme
suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil"). Dans ce cas, comme dans lexemple
prcdent, il faut utiliser le signe := entre le nom de largument et sa valeur.
Lordre entre les arguments na alors plus dimportance et il ny a pas besoin de virgules
supplmentaires pour les arguments manquants.
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 mais la syntaxe suivante :
reponse = MsgBox(prompt:="Avez-vous pass une bonne journe?")
o reponse est une variable dans laquelle on va stocker temporairement le rsultat.
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
Page 33
2 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 "".
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"
Page 34
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")
Page 35
Page 36
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.
objet USERFORM1 qui est un objet de type FEUILLE et qui permet de dessiner une bote de dialogue
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.
Page 37
3) La proprit CAPTION de lobjet UserForm correspond au libell qui apparat dans sa barre de titre.
Modifier cette proprit en Saisie Clients.
Zone de texte
Intitul
bouton de
commande
4) Placer les diffrents contrles de lobjet UserForm et modifier leurs proprits comme suit :
Contrle
proprit NAME proprit CAPTION
INTITUL
IntitulTitre
Titre :
ZONE DE LISTE MODIFIABLE ComboBoxTitre
INTITUL
IntitulNom
Nom :
ZONE DE TEXTE
TextBoxNom
INTITUL
IntitulPrnom Prnom :
ZONE DE TEXTE
TextBoxPrnom
INTITUL
IntitulTl
Tlphone :
ZONE DE TEXTE
TextBoxTl
BOUTON DE COMMANDE ButtonOK
OK
BOUTON DE COMMANDE ButtonAnnuler Annuler
Remarque : Il est possible de copier/coller des contrles.
proprit FONT
police TIMES NEW ROMAN, taille 10
"
"
"
"
"
"
"
Page 38
activation de la feuille
3) Excuter cette procdure (pour fermer la bote de dialogue FenetreSaisieClients, cliquer sur son
bouton de fermeture).
Page 39
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.
Page 40
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.
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.
Page 41
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 feuille de calcul DIVERS.
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, slectionner 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
Page 42
Page 43
CreateObject("Word.Application")
ObjetWord.Visible = True
ObjetWord.Documents.Open
ObjetWord.Documents.Add
ObjetWord.Documents.Save
ObjetWord.Selection.TypeText Text:="le texte"
Lenregistreur de macro existe galement sous Word et vous permettra de dcouvrir les
instructions utiles vos besoins.
Page 44
Envoie de mails
Grce linstruction fournie prcdemment, on peut galement dclencher lenvoie dun mail par
lintermdiaire dune url du type :
mailto:adresse_mail?subject=le_sujet&body=le_contenu_du_message
Par exemple, pour lurl suivante mailto:edgar.poe@gmail.com?subject=Oh&body=ca va ?,
edgar.poe@gmail.com reprsente ladresse mail laquelle on souhaite envoyer le message, Oh
reprsente le titre du message et ca va ? son contenu.
Page 45