Vous êtes sur la page 1sur 551

Microsoft

Excel et VBA

Dveloppez des macros


compatibles avec toutes
les versions dExcel
(de 1997 2007)

Mikal Bidault
Livre Macros excel.book Page I Vendredi, 3. avril 2009 7:45 07

L E P R O G R A M M E U R

Microsoft

Excel & VBA


Version 97, 2000, XP, 2003 et 2007

Mikal Bidault
Livre Macros excel.book Page II Vendredi, 3. avril 2009 7:45 07

Pearson Education France a apport le plus grand soin la ralisation de ce li vre afin de ous four-
nir une information complte et fiable. Cependant, Pearson Education France nassume de respon
sabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tierces
personnes qui pourraient rsulter de cette utilisation.

Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions
thoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle.

Pearson Education France ne pourra en aucun cas tre tenu pour responsable des prjudices
ou dommages de quelque nature que ce soit pouv ant rsulter de lutilisation de ces e xemples ou
programmes.

Tous les noms de produits ou marques cits dans ce li vre sont des marques dposes par leurs
propritaires respectifs.

Publi par Pearson Education France


47 bis, rue des Vinaigriers
75010 PARIS
Tl. : 01 72 74 90 00
www.pearson.fr

Mise en pages : TyPAO

ISBN : 978-2-7440-4108-2
Copyright 2009 Pearson Education France
Tous droits rservs

Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de la
proprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sans le
respect des modalits prvues larticle L. 122-10 dudit code.
Livre Macros excel.book Page III Vendredi, 3. avril 2009 7:45 07

Sommaire

Introduction ................................................. 1 11. Intgrer des applications VBA


dans linterface dExcel ......................... 305
Partie I Dcouvrir
la programmation Excel .......................... 11 Partie III Dvelopper
1. Notions fondamentales des interfaces utilisateur........................... 317
de la programmation oriente objet ........ 13 12. Crer des interfaces utilisateur .............. 319
2. Premires macros .................................... 35 13. Exploiter les proprits
3. Dplacement et slection des contrles ActiveX ........................... 347
dans une macro Excel ............................. 63 14. Programmer les interfaces utilisateur .... 387
4. Dcouvrir Visual Basic Editor ................ 85
Partie IV Notions avances
Partie II Programmer en Visual Basic. 127 de la programmation Excel ..................... 423
5. Dvelopper dans Visual Basic Editor ..... 129 15. Programmer des vnements utilisateur 425
6. Variables et constantes ............................ 171 16. Protger et authentifier des projets VBA 437
7. Contrler les programmes VBA ............. 205 17. Bonus : exemple complet
8. Fonctions Excel et VBA ......................... 251 dapplication Excel ............................... 461
9. Manipulation des chanes de caractres .. 267 Annexe ........................................................ 517
10. Dbogage et gestion des erreurs ............ 283 Index ............................................................ 521
Livre Macros excel.book Page IV Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page V Vendredi, 3. avril 2009 7:45 07

Table des matires

Introduction ............................................ 1 CHAPITRE 2. Premires macros ............. 35


VBA, cest quoi ? ................................ 2 Crer une macro GrasItalique ............. 36
Des programmes .............................. 4 Dmarrer lenregistrement ............... 37
Une application hte et des projets ... 5 Enregistrer les commandes
Un langage de programmation ......... 6 de la macro ...................................... 39
Un environnement de travail ............ 8 Excuter la macro ............................ 40

Conventions typographiques ............... 9 Structure de la macro ....................... 42


Amliorer la macro .......................... 47
I Dcouvrir la programmation Une autre mthode denregistrement .... 50
Excel 11 Enregistrement ................................. 50
Structure de la macro ....................... 51
CHAPITRE 1. Notions fondamentales Ecrire la macro .................................... 51
de la programmation oriente objet 13
Excution de la macro ...................... 53
Comprendre le concept dobjet ........... 14
Choisir laccessibilit des macros ....... 54
Objets et collections dobjets ........... 14
Accessibilit globale ou limite ........ 54
Application hte et modles dobjets 16
Classeurs et modles ........................ 55
Accder aux objets ........................... 19
Le classeur de macros personnel ...... 55
Les proprits .................................. 21
Les macros complmentaires ............ 56
Les mthodes ................................... 26
Dfinir le classeur de stock ge
Les vnements ................................ 28
lors de lenregistrement dune macro 61
Les fonctions ................................... 28
Accder aux macros dun classeur
Le modle dobjets dExcel ................ 29 spcif que ........................................ 61
Livre Macros excel.book Page VI Vendredi, 3. avril 2009 7:45 07

VI Excel et VBA

CHAPITRE 3. Dplacement et slection Ajouter un module .................................. 148


dans une macro Excel .............................. 63 Supprimer un module ............................. 150
Mthodes de slection dans une feuille Crer une procdure ................................... 151
Excel .......................................................... 64 Ecrire linstruction de dclaration .......... 151
Clavier ....................................................... 64 La bote de dialogue Ajouter
Souris ..................................................... 66 une procdure ......................................... 152
Notion de cellule active ........................... 66 La notion de porte ................................ 154
Rfrences relatives et rfrences absolues . 76 Ecriture et mise en forme du code ........... 155
Coder les dplacements effectus Dplacer une procdure ......................... 160
lors de lenregistrement dune macro ........ 69
Appel et sortie dune procdure ................. 161
Rfrence absolue aux cellules ................ 69
Appel dune procdure Sub ..................... 161
Rfrence relative aux cellules ................ 77
Appels de procdures Function
Rfrence aux cellules fonction
et Property ............................................. 162
de leur contenu ....................................... 80
Passage darguments .............................. 163
Rfrence aux plages de cellules nommes 83
Sortie dune procdure ........................... 165
CHAPITRE 4. Dcouvrir Visual Basic Editor 85 Sortie dun programme ........................... 166
Accder Visual Basic Editor .................... 86
Excuter du code ....................................... 167
Les outils et les fentres de Visual Basic Editor 88
Aide lcriture de code ............................ 167
LExplorateur de projet ........................... 89
Vrification automatique de la syntax .... 168
LExplorateur dobjets ............................ 93
Complment automatique des instructions 169
La fentre UserForm ............................... 100
Info express automatique ........................ 170
La fentre Code ...................................... 103
La fentre Proprits .............................. 115 CHAPITRE 6. Variables et constantes ............ 171
Les barres doutils .................................. 119 Dclarer une variable ................................. 172
Paramtrer Visual Basic Editor .................. 123 Dclaration implicite .............................. 172
Dclaration explicite .............................. 173
II Programmer en Visual Basic 127 Types de donnes des variables ................. 176
Chanes de caractres ............................. 176
CHAPITRE 5. Dvelopper dans Valeurs numriques ................................ 178
Visual Basic Editor ................................... 129 Valeurs boolennes ................................. 181
Structure des programmes Visual Basic ..... 130 Dates ..................................................... 181
Les modules ............................................ 130 Type Variant ........................................... 182
Les procdures ........................................ 131 Variables de matrice ............................... 183
Les instructions ...................................... 133 Variables objet ....................................... 187
Les diffrents types de procdures ............. 135 Types de donnes personnaliss .............. 192
Procdures Sub ....................................... 136 Constantes ............................................. 194
Procdures Function ............................... 140 Validation et conversion des types
Procdures Property ............................... 143 de donnes ............................................. 195
Des projets bien structurs ......................... 148 Porte et dure de vie des variables ........... 198
Livre Macros excel.book Page VII Vendredi, 3. avril 2009 7:45 07

Table des matires VII

Porte de niveau procdure ..................... 198 CHAPITRE 9. Manipulation des chanes


Porte de niveau module prive .............. 198 de caractres ............................................ 267
Porte de niveau module publique ........... 199 Modifier des chanes de caractres ............ 268
Variables statiques ................................. 199 Concatner des chanes .......................... 268
Traitement interapplications laide Insrer des caractres non accessibles
de variables objet ....................................... 200 au clavier ............................................... 270
Rpter une srie de caractres .............. 271
CHAPITRE 7. Contrler
Supprimer les espaces superf us
les programmes VBA ............................... 205
dune chane .......................................... 272
Rpter une srie dinstructions : Extraire une partie dune chane ............. 272
les boucles .................................................. 206 Effectuer des remplacements au sein
La boucle While...Wend .......................... 206 dune chane .......................................... 274
La boucle Do...Loop ............................... 210 Modif er la casse des chanes de caractres 275
La boucle For...Next ................................ 214 Comparer des chanes de caractres .......... 275
La boucle For Each...Next ....................... 219
Rechercher dans les chanes de caractres 277
Utiliser des instructions conditionnelles .... 223 Rechercher une chane dans une chane ... 277
La structure de contrle If...Then...Else ... 223 Rechercher une chane dans une variable
La structure de contrle Select Case ....... 227 de matrice .............................................. 280
Dfinir linstruction su vante avec GoTo ... 229 CHAPITRE 10. Dbogage et gestion
Interagir avec lutilisateur via des botes des erreurs ................................................ 283
de dialogue ................................................. 229 Les tapes et les outils du dbogage .......... 284
La fonction InputBox .............................. 230 Test du projet ......................................... 285
La mthode InputBox .............................. 234 Excuter pas pas ................................. 287
La fonction MsgBox ............................... 236 La fentre Variables locales .................... 288
Affi hage de botes de dialogue Excel ...... 241 Les points darrt ................................... 290
Utiliser les oprateurs logiques .................. 246 Modif er lordre dexcution
des instructions ...................................... 291
Trier des donnes ....................................... 247
La fentre Excution ............................... 291
CHAPITRE 8. Fonctions Excel et VBA ........... 251 Les espions ............................................ 292
Utiliser les fonctions Excel dans VBA ...... 252 La pile des appels .................................. 294
Crer des fonctions Excel personnalises .... 252 Exemple de dbogage ................................ 295
Intgrer une fonction via lExplorateur Recherche du bogue ............................... 297
dobjets ......................................................
254 Rsolution du bogue ............................... 298
Insrer une fonction VBA dans votre code 254 Gestion des erreurs et des exceptions ........ 301
Insrer une fonction Excel dans votre code 255 Exemple de gestion derreur ...................... 303
Recommandations pour lcriture CHAPITRE 11. Intgrer des applications
de fonctions Excel ..................................... 256 VBA dans linterface dExcel ................. 305
Les limites de la cellule ............................ 256 Affecter une macro un raccourci clavier . 306
Des fonctions toujours jour .................. 257 Personnaliser la barre doutils
Principales fonctions VBA ........................ 257 Accs rapide dExcel 2007 ........................ 307
Livre Macros excel.book Page VIII Vendredi, 3. avril 2009 7:45 07

VIII Excel et VBA

Affecter une macro un bouton ................. 309 Uniformiser lespace entre les contrles . 337
Affecter une macro une commande Centrer les contrles .............................. 338
de menu ...................................................... 310 Rorganiser les boutons .......................... 339
Supprimer une commande de menu ........... 312 Grouper ou sparer des contrles ........... 340

Modifier limage et/ou le nom Personnaliser la bote outils .................... 341


dune commande ........................................ 313 Ajouter/supprimer un contrle ................ 341
Ajouter/supprimer une page .................... 343
Affecter une macro un objet .................... 315
Afficher/masquer une feuille ..................... 345
III Dvelopper CHAPITRE 13. Exploiter les proprits
des interfaces utilisateur 317 des contrles ActiveX ............................... 347
Proprit Name .......................................... 349
CHAPITRE 12. . Crer des interfaces Apparence .................................................. 350
utilisateur .................................................. 319 Alignment ................................................. 350
Les phases de dveloppement de feuilles .. 320 BackColor .............................................. 350
Crer une feuille ......................................... 321 BackStyle ............................................... 351
Les contrles de la bote outils ................ 323 BorderColor ........................................... 351
Outil Slection ........................................ 323 BorderStyle ............................................ 351
Contrle Label ....................................... 323 Caption .................................................. 352
ControlTipText ........................................ 353
Contrle TextBox .................................... 324
ForeColor ............................................... 353
Contrle ComboBox ............................... 325
SpecialEffect .......................................... 353
Contrle Frame ...................................... 325
Style ....................................................... 354
Contrle ListBox .................................... 325
Value ...................................................... 354
Contrle CheckBox ................................. 326
Visible .................................................... 356
Contrle OptionButton ........................... 327
Contrle ToggleButton ............................ 327 Comportement ........................................... 359
AutoSize .................................................... 359
Contrle CommandButton ...................... 327
AutoTab .................................................. 360
Contrle TabStrip ................................... 328
AutoWordSelect ...................................... 360
Contrle MultiPage ................................ 328
Cancel ................................................... 361
Contrle ScrollBar ................................. 329
Default ................................................... 362
Contrle SpinButton ............................... 330
Enabled .................................................. 362
Placer des contrles sur une feuille ............ 330 EnterKeyBehavior .................................. 364
Copier-coller des contrles ..................... 332 HideSelection ......................................... 364
Slectionner plusieurs contrles .............. 333 Locked ................................................... 364
Supprimer des contrles ......................... 334 MaxLenght ............................................. 365
Mise en forme des contrles ...................... 334 MultiLine ............................................... 365
La grille ................................................. 335 SelectionMargin ..................................... 365
Aligner les contrles ............................... 336 Style ....................................................... 366
Uniformiser la taille des contrles .......... 337 TabKeyBehavior ..................................... 367
Livre Macros excel.book Page IX Vendredi, 3. avril 2009 7:45 07

Table des matires IX

TextAlign ................................................ 367 Contrle ComboBox ............................... 406


TripleState .............................................. 367 Contrle ListBox .................................... 411
WordWrap .............................................. 368 Contrles CheckBox et OptionButton ...... 414
Dfilement ................................................ 369 Contrle ScrollBar ................................. 415
ScrollBars ................................................ . 369 Contrle SpinButton ............................... 417
KeepScrollsVisible .................................. 370
Exploiter les informations
Delay ..................................................... 370
dune feuille VBA ...................................... 420
Max et Min ............................................. 371
SmallChange .......................................... 372
IV Notions avances
LargeChange .......................................... 372
de la programmation Excel 423
Divers ......................................................... 373
Accelerator ............................................... 373
CHAPITRE 15. Programmer des vnements
GroupName ............................................ 374 utilisateur ................................................. 425
HelpContextID ....................................... 375
Lobjet Application .................................... 426
MouseIcon ............................................. 375
Dclaration et instanciation
MousePointer ......................................... 376
de lobjet Application ............................. 426
TabIndex ................................................ 377
Cration de procdures vnementielles
TabStop .................................................. 379
de niveau application ............................. 427
Tag ......................................................... 379
Proprits de lobjet Application ............ 429
Emplacement ............................................. 379
Mthodes de lobjet Application ............. 431
Height et Width ......................................... 379
Left et Top .............................................. 379 Lobjet ThisWorkbook ............................... 431
StartUpPosition ...................................... 380 Lobjet Worksheet ...................................... 433
Image ......................................................... 381 CHAPITRE 16. Protger et authentifier
Picture ...................................................... 381 des projets VBA ....................................... 437
PictureAlignment .................................... 382
Les virus macro ......................................... 438
PictureSizeMode .................................... 383
PicturePosition ....................................... 384 Se protger des virus macros ..................... 438
PictureTiling .......................................... 384 Dfinir un niveau de scurit
dans Excel 2007 .................................... 438
Police ......................................................... 385
Dfinir un niveau de scurit
Font ........................................................... 385
avec Excel 2000, XP et 2003 .................... 440
CHAPITRE 14. Programmer Effectuer des sauvegardes des macros ..... 444
les interfaces utilisateur ........................... 387
Protger laccs aux macros ...................... 445
Crer des procdures vnementielles ....... 388
Verrouiller un projet ............................... 445
Crer une procdure ............................... 388
Les vnements ....................................... 394 Limiter les droits dexcution dune macro 447

Exemples dexploitation des contrles ...... 400 Authentifier ses macros ............................. 457
Contrle Label ....................................... 401 Obtenir une authentif cation ................... 458
Contrle TextBox .................................... 403 Authentif er une macro ........................... 459
Livre Macros excel.book Page X Vendredi, 3. avril 2009 7:45 07

X Excel et VBA

CHAPITRE 17. Bonus : exemple complet Feuille fmContratDates .......................... 498


dapplication Excel .................................. 461 Feuille fmContratImpression ................... 504
Prsentation dun projet dapplication Feuille fmContratFin .............................. 510
Excel .........................................................
462
Ecriture des procdures ddition
Identif cation des informations recueillir 463
de documents ............................................. 511
Dfinition de la structu e du programme . 464 Edition des feuilles de paie ..................... 511
Cration du modle Excel .......................... 470 Mise jour du Tableau Word .................. 514
Cration des interfaces ............................... 472 ANNEXE . Manipulation des fichiers
Feuille fmContratAuteur ......................... 472 et des dossiers ........................................... 517
Feuille fmContratConditions ................... 484 Index .............................................................. 521
Livre Macros excel.book Page 1 Vendredi, 3. avril 2009 7:45 07

Introduction

Visual Basic pour Applications, VBA, est la solution de programmation propose avec les
applications de la suite Of fice. La connaissance de VBA permet lutilisateur dExcel de
tirer pleinement profit du tableur de Microsoft en en d eloppant les capacits et les fonc-
tionnalits pour ses besoins spcifiques. Matriser Visual Basic pour Applications, cest
coup sr amliorer grandement sa productivit et celle de son entreprise.
Lintgration dans Excel de Visual Basic pour Applications, un environnement de dve-
loppement intgr complet et professionnel, remonte sa v ersion 97. Depuis, Micro-
soft a confirm sa olont de f aire de VBA un lment part entire des applications
Office et la progress vement propos a vec lensemble des applications de sa suite
bureautique. Visual Basic pour Applications constitue aujourdhui un lang age et un
environnement stables et prennes. Si lenvironnement des applications de la suite 2007 a
t trs largement modifi, vec le remplacement des menus classiques des versions prc-
dentes par un systme de "ruban" et d"onglets", ce nest pas le cas pour la programmation
VBA au sein de ces applications. En effet, cette nouvelle suite Office intgre la ersion 6.3
de Visual Basic, dj livre avec Office XP et O fice 2003.
Cest pourquoi cet ouvrage se v eut le plus e xhaustif possible et couvre les v ersions 97, 2000,
XP, 2003 et 2007 dExcel. En effet, dune version lautre, il ny a pas eu de rvolution.
Le modle dobjets sest af fin et les nou elles fonctions dExcel, apparues au cours de s
diffrentes versions du logiciel, peuvent galement tre manipules via la programmation
VBA. Cependant, le langage, la gestion des programmes, len vironnement et les outils au
service du dveloppeur bref, tout ce que vous devez savoir pour programmer Excel et q ue
cet ouvrage se propose de vous apprendre restent inchangs dune version lautre.
Livre Macros excel.book Page 2 Vendredi, 3. avril 2009 7:45 07

2 Excel et VBA

Donc, que vous utilisiez encore Excel 97 ou que vous soyez pass la version 2007, soyez
rassur : v ous pourrez appliquer les connaissances que v ous aurez acquises lors de la
lecture de ce li vre lorsque v ous migrerez dune v ersion lautre dExcel. Mieux, les
programmes dvelopps pour Excel 97 fonctionnent avec toutes les versions ultrieures
du tableur et, sauf e xception, les programmes dvelopps dans Excel 2007 de vraient
fonctionner avec les versions antrieures.

Laide de VBA pour Excel 2007 r ecense les nouveauts du modle dobjets
Info dExcel dune version lautre, depuis la version 2007.

Dans cet ouvrage, v ous dcouvrirez les dif frentes mthodes de cration de projets
VBA pour Excel, Visual Basic (le lang age de programmation proprement dit) et les
outils de dveloppement et de gestion intgrs de Visual Basic pour Applications. Votre
initiation la programmation VBA se fera au moyen dexemples de programmes dtaills et
comments.

Vous rencontrerez le terme pr ojet tout au long de cet ouvr age. Cest ainsi que
ition lon nomme un ensemble de pr ogrammes dvelopps avec Visual Basic pour
Dfin
Applications.

VBA, cest quoi ?


Excel of fre des possibilits trs tendues. Pourtant, quelle que soit la puissance des
fonctions dExcel, elles ne peuvent rpondre toutes les situations. La programmation
VBA est la solution de personnalisation offerte par Excel, afin dajouter des caractris
tiques, des fonctions et des commandes qui rpondent prcisment vos besoins.
La programmation VBA peut tre dfinie comme la personnalisation dun logiciel afin d
sassurer gain de temps, qualit des documents et simplification des t hes complexes ou
fastidieuses. Voici quelques exemples de ce que permettent les programmes VBA :
Combiner un nombre indtermin de commandes. Nous sommes souvent amens
rpter ou associer certaines commandes plutt que dautres et ignorer certaines
fonctionnalits en fonction de lusage personnel que nous a vons dun logiciel. VBA
permet dassocier un nombre illimit de commandes une seule. Vous pouvez ainsi
ouvrir simultanment plusieurs documents Excel stocks dans des dossiers ou sur des
serveurs diffrents, y insrer des donnes spcifiques et leur appliquer des mises e
forme adaptes, en excutant une seule commande cre en VBA.
Ajouter de nouvelles commandes et de nouvelles fonctions Excel. VBA permet de
crer de nouvelles commandes et dajouter des fonctions au tableur par exemple une
Livre Macros excel.book Page 3 Vendredi, 3. avril 2009 7:45 07

Introduction 3

fonction personnalise qui permet de calculer les tax es retenir sur un salaire (o u,
mieux, les primes y ajouter), etc. Vous pouvez, en outre, attacher v os programmes
VBA des raccourcis cla vier, des icnes et des commandes de menu afin de
amliorer laccessibilit.

Figure I.1
VBA permet de personnaliser
linterface des applications
Office en y ajoutant icnes
et commandes de menus.

Automatiser des actions rptiti ves. Nous sommes parfois amens rpter certaines
oprations plusieurs fois sur un mme document ou ritrer des traitements spci-
fiques. Un programme VBA peut, par e xemple, mettre en forme des cellules dans un
classeur Excel, effectuer des sries de calculs, etc.
Modifier et amlio er les commandes dune application. Les commandes Excel ne
sont pas toujours adaptes nos besoins ou prsentent parfois des limitations gnantes.
Un programme VBA peut modifie , brider ou complter les commandes dune appli-
cation. Vous pouvez ainsi intgrer dans un tableau le nom de lutilisateur, le nombre de
pages imprimes et limprimante utilise chaque fois quune impression est lance
partir dExcel.
Faire interagir les diffrentes applications Office Un programme VBA peut exploi-
ter des donnes issues de fichiers gnrs par dautres programmes et interagir vec
ceux-ci de f aon transparente pour lutilisateur . Vous pouv ez ainsi crer une
commande qui envoie automatiquement le classeur Excel ouv ert en fichier joint dan
un mail Outlook des destinataires dfinis ou qui gnre un rapport Word partir de
donnes Excel et limprime.
Livre Macros excel.book Page 4 Vendredi, 3. avril 2009 7:45 07

4 Excel et VBA

Crer des interfaces personnalises. Les programmes VBA peuvent ramener des
tches comple xes la simple information de champs dans des botes de dialogue
personnalises pour lutilisateur final, simplifiant ainsi considrablement le t vail
de celui-ci, tout en v ous assurant quaucun oubli ou f ausse manipulation naura
lieu.
Visual Basic pour Applications permet le dv eloppement de solutions adaptes v os
besoins. Les outils que v ous apprendrez manier v ous permettront de dv elopper des
programmes simples, sans crire la moindre ligne de code, comme des programmes
complets intgrant une interface utilisateur adapte.
La fonction dun programme VBA peut tre dautomatiser une tche rptiti ve. Mais
vous pouvez aussi crer trs vite un petit programme VBA pour faire face une nces-
sit immdiate ; par e xemple, afin de gnraliser un traitement xceptionnel lensembl e
dun document.

Figure I.2
Visual Basic pour
Applications vous
permet de dvelopper
des interfaces utili-
sateur volues.

Des programmes
Les projets VBA sont des programmes ou macros crits dans le langage Visual Basic. Si
vous ne possdez aucune e xprience pralable de programmation, ne v ous inquitez
pas : cet ouvrage aborde le dv eloppement de projets VBA tra vers lenregistrement
de macros. Lorsque v ous lactivez, lEnregistreur de macro mmorise chacune de v os
actions. Cest votre programmeur personnel : vous utilisez simplement les commandes
dExcel et il se charge de traduire les actions excutes en instructions Visual Basic. Il
vous suffit ensuite d xcuter la macro pour rpter lensemble des commandes enre-
gistres.
Livre Macros excel.book Page 5 Vendredi, 3. avril 2009 7:45 07

Introduction 5

Le terme macr o dsigne le r egroupement dun ensemble de commandes en une


ition seule. On parle parfois de macr ocommandes pour dsigner un pr ogramme qui se
Dfin
rsume lexcution dune srie de commandes, sans gar d pour le contexte. Des
macros plus volues peuvent rpter des opr ations en boucle, affi her des botes
de dialogue qui autorisent une inter action avec lutilisateur . Ces pr ogrammes se
comporteront dif fremment en fonction des informations entres ou de ltat du
document sur lequel elles sexcutent.
Le terme pr ojet est plus lar ge. Il dsigne lensemble des lments constituant vos
programmes VBA. Il sa git toujours de macros, mais celles-ci peuvent sajouter
des feuilles qui constituent une interface utilisateur permettant de rcolter des
informations de tout type , des modules de classe , et autres friandises que vous
dcouvrirez tout au long de cet ouvrage.

Lenregistrement de macros constitue sans aucun doute le meilleur mo yen de se familiariser


avec la programmation en Visual Basic. Ainsi, sans connatre le langage les instructions
qui le composent et la f aon dont elles sont structures , v ous pouv ez crer des
programmes VBA et en visualiser ensuite le code.

Une application hte et des projets


Visual Basic pour Applications est un environnement de dveloppement calqu sur Visual
Basic, un outil de dv eloppement dapplications Windows. Les structures de contrle du
langage sont les mmes et len vironnement proprement dit (Visual Basic Editor) est pour
ainsi dire identique celui de Visual Basic. Mais, contrairement Visual Basic, Visual
Basic pour Applications est conu pour des applications . Cela signifie que, tandis qu
les programmes Visual Basic sont autonomes, les programmes VBA ne peuv ent tre
excuts qu partir dune application intgrant cet en vironnement de dv eloppement
Excel ou une autre application.
Lorsque vous dveloppez un programme VBA, vous lattachez une application. Il sagit
de lapplication hte du programme. Plus prcisment, v os programmes VBA sont atta-
chs un document (un fichier ou un modle Word, une feuille de calcul Excel, une
prsentation PowerPoint) spcifique lapplication hte. ensemble des programmes
VBA attachs un document constitue un projet. Un projet re groupe des macros, mais
peut g alement intgrer des interf aces utilisateur , des dclarations systme, etc. Un
projet constitue en fait la partie VBA dun document. Si cet ouvrage ne traite que de la
programmation pour Excel, sachez quun programme VBA peut tre attach une autre
application. Les concepts et les outils que v ous dcouvrirez au long de cet ouvrage sont
valides pour toutes les applications de la suite Office. Pour xcuter une macro VBA, vous
devez a voir accs au document auquel elle est attache. Vous pouv ez choisir de rendre
certaines macros disponibles partir de nimporte quel document Excel ou en limiter
Livre Macros excel.book Page 6 Vendredi, 3. avril 2009 7:45 07

6 Excel et VBA

laccessibilit un classeur Excel spcifique. La disponibilit des programmes VBA est


aborde au Chapitre 2.

Un langage de programmation
Les projets VBA sont dvelopps dans le langage de programmation Visual Basic. Vous
dcouvrirez par la pratique la structure de ce lang age et apprendrez rapidement en
discerner les composants et les relations quils entretiennent. Comme nous la vons dit
prcdemment, lenre gistrement de macros constitue une e xcellente initiation Visual
Basic. Cest sous cet angle que nous vous ferons dcouvrir ce langage.
Visual Basic est un lang age de programmation orient objet. Nous prsenterons donc les
concepts de la programmation oriente objet (POO). Vous apprendrez ce quest un objet,
une proprit, une mthode ou un module de classe, etc. Vous verrez comment conjuguer
ces lments pour crer des applications Excel souples et puissantes. Visual Basic pour
Applications constitue une bonne approche de la programmation pour le nophyte.
Visual Basic pour Applications intgre un grand nombre dinstructions. Cela permet de
dvelopper des macros susceptibles didentifier trs prcisment ltat de lapplication e
des documents et reproduire le xcution de la plupart des commandes disponibles dans
lapplication hte.
Vous verrez que certaines instructions sont spcifiques Excel. Cest, par xemple, le cas
des instructions permettant daf fecter une formule une cellule. Vous nutiliserez proba-
blement quun nombre limit de ces instructions, en fonction de v otre usage personnel
dExcel ou des besoins de votre entreprise. Par ailleurs, certaines instructions spcifiques
Excel apparatront presque toujours dans v os macros. Cest, par e xemple, le cas de la
proprit Range qui renvoie un objet Excel tel quune cellule ou une plage de cellules.
Dautres instructions sont communes lensemble des applications Office. Cest le cas d
celles qui permettent de rgler le comportement dune macro : raliser des oprations en
boucle, induire des ractions f ace certains paramtres, af ficher des botes de dialogu
simples (v oir Figures I.3 et I.4) ou dv elopper des interf aces utilisateur v olues (v oir
Figure I.1), etc. Ce sont ces instructions qui constituent vritablement ce quil est convenu
dappeler le langage Visual Basic. Vous aurez besoin dy faire appel ds que vous voudrez
crer un programme interactif, capable de se comporter diffremment selon le contexte. La
plupart de ces instructions ne peuvent tre gnres par enregistrement de macros, et doivent
donc tre dites manuellement dans Visual Basic Editor.
Cet ouvrage ne se veut pas un dictionnaire du langage, mais un guide qui vous enseignera
le dv eloppement de projets VBA de qualit. Vous apprendrez enre gistrer, modifie ,
excuter et dboguer des macros, crer des interf aces utilisateur ainsi qu grer v os
projets VBA. Vous dcouvrirez, tra vers les nombreux e xemples de projets VBA de cet
Livre Macros excel.book Page 7 Vendredi, 3. avril 2009 7:45 07

Introduction 7

ouvrage, un certain nombre dinstructions spcifiques la hirarchie dobjets dExcel, qui


vous familiariseront avec la logique de ce langage.
Figure I.3
La fonction VBA MsgBox
permet daffi her une bote
de dialogue.

Figure I.4
Il existe une version VBA
et une version Excel
de la fonction InputBox.

La hirarchie dobjets dune application, encor e appele modle dobjets, est


ition le rapport quentretiennent entre eux les diffrents objets dune application. Ce
Dfin
concept ainsi que les notions spcifiques aux lang ges orients objet ser ont
dvelopps au Chapitre 1, "Notions fondamentales de la programmation oriente
objet".

En revanche, ce livre prsente et illustre dexemples comments lensemble des structures


de contrle qui permettront de crer trs simplement des macros v olues. Nous v ous
fournirons les bases du lang age Visual Basic. Elles suf fisent pour crer une infinit
macros et rpondre vos besoins spcifiques
Lorsque les principes du dv eloppement de projets VBA vous seront acquis et que v ous
crerez v os propres macros, il v ous arrivera srement da voir besoin dinstructions que
vous naurez pas rencontres lors de la lecture de cet ouvrage ; vous pourrez alors utiliser
lEnregistreur de macro ou encore les rechercher dans laide de Visual Basic pour Appli-
cations ou dans lExplorateur dobjets tudi au Chapitre 4. Vous verrez que laide de
Visual Basic pour Applications fournit une rfrence complte du lang age, f acilement
accessible et consultable.
Si vous navez aucune exprience de programmation, peut-tre ce Visual Basic vous appa-
rat-il comme un lang age barbare ou inaccessible. Ne v ous inquitez pas : le dv eloppe-
ment de projets VBA ne requiert ni e xprience pralable de la programmation, ni
connaissance globale du lang age. Contentez-vous, au cours de v otre lecture, dutiliser les
fonctions ncessaires aux exercices et que nous vous dtaillerons. Cet ouvrage propose un
apprentissage progressif et concret : vous dvelopperez vos premiers projets VBA ds les
premiers chapitres.
Livre Macros excel.book Page 8 Vendredi, 3. avril 2009 7:45 07

8 Excel et VBA

Un environnement de travail
Visual Basic pour Applications dispose dun en vironnement de dv eloppement part
entire : Visual Basic Editor.

Figure I.5 Explorateur Fentre Fentre


Visual Basic Editor de projet Code Proprits
est lenvironnement
de dveloppement
de Visual Basic pour
Applications.

Explorateur Bote Fentre


d'objets outils UserForm

Visual Basic Editor est l environnement de dveloppement intgr des applications


Office. Il permet de visualiser et de grer les projets VBA, dcrire, de modifier et d
dboguer les macros e xistantes, de visualiser comment les commandes propres une
application Off ce sont traduites en langage Visual Basic, et inversement. Cest aussi un
outil de dbogage de vos projets VBA dune grande efficacit. Visual Basic Editor propose
nombre doutils permettant de tester les macros et den tudier le compo rtement. Vous
pouvez ainsi excuter les commandes de la macro pas pas, en sui vre le droulement,
insrer des commentaires dans le te xte de la macro, etc. Enfin, Visual Basic Editor intgr e
des outils trs intuitifs, ddis au dveloppement dinterfaces graphiques.
Vous apprendrez dans cet ouvrage utiliser les nombreux outils de Visual Basic Editor
toutes les phases de dveloppement dun projet VBA.
Livre Macros excel.book Page 9 Vendredi, 3. avril 2009 7:45 07

Introduction 9

Conventions typographiques
Afin den aciliter la lecture, nous a vons adopt dans cet ouvrage un certain nombre de
conventions typographiques. Lorsquun mot apparat pour la premire fois, il est compos
en italique. Les programmes et les mots cls du lang age Visual Basic apparaissent dans
une police chasse fixe. Lorsque, dans un programme, un mot signale une information
attendue dans le code, celui-ci apparat en italique.
Lorsquune ligne de code ne peut tre inscrite sur une seule ligne de louvrage, cette flch
() en dbut de ligne indique que le texte est la poursuite de ligne prcdente.
Par ailleurs, v ous rencontrerez au long de cet ouvrage dif frents types de notes, signales
dans la marge par des pictogrammes.

Ces rubriques apportent un complment dinformation en rapport avec le sujet


Info trait. Leur lectur e nest pas indispensable . Mais elles peuvent vous aider
mieux cerner le sujet.

Vous trouverez sous ces rubriques la dfinition de termes te hniques spcifique


ition la programmation VBA.
Dfin

Ces rubriques vous mettent en garde contre les risques inhrents telle ou telle
ntion commande ou manipulation.
Atte

Il est parfois ncessaire de se rafrachir la mmoire. Lorsquun sujet fait appel


pel des connaissances acquises plusieur s c hapitres aupar avant, cette rubrique
Rap
vous les remmore brivement.

Sous cette rubrique , vous tr ouverez des trucs pour aller plus vite et tr availler
ce plus efficacement
Astu

Nous vous faisons ici part de notre exprience, en vous prodiguant des conseils
Cons
eil qui vous aideront dvelopper des projets VBA de qualit.

Ces notes prodiguent des informations spcifiques la ve sion 2007 dExcel.


7
200
Livre Macros excel.book Page 10 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 11 Vendredi, 3. avril 2009 7:45 07

Partie I
Dcouvrir
la programmation Excel
CHAPITRE 1. Notions fondamentales de la programmation oriente objet
CHAPITRE 2. Premires macros
CHAPITRE 3. Dplacement et slection dans une macro Excel
CHAPITRE 4. Dcouvrir Visual Basic Editor
Livre Macros excel.book Page 12 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 13 Vendredi, 3. avril 2009 7:45 07

1
Notions fondamentales
de la programmation
oriente objet
Au sommaire de ce chapitre
Comprendre le concept dobjet
Le modle dobjets Excel
Livre Macros excel.book Page 14 Vendredi, 3. avril 2009 7:45 07

14 Excel et VBA

Visual Basic est un lang age de programmation orient objet. En tant que tel, il repose sur
des concepts communs tous les langages de programmation orients objet. Avant de vous
lancer dans la programmation pour Excel, il est important de v ous familiariser avec ces
concepts et le v ocabulaire qui les dcrit. Plus concrtement, ce chapitre v ous fera dcou-
vrir les diffrents composants du langage Visual Basic en tant que langage orient objet et
comment ils sarticulent pour crer des programmes VBA puissants.
Vous ne trouv erez pas dans ce chapitre de programmes VBA. Il est destin v ous faire
acqurir les bases et la terminologie sur lesquelles nous nous appuierons tout au long de
cet ouvrage. Alors, patience ! Les connaissances quil vous apportera permettront dappr-
hender vos premiers programmes ds le Chapitre 2.

Comprendre le concept dobjet


Comme pour tous les lang ages de programmation objet, les objets sont le fondement de
Visual Basic. Quelle que soit la fonction dun programme VBA, presque toutes les actions
quil excute sapparentent la modification dobjets
Les ouvrages prsentant la programmation oriente objet (POO) le font presque toujours
par analogie a vec les objets de la vie relle. Nous ne drogerons pas cette rgle. La
programmation oriente objet repose en ef fet sur une structure qui rappelle, par de
nombreux points, les objets de la vie courante et les rapports quils entretiennent. Lanalo-
gie avec les objets de la vie relle rend simples et faciles daccs des concepts qui, abords
de faon abstraite, vous apparatraient probablement obscurs.

Objets et collections dobjets


Dans la vie, un objet peut tre tout et nimporte quoi. Ce qui caractrise un objet, cest son
existence physique, ses proprits spcifiques, son comportement et les actions que lo
peut e xcuter sur celui-ci. Une v oiture est un objet. Lorsque v ous parlez de lobjet
Voiture, vous pouvez f aire rfrence un objet abstrait ("Je v ais acheter une v oiture")
comme une v oiture bien concrte ("Mate un peu ma belle 2CV rouge"). Les objets que
vous utiliserez dans vos programmes VBA rpondent une mme dfinition
Dans le premier cas, v ous voquez un objet Voiture imprcis, et pourtant tout le monde
comprend de quoi v ous parlez. Il v ous suf fit de prononcer le mot " oiture" pour que
chacun imagine et visualise une v oiture bien spcifique, en fonction de ses gots, de se
aspirations, de ses souv enirs, etc. Cependant, quelle que soit la v oiture imagine, en tant
quobjet Voiture, elle possde un certain nombre de proprits (une carrosserie, des
roues, un moteur , etc.) et autorise un certain nombre de mthodes (dmarrer , freiner ,
tourner, etc.) qui permettent den matriser le comportement.
Livre Macros excel.book Page 15 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 15

Ce sont ces proprits et ces mthodes, communes toutes les v oitures, qui dfinissen
lobjet Voiture. Elles sont sous-entendues, videntes et essentielles. Il e xiste donc des
milliers de voitures diffrentes, toutes reconnaissables par un certain nombre de caract-
ristiques communes dfinies dans le concept (lobjet) Voiture. En POO, cet objet
abstrait est appel la classe Voitures. La classe Voitures est la dfinition formelle des obj ts
Voiture (leurs proprits et leurs mthodes). Il sagit du modle partir duquel v ous
pouvez imaginer et crer des milliers de v oitures diffrentes. Lensemble des vhicules
appartenant la classe Voitures (parce quils possdent les proprits et les mthodes
dfinies dans cette classe) est appel la collection dobjets Voitures.

Une collection porte le nom pluriel des objets quelle rassemble.


Info

Ainsi, la collection WorkBooks renvoie tous les objets Workbook, soit tous les classeurs
ouverts, la collection Sheets, toutes les feuilles dun objet WorkBook, la proprit
Worksheets, toutes les feuilles de calcul dun objet Workbook, etc. La section "Le modle
dobjets dExcel" situe en fin de chapitre ous permettra de dcouvrir les objets Excel les
plus importants.

Le terme Classe dsigne la dfinition commune dun ensemble dobjets (quest


ition ce quune voitur e ?), tandis quune Collection dsigne lensemble des objets
Dfin
appartenant une classe (toutes les voitures en circulation).

Lorsque v ous parlez dacheter la 2CV rouge de v os rv es, v ous v oquez une v oiture
concrte, bien spcifique. Vous crez une instance on parle aussi dune occurrence
de lobjet Voiture. Elle possde toutes les proprits de la classe Voitures, mais ces
proprits sont attaches des v aleurs prcises. La carrosserie est rouge, la vitesse maxi-
male est de x km/h, etc. Vous pouvez matriser le comportement de v otre voiture laide
des mthodes dfinies dans la classe Voitures (Acclrer, Freiner), mais lef fet prcis
de ces mthodes est troitement li aux proprits de v otre v oiture. La puissance du
moteur ne permet pas datteindre 200 km/h (mais v ous pouvez dcapoter !) ; les freins ne
sont pas quips du systme ABS, il faut donc telle distance pour freiner, etc.
Un programme VBA peut ainsi crer une feuille de calcul Excel en appliquant la m thode
Add (ajouter) la collection WorkBooks et dterminer les proprits de ce classeur (son nom,
ses options de protection, le nombre de feuilles qui le composent, etc.)

Lorsque vous crez une instance dobjet, cet objet possde toutes les proprits
Info et mthodes dfinies dans la classe de lobjet. Ce principe essentiel de l
programmation oriente objet est appel instanciation.
Livre Macros excel.book Page 16 Vendredi, 3. avril 2009 7:45 07

16 Excel et VBA

Le grand intrt de la programmation oriente objet est quil nest pas utile de sa voir
comment fonctionne un objet pour lutiliser. Lorsque vous achetez une voiture, vous navez
pas besoin de sa voir comment la carrosserie et le moteur ont t f abriqus, ni comment les
diffrents composants sont assembls, v ous v ous contentez de choisir un modle, une
couleur, etc. Il vous suffit de connatre les mthodes propres la classe Voitures pour lutili-
ser. Avec VBA, lorsque vous crez une instance dun objet, vous en dfinissez les proprit
sans vous proccuper de la faon dont celles-ci seront appliques. Il en va de mme pour les
mthodes que vous utilisez pour matriser le comportement dun objet. Lorsque vous tour-
nez la cl de contact, le moteur de la v oiture dmarre, sans que v ous ayez v ous soucier
du dtail des vnements et des technologies mises en uvre.
VBA permet, par e xemple, de crer des interf aces graphiques pour v os programmes, en
dposant simplement les objets dont v ous a vez besoin (cases cocher , zones de te xte,
boutons de commandes, etc.), sur une feuille. Ces objets ont des comportements spci-
fiques que otre programme exploitera, sans que vous ayez besoin de vous soucier de leur
mcanisme interne.

Application hte et modles dobjets


Lorsque vous dvelopperez des programmes VBA, vous agirez sur des objets qui v arieront en
fonction des actions que vous souhaitez que votre programme excute. Vous dfinirez et asso
cierez ces objets de f aon crer une application complte. L encore, lanalogie a vec les
objets de la vie courante est rvlatrice. Les objets que nous utilisons sont gnralement ordon-
ns selon leur fonction. Lorsque v ous souhaitez vous laver, vous vous dirigez vers la salle de
Bains ; il sagit du lieu consacr la toilette. Vous y trouvez un certain nombre dobjets tels que
Savon, Gant de toilette, Dentifrice, Brosse dents, etc. Vous utilisez le sa von avec le g ant de
toilette, le dentifrice avec la brosse dents, et vous pouvez faire une toilette complte.
Si vous souhaitez manger, cest dans la cuisine que vous vous orienterez. Vous y trouverez
quelques objets communs ceux de la salle de bains (Lavabo, Robinet, Placard, etc.). Vous
ne devriez cependant pas y trouv er de brosse dents, ni aucun des objets spcifiques l
toilette. Par contre, v ous pourrez utiliser le four , ouvrir le frigo et utiliser tous les objets
spcifiques de la cuisine
Les applications du Pack Office sont comparables aux pices de otre maison. Lorsque vous
choisissez de dvelopper un projet VBA, vous choisissez une application hte. Il sagit
de lapplication Of fice qui contient les objets sur lesquels ous souhaitez agir . Cest dans
cette application que v ous dvelopperez vos programmes, et cest uniquement partir de
cette application quils pourront tre e xcuts. Si v ous souhaitez tra vailler sur des te xtes,
vous choisirez dentrer dans Word ; pour faire des calculs, v ous savez que cest dans Excel
que vous trouverez les objets dont v ous avez besoin ; Access sert au dv eloppement et au
maniement des bases de donnes et PowerPoint, la cration de prsentations.
Livre Macros excel.book Page 17 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 17

Cependant, limage des pices de v otre maison, les applications Of fice ne sont pa
hermtiques. Vous pouvez parfaitement vous prparer un plateau repas dans la cuisine et choi-
sir de manger au lit. De f aon semblable, des projets VBA volus peuvent utiliser des objets
de dif frentes applications Of fice. Un programme d elopp dans Excel peut utiliser des
donnes stockes dans une base de donnes Access ou des objets Word pour imprimer un cour-
rier qui accompagnera une f acture, et en voyer un message Outlook de confirmation. Vous
devez alors choisir une application hte pour votre projet. Deux critres doivent la dterminer :
Votre programme sera plus performant et plus simple dvelopper si lapplication hte
est celle dans laquelle sexcute lessentiel des instructions du programme.
La prsence du programme dans lapplication hte doit tre logique, et lutilisateur
final doit y voir un accs f acile puisque le programme ne pourra tre e xcut qu
partir de celle-ci.

Tous les projets dvelopps dans cet ouvrage seront hbergs dans Excel. Pour
Info accder aux objets dune application autre que lapplication hte, vous utilise-
rez la technologie Automation. Laccs aux objets dune autre application est trait
au Chapitre 6.

Lapplication est donc la pice dans laquelle v otre programme se xcutera. Celle-ci est
compose dun certain nombre dobjets constituant une bibliothque dobjets dont
les rapports sont prcisment dfinis. Les objets dune application et les rapports quil
entretiennent sont reprsents sous la forme dun organigramme. Tout en haut de lorgani-
gramme se trouve lapplication (la pice dans laquelle sont rangs tous les objets). Vien-
nent ensuite les classes dobjets de premier ni veau de lapplication, auxquelles sont lis
dautres objets ou classes, et ainsi de suite. On appelle cette structure le modle dobjets
ou la hirarchie de classes de lapplication. La Figure 1.1 reprsente ce qui pourrait tre
un modle dobjets sommaire de lapplication Salle de bains.
Figure 1.1
Pice
Lensemble des objets (Salle de bain)
dune application est
structur selon un
modle dobjets qui
en dfinit les apports Rangements Conteneurs Produits de
nettoyage
et la hirarchie.

Placard Armoire Etagres Baignoire Lavabo Bidet Savons Shampooings Dentifrices

Savon Savon de Savon


Surgras Marseille Monjoli
Livre Macros excel.book Page 18 Vendredi, 3. avril 2009 7:45 07

18 Excel et VBA

La plupart des lments dExcel peuvent tre manipuls dans Visual Basic pour
Info Applications en tant quobjets. Un classeur Excel, une feuille de ce classeur ,
une cellule ou une bote de dialo gue Rechercher sont des objets qui peuvent
tre manipuls dans un programme Visual Basic.
Au sommet du modle se trouv e la pice lapplication. Tous les objets auxquels v ous
pouvez accder y sont contenus. Si lon tablit un modle dobjets pour lensemble des pices
de la maison, on retrouvera toujours lobjet Pice au sommet du modle. De la mme faon, au
sommet des modles dobjets des applications Office, se trou e lobjet Application.

Figure 1.2
Le modle dobjets
dExcel.

Viennent ensuite les classes situes immdiatement sous lobjet Pice. Plus on progresse
dans le modle dobjets, plus les objets sont prcis et donc spcifiques de la pice ou d
Livre Macros excel.book Page 19 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 19

lapplication. Par exemple, dans Excel, sous lobjet Application se trouve la collection (ou
classe) Workbooks qui englobe tous les objets Workbook, cest--dire tous les classeurs Excel
ouverts. Sous lobjet Workbook se trouv e la classe Worksheets qui englobe tous les objets
Worksheet (toutes les feuilles de calcul) de lobjet Workbook dsign.

Pour accder laide en ligne des objets Excel, c hoisissez la rubrique Rfrences
ce Visual Basic pour Microsoft Excel de laide de Visual Basic Editor (Rfrence du
Astu
dveloppeur Excel 2007 si vous utilisez la dernir e ver sion du lo giciel), puis
slectionnez la commande Objets Microsoft Excel (Rfrence des modles objet
Excel avec la ver sion 2007). Vous apprendrez accder Visual Basic Editor
au prochain chapitre.

Notez que le fait que des objets appartiennent des branches distinctes du modle dobjets
ne signifie pas quils ne peu ent pas interagir. Lobjet Savon de Marseille peut se trouver
sur ltagre, et v ous pouv ez utiliser la mthode Dplacer pour le mettre dans lobjet
Baignoire, comme dans lobjet Lavabo.
Un objet peut englober dautres objets. Un objet intgrant dautres objets est qualifi d
conteneur. Cest le cas de lobjet Application, mais cest aussi vrai pour beaucoup
dautres objets du modle dobjets dExcel. Par exemple, un objet Workbook contient des
objets Worksheet (feuilles de calcul), contenant eux-mmes des objets Range (cellules et
plages de cellules).

Accder aux objets


Le modle dobjets dtermine le chemin emprunter pour accder un objet. Pour
vous la ver les dents, v ous devez dabord accder v otre brosse dents. Mme si le
processus est inconscient, v ous identifiez lobjet Brosse dents par son emplace-
ment : il est situ dans la salle de bains, parmi les objets et produits de toilette. De la
mme f aon, en Visual Basic, v ous de vez identifier un objet vant de pouv oir agir
dessus (appliquer lune de ses mthodes ou modifier la aleur de lune de ses proprits).
Lorsque v ous souhaitez v ous la ver les dents, v ous pensez et sui vez inconsciemment les
tapes suivantes :
aller la Salle de bains ;
se diriger vers les Produits de toilette ;
choisir parmi ceux-ci le dentifrice et sen saisir.
Pour accder un objet Excel, v ous oprerez selon le mme mode, cest--dire en partant
de lobjet situ le plus haut dans la hirarchie dobjets et en progressant dans celle-ci
jusqu atteindre lobjet voulu.
Livre Macros excel.book Page 20 Vendredi, 3. avril 2009 7:45 07

20 Excel et VBA

Le point est utilis comme sparateur entre les dif frentes collections et objets que lon
rencontre avant datteindre lobjet voulu. La rfrence un objet prcis dune collection se
fait selon la syntaxe suivante :

Nom_Collection("Nom_Objet")

Le code VBA permettant daccder lobjet Dentifrice serait :

Piece.ProduitsNettoyants("Dentifrice").Prendre

La premire partie du code permet daccder lobjet Dentifrice; lexpression identi-


fiant un objet est appele rfrentiel dobjet. La mthode Prendre est ensuite applique
cet objet afin de sen saisi .
Le code Visual Basic permettant dappeler la feuille de classeur Excel nomme "MaFeuille",
et situe dans le classeur "MonClasseur" ( condition que celui-ci soit ouvert), serait :

Application.Workbooks("MonClasseur").Sheets("MaFeuille").Activate

On accde lobjet Workbook MonClasseur de la collection Workbooks (tous les classeurs


ouverts), puis la feuille nomme "MaFeuille" de la collection Sheets (toutes les
feuilles de lobjet MonClasseur). Une fois le chemin daccs lobjet indiqu, on lui
applique la mthode Activate pour lactiver.

Outre leur nom, les objets dune collection sont identifis au sein de la collectio
Info par une valeur dindice r eprsentant leur position dans la collection. Cette valeur
peut tre utilise pour renvoyer un objet dune collection, selon la syntaxe suivante :
Nom_Collection(IndexObjet)

o IndexObjet r eprsente la position de lobjet dans la collection. L instruction


suivante :
Workbooks(2).Activate

active le classeur Excel apparaissant en deuxime position dans le menu fentre 2.

Poursuivons lanalogie. Si v ous vous trouvez dj dans la salle de bains au moment o


vous dcidez de vous laver les dents, vous navez pas besoin dy accder. Si vous avez dj
le nez parmi les produits de toilette, il est inutile dy faire rfrence.
De faon semblable, dans le code VBA, les objets de niveau hirarchique suprieur
celui de lobjet que v ous souhaitez atteindre peuv ent parfois tre ignors. Cest
toujours le cas pour lobjet Application. En ef fet, votre projet VBA tant stock et donc
excut partir dune application hte, il est inutile de rappeler que v ous tes dans cette
application.
Livre Macros excel.book Page 21 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 21

Lexpression :

Workbooks("MonClasseur").Sheets("MaFeuille").Activate

suffit donc act ver la feuille intitule "MaFeuille" du classeur nomm "MonClasseur".
Selon le mme principe, en cas dabsence de rfrentiel dobjets, la collection Sheets
concerne le classeur actif. Si MonClasseur est le classeur actif, on peut donc se dispenser
de toute rfrence cet objet. On obtient alors linstruction suivante :

Sheets("MaFeuille").Activate

Une petite finesse terminol gique : les objets pr oprement parler nappar aissent
Info jamais dans le code . Pour faire rfrence un objet, on utilise une pr oprit qui
appelle ou r envoie lobjet voulu. Dans les e xemples prcdents, Workbooks est
une proprit de lobjet Application, qui renvoie tous les classeur s ouverts (la
classe Workbooks). Sheets est une pr oprit de lobjet Workbook, qui r envoie
toutes les feuilles de classeur (la classe Sheets) de cet objet.

Les proprits
Revenons lanalogie a vec lautomobile et prenons la classe Voitures. T outes les
proprits propres aux objets Voitures y sont dfinies. Les objets ou classes situ
immdiatement sous Voitures dans le modle dobjets appartiennent la collection
dobjets Voitures. En tant que tels, ils hritent de toutes les proprits dfinies dans l
classe Voitures.
Les proprits peuvent tre un attribut de lobjet ou un aspect de son comportement. Par
exemple, les proprits dune v oiture sont, notamment, sa marque, son modle, ltat des
pneus, lactivation ou non du moteur , etc. Les proprits dun document Word sont son
modle, son nom, sa taille, etc.
Les proprits prennent des v aleurs spcifiques qui distinguent les di frents objets de la
collection. La proprit Couleur dun objet Voiture peut prendre la v aleur Rouge, tandis
que la mme proprit dun objet de la collection est attache la valeur Bleu.
Lorsque v ous dv elopperez des programmes VBA, v ous e xploiterez les proprits dun
objet de deux faons :
En modifiant les aleurs attaches aux pr oprits de lobjet. Pour modifier u
objet, il suffit de changer les aleurs de ses proprits. Les proprits dont les v aleurs
peuvent tre modifies sont dites en lecture-criture
Certaines proprits ne peuv ent tre modifies et sont dites en lecture seule. Vous
pouvez, par e xemple, modifier la proprit Etat_du_moteur (allum ou teint) dun
Livre Macros excel.book Page 22 Vendredi, 3. avril 2009 7:45 07

22 Excel et VBA

objet Voiture, mais non sa proprit Marque. Vous pouv ez modifier le nombre d
feuilles qui composent un classeur, mais non sa date de cration.
En interrogeant les v aleurs attaches aux pr oprits dun objet. Les v aleurs des
proprits peuvent tre lues afin de connatre les spcificits de lobjet et dorienter
comportement du programme. Par exemple, si la proprit Marque dun objet Voiture
est af fecte la v aleur BMW et sa proprit Contenu_Rservoir, af fecte une
valeur gale 40 (litres), v ous ferez un plein 40 euros. Si les proprits Marque et
Modle sont respecti vement af fectes aux v aleurs Citron et 2CV et la proprit
Contenu_Rservoir, une valeur gale 20, vous ne ferez quun plein 20 euros.
De la mme f aon, un programme VBA peut e xcuter des instructions tant que le
nombre de classeurs ouverts est diffrent de zro (Workbooks.Count <> 0).

Types de valeurs des proprits


Les valeurs affectes aux proprits dun objet peuvent tre de quatre types :
une chane de caractres ;
une valeur numrique ;
une valeur boolenne ;
une constante.

Chanes de caractres
Une chane de caractres est une suite de caractres contigus lettres, chiffres, espaces
ou signes de ponctuation. Ces donnes sont aussi qualifies de type Chane ou String.
Une chane de caractres peut contenir jusqu en viron deux milliards de caractres.
En Visual Basic, les chanes de caractres sont places entre guillemets.
Les exemples suivants sont des chanes de caractres :
"Paul" ;
"1254" ;
"Je suis une chane de caractres compose de 59 caractres".
Les chanes de caractres sont interprtes en tant que caractres, et non en tant que valeur
numrique. Autrement dit, la chane "1254" est interprte comme la combinaison des
caractres 1, 2, 5 et 4.
Par exemple, la proprit Modle dun objet Voiture est toujours une chane de caractres.
Celle-ci ne peut tre compose que de chif fres par exemple "2000" , sans que v ous
puissiez pour autant diviser cette valeur par un nombre quelconque.
Livre Macros excel.book Page 23 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 23

Valeurs numriques
Une valeur numrique est une suite de chif fres. Elle peut tre un nombre entier ou dcimal,
positif ou ngatif.
Les exemples suivants sont des valeurs numriques :
0;
1 548 972 ;
1 245,4542 ;
100E4.

Le caractre E dans une variable numrique signifie "Exposant". Ainsi, la valeur


Info numrique 100E4 est gale 100 104.

Les v aleurs numriques sont interprtes comme des chif fres. Il peut sagir de v aleurs
comme dexpressions conjuguant valeurs numriques et oprateurs arithmtiques (* / +).
Par exemple, les proprits Contenu_Rservoir et Consommation dun objet Voiture sont
des valeurs numriques. La combinaison de ces proprits permet de dterminer combien de
kilomtres peuvent tre parcourus avant la panne sche, selon lexpression arithmtique :

Kilomtres_Avant_Panne_Sche = Contenu_Rservoir / Consommation

Notez quune e xpression arithmtique peut tr e compose de nombr es


Info (100 25), de variables auxquelles sont af fectes des valeur s numriques
(nombre1 nombre2), ou dune combinaison des deux (nombr e1 25). Les
variables sont tudies en dtail au Chapitre 6.

Les valeurs numriques pouvant tre affectes une proprit varient avec les proprits et
les objets. Par exemple, dans Excel, la taille dune police doit tre comprise entre 1 et 409.
Par consquent, la v aleur que peut prendre la proprit Size (taille) dun objet Font
(police) dExcel doit aussi tre comprise entre ces deux v aleurs. Dans le cas de lobjet
Voiture, la proprit Contenu_Rservoir doit toujours tre suprieure 0, la valeur maxi-
male dpendant dautres spcificits de lobjet, telles que ses proprits Marque et Modle.

Valeurs boolennes
Certaines proprits ne peuv ent prendre que deux tats : elles sont vrifies ou elles ne l
sont pas. Ces proprits sont attaches une v aleur de type Boolean, ou valeur boolenne.
Une valeur boolenne peut tre True ou False.
Livre Macros excel.book Page 24 Vendredi, 3. avril 2009 7:45 07

24 Excel et VBA

La proprit Moteur_Allum dun objet Voiture est attache une v aleur boolenne. La
valeur True lui est af fecte si le moteur de lobjet Voiture est allum. Dans le cas
contraire, la proprit Moteur_Allum sera gale False.
Comme vous le verrez au Chapitre 15, un classeur Excel gre une vingtaine de proprits
qui reprsentent ses options et son tat un moment donn. Nombre de ces proprits
acceptent une valeur de type Boolean. Cest par exemple le cas de la proprit Saved qui
renvoie True si aucune modification na t apporte au document depuis son dernier enre
gistrement, et False dans le cas contraire.

En Visual Basic, la valeur True peut tre remplace par 1, et la valeur False,
Info par 0. Cette pratique est cependant dconseille, puisquelle rend la lecture du
code moins aise.

Constantes
Les constantes sont des valeurs intgres de VBA qui conservent toujours la mme valeur.
Lorsquune proprit accepte un nombre dtermin dtats, les v aleurs reprsentant ces
tats sont souv ent reprsentes sous forme de constantes. Celles-ci se prsentent sous la
forme dune suite de lettres. Les constantes sont reprsentes sous forme de chanes de carac-
tres, mais correspondent en ralit des valeurs numriques.
Les constantes intgres dsignent ltat de proprits pour un objet spcifique. Chacun
des applications Office possde ses propres constantes (puisquelle possde ses propre
objets). Cependant, certaines proprits tant communes toutes les applicati ons de la
suite Office, les constantes dsignant leur tat se retrou ent aussi dans toutes les applica-
tions Office. Les constantes intgres de VBA commencent par deux lettres indiquant
lapplication laquelle appartient la constante. Ces prfi es des constantes VBA sont les
suivants :
vb Visual Basic
wd Word
xl Excel
pp PowerPoint
ac Access
ol Outlook
fp FrontPage
bind Classeur Office
mso Office
fm Feuilles Visual Basic

Lorsquune proprit accepte des constantes pour valeurs, le nombre de ces constantes est
dtermin et correspond aux diffrents tats que peut prendre la proprit. Par exemple, les
clignotants dune v oiture peuv ent accepter quatre tats dif frents : dsacti vs, acti vs
droite, acti vs g auche, position Warning (les clignotants droite et g auche acti vs).
Livre Macros excel.book Page 25 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 25

La proprit Etat dun objet Clignotant pourrait donc accepter lune des quatre constantes
Clignotant, chacune correspondant lun de ces tats possibles :

ClignotantAucun
ClignotantDroite
ClignotantGauche
ClignotantWarning

Excel intgre un nombre important de constantes. Lorsquune commande Excel e xige de


lutilisateur la slection dune option parmi plusieurs possibles, ces options sont gnrale-
ment reprsentes sous forme de constantes en lang age VBA. Par exemple, lorsque v ous
insrez une cellule dans une feuille de classeur (Insertion, Cellules), v ous devez choisir
entre les options Dcaler les cellules v ers la droite ou Dcaler les cellules v ers le bas.
Linstruction VBA correspondante sera :

Selection.Insert(Shift)

o lar gument Shift est une des constantes XlInsertShiftDirection spcifiant l


mthode Insert la f aon dont la cellule sera insre. Il peut sagir de la constante
xlShiftToRight (les cellules seront dcales vers la droite) ou de la constante xlShiftDown
(les cellules seront dcales vers le bas).

Les constantes sont la r eprsentation textuelle de valeur s numriques. Chacune


Info des constantes Clignotant correspond une valeur numrique . La pr oprit
ClignotantWarning pourrait, par e xemple, correspondre la valeur numri-
que 3. Vous pouvez indiffremment utiliser les constantes VBA ou les valeurs
numriques auxquelles elles correspondent. Il est cependant conseill dutili-
ser les constantes, afin de faciliter la lectu e du code . Si vous compr enez
langlais, les constantes vous sembler ont en ef fet plus parlantes que de simples
chiffres.

Accder aux proprits


Pour modifier une proprit dun objet, on utilise la synta e suivante :

Expression.Proprit = valeur

o Expression est une expression renvoyant un objet un rfrentiel dobjet , tel que
cela a t dcrit dans la section prcdente. Proprit est le nom de la proprit que lon
souhaite modifier (toujours spare de lobjet auquel elle se rfre par un point) et valeur,
la valeur que vous souhaitez lui affecter.
Le type de la v aleur (chane, v aleur numrique, constante ou v aleur boolenne) doit tre
adapt la proprit. Si tel nest pas le cas, le programme gnre une erreur. Par exemple,
Livre Macros excel.book Page 26 Vendredi, 3. avril 2009 7:45 07

26 Excel et VBA

la proprit Contenu_Rservoir dun objet Voiture naccepte quune valeur numrique ;


vous ne pouvez pas lui affecter une chane de caractres.
Le Tableau 1.1 illustre diffrentes possibilits de modifier lobjet Voiture "MaVoiture" :

Tableau 1.1 : Pour modifier un objet, il suffit den changer les proprits

Type Consquence
Syntaxe
de la valeur affecte pour lobjet Voiture
Voitures("MaVoiture") Chane de caractres Une nouvelle immatriculation
.Immatriculation = "4444AB29"

Voitures("MaVoi- Valeur boolenne Le moteur est allum


ture").Moteur_Allume = True
Voitures("MaVoi- Valeur numrique Le rservoir contient 50 litres
ture").Contenu_Rservoir = 50
Voitures("MaVoiture").Cligo- Constante Lobjet clignotant est en position
tant.Etat = ClignotantWarning Warning

Pour lire la v aleur dune proprit dun objet, on stock e gnralement cette v aleur dans
une variable, selon la syntaxe suivante :

variable = Expression.Proprit

Linstruction suivante passe la fentre acti ve en mode daf fichage Sauts de page, en df
nissant sa proprit View xlPageBreakPreview.

ActiveWindow.View = xlPageBreakPreview

Linstruction suivante stocke dans la variable TypeAffichage la aleur reprsentant le type


daffichage en cours

TypeAffichage = ActiveWindow.View

Les mthodes
Les mthodes reprsentent les actions quun objet peut e xcuter. Tandis que les proprits
dfinissent un tat, les mthodes dterminent un comportement. Les mthodes pou ant
tre appliques un objet dpendent troitement de lobjet. Les objets de la classe
Voitures supportent des mthodes telles que Tourner, Freiner, Acclrer, etc.
Cependant, certaines mthodes peuv ent tre communes des objets dif frents, mme si
elles ont des consquences dif frentes. Par exemple, la mthode Ouvrir peut sappliquer
Livre Macros excel.book Page 27 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 27

aux objets Porte, Coffre ou Cendrier dune voiture, comme un objet Porte ou Robinet
dune maison. Certaines mthodes se retrouv ent dans toutes les applications Of fice. Ces
le cas pour toutes les mthodes correspondant des commandes de menu communes aux
applications. Par exemple, les mthodes Open (ouvrir) et Close (fermer) peuv ent sappli-
quer un classeur Excel comme un document Word, un formulaire Access ou encore une
prsentation PowerPoint.
Une mthode peut a voir des consquences sur ltat de certaines proprits de lobjet
auquel elle sapplique, v oire sur dautres objets. P ar e xemple, si v ous appliquez la
mthode Acclrer un objet Voiture, la v aleur affecte la proprit Vitesse de cet
objet augmentera.
Si vous modifiez le contenu dune cellule dun classeur Excel, la taille de la cellule pourr
tre modifie en consquence. Si dautres cellules sont lies par des formules la cellul
dont vous modifiez la aleur, leurs v aleurs seront mises jour en consquence. Chaque
fois que v ous crez un nouv eau classeur laide de la mthode Add, la v aleur de la
proprit Count de la collection Workbooks (le nombre de classeurs ouverts) est incrmen-
te de 1. Chaque fois que v ous fermez le classeur laide de la mthode Close, la valeur
de la proprit Count de la collection Workbooks est dcrmente de 1.
En outre, pour excuter correctement une mthode, il est parfois ncessaire de modifier a
pralable les proprits de lobjet auquel elle sapplique. P ar exemple, si v ous souhaitez
appliquer la mthode Tourner un objet Voiture, v ous de vez aupara vant modifier l
proprit Etat_Clignotant de lobjet Clignotant de cette voiture.
La syntaxe permettant dappliquer une mthode un objet est :

Expression.Mthode

o Expression est une expression renvoyant un objet un rfrentiel dobjet , tel que
cela a t dcrit dans la section prcdente. Mthode est le nom de la mthode que lon
souhaite excuter (toujours spare de lobjet auquel elle se rfre par un point).
Une mthode peut aussi sappliquer une collection dobjets. La syntaxe est alors :

Collection.Mthode

o Collection reprsente la collection dobjets sur laquelle on souhaite agir , et Mthode,


une mthode commune aux objets de la collection.
Vous pouvez, par e xemple, arrter toutes les v oitures de la collection Voitures, en leur
appliquant la mthode Arrter:

Voitures.Arrter
Livre Macros excel.book Page 28 Vendredi, 3. avril 2009 7:45 07

28 Excel et VBA

Pour fermer tous les classeurs ouv erts dans une session Excel, v ous utiliserez linstruction
suivante :

Workbooks.Close

Cette syntax e est aussi utilise pour crer une occurrence dun objet de la collection
Collection. La mthode utilise est alors gnralement la mthode Add lquivalent
Visual Basic de la commande Nouv eau du menu Fichier . P ar e xemple, pour crer un
nouveau classeur Excel, vous ferez appel la collection Workbooks (Workbooks.Add).
Vous pouvez ensuite dfinir les proprits de lobjet ainsi cr, comme nous l vons vu
dans la section "Les proprits" de ce chapitre.

Les vnements
Un vnement est une action reconnue par un objet. La reconnaissance dun vnement par
un objet permet de dclencher lexcution dun programme lorsque cet vnement survient.
On parle alors de procdure vnementielle. Un clic de souris ou la frappe dune touche sont
des exemples dvnements pouvant tre interprts par un programme VBA.

Une procdure vnementielle est une procdure attache un vnement utili-


ition sateur tel quun clic de souris, la frappe dune touche, lactivation dune feuille
Dfin
de calcul, etc. La procdure sexcute lorsque lvnement auquel elle est attache
est reconnu par lapplication.

Les objets de la collection Voitures peuvent, par exemple, reconnatre lvnement Choc.
Un objet Voiture peut tre conu pour que la dtection de lvnement Choc entrane
louverture de lobjet Airbag, autrement dit lapplication de la mthode Ouvrir cet objet.
Les vnements sutilisent essentiellement a vec les contrles de formulaires que v ous
dvelopperez et a vec les objets. Vous apprendrez e xploiter les vnements utilisateur
affectant un formulaire aux Chapitres 13 et 14. Les feuilles de calcul, les graphiques, les
classeurs et lapplication Excel grent aussi des vnements. Vous apprendrez crer des
procdures vnementielles pour ces objets au Chapitre 15.

Les fonctions
Les fonctions servent renvoyer une information, selon les lments qui leur sont fournis. Le
type de linformation renvoye varie dune fonction lautre. Il peut sagir dune chane de
caractres, dune v aleur numrique, boolenne, de type Date, etc. Visual Basic int gre un
certain nombre de fonctions que v ous pouvez exploiter directement. Par exemple, la fonction
Asc renvoie le code ASCII du caractre slectionn, tandis que la fonction Int renvoie la partie
Livre Macros excel.book Page 29 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 29

entire dun nombre. Certaines fonctions sont particulirement utiles. Cest le cas de la fonction
MsgBox qui permet daf ficher une bote de dialogue contenant des boutons tels que Oui, Non
Annuler, etc., et qui renvoie une valeur refltant le choix de lutilisateu .
Vous pouv ez aussi crer v os propres fonctions qui traiteront les v aleurs qui leur seront
passes pour renvoyer une valeur ensuite utilise par le programme. Dans le cas dun objet
Voiture, v ous pouv ez crer une fonction Cot_Plein qui e xploitera les proprits
Contenu_Rservoir et Contenance_Rservoir de lobjet, ainsi quune v ariable reprsen-
tant le prix de lessence, pour renvoyer une valeur correspondant au cot dun plein. Lors-
que vous crez des fonctions VBA pour Excel, celles-ci sont accessibles pour lutilisateur
final comme nimporte quelle fonction Excel intgre
Les fonctions ont gnralement besoin de paramtres ou arguments. Si les arguments
obligatoires dune fonction ne lui sont pas passs au moment de lappel, une erreur est
gnre. Dans le cas prcdent, trois paramtres de type numrique doivent tre passs la
fonction Cot_Plein pour quelle se xcute correctement : le contenu du rserv oir, sa
contenance et le prix de lessence.

Le modle dobjets dExcel


Excel est lapplication Of fice qui supporte VBA depuis le plus longtemps et son modle
dobjets est le plus mr . Excel of fre de multiples possibilits de personnalisation au
programmeur.
Les objets les plus importants sont prsents dans le Tableau 1.2. Le Listing 1.1 prsente
des e xemples dinstruction VBA utilisant ces objets. L essentiel de ces e xemples a t
gnr laide de lEnregistreur de macro, sans quil soit ncessaire dcrire du code.

Tableau 1.2 : Les objets cls du modle dobjets dExcel

Collection (objet) Description


Objets de niveau Application

Add-ins (Add-in) Lensemble des macros complmentaires, charges ou non. Acces-


sibles dans la bote de dialogue Macros complmentaires (Outils,
Macros complmentaires).

CommandBars (CommandBar) Lensemble des barres de commande de lapplication.

Dialogs (Dialog) Les botes de dialogue prdfinies dExcel.

LanguageSettings Renvoie des informations sur les paramtres de langue utiliss dans
lapplication.
Livre Macros excel.book Page 30 Vendredi, 3. avril 2009 7:45 07

30 Excel et VBA

Tableau 1.2 : Les objets cls du modle dobjets dExcel (suite)

Collection (objet) Description


Names (Name) Lensemble des objets Name de niveau Application. Un objet Name
reprsente un nom dfini pour une plage de cellules nomme.

Windows (Window) Lensemble des fentres disponibles (accessibles via le menu


Fentre).

Workbooks (Workbook) Lensemble des classeurs ouverts.

Worksheetfunction On utilise lobjet Worksheetfunction pour accder aux fonctions


de feuilles de calcul partir de VBA. Faites suivre la proprit
Worksheetfunction dun point, puis du nom de la fonction et de
ses arguments entre parenthses.

Objets de lobjet Workbook

Charts (Chart) Lensemble des feuilles graphiques de lobjet Workbook.

Names (Names) Lensemble des objets Name pour le classeur spcifi.

Styles (Style) Lensemble des styles disponibles dans un classeur. Il peut sagir
dun style dfini par lutilisateur ou dun style prdfini, tel que les
styles Millier, Montaire ou Pourcentage (Format, Styles).

Windows (Window) Lensemble des fentres pour le classeur spcifi.

Worksheets (Worksheet) Lensemble des feuilles de calcul de lobjet Workbook dsign.

Objets de lobjet Worksheet

Names (Name) Lensemble des objets Name pour la feuille de calcul spcifie.

Range Une cellule, une ligne, une colonne ou une plage de cellules,
contigus ou non, une plage de cellules 3D.

Comments (Comment) Lensemble des commentaires pour lobjet Worksheet dsign.

HPageBreaks (HPageBreak) Les sauts de page horizontaux de la feuille de calcul.

VPageBreaks (VPageBreaks) Les sauts de page verticaux de la feuille de calcul.

Hyperlinks (Hyperlink) Lensemble des liens hypertexte de la feuille de calcul.

Scenarios (Scenario) Les scnarios de la feuille de calcul.

OLEObjects (OLEObject) Les objets incorpors ou lis et les contrles ActiveX de la feuille.

Outline Le plan de la feuille de calcul.

PageSetup Les options de mise en page de la feuille.


Livre Macros excel.book Page 31 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 31

Tableau 1.2 : Les objets cls du modle dobjets dExcel (suite)

Collection (objet) Description


QueryTables (QueryTable) Les tables de requte de la feuille.

PivotTables (PivotTable) Les tableaux et les graphiques croiss dynamiques.

ChartObjects (ChartObject) Les graphiques incorpors de la feuille de calcul spcifie.

Objets de lobjet Range

Areas Les plages de cellules contigus lintrieur dune slection.

Borders (Border) Les bordures dun objet Range. La collection Borders regroupe tou-
jours quatre objets Border, reprsentant les quatre bordures de
lobjet Range dsign.

Font Les attributs de police de caractres de lobjet Range spcifi.

Interior Lintrieur de lobjet Range.

Characters Lensemble des caractres contenus par lobjet Range.

Name Le premier nom dans la liste des noms de la plage de cellules


prcise.

Style Le style de lobjet Range dsign.

FormatConditions Lensemble des mises en forme conditionnelles de lobjet Range.


(FormatCondition)

Hyperlinks (Hyperlink) Lensemble des liens hypertexte de lobjet Range.

Validation La validation des donnes pour la plage de cellules prcise.

Comment Le commentaire de cellule pour lobjet Range dsign.

Listing 1.1 : Exemples dutilisation des objets Excel

activation de la macro complmentaire Outils pour lEuro


AddIns("Outils pour lEuro").Installed = True
------------------------------------------------------------
activation des info-bulles pour les barres doutils
Application.CommandBars.DisplayTooltips = True
affichage de la barre doutils Presse-papiers
Application.CommandBars("Clipboard").Visible = True
------------------------------------------------------------
affichage de la bote de dialogue prdfinie Nouveau Classeur
Dialogs(xlDialogWorkbookNew).Show
------------------------------------------------------------
masquage de la fentre active et affichage de perso.xls
ActiveWindow.Visible = False
Livre Macros excel.book Page 32 Vendredi, 3. avril 2009 7:45 07

32 Excel et VBA

Windows("PERSO.XLS").Visible = True
activation du classeur Classeur1
Windows("Classeur1").Activate
------------------------------------------------------------
sauvegarde du classeur actif
ActiveWorkbook.Save
nouveau classeur
Workbooks.Add
nouveau classeur fond sur le modle MonModele.xlt
Workbooks.Add(Template:= "C:\Program Files\Office\Templates\MonModele.xlt")
------------------------------------------------------------
affectation du nom MaPlage la palge de cellule A1:C20 de la feuille
MaFeuille
Names.Add Name:="MaPlage", RefersTo:="=MaFeuille!$a$1:$c$20"
ajout dun graphique
Charts.Add
affectation du type Boursier au graphique actif
ActiveChart.ChartType = xlStockHLC
dfinition de la source de donnes du graphique actif
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C6:E10"),
PlotBy:=xlColumns
dfinition de lemplacement du graphique actif
ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
dfinition des titres du graphique actif
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
------------------------------------------------------------
slection de la feuille Feuil1 du classeur actif
Sheets("Feuil1").Select
affectation du nom Graphique la feuille Feuil1
Sheets("Feuil1").Name = "Graphique"
suppression des feuilles slectionnes
ActiveWindow.SelectedSheets.Delete
------------------------------------------------------------
ajout dun commentaire la cellule D2 de la feuille active
Range("D2").AddComment
le commentaire nest pas rendu visible
Range("D2").Comment.Visible = False
dfinition du texte du commentaire de la cellule D2
Range("D2").Comment.Text Text:="Excellent!"
------------------------------------------------------------
ajout et dfinition dun scnario la feuille active
ActiveSheet.Scenarios.Add Name:="MonScnar", ChangingCells:="R4C2",
Values:=Array("100"), Comment:="Cr par Mikael le 09/11/2003",
Locked:=True, Hidden:=False
------------------------------------------------------------
ajout du contrle ActiveX Calendar la feuille active
ActiveSheet.OLEObjects.Add(ClassType:="MSCAL.Calendar", Link:=False, _
DisplayAsIcon:=False).Select
------------------------------------------------------------
affectation du format montaire US la plage slectionne
Selection.NumberFormat = "#,##0.00 $"
dfinition des attributs de police de la plage slectionne
Livre Macros excel.book Page 33 Vendredi, 3. avril 2009 7:45 07

Chapitre 1 Notions fondamentales de la programmation oriente objet 33

With Selection.Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 8
.ColorIndex = 46
End With
coloriage de lintrieur de la plage slectionne
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
Livre Macros excel.book Page 34 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 35 Vendredi, 3. avril 2009 7:45 07

2
Premires macros
Au sommaire de ce chapitre
Crer une macro GrasItalique
Diffrentes mthodes denregistrement
Ecrire la macro
Crer une macro Titre_WordArt
Stocker des macros
Livre Macros excel.book Page 36 Vendredi, 3. avril 2009 7:45 07

36 Excel et VBA

Lenregistrement de macros constitue certainement le meilleur apprentissage de Visual


Basic pour Applications. Les commandes de lapplication hte accessibles par les
menus, les barres doutils ou les raccourcis cla vier, le dplacement ( laide du cla vier
ou de la souris) dans un classeur et la modification de ce dernier peu ent tre enregis-
trs dans une macro. Il suf fit simplement de dclencher lEnr gistreur de macro et
dexcuter ces commandes, sans quil soit ncessaire dcrire la moindre ligne de code.
Cette mthode permet ensuite de rpter autant de fois que v ous le souhaitez la srie
dinstructions ainsi mmorises, en excutant simplement la macro. Lorsque la srie de
commandes est enregistre dans une macro, v ous pouvez en visualiser le codage dans
la fentre Code de Visual Basic Editor. Vous dcouvrez ainsi la structure et la syntax e
des programmes VBA par la pratique.

Le code est le te xte, crit dans le langa ge de pr ogrammation, constituant le


Dfin
ition programme. Le coda ge dsigne le fait de gnr er du code , soit en utilisant
lEnregistreur de macro, soit en lcrivant dir ectement dans la fentre de code
de Visual Basic Editor.

A travers des exemples simples, ce chapitre vous initiera lenregistrement et la cration


de macros. Vous crerez une premire macro, puis en amliorerez trs simplement la fonc-
tionnalit. Vous verrez que lenre gistrement de macros est relati vement souple, et que la
cration dune macro offre plusieurs possibilits, plus ou moins efficaces et plus ou moin
rapides. Vous apprendrez rapidement utiliser lune ou lautre des mthodes disponibles
(voire les combiner), en fonction de lobjet de votre macro.

Crer une macro GrasItalique


Lorsque v ous souhaitez enrichir le contenu dune cellule dattrib uts de caractres, une
solution consiste choisir la commande Cellule du menu Format, et slectionner longlet
Police. On dfinit ensuite les attri uts voulus et lon valide en cliquant sur OK. Nous utili-
serons ici cette mthode pour crer une macro enrichissant la cellule ou la plage de cellu-
les active des attributs gras et italique.
Cette macro est fort simple, puisque simplement compose de deux commandes, mais
permettra de dcouvrir la faon dont les programmes VBA sont structurs. Le but de ce
chapitre est de v ous initier aux dif frentes mthodes de cration et doptimisation de
macros. Prenez donc le temps de le lire dans sa totalit ; les principes acquis seront
valables pour lensemble des macros que v ous crerez par la suite, et ce quel que soit
leur niveau de complexit.
Livre Macros excel.book Page 37 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 37

Dmarrer lenregistrement

Si vous utilisez Of fice 2007, vous de vez affi her longlet Dveloppeur dans le
200
7 ruban pour accder aux fonctions de pr ogrammation VBA. Cliquez sur le bout on
Offic , situ dans langle suprieur gauche de la fentre Excel ; dans la fentre
qui saffi he, cliquez sur le bouton Options Excel. Cochez ensuite la case Aff cher
longlet Dveloppeur dans le ruban, puis validez. Longlet Dveloppeur apparat
sur le ruban (voir Figure 2.1).

Figure 2.1
Les utilisateurs de la version 2007 dExcel doivent activer longlet Dveloppeur pour accder aux fonctions
de programmation du logiciel.

Avant de commencer lenregistrement de la macro GrasItalique, slectionnez une cellule


laquelle vous attribuerez les formats de caractres voulus.
1. Lancez lenregistrement de la macro :
Off ce 2007 : cliquez sur le bouton Enre gistrer une macro du groupe Code de
longlet Dveloppeur.
Versions antrieures dExcel : dans le menu Outils, slectionnez Macro, Nouv elle
macro, ou saisissez le raccourci cla vier Alt + F8. La bote de dialogue Enre gistrer
une macro saffiche ( oir Figure 2.2).

Figure 2.2
La bote de dialogue
Enregistrer une macro.

2. Par dfaut, la zone Nom de la macro indique Macro1. Remplacez ce nom par Gras-
Italique.
Livre Macros excel.book Page 38 Vendredi, 3. avril 2009 7:45 07

38 Excel et VBA

Il est plus r apide denregistrer une macr o sous le nom que lui attrib ue Excel
Cons
eil par dfaut. Cependant, si vous enr egistrez plusieurs macros, celles-ci de vien-
dront rapidement indiscernables. Attribuez un nom r eprsentatif vos macr os
et entrez une rapide description de leur fonction dans la zone Description, vous
naurez ainsi aucun problme pour les distinguer.

3. Dans la zone Enre gistrer la macro dans, conserv ez loption par df aut, Classeur de
macros personnelles.
4. Dans la zone Description, tapez une brv e description de la macro, en conserv ant la
date de cration et, ventuellement, le nom du crateur.

Lorsque vous enr egistrez une macr o, la date de son enr egistrement et le nom
Cons
eil dutilisateur dclar pour lapplication appar aissent dans la zone Description
sous la forme "Macr o enregistre le Date par Utilisateur". Vous retrouverez les
mmes indications dans la fentr e de Code de la macr o. Si vous parta gez vos
macros avec dautr es utilisateur s, il peut tr e utile de conserver le nom du
crateur afin de les identifier apidement. De mme, conserver la date de cra-
tion dune macr o permettr a de la situer plus facilement. Cette indication se
rvlera trs utile si vous devez mettre jour des macros.

5. Lintrt de la macro GrasItalique rside dans le g ain de temps quelle apporte


lutilisateur. Lattribution dun raccourci clavier lui donnera donc toute son efficacit .
Placez le curseur dans la zone de te xte Touche de raccourci et saisissez une lettre
qui, combine la touche Ctrl, sera af fecte lexcution de la macro GrasItalique
(dans notre e xemple, la combinaison Ctrl + B). Vous pouv ez aussi maintenir la
touche Maj enfonce de f aon af fecter v otre macro une combinaison
Ctrl + Maj + Lettre.
La bote de dialogue Enre gistrer une macro doit maintenant se prsenter comme la
Figure 2.3.

Figure 2.3
La bote de dialogue Enregis-
trer une macro complte.
Livre Macros excel.book Page 39 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 39

Lorsque vous attribuez un raccourci clavier une macro, aucune indication ne


ntion vous est fournie quant laffectation ou non de ce raccourci une commande.
Atte
Si le raccourci choisi tait dj af fect une commande Excel, il ser a rattri-
bu la macro sans que vous en soyez notifi. Veillez donc ne pas attribuer
votre macro un raccourci clavier dj utilis par Excel. Et ce particulir ement
si dautres utilisateurs sont amens utiliser vos macr os. Ils risquer aient en
effet de xcuter in volontairement la macr o en pensant utiliser le r accourci
clavier dune commande Excel.

6. Enfin, cliquez sur OK.


La barre doutils Arrt de lenregistrement, simplement compose de deux boutons,
saffiche lcran ( oir Figure 2.4), indiquant que lenregistrement de la macro est
commenc. Le bouton Arrter lenregistrement permet dinterrompre lenre gistre-
ment de la macro, tandis que le bouton Rfrence relati ve dtermine lenre gis-
trement de v os dplacements dans la feuille Excel ce sujet est abord plus loin
dans ce chapitre.

Figure 2.4
La barre doutils Arrt
de lenregistrement. Arrter Rfrence absolue
l'enregistrement ou rfrence relative

Dans Excel 2007, la barr e doutils Arrter lenr egistrement a disparu. Le


200
7 libell du bouton Enr egistrer une macro devient simplement Arrter lenregis-
trement.

Pour accder plus r apidement la bote de dialo gue Enregistrer une macr o
ce avec les ver sions dExcel antrieur es 2007, af fi hez la barr e doutils Visual
Astu
Basic. Cliquez du bouton droit sur nimporte quelle barre doutils et choisissez
la commande Visual Basic dans la liste des barr es doutils qui saf fi he. Le
bouton Enregistrer une macr o (le deuxime en partant de la gauc he) affi he la
bote de dialogue Enregistrer une macro.

Enregistrer les commandes de la macro


Comme nous la vons dit dans le chapitre prcdent, la cration dune macro simple ne
ncessite pas la moindre ligne dcriture. Il suf fit d xcuter les commandes qui la
composent aprs a voir acti v lEnre gistreur de macro : lapplication hte se char ge de
convertir les commandes excutes en langage Visual Basic.
Livre Macros excel.book Page 40 Vendredi, 3. avril 2009 7:45 07

40 Excel et VBA

Pour enregistrer la macro GrasItalique :


1. Choisissez la commande Cellule du menu F ormat. Activez longlet Police de la bote
de dialogue Format de cellule.

Avec Excel 2007, activez longlet Accueil du ruban puis cliquez sur le bouton
200
7 Format de cellule , situ dans langle infrieur dr oit du gr oupe Police. Vous
pouvez galement utiliser le raccourci clavier Ctrl + Maj + F.

2. Dans la zone Style, slectionnez Gras Italique, puis cliquez sur OK.
3. Les commandes de la macro GrasItalique sont enre gistres. Cliquez sur le bouton
Arrter lenregistrement de la barre doutils Arrt de lenre gistrement. Celle-ci dispara t
automatiquement.

Si vous cliquez sur le bouton de fermeture (la croix) de la barre doutils Arrt de
Info lenregistrement, celle-ci disparat, mais lenregistrement de la macro se pour-
suit. Pour interrompre lenregistrement de la macro, slectionnez Outils, Macro,
Arrtez lenregistrement. Par la suite, lorsque vous activerez lEnregistreur de
macro, cette barre doutils ne rapparatra pas, et ce mme si vous quittez puis
relancez Excel. Vous ne pourrez donc plus choisir dactiver lenregistrement de
cellules par rfr ence r elative. P our ractiver laf fi hage de cette barr e
doutils, cliquez du bouton dr oit sur lune des barr es doutils et, dans le menu
contextuel, slectionnez Arrt de lenregistrement.

Si vous slectionnez une cellule aprs avoir dclench lEnregistreur de macro,


ntion cette manipulation ser a enr egistre. Par consquent, la macr o applique ra la
Atte
mise en forme Gras Italique cette cellule, et non aux cellules actives au moment
de son excution.

Excuter la macro
Lexcution dune macro est fort simple. Pour e xcuter la macro GrasItalique, v ous
pouvez procder de manire classique, ou et cest ce qui lui donne son intrt utiliser
le raccourci clavier que nous lui avons attribu.

La bote de dialogue Macro


1. Slectionnez la plage de cellules laquelle v ous souhaitez appliquer les attrib uts
propres la macro, puis, dans le menu Outils, choisissez Macro et, dans le menu
contextuel, Macros La bote de dialogue Macro saffiche
Livre Macros excel.book Page 41 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 41

Avec Excel 2007, activez longlet Dveloppeur du ruban, puis cliquez sur le
200
7 bouton Macros du groupe Code.

Figure 2.5
La bote de dialogue Macro.

2. Dans la liste des macros disponibles, slectionnez GrasItalique. Le nom de la macro


saffiche dans la zone Nom de la macro
3. Cliquez sur le bouton Excuter. La bote de dialogue Macro disparat automatiquement
et les cellules slectionnes senrichissent des attrib uts Gras et Italique (v oir
Figure 2.6).

Figure 2.6
Les cellules slectionnes
aprs excution de la macro.

Si la procdure de xcution que v ous v enez de mettre en uvre con vient certaines
macros plus complexes et dun usage moins frquent, elle ne prsente pas dintrt pour la
macro GrasItalique puisquelle ncessite plus doprations pour lutilisateur quelle nen
excute.
Livre Macros excel.book Page 42 Vendredi, 3. avril 2009 7:45 07

42 Excel et VBA

Le raccourci clavier
1. Slectionnez le texte voulu, puis tapez le raccourci clavier attach la macro (Ctrl + B).
En un clin dil les cellules slectionnes se sont enrichies des attrib uts de caractres
voulus.

Structure de la macro
Lors de lenregistrement de la macro, les actions que v ous avez effectues ont t converties
en langage Visual Basic. Pour en visualiser la syntaxe :
1. Choisissez Outils, Macro, Macros. Dans la bote de dialogue Macro, slectionnez la
macro GrasItalique. Le nom slectionn saffiche dans la zone Nom de la macro
2. Cliquez sur le bouton Modifie . Visual Basic Editor, lenvironnement de dv eloppement
intgr dOffice, souvre sur la fentre Code de otre macro (voir Figure 2.7).

Lorsque vous tentez de modifier la mac o, si Excel affi he le message "Impossi-


Info ble de modifier une mac o dans un classeur masqu", vous de vez affi her le
f chier Perso.xls. Si vous utilisez Excel 2007, slectionnez longlet Aff chage,
puis cliquez sur le bouton Affi her du gr oupe F entre. Si vous utilisez une
version antrieure dExcel, slectionnez la commande Affi her du menu F entre.
Slectionnez le fi hier Perso.xls dans la fentre qui saffi he et validez.

Figure 2.7
La fentre Code
de Visual Basic Editor
permet de visualiser
et de modifier le code
dune macro.
Livre Macros excel.book Page 43 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 43

Examinons de plus prs le texte de la macro GrasItalique. Il commence par linstruction :


Sub GrasItalique()

et se termine par linstruction :


End Sub

Ces deux instructions encadrent systmatiquement toute macro enregistre. Sub est labr-
viation de subroutine qui signifie sous-routine ou sous-programme. Les macros sont en
effet des sous-programmes de lapplication hte. GrasItalique() est le nom de la sous-
routine cest--dire le nom de la macro. End Sub indique la fin de la macro. Ces instruc
tions sont indispensables au fonctionnement de toute macro ; cependant, vous naurez pas
vous en soucier : lorsque vous enregistrez une macro, les instructions qui la composent
sont systmatiquement encadres par celles-ci.
Directement places derrire linstruction Sub NomMacro, des lignes de commentaires
reprennent les informations que contenait la zone Description lors de lenre gistrement de
la macro (voir Figure 2.3). En loccurrence le nom du crateur et la date denre gistrement
de la macro, ainsi que le texte descriptif de la macro.

Les commentaires sont des indications ajoutes dans le code dun pr ogramme et
Info destines en faciliter la reconnaissance et/ou la comprhension.

Certains lments du code apparaissent en couleur . Cette mise en v aleur permet de


distinguer aisment les lments constitutifs du code. P ar df aut, Visual Basic Editor
applique la couleur v erte aux commentaires et la couleur bleue aux mots cls du
langage.

Un mot cl est un mot ou un symbole r econnu comme lment du langa ge de


ition programmation Visual Basic. Il peut sa gir dune structure de contrle , dune
Dfin
fonction ou de tout autr e lment du langa ge indpendant du modle dobjets
de lapplication hte . Les structur es de contrle sont des instructions qui
permettent de diriger le comportement dune macr o (par exemple, rpter une
opration en boucle , neffectuer une instruction que dans un conte xte spcifi
que). Vous apprendrez utiliser les structur es de contrle de Visual Basic au
Chapitre 7.

Entre les instructions Sub GrasItalique() et End Sub se trouv ent les instructions
quexcutera la macro :
With Selection.Font
.Name = "Arial"
Livre Macros excel.book Page 44 Vendredi, 3. avril 2009 7:45 07

44 Excel et VBA

.FontStyle = "Gras italique"


.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

Si vous utilisez Excel 2007, la ligne .ColorIndex = xlAutomatic est remplace


200
7 par les trois lignes suivantes :
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
Elles correspondent de nouvelles fonctionnalits.

Il sagit des commandes ef fectues lors de lenre gistrement : ces lignes indiquent la
macro les actions accomplir . Leur structure peut v ous drouter, mais vous vous y habi-
tuerez rapidement :
Lexpression Selection.Font indique la macro quil sagit dappliquer un format de
police aux cellules slectionnes :
Selection est une proprit qui renvoie un objet Selection reprsentant la slec-
tion en cours dans le document actif. Lorsque v ous enregistrerez des macros, vous
verrez que certains objets, et les proprits qui leur sont associes, sont trs usits.
Cest le cas de Selection, qui apparat dans le code dune macro Excel chaque
fois quune opration (format de police, dimensions, dfinition dune catgorie d
donnes, etc.) est ef fectue sur une plage de cellules sans que celle-ci soit dfini
auparavant.

Le code dun projet VBA reflte la hi archie dobjets (ou modle dobjets)
Info de lapplication hte. Des proprits sont utilises pour appeler des objets
spcifiques. our un rappel de ces concepts, reportez-vous au Chapitre 1.

Font indique la macro quil sagit dappliquer un format de police lobjet


Selection (les cellules slectionnes).
Les instructions With et End With encadrent lensemble des proprits de lobjet Font.
Comme tout mot cl, elles apparaissent en bleu dans la fentre de code. Lorsque,
durant lenregistrement dune macro, v ous faites appel une bote de dialogue dans
Livre Macros excel.book Page 45 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 45

laquelle plusieurs options sont dfinies, cette structure est utilise pour coder lensemble
des options de la bote de dialogue, selon la syntaxe suivante :
With Objet
Proprits de lobjet
End With

Le verbe Coder dsigne la transcription dactions propres lapplication dans


ition un langage de programmation dtermin.
Dfin

Chaque ligne situe entre les instructions With Selection.Font et End With correspond
une option de longlet Police lors de lenregistrement de la macro. Il sagit des proprits
de lobjet Font. Remarquez que les proprits sont toujours prcdes dun point.
A chaque proprit est af fecte une valeur. Elle indique ltat de cette option lors de
lenregistrement de la commande. Cette valeur peut tre :
False ou True (valeur boolenne). Indiquent respectivement que loption ntait pas
coche (faux) ou quelle ltait (vrai). Superscript = False indique ici que la case
cocher Exposant ntait pas valide lors de lenregistrement de la macro.

Vous pouvez aussi utiliser les valeur s 1 et 0 la place de True et False.


pel Par exemple, lexpression .Superscript = False pourra tre remplace par
Rap
.Superscript = 1.

Une chane de caractr es. Lorsquune proprit est attache une chane de
caractres, cette valeur est place entre guillemets. Name = "Arial" indique le nom
de la police en cours dans la bote de dialogue Police lors de lenre gistrement de la
macro.
Une v aleur numrique. Les v aleurs possibles v arient dune proprit lautre.
Size = 10 indique ici que le corps de la police est de 10 points. Dans Excel, cette
valeur doit tre dfinie entre 1 et 409
Une constante. Il sagit dune v aleur prdfinie qui permet de paramtrer un
proprit. P ar e xemple, la proprit Underline dfinit le type de soulignemen
appliqu la police ou la plage. Sa v aleur correspond ltat de loption Souli-
gnement lors de lenre gistrement de la macro. Elle est ici attache la constante
xlUnderlineStyleNone qui correspond loption Aucun de la zone de liste drou-
lante Soulignement. Il e xiste une constante XlUnderlineStyle spcifique pou
chaque option de la zone de liste droulante Soulignement ( xlUnderline-
StyleDouble pour Soulignement double, xlUnderlineStyleSingle pour Souli-
gnement simple, etc.).
Livre Macros excel.book Page 46 Vendredi, 3. avril 2009 7:45 07

46 Excel et VBA

Le Tableau 2.1, en prsentant quelles options de la bote de dialogue F ormat de cellule


(onglet Police) les proprits de lobjet Font sont associes, v ous aidera comprendre
comment les actions que v ous effectuez aprs a voir activ lEnregistreur de macro sont
codes par Visual Basic pour Applications.

Tableau 2.1 : Les proprits de lobjet Font dExcel

Format de cellule
Proprit Valeurs autorises
(onglet Police)
Name Zone de texte Police Chane de caractres correspondant au nom dune police dis-
ponible dans la zone de liste modifiable1.

FontStyle Zone de texte Style Chane de caractres correspondant loption slectionne


dans la zone de liste1.

Size Zone de texte Taille Valeur numrique reprsentant le corps de la police. Cette
valeur peut tre comprise entre 1 et 4091.

Strikethrough Case cocher Barr True (barr) ou False (non barr)1.


Superscript Case cocher True (mise en forme exposant) ou False (pas de mise en forme
SuperScript Exposant exposant)1.
Les attributs Exposant et Indice ne pouvant tre appliqus une
mme slection, lorsque vous affectez la valeur True la pro-
prit SuperScript, la proprit Subscript prend la valeur False2.

Subscript Case cocher Indice True (mise en forme indice) ou False (pas de mise en forme
SubScript indice)1.
Les attributs Indice et Exposant ne pouvant tre appliqus une
mme slection, lorsque vous affectez la valeur True la pro-
prit SubScript, la proprit SuperScript prend la valeur False2.

OutlineFont [Aucune True ou False (sans effet).


et Shadow correspondance] Ces proprits indiquent respectivement si la police possde
une mise en forme Relief et Ombr. Elles ne correspondent
aucune option de la bote de dialogue Format de cellule, mais
ont t conserves comme proprits de lobjet Font dExcel.
Elles sont sans effet sur la police.

Underline Zone de liste Une des cinq constantes xlUnderlineStyleNone reprsen-


droulante tant les cinq types de soulignement disponibles dans Excel1.
Soulignement

ColorIndex Zone de liste Une valeur numrique reprsentant la valeur dindex dune
droulante Couleur couleur dans la palette de couleurs en cours, ou la constante
xlColorIndexAutomatic (couleur automatique)2.
1 Si vous interrogez la valeur dune proprit pour une plage contenant des cellules dont les attributs correspondants
sont diffrents, la valeur Null sera renvoye. Par exemple, si vous interrogez la valeur de la propritName de lob-
jet Font dune plage de cellules contenant la fois des cellules en police Arial et dautres en police Times, la valeur
Null sera renvoye.
2 Notez que cet tat est le reflet de ce qui se passe dans la bote de dialogue Police. Vous ne pouvez pas en effet

cocher la fois loption Indice et loption Exposant.


Livre Macros excel.book Page 47 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 47

Comme le montre le tableau prcdent, les actions excutes sont codes selon des princi-
pes rcurrents auxquels lenregistrement de macros vous familiarisera.
La macro GrasItalique ouvre donc (virtuellement) la bote de dialogue F ormat de cellule
sur longlet Police et y dfinit les options telles quelles lont t lors de lenr gistrement. Elle
applique ensuite ces proprits au texte slectionn.
Fermez la fentre Visual Basic Editor, en slectionnant la commande Fermer et retourner
Microsoft Excel du menu Fichier.

Amliorer la macro
Slectionnez maintenant une cellule dont la police et le corps sont diffrents de ceux de la
plage slectionne lors de lenregistrement de la macro. Tapez le raccourci clavier affect
la macro (Ctrl + B). Celle-ci sexcute.
A la Figure 2.8, on constate que les attributs Gras et Italique ont bien t appliqus, mais la
police et le corps du texte ont chang. Tous les arguments en cours dans la bote de dialo-
gue Police ont en effet t pris en compte lors de lenregistrement de la macro.
Cela apparat clairement dans la fentre de code (voir Figure 2.7) : les arguments .Size =
10 et .Name = "Arial" du texte de la macro correspondent la police et au corps du texte
slectionn lors de lenregistrement de la macro.
Figure 2.8
Lensemble des arguments
en cours lors de lenregis-
trement de la macro est
appliqu.

Pour remdier ce problme, supprimez les attributs indsirables directement partir de la


fentre de code de la macro :
1. Choisissez Outils, Macro, Macros. Slectionnez GrasItalique, puis cliquez sur le bouton
Modifie . Visual Basic Editor souvre sur la fentre de code de la macro GrasItalique.
Livre Macros excel.book Page 48 Vendredi, 3. avril 2009 7:45 07

48 Excel et VBA

Avec Excel 2007, activez longlet Dveloppeur du ruban, puis cliquez sur le
200
7 bouton Macros du groupe Code.

2. Supprimez toutes les proprits de lobjet Font que la macro ne doit pas modifie
(toutes les instructions sauf .FontStyle = "GrasItalique"). Dans le menu Fichier ,
choisissez Enre gistrer PERSO.XLS ou cliquez sur le bouton Enre gistrer de la barre
doutils Standard.
Le texte de la macro doit se prsenter ainsi :

Sub GrasItalique()
With Selection.Font
.FontStyle = "Gras italique"
End With
End Sub

Choisissez Fichier, Fermer. Le tour est jou.

La structure With...End With est utilise pour par amtrer les pr oprits dun
Info objet sans avoir rpter la rfrence cet objet pour chaque proprit. Puisque la
macro ne dfinit ici quune p oprit, il est inutile dutiliser cette structure. La macro
se prsente alors ainsi :
Sub GrasItalique()
Selection.Font.FontStyle = "Gras italique"
End Sub

Au fur et mesure que v ous avancerez dans lapprentissage de la programmation Excel,


vous dcouvrirez par la pratique les dif frents lments des botes de dialogue Macro et
Enregistrer une macro. Le Tableau 2.2 en prsente rapidement les fonctions.

Tableau 2.2 : Fonctions des botes de dialogue Macro et Enregistrer une macro

Bouton Description
Bote de dialogue Macro

Excuter Excute la macro slectionne dont le nom apparat dans la zone


de texte Nom de la macro.

Annuler Ferme la bote de dialogue Macro.

Pas pas dtaill Ouvre la fentre de code de la macro slectionne dans Visual Basic
Editor et lexcute tape par tape (instruction par instruction). Cette
commande constitue un prcieux outil de dbogage pour vos
macros.
Livre Macros excel.book Page 49 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 49

Tableau 2.2 : Fonctions des botes de dialogue Macro et Enregistrer une macro (suite)

Bouton Description
Modifier Ouvre la fentre de code de la macro slectionne dans Visual Basic
Editor afin den permettre la modification.

Crer Ouvre, dans Visual Basic Editor, une fentre Code simplement com-
pose des instructions Sub NomMacro() et End Sub. Pour accder
ce bouton, il faut auparavant saisir un nom de macro dans la zone
Nom de la macro. Ce nom ne peut tre le mme que celui dune
macro existante.

Supprimer Supprime la macro slectionne. Un message vous demandant de


confirmer la suppression de la macro est affich.

Options Ouvre la bote de dialogue Options de macro pour la macro slection-


ne, permettant de lui attribuer un raccourci clavier et den modifier
la description.

Zone de texte Nom de la macro Permet de dsigner une macro existante ou de saisir le nom dune
nouvelle macro. Lorsque vous slectionnez une macro dans la liste
des macros disponibles, son nom est affich dans cette zone de texte.

Zone de texte Macros dans Permet de dsigner le classeur dont vous souhaitez afficher les
macros1.

Bote de dialogue Enregistrer une macro

Nom de la macro Nom de la macro qui sera enregistre. Si le nom spcifi est dj attri-
bu une macro existante, lapplication hte affichera une bote de
dialogue vous demandant de confirmer le remplacement de la
macro.

Touche de raccourci Permet daffecter un raccourci clavier la macro que lon souhaite
enregistrer.
Enregistrer la macro dans Dsigne le classeur o sera stocke la macro.1 Le lieu de stockage
dune macro dtermine partir de quels documents
la macro sera disponible, cest--dire o elle pourra tre excute,
modifie ou supprime.

Description Destine la saisie dune description de la macro. Par dfaut, la date


de cration et le crateur apparaissent dans cette zone.

Bouton OK Dmarre lenregistrement de la macro sans quaucun raccourci ne lui


soit attribu.

Bouton Annuler Ferme la bote de dialogue Enregistrer une macro sans dclencher
lEnregistreur de macro.
1 Le stockage et la disponibilit des macros sont traits la fin de ce chapitre.
Livre Macros excel.book Page 50 Vendredi, 3. avril 2009 7:45 07

50 Excel et VBA

Une autre mthode denregistrement


LEnregistreur de macro est un instrument souple qui enre gistre lensemble des comman-
des que vous excutez dans lapplication hte. Vous pouvez donc enregistrer une macro en
utilisant nimporte laquelle des mthodes que propose lapplication hte pour excuter les
commandes que vous souhaitez intgrer la macro.
Dans le cas de la macro GrasItalique, il est plus simple de cliquer successi vement sur les
icnes Gras et Italique de la barre doutils que de passer par la bote de dialogue Format de
cellule. Rien ne vous empche denregistrer votre macro de la mme faon.

Enregistrement
Pour renregistrer la macro GrasItalique :
1. Slectionnez une cellule.
2. Choisissez Outils, Macro, Nouv elle macro (a vec Excel 2007, cliquez sur le bouton
Enregistrer une macro de longlet Dv eloppeur). Dans la zone Nom de la macro de la
bote de dialogue Enregistrer une macro, saisissez GrasItalique.
3. Affectez un raccourci clavier la macro et saisissez une brve description dans la zone
Description
4. Cliquez sur le bouton OK. Une bote de dialogue saf fiche, ous demandant de
confirmer le remplacement de la macro xistante. Confirmez

Figure 2.9
Confirmez le emplacement
de la macro GrasItalique.

5. Cliquez tour tour sur les icnes Gras et Italique de la barre doutils.
6. Cliquez sur le bouton Arrter lenregistrement de la barre doutils Arrt de lenre-
gistrement.
La macro est enregistre.
Vous pouvez aussi enregistrer la macro en utilisant les raccourcis clavier affects aux enri-
chissements Gras et Italique respectivement Ctrl + G et Ctrl + I.
Livre Macros excel.book Page 51 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 51

Structure de la macro
Observons la faon dont ces actions ont t codes en Visual Basic : ouvrez la Fentre de
code de la macro GrasItalique (Outils, Macro, Macros, puis Modifier)
Le texte de la macro se prsente ainsi :

Sub GrasItalique()
Selection.Font.Bold = True
Selection.Font.Italic = True
End Sub

Les proprits Bold et Italic de lobjet Font sont dfinies True, indiquant que les cellules
slectionnes seront enrichies des attributs gras et italique.
Remarquez labsence de la structure With...End With. Cette structure nest utilise que
lorsque plusieurs proprits dun objet sont v alides dans une seule action cest le cas
pour toutes les options dune bote de dialogue au moment o v ous cliquez sur le bouton
OK.
Vous pouvez cependant utiliser cette structure afin damliorer la lisibilit de la macro
Elle doit alors se prsenter ainsi :

Sub GrasItalique()
With Selection.Font
.Bold = True
.Italic = True
End With
End Sub

Ecrire la macro
Maintenant que vous connaissez la structure de la fentre de code dune macro, vous allez
crire directement la macro, sans laide de v otre programmeur attitr, lEnre gistreur de
macro.
Pour crire la macro GrasItalique :
1. Choisissez Outils, Macro, Macros (a vec Excel 2007, cliquez sur le bouton Macros de
longlet Dveloppeur). Slectionnez la macro GrasItalique dont le nom saf fiche alor
dans la zone Nom de la macro. Cliquez sur le bouton Supprimer . Excel vous demande
de confirmer la suppression de la macro GrasItalique. Confirme
2. Choisissez de nouveau Outils, Macro, Macros. Dans la zone Nom de la macro, saisis-
sez GrasItalique, puis cliquez sur le bouton Crer . Visual Basic Editor souvre sur la
fentre de code de la nouvelle macro GrasItalique.
Livre Macros excel.book Page 52 Vendredi, 3. avril 2009 7:45 07

52 Excel et VBA

Le texte de la macro se prsente sous sa forme minimale :

Sub GrasItalique()
End Sub

3. Insrez une ligne entre Sub GrasItalique() et End Sub. Saisissez simplement le texte
de la macro tel que nous lavons vu lors de la section prcdente.
4. Dans le menu Fichier , choisissez Enre gistrer PERSO.XLS, puis Fermer et retourner
dans Microsoft Excel.

Crer une macro nest pas plus compliqu que cela.


Contrairement la mthode de lenre gistrement, la cration dune macro ne permet pas
lattribution dun raccourci cla vier. Pour af fecter un raccourci cla vier la macro Gras-
Italique, procdez comme suit :
1. Choisissez Outils, Macro, Macros ou, si vous utilisez Excel 2007, cliquez sur le bouton
Macros de longlet Dveloppeur.
2. Slectionnez la macro GrasItalique, puis cliquez sur le bouton Options.
3. Dans la bote de dialogue Options de macro qui saffiche, indiquez un raccourci cl vier
et saisissez v entuellement une description pour la macro (v oir Figure 2.10). Validez
en cliquant sur OK

Figure 2.10
La bote de dialogue Options
de macro permet daffecter
un raccourci clavier une
macro existante.

Visual Basic pour Applications ne tient pas compte des majuscules. Celles-ci
Info sont places dans le code (Selection.Font, par exemple) dans le seul but den
faciliter la lectur e. Mais vous pouvez parfaitement saisir du te xte dans une
fentre de code entirement en minuscules (selection.font).
Livre Macros excel.book Page 53 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 53

Si vous saisissez du texte en minuscules dans une fentre de code, Visual Basic
ce replace les majuscules dans les instructions quil reconnat lorsque vous chan-
Astu
gez de ligne. Sil ne modifie pas la casse dune instruction saisie en minuscules
cest quil ne la r econnat pas. P ar e xemple, selection.font.bold = true
deviendra Selection.Font.Bold = True lor s du c hangement de ligne ; par
contre, si vous tapez selection.font.old = true, Word ne placer a pas de
capitale old. Cest un bon moyen de vrifier que vous navez pas commis d
fautes lors de la saisie.

Excution de la macro
Une macro cre sexcute exactement de la mme faon quune macro enregistre. Vous
pouvez excuter la macro GrasItalique, soit partir de la bote de dialogue Macros, soit en
utilisant le raccourci clavier que vous lui aurez attribu aprs.
Vous savez maintenant enregistrer (selon la mthode de votre choix) et crer une macro. Si
la macro GrasItalique v ous parat anodine, sachez que les principes acquis dans les
sections prcdentes sont v alables pour toutes les macros, quelle que soit lapplication
hte.
La macro GrasItalique est une vritable commande que v ous a vez ajoute Excel. En
procdant de la mme f aon, vous pouvez crer nimporte quelle commande, en fonction
de vos besoins : insrer un titre WordArt et lui appliquer une mise en forme spcifique
dfinir les aleurs de cellules, etc.

Vous avez appris dans ce c hapitre enregistrer ou crer une macro. La mise
Info en uvre de macros complexes ncessite souvent de combiner ces deux mtho-
des. On enr egistre en gnr al les commandes de la macr o, puis on y crit les
fonctions qui ne peuvent tre enregistres.

Pour quune macro sexcute automatiquement louvertur e dun classeur, affec-


ce tez-lui le nom Auto_Open. Cette fonction est intressante si vous souhaitez param-
Astu
trer dif fremment Excel selon les classeur s af fi hs. Enr egistrez simplement les
options dExcel dans une macro Auto_Open.
Pour quune macro sexcute automatiquement la fermeture dun classeur, affec-
tez-lui le nom Auto_Close. Vous pouvez ainsi mettr e jour un autr e fi hier, crer
une sauvegarde du fi hier dans un autre dossier, etc.
Livre Macros excel.book Page 54 Vendredi, 3. avril 2009 7:45 07

54 Excel et VBA

Choisir laccessibilit des macros


Lorsque v ous enre gistrez ou crez des macros, celles-ci sont stockes dans un projet
VBA, attach un document spcifique de lapplication hte. Pour xcuter une macro,
le document hber geant le projet de stockage de la macro doit tre actif. Le stockage
des macros est donc une donne fondamentale, puisquil en dtermine laccessibilit
pour lutilisateur final. Une bonne gestion des macros est le pralable une applicatio
puissante et efficace

Accessibilit globale ou limite


Une macro peut tre accessible cest--dire e xcute, modifie, renomme o
supprime partir de nimporte quel document, ou limite des documents spcifiques
Sil est intressant de pouv oir assurer une accessibilit globale aux macros, il est parfois
prfrable dattacher une macro un classeur spcifique. Cest le cas si la macro es
conue pour fonctionner avec un certain type de donnes et si elle est inutile dans dautres
classeurs voire susceptible dy pro voquer des dommages. En outre, limiter la disponi-
bilit des macros aux documents concerns en facilite la gestion.

Le stockage dune macro est dfini lors de son enr gistrement ou de sa cration, et peut
tre modifi par la suite. Une macro peut alement tre cre directement partir de
Visual Basic Editor, sans passer par la bote de dialogue Macros ni par la bote de dialogue
Enregistrer une macro. Le stockage de la macro est alors dtermin dans lExplorateur de
projet. LExplorateur de projet et la cration de macros partir de Visual Basic Editor sont
respectivement prsents aux Chapitres 4 et 5.
Lors de lenregistrement dune macro, laffectation de la macro un document sef fectue
par la zone de liste Enregistrer la macro dans de la bote de dialogue Enregistrer une macro
(voir Figure 2.11). Les sections sui vantes prsentent les possibilits de stockage des
macros Excel.

Figure 2.11
Slectionnez le document
de stockage de la macro
lors de son enregistrement.
Livre Macros excel.book Page 55 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 55

Classeurs et modles
Les macros enre gistres dans Excel sont stockes dans des classeurs ou dans des modles .
Pour accder une macro, il f aut que le classeur dans lequel est stocke la macro soit
ouvert. Si plusieurs classeurs sont ouv erts, vous pouvez accder aux macros dun des
classeurs ouverts partir de nimporte quel autre classeur.

Les macros enre gistres dans un modle sont accessibles lorsque v ous crez un nouv eau
classeur fond sur ce modle (en choisissant la commande Nouveau du menu Fichier et en
slectionnant un modle). Lorsque v ous enre gistrez le nouv eau classeur, les macros du
modle sont "copies" dans celui-ci, et restent donc disponibles par la suite, lorsque v ous
rouvrez le classeur.

Notez cependant que les classeurs Excel nentretiennent pas de rapport a vec le modle
partir duquel ils ont t crs. Si vous ajoutez, modifiez ou supprimez des macros dans u
modle, ces changements ne seront pas ef fectifs pour les classeurs pralablement crs
partir du modle.

Pour enregistrer ou crer une macro dans un modle, v ous devez ouvrir le modle en
question.

Dans Excel 2007, les classeurs dans lesquels sont stockes les macros sont identi-
200
7 fis par une xtension spcifiqu . Il peut sagir dun "modle prenant en charge les
macros" (.xltm) ou dun "classeur prenant en charge les macros" (.xlsm).

Le classeur de macros personnel


Lors de lenregistrement de vos macros, vous pouvez choisir de stock er la macro dans le
classeur actif afin den limiter la disponibilit ce dernie . La macro ne pourra alors tre
excute, modifie ou supprime qu condition que ce classeur soit ou ert. Mais v ous
aurez certainement besoin daccder la plupart de vos macros partir de classeurs diff-
rents. Pour rendre une macro accessible partir de nimporte quel classeur Excel, il suf fi
de lenregistrer dans le classeur de macros personnel, PERSO.XLS.

Le classeur PERSO.XLS est cr la premire fois que v ous enregistrez une macro dans le
classeur de macros personnel. Lorsque v ous quittez Excel aprs a voir enre gistr v otre
premire macro dans le classeur de macros personnel, la bote de dialogue prsente la
Figure 2.12 saffiche

Le classeur de macros personnel est ouv ert chaque fois que v ous e xcutez Excel. Vous
pouvez donc en excuter les macros qui y sont stockes partir de nimporte quel classeur.
Livre Macros excel.book Page 56 Vendredi, 3. avril 2009 7:45 07

56 Excel et VBA

Figure 2.12
Le classeur de macros personnel est cr lorsque vous quittez Excel aprs avoir enregistr ou crit votre
premire macro dans le classeur de macros personnel.

Par dfaut, le classeur de macr os personnel est masqu au lancement dExcel.


Info Pour accder ce classeur, choisissez la commande Affi her du menu Fentre,
et slectionnez Perso.xls dans la bote de dialogue Affi her.

Le classeur de macros personnel est un fi hier Excel nomm PERSO.XLS, et stock


eil dans le dossier XLStart. Ce classeur contiendr a probablement lessentiel de vos
Cons
macros. Il est donc conseill den ef fectuer rgulir ement une sauve garde.
Lemplacement de ce fi hier varie dune version dExcel lautre.
Sous Windows 2000 et Windows XP, ce classeur est enr egistr par dfaut dans le
dossier C:\Documents and Settings\nom dutilisateur\Application Data\Micr o-
soft\Excel\XLStart. Sous Micr osoft Windows Vista, ce classeur se tr ouve par dfaut
dans le dossier C:\Users\nom dutilisateur\Application Data\Microsoft\Excel\XLStart.

Les macros complmentaires


Les macros peuv ent galement tre attaches un classeur enre gistr en tant que macro
complmentaire (e xtension XLA). Ce type de classeur est particulirement adapt la
distribution de macros. Les classeurs de macros complmentaires peuv ent en ef fet tre
"chargs" dans Excel. Les macros qui y sont contenues sont alors rendues accessibles au
lancement de lapplication. Contrairement au classeur de macros personnel, les classeurs
de macros complmentaires ne sont pas "ouv erts" : les macros quils contiennent sont
charges en mmoire et les barres doutils et menus dExcel sont mis jour pour intgrer
les fonctionnalits quapportent les macros.
Lenregistrement au format Macro complmentaire est indniablement la solution adapte
si vous dveloppez des solutions compltes par modules. Vous vitez ainsi de surcharger le
classeur de macros personnel et pouv ez re grouper les macros par classeur tout en leur
assurant une accessibilit globale. Les principaux a vantages des macros complmentaires
sont les suivants :
distribution et gestion simplifies
Livre Macros excel.book Page 57 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 57

possibilit dactivation/dsactivation trs simple ;


conomie de ressources mmoire ;
excution plus rapide des macros ;
ajout de commandes lapplication de faon transparente pour lutilisateur ;
les macros complmentaires charges napparaissent pas dans la liste des macros.

Lintgration des macr os complmentaires len vironnement dExcel se fait par


Info programmation, laide de la collection CommandBars qui r eprsente lensemble
des barres de commande de lapplication.
On cre pour cela des pr ocdures vnementielles Open (ouverture du classeur ) et
AddinUninstall (dsactivation de la macr o complmentair e) auxquelles on
affecte le code ajoutant ou supprimant la commande linterface de lapplication.
La cration de pr ocdures vnementielles pour contrler le comportement
dExcel est traite au Chapitre 15.

Enregistrer une macro complmentaire


Pour enregistrer un classeur en tant que macro complmentaire, commencez par prparer le
projet VBA lui-mme. Accdez Visual Basic Editor :
1. Commencez par vous assurer que vos programmes VBA fonctionnent correctement et
ne contiennent pas de bogues.
2. Dans Visual Basic Editor , ouvrez un module du projet et choisissez Dbog age,
Compiler.
3. Protgez ventuellement votre projet par mot de passe (voir Chapitre 16).
Quittez ensuite Visual Basic Editor et, dans Excel :
1. Affichez les Proprits du fichier
Avec Excel 2007, cliquez sur le bouton Office, puis choisissez Prpare , Proprits.
Avec les versions antrieures dExcel, choisissez la commande Proprits du menu
Fichier.
2. Si vous utilisez une v ersion dExcel antrieure la v ersion 2007, activez longlet
Rsum de la bote de dialogue Proprits. Saisissez un nom et un descriptif
reprsentatifs dans les zones Titre et Commentaire (v oir Figure 2.13). Ce sont le
titre et le commentaire qui apparatront dans la bote de dialogue Macros compl-
mentaires.
Livre Macros excel.book Page 58 Vendredi, 3. avril 2009 7:45 07

58 Excel et VBA

Figure 2.13
Choisissez un titre et un
commentaire clairs.

3. Choisissez Fichier, Enregistrer sous. Dans la zone Type de fichie , slectionnez Macro
complmentaire Microsoft Excel (*.xla). Le dossier Documents and settings\ Adminis-
trateur\Application Data\Microsoft\Macros complmentaires est activ par dfaut.

Excel 2007 propose deux formats pour les macr os complmentaires : le format
200
7 2007 (extension .xlam) et le format Excel 97-2003 (extension .xla). Si vous souhai-
tez distrib uer vos macr os, il est r ecommand de c hoisir ce second format, afi
dassurer la compatibilit de vos macros avec un maximum de versions dExcel.

4. Affectez un nom adapt et cliquez sur Enregistrer.


La macro complmentaire est enregistre et automatiquement ferme.

Activer/dsactiver une macro complmentaire


Pour activer ou dsactiver une macro complmentaire, procdez comme suit :
1. Affichez la liste des macros complmentaires
Avec Excel 2007, cliquez sur le Bouton Of fice, puis sur le bouton Options Excel
Dans la fentre qui saf fiche, slectionnez Complments. La fentre reprsente
la Figure 2.14 saffiche. Cliquez sur le bouton Atteindre ct de la zone Grer.
Avec les versions dExcel antrieures la v ersion 2007, choisissez Outils, Macros
complmentaires ou Outils, Complments.
Les macros complmentaires actives sont coches.
Livre Macros excel.book Page 59 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 59

2. Si vous avez enregistr la macro complmentaire dans le dossier propos par df aut,
elle apparat dans la liste. Dans le cas contraire, cliquez sur le bouton P arcourir et
slectionnez le fichier de macro complmentaire oulu.
3. Cochez ou dcochez la macro complmentaire. Le nom de la macro complmentaire et le
descriptif qui apparaissent dans la bote de dialogue Macros complmentaires sont ceux
qui ont t indiqus comme titre et commentaire du fichier ( oir Figure 2.15).

Figure 2.14
La liste des complments dExcel 2007.

Les macros complmentaires intgres dExcel


Excel est livr avec un nombre important de macros complmentaires, telles que lAssis-
tant Somme conditionnelle, lEnre gistrement automatique, le Solv eur, etc. Celles-ci
doivent tre installes pour tre accessibles. Si ce nest pas le cas, v ous devez relancer
Livre Macros excel.book Page 60 Vendredi, 3. avril 2009 7:45 07

60 Excel et VBA

Figure 2.15
Notre macro complmen-
taire apparat maintenant
dans la liste des macros
complmentaires dExcel.

linstallation dOffice et installer les macros complmentaires non disponibles. Procde


comme suit :
1. Choisissez Dmarrer , P aramtres, P anneau de configuration, Ajout/Suppression de
programmes.
2. Dans la bote de dialogue Ajout/Suppression de programmes, slectionnez Microsoft
Office, puis cliquez sur Ajouter/Supprimer.
3. Dans la bote de dialogue qui saffiche, choisissez Ajouter/Supprimer des composants.
4. Dveloppez ensuite larborescence dExcel, puis celle des macros complmentaires.
5. Cliquez ensuite sur les macros complmentaires indisponibles que vous souhaitez installer,
et choisissez Excuter partir du disque dur dans le menu qui saffiche ( oir Figure 2.16).
6. Pour fini , cliquez sur le bouton Mettre jour.

Figure 2.16
Les macros complmentaires
doivent tre installes pour
tre charges.
Livre Macros excel.book Page 61 Vendredi, 3. avril 2009 7:45 07

Chapitre 2 Premires macros 61

Avant de vous lancer dans des activits de pr ogrammation complexe, vrifiez si


eil nexiste pas une macro complmentaire intgre rpondant vos besoins.
Cons
Vous pouvez galement tlc harger gr atuitement des macr os complmentair es
sur le site de Micr osoft (http://www.microsoft.com/france). Enfin, des socits d
dveloppement spcialises commercialisent des macros complmentaires.

Dfinir le classeur de stockage lors de lenregistrement dune macro


Lors de lenre gistrement dune macro, la zone Enre gistrer la macro dans de la bote de
dialogue Enregistrer une macro, permet de dfinir le classeur dans lequel sera stocke l
macro. Trois options sont disponibles :
Classeur de macros personnel. La macro sera enregistre dans le classeur de macros
personnel, et accessible partir de nimporte quel classeur.
Nouveau classeur. Un nouveau classeur est cr et la macro y est stocke.
Ce classeur. La macro est stocke dans le classeur actif. Il peut sagir du classeur de
macros personnel (PERSO.XLS) ou dun autre classeur.

Figure 2.17
Dfinissez le classeur
qui hbergera une macro
lors de lenregistrement
de cette dernire.

Accder aux macros dun classeur spcifique


La zone de liste droulante Macros de la bote de dialogue Macro permet de dfinir le
macros que vous souhaitez visualiser. Quatre options soffrent vous :
Tous les classeurs ouv erts. Les macros de tous les classeurs ouv erts (y compris le
classeur de macros PERSO.XLS) sont accessibles. Les macros qui ne sont pas stocke s
dans le classeur de macros personnel apparaissent sous la forme Classeur!NomMacro,
o Classeur est le nom du classeur hber geant la macro, et NomMacro le nom de la
macro.
Ce classeur. Seules les macros du classeur actif sont af fiches. Les macros apparaissen
alors simplement sous la forme NomMacro.
Livre Macros excel.book Page 62 Vendredi, 3. avril 2009 7:45 07

62 Excel et VBA

PERSO.XLS. Seules les macros du classeur de macros personnel sont accessibles.


Nom_Classeur. Vous pouvez aussi choisir de ne visualiser que les macros de lun des
classeurs ouverts, en slectionnant simplement son nom dans la liste.

Figure 2.18
Vous pouvez df nir le
classeur dont vous souhaitez
visualiser les macros.

Si vous fermez le classeur de macr os personnel, vous ne pourr ez plus accder


ntion aux macros qui y sont stoc kes, ni y enr egistrer de nouvelles macr os. Le clas-
Atte
seur de macr os per sonnel souvrira de nouveau lor s de la pr ochaine session
Excel. Pour enregistrer des macr os daccs global ou accder aux macr os du
classeur de macros personnel au cours de la session active, vous devez rouvrir
le classeur PERSO.XLS.

Le classeur Perso.xls souvre le xcution dExcel parce quil se tr ouve dans


ce le dossier XLStart ou XLOuvrir (selon la ver sion dOffice). our ouvrir auto-
Astu
matiquement un classeur au lancement dExcel, crez un r accourci ver s ce
classeur et placez-le dans ce dossier.
Livre Macros excel.book Page 63 Vendredi, 3. avril 2009 7:45 07

3
Dplacement
et slection
dans une macro Excel
Au sommaire de ce chapitre
Mthodes de slection dans une feuille Excel
Coder les dplacements effectus lors de lenregistrement dune macro
Livre Macros excel.book Page 64 Vendredi, 3. avril 2009 7:45 07

64 Excel et VBA

Le dplacement et la slection de cellules dans un classeur constituent une donne


primordiale lors de lenregistrement de macros. Il est indispensable de connatre les tech-
niques de dplacement dans une feuille de calcul, et de comprendre les concepts de rf-
rence relative ou absolue aux cellules, pour crer des macros qui se comportent comme
vous le souhaitez.

Pour enregistrer des dplacements dans une feuille Excel, vous pouvez utiliser indiffrem-
ment le clavier ou la souris. Lemplacement de la cellule active est enregistr lorsque vous
effectuez une opration (mise en forme, saisie, etc.) qui modifie la feuille Excel. Autre-
ment dit, si vous vous contentez de vous dplacer dans la feuille par des clics de souris
ou en utilisant les touches de dplacement du cla vier sans jamais interv enir sur le
contenu ou la mise en forme de la cellule, ces dplacements ne seront pas enregistrs dans
la macro, puisquils ne modifient en rien la feuille

La slection dlments dans une feuille Excel repose sur lobjet Range qui reprsente une
cellule, une ligne, une colonne ou une combinaison de ces lments. Comme v ous le
verrez dans cette section, les proprits utilises v arient selon le type de slection ef fectu,
mais toutes renvoient un objet Range.

Le codage en lang age Visual Basic de v os dplacements dans la feuille de calcul Excel
varie selon que v ous activiez ou non la rfrence relati ve aux cellules, en cliquant sur le
bouton correspondant de la barre doutils Arrt de lenre gistrement (v oir Figure 3.1 ou
dans la zone Code de longlet Dveloppeur si vous utilisez Excel 2007).

Figure 3.1
Vous pouvez enregistrer vos
dplacements par rfrence
relative ou absolue
aux cellules.
Rfrence absolue Rfrence relative

Mthodes de slection dans une feuille Excel


Clavier
Lenregistrement de dplacements dans une feuille Excel, par rfrence relati ve aux
cellules, ncessite, dans certains cas, que v ous utilisiez le cla vier (par e xemple, si v ous
souhaitez acti ver la dernire cellule non vide dune ligne). Le Tableau 3.1 prsente les
diffrentes possibilits de dplacement dans Excel laide du clavier.
Livre Macros excel.book Page 65 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 65

Tableau 3.1 : Dplacement dans une feuille Excel laide du clavier

Pour se dplacer Clavier

Dune cellule vers la droite

Dune cellule vers la gauche

Dune cellule vers le haut

Dune cellule vers le bas

Au dbut de la ligne courante Dbut

Sur la premire cellule non vide de la ligne courante1 Ctrl +

Sur la dernire cellule non vide de la ligne courante1 Ctrl +

Sur la premire cellule non vide de la colonne courante1 Ctrl +

Sur la dernire cellule non vide de la colonne courante1 Ctrl +

Sur la cellule situe langle suprieur gauche de la feuille active (A1) Ctrl + Dbut

Sur la cellule situe langle infrieur droit de la feuille active 2 Ctrl + Fin
1 Si des cellules vides se trouvent entre la cellule active et la cellule vise, Excel sarrte successivement sur les cel-
lules contigus aux cellules vides. Par exemple, si la cellule B10 est active et si toutes les cellules situes au-dessus
delle contiennent des donnes lexception de la cellule B5, la rptition de la combinaison de touches Ctrl+ en-
tranera lactivation successive des cellules B6, puis B4 et enfin B1.
2 Ladresse de la cellule situe langle infrieur droit de la feuille active est la combinaison de la dernire colonne

de la dernire ligne contenant des donnes. Cette cellule peut tre vide.

Lors de lenregistrement dune macro par rfrence absolue aux cellules, cest
ntion ladresse des cellules qui est enregistre. Pour enregistrer un dplacement rela-
Atte
tif (par exemple, la dernire cellule non vide de la ligne cour ante), vous devez
activer lenr egistrement par rfr ence relative aux cellules en cliquant sur le
bouton correspondant de la barre doutils Arrt de lenregistrement.

Pour tendre la slection de la cellule acti ve une cellule donne de la feuille, utilisez
lune des combinaisons de touches prsentes dans le Tableau 3.1, en maintenant la touche
Maj enfonce. Pour slectionner les colonnes entires correspondant aux cellules s lec-
tionnes, utilisez le raccourci clavier Ctrl + Barre despace ; pour slectionner les lignes enti-
res, utilisez Maj + Barre despace.
Notez que, pour slectionner des zones non contigus, vous devez obligatoirement utiliser la
souris.
Livre Macros excel.book Page 66 Vendredi, 3. avril 2009 7:45 07

66 Excel et VBA

Souris
Lutilisation de la souris pour ef fectuer des slections dans Excel est trs simple. Pour
slectionner une cellule, cliquez dessus. Pour slectionner une ligne ou une colonne,
cliquez sur len-tte de la ligne ou de la colonne concerne.
Pour slectionner des cellules adjacentes, cliquez sur la premire cellule de la plage que
vous souhaitez slectionner, appuyez sur la touche Maj et, tout en la maintenant enfonce,
cliquez sur la dernire cellule de la plage. Pour slectionner des lignes ou des colonnes adja-
centes, procdez de la mme f aon, en cliquant sur les rfrences de ces lignes ou de ces
colonnes.
Pour slectionner des cellules non contigus, cliquez sur la premire cellule que v ous
souhaitez slectionner , appuyez sur la touche Ctrl et, tout en la maintenant enfonce,
cliquez successivement sur les cellules que v ous souhaitez slectionner . Pour slectionne r
des lignes ou des colonnes non contigus, procdez de la mme f aon, en cliquant sur les
rfrences de ces lignes ou de ces colonnes.
Vous pouvez combiner la slection dlments non contigus de la feuille en maintenant la
touche Ctrl enfonce et en cliquant sur les lments v oulus. Vous pouvez, par e xemple,
slectionner simultanment la colonne C, la ligne 5 et la cellule F4. Cliquez sur len-tte
de la colonne C, appuyez sur la touche Ctrl et, tout en la maintenant enfonce, cliquez sur
len-tte de la ligne 5, puis sur la cellule F4.

Notion de cellule active


Lorsquune plage de cellules est slectionne dans une feuille Excel, toutes les cellules de
cette plage, le xception dune seule, sont noircies. La cellule non noircie est la cellule
active de la plage (voir Figure 3.2).

Figure 3.2
Dans une plage
de cellules Excel,
une seule cellule
est la cellule active.

Si vous appliquez une mise en forme (une police particulire, par e xemple), cette mise en
forme sera applique lensemble des cellules de la plage slectionne. Si v ous appuyez
Livre Macros excel.book Page 67 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 67

sur la touche Suppr, le contenu de toutes les cellules de la plage sera supprim. Plus gn-
ralement, si v ous effectuez une opration pouv ant affecter simultanment plusieurs cellules,
elle sappliquera lensemble des cellules de la plage slectionne.
Cependant, certaines oprations comme la saisie de texte ou de formules ne peuvent
sappliquer qu une cellule la fois. Cest alors la cellule acti ve de la plage slectionne
qui est af fecte. P ar e xemple, si la plage de cellules A5 + F10 est slectionne, et si la
cellule active est la cellule A5, le texte saisi au clavier sera insr dans la cellule A5, et
la plage A5 + F10 restera slectionne.

Pour nommer une plage de cellules, on indique la cellule situe langle sup-
Info rieur gauche de la plage (A5), puis la cellule situe langle infrieur droit de
la plage (F10).

La cellule acti ve dune plage de cellules dpend de lordre dans lequel v ous avez slec-
tionn les diffrentes cellules qui la composent. Vous verrez dans les sections qui sui vent
comment le mode de slection dtermine la cellule acti ve et comment la cellule active est
code en langage Visual Basic.

Rfrences relatives et rfrences absolues


Par dfaut, lenregistrement seffectue par rfrence absolue des cellules. Cela signifi
que, lorsque v ous vous dplacez dans les cellules dune feuille Excel, lEnre gistreur de
macro mmorise ladresse de la cellule (combinaison du numro de ligne et de la lettre
de colonne). Ainsi, si vous enregistrez un dplacement sur la cellule B6, le xcution de la
macro entranera lacti vation de la cellule B6, et ce, quelle que soit la cellule acti ve au
moment de lexcution de la macro.
Le bouton Rfrence relative de la barre doutils Arrt de lenregistrement permet denre-
gistrer les dplacements dans la feuille Excel relati vement la cellule initialement acti ve.
Ce nest plus ladresse de la cellule qui est prise en considration, mais le dplacement
dans la feuille. Ainsi, un dplacement de la cellule B5 la cellule C7 sera enre gistr
comme un dplacement dune colonne v ers la droite et de deux lignes v ers le bas. Si, au
moment de lexcution de la macro, la cellule active est la cellule D1, la macro entranera
lactivation de la cellule E3 (situe une colonne droite et deux lignes en dessous de la
cellule D1).
Lors de lenregistrement de macros dans Excel, vous pouvez combiner les rfrences rela-
tives et absolues, en cliquant sur le bouton Rfrence relative chaque fois que vous voulez
changer le type de rfrence aux cellules. Observ ez le classeur reprsent la Figure 3.3.
La colonne D contient les chif fres daffaires effectus par les reprsentants. La colonne E
doit contenir les primes.
Livre Macros excel.book Page 68 Vendredi, 3. avril 2009 7:45 07

68 Excel et VBA

Figure 3.3
La combinaison des
rfrences relatives
et absolues permettra
de calculer les primes
des reprsentants.

Pour calculer la prime, il suffit de procder comme suit

1. Se placer dans la premire cellule contenant un chiffre daffaires (D4).

2. Effectuer le calcul de la prime vous apprendrez au Chapitre 5 crer des fonction s


personnalises et les exploiter dans vos programmes VBA.

3. Se dplacer dune cellule vers la droite (E4).

4. Insrer le rsultat issu du calcul.

5. Se dplacer dune cellule vers le bas, puis dune cellule vers la gauche, afin datteindre a
cellule contenant le chiffre suivant (D5).

6. Recommencer au point 2 si la cellule slectionne contient une valeur.

Si vous souhaitez crer un programme VBA prenant en char ge ce calcul, il v ous faudra
utiliser une rfrence absolue aux cellules pour le point 1 et une rfrence relati ve aux
cellules pour les dplacements des points 3 et 5. Il v ous suffit pour cela de ous assurer
que lenre gistrement de la macro sef fectue par rfrence absolue a vant def fectuer la
slection de la cellule A4, puis de cliquer sur le bouton Rfrence relati ve, afin dact ver
lenregistrement des dplacements par rfrence relative aux cellules.

La rfr ence aux cellules (r elative ou absolue) active au moment o vous


ntion interrompez lenr egistrement dune macr o ser a aussi la rfr ence active si
Atte
vous enregistrez une nouvelle macro dans la mme session Excel (sans avoir
quitt, puis r elanc lapplication). Lor sque vous enr egistrez une macr o,
pensez toujour s vrifier que vos dplacements se ont enregistrs selon la
rfrence aux cellules souhaites avant de commencer vous dplacer dans
la feuille Excel.
Livre Macros excel.book Page 69 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 69

Coder les dplacements effectus


lors de lenregistrement dune macro
Les dplacements dans une feuille Excel sont interprts en Visual Basic comme la mani-
pulation dobjets Excel. Ces objets sont des objets Range auxquels vous accderez laide
des proprits suivantes :
Range. Renvoie un objet Range reprsentant une cellule, une plage de cellules, ou un
groupe de cellules non contigus.
Cells. Renvoie la collection Cells qui reprsente toutes les cellules du classeur actif.
Permet aussi de renvoyer une cellule ou une plage de cellules spcifie
Row. Renvoie un numro reprsentant une ligne de la feuille. La proprit Rows renvoie
un objet Range qui reprsente toutes les lignes de la feuille ou toutes les lignes dun
objet Range spcifi
Column. Renvoie un numro reprsentant une colonne de la feuille. La proprit Columns
renvoie un objet Range qui reprsente toutes les colonnes de la feuille ou toutes les
colonnes dun objet Range spcifi
ActiveCell. Renvoie un objet Range reprsentant la cellule active dune feuille de calcul.
Selection. Renvoie lobjet slectionn dans la feuille de calcul active. Si lobjet slec-
tionn est une cellule ou un groupe de cellules, lobjet ren voy est un objet Range repr-
sentant cette cellule ou ce groupe de cellules.
Offset. Renvoie un objet Range qui reprsente une plage dcale par rapport la plage
spcifie
Vous apprendrez exploiter ces objets laide des mthodes suivantes :
Select et GoTo. Slectionnent lobjet spcifi
Activate. Active lobjet spcifi. Sil sagit dun objet Range, la cellule spcifie d vient
la cellule active. Si un groupe de cellules est slectionn, la slection est maintenue.
Resize. Modifie lampleur dune plage de cellules

Rfrence absolue aux cellules


Cette section prsente le codage VBA des dplacements par rfrence absolue aux cellules.

Slection de cellules contigus


Lexpression Visual Basic pour une rfrence absolue une cellule se prsente ainsi :

Range("Adresse_Cellule").Select
Livre Macros excel.book Page 70 Vendredi, 3. avril 2009 7:45 07

70 Excel et VBA

La proprit Range indique quil sagit dun objet Range.


Largument Adresse_Cellule prcise ladresse de cet objet. Cet argument est compos
de la rfrence de colonne (une lettre) immdiatement sui vie de la rfrence de ligne
(un nombre).
La mthode Select entrane la slection de lobjet Range prcdemment dfini (ici l
cellule).
Par exemple, linstruction Visual Basic pour activer la cellule B5 de la feuille active est :
Range("B5").Select

Pour slectionner une cellule ou une plage de cellules, la feuille contenant la cellule doit
tre active. Si tel nest pas le cas, commencez par acti ver la feuille v oulue laide de la
mthode Activate. Les instructions permettant de slectionner la cellule B5 de la feuille
intitule Jan vier du classeur Ventes.xls sans quil soit ncessaire que Jan vier soit la
feuille active sont :
Workbooks("Ventes.xls").Sheets("Janvier").Activate
Range("B5").Select

Nous considrerons dans la suite de ce c hapitre que la slection sef fectue sur
Info la feuille active, et omettrons donc toute instruction destine activer la feuille
dont les cellules doivent tre slectionnes.

La proprit Cells permet aussi de coder une rfr ence absolue une cellule . La
ce proprit Cells sutilise avec la syntaxe suivante :
Astu
Cells (ligne, colonne)
o ligne est lindex de ligne et colonne lindex de colonne, tous deux exprims par
un c hiffre largument colonne pr end la valeur 1 pour la colonne A, 2 pour la
colonne B, etc. Les expressions Cells(2, 5).Select et Range("E2").Select sont
donc strictement quivalentes. Lor sque vous enr egistrez un dplacement par rf-
rence absolue aux cellules, ce dplacement est toujour s cod laide de la proprit
Range. La proprit Cells offre lavantage de pouvoir faire rfrence des cellules
laide de variables numriques les variables sont traites au Chapitre 6.

Lorsque vous slectionnez une plage de cellules, le code Visual Basic gnr se prsente ainsi :
Range("Cell1:Cell2").Select
Range("Cell_Active").Activate

o Cell1 et Cell2 reprsentent respectivement la cellule situe langle suprieur gauche


de la plage et la cellule situe langle infrieur droit de la plage de cellules slectionne.
Livre Macros excel.book Page 71 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 71

Dans lexpression Range("Cell_Active").Activate, largument Cell_Active indique la


cellule active dans la plage slectionne. Dans Excel, cette cellule nest pas noircie et
correspond la cellule partir de laquelle la slection a t tendue. Si v ous saisissez du
texte au clavier, il sera insr dans cette cellule.
Par exemple, lexpression Visual Basic :

Range("B5:D10").Select
Range("D5").Activate

revient slectionner une plage dont les cellules situes aux angles suprieur g auche et
infrieur droit sont respectivement B5 et D10. Cette slection a t effectue en partant de
la cellule D5 et en tendant la slection jusqu la cellule B10, si bien que la cellule active
de la slection est la cellule D5 (voir Figure 3.4).

Figure 3.4
La cellule active
est la cellule D5.

Slection de cellules non contigus


Vous pouvez slectionner des cellules non contigus dans une feuille Excel en maintenant
la touche Ctrl enfonce. La syntax e de la proprit Range lors de la slection de cellules
non contigus est la suivante :

Range("Cell1, Cell2,..., Celln").Select


Range("Cell_Active").Activate

o les ar guments Cell1, Cell2, ..., Celln reprsentent les cellules successi vement
slectionnes. Lexpression Range("Cell_Active").Activate a le mme rle que lors de
la slection dune plage de cellules (indique la cellule acti ve de la slection). L argument
Cell_Active reprsente la dernire cellule slectionne.
Par exemple, lexpression Visual Basic :

Range("B5, D10, F2, A3").Select


Range("A3").Activate
Livre Macros excel.book Page 72 Vendredi, 3. avril 2009 7:45 07

72 Excel et VBA

revient slectionner successi vement les cellules B5, D10, F2 et A3 en maintenant la


touche Ctrl enfonce.

Slection de lignes et de colonnes


Lorsque v ous slectionnez une colonne dans une feuille Excel, lEnre gistreur de
macro code cette slection laide de la proprit Columns. Dans le cas dune ligne,
cest la proprit Rows qui sera utilise. Ces proprits ren voient toutes deux des
objets Range, de type colonne, pour la proprit Columns, et de type ligne, pour la
proprit Rows.

Pour slectionner une colonne ou une ligne dans une feuille Excel, cliquez sur
pel len-tte de la ligne ou de la colonne que vous souhaitez slectionner , ou utili-
Rap
sez lun des raccourcis clavier prsents dans le Tableau 3.1. Pour slectionner
des colonnes ou des lignes contigus, slectionnez la pr emire ligne/colonne,
puis enfoncez la touche Maj et cliquez sur la dernire ligne/colonne de la plage
que vous souhaitez slectionner.

Lignes contigus

La syntaxe de la proprit Rows est la suivante :

Rows("ligne1:ligne2").Select
Range("cell_active").Activate

o les arguments ligne1 et ligne2 reprsentent respectivement lindex de la premire et


lindex de la dernire ligne de la plage slectionne. La mthode Select slectionne
lobjet Range dfini par la proprit Rows.
Dans le xpression Range("cell_active").Activate, cell_active reprsente ladresse
de la cellule acti ve dans la plage slectionne. Cette e xpression est omise si la cellule
active est la cellule situe langle suprieur gauche de la plage slectionne.

Lorsque vous slectionnez une plage de lignes dans une feuille Excel, la cellule
Info active est la premire cellule de la ligne que vous slectionnez. Par exemple, si,
lors de lenregistrement dune macro, vous slectionnez la ligne 5, puis mainte-
nez la touc he Maj enfonce et slectionnez la ligne 10, cest la cellule A5
(situe langle suprieur gauche de la plage) qui sera active. En revanche, si
vous slectionnez la ligne 10, puis la ligne 5, en maintenant la touc he Maj
enfonce, cest la cellule A10 qui sera active.
Livre Macros excel.book Page 73 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 73

Si la slection ne porte que sur une ligne, les ar guments ligne1 et ligne2 ont la mme
valeur et le xpression Range("cell_active").Activate est omise. P ar exemple, si v ous
enregistrez dans une macro la slection de la ligne 5 de la feuille acti ve, le code Visual
Basic correspondant se prsentera ainsi :

Rows("5:5").Select

Figure 3.5
Lorsquune seule ligne
est slectionne, le code
ne spcifie pas de cellule
active.

Si v ous slectionnez les lignes 5 10 (en slectionnant la ligne 5 en premier , puis la


ligne 10, tout en maintenant la touche Maj enfonce), le code Visual Basic correspondant se
prsentera ainsi :

Rows("5:10").Select

Si vous slectionnez la mme plage, mais en slectionnant dabord la ligne 10, le code
Visual Basic correspondant se prsentera ainsi :

Rows("5:10").Select
Range("A10").Activate

Figure 3.6
La cellule A10
est la cellule active.

Lorsque v ous slectionnez une ligne, par df aut, la premire cellule de la ligne est la
cellule active. Si vous modifiez la cellule act ve dans ou hors de la plage slectionne
Livre Macros excel.book Page 74 Vendredi, 3. avril 2009 7:45 07

74 Excel et VBA

en maintenant la touche Ctrl enfonce et en cliquant sur la cellule que vous souhaitez acti-
ver, la proprit Range se substitue la proprit Rows. Votre code se prsente alors ainsi :
Range("ligne1:ligne2, cell_active").Select
Range("cell_active").Activate

o largument cell_active reprsente ladresse de la cellule acti ve. Par exemple, si vous
slectionnez la ligne 14, puis maintenez la touche enfonce et cliquez sur la cellule B14
lors de lenre gistrement dune macro, le code Visual Basic correspondant se prsentera
ainsi :
Range("14:14,B14").Select
Range("B14").Activate

Figure 3.7
La cellule B14
est la cellule active.

Colonnes contigus
La syntaxe de la proprit Columns est la mme que celle de la proprit Rows:
Columns("col1:col2").Select
Range("cell_active").Activate

o les ar guments col1 et col2 reprsentent respecti vement linde x de la premire et


lindex de la dernire colonne de la plage slectionne. La mthode Select slectionne
lobjet Range dfini par la proprit Columns.
Dans le xpression Range("cell_active").Activate, cell_active reprsente ladresse
de la cellule acti ve dans la plage slectionne. Cette e xpression est omise si la cellule
active est la cellule situe langle suprieur gauche de la plage slectionne.
Si la slection ne porte que sur une colonne, les ar guments col1 et col2 ont la mme
valeur et le xpression Range("cell_active").Activate est omise. P ar exemple, si v ous
enregistrez dans une macro la slection de la colonne B de la feuille acti ve, le code Visual
Basic correspondant se prsentera ainsi :
Columns("B:B").Select
Livre Macros excel.book Page 75 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 75

Si vous slectionnez les colonnes B E (en slectionnant la colonne B, puis la colonne E,


tout en maintenant la touche Maj enfonce), le code Visual Basic correspondant se prsen-
tera ainsi :
Columns("B:E").Select

Si vous slectionnez la mme plage, mais en commenant par slectionner la colonne E, le


code Visual Basic correspondant se prsentera ainsi :
Columns("B:E").Select
Range("E1").Activate

Lorsque vous slectionnez une colonne, par dfaut, la premire cellule de la colonne est la
cellule acti ve. Si v ous modifiez la cellule act ve dans ou hors de la plage slection-
ne en maintenant la touche Ctrl enfonce et en cliquant sur la cellule que vous souhai-
tez activer, la proprit Range se substitue la proprit Columns. Votre code se prsente
alors ainsi :
Range("col1:col2, cell_active").Select
Range("cell_active").Activate

o lar gument cell_active reprsente ladresse de la cellule acti ve. P ar e xemple, si


vous slectionnez la colonne E, puis maintenez la touche Ctrl enfonce et cliquez sur la
cellule E5 lors de lenre gistrement dune macro, le code Visual Basic correspondant se
prsentera ainsi :
Range("E:E,E5").Select
Range("E5").Activate

Figure 3.8
La cellule E5
est la cellule active.

Vous pouvez substituer la pr oprit Range aux pr oprits Rows et Columns


Info dans le code de votr e macr o, en conservant les mmes ar guments. P ar
exemple, les e xpressions Visual Basic Range("5:10").Select et
Rows("5:10").Select correspondent toutes deux la slection des lignes 5
Livre Macros excel.book Page 76 Vendredi, 3. avril 2009 7:45 07

76 Excel et VBA

10 de la feuille active . Lors de lenregistrement de macros, les slections


sont codes diffremment de faon faciliter la lecture du code.

Lignes et colonnes non contigus


Lorsque vous slectionnez des lignes ou des colonnes non contigus dune feuille Excel
lors de lenre gistrement dune macro en maintenant la touche Ctrl enfonce , la
proprit Range est utilise. La syntaxe se prsente alors ainsi :
Range("item1:item2, item3:item4,..., item-n:item-n+1").Select
Range("cell_active").Activate

les arguments item reprsentent les index des lignes ou colonnes slectionnes. Ces ar gu-
ments vont par paires, chaque paire reprsentant une plage de lignes ou de colonnes conti-
gus slectionnes le signe : est utilis comme sparateur . Les ar guments item dune
paire peuvent avoir une mme valeur.
Si, par exemple, vous slectionnez les colonnes A, C E et G et que la cellule active est la
cellule G1, la syntaxe Visual Basic reprsentant cette slection se prsentera ainsi :
Range("A:A,C:E,G:G").Select
Range("G1").Activate

Figure 3.9
Vous pouvez conjuguer
la slection de colonnes
adjacentes et de colonnes
non contigus.

Si, lor s de lenr egistrement dune macr o, vous slectionnez successivement des
Info lignes ou des colonnes contigus en maintenant la touc he Ctrl enfonce , plutt
que dutiliser la touche Maj, ces slections seront considres comme autonomes
et codes comme si les lignes ou les colonnes ntaient pas contigus.
Par e xemple, si vous cliquez sur len-tte de la colonne A, appuyez sur la
touche Ctrl et, tout en la maintenant enfonce cliquez successivement sur les
en-ttes des colonnes B, C et E, le code Visual Basic correspondant se prsen-
tera ainsi :
Range("A:A,B:B,C:C,E:E").Select
Range("C1").Activate
Livre Macros excel.book Page 77 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 77

Vous pouvez ef fectuer la mme slection en utilisant la touc he Maj. Cliquez sur
len-tte de la colonne A, puis appuyez sur la touc he Maj et, tout en la maintenant
enfonce, appuyez sur len-tte de la colonne C. Relc hez ensuite la touche Maj et
appuyez sur la touc he Ctrl pour cliquer sur la colonne E. Le code Visual Basic
correspondant se prsente alors ainsi :
Range("A:C,E:E").Select
Range("C1").Activate

Vous pouvez, en utilisant les mmes mthodes de slection, dfinir une plage compose d
lignes et de colonnes, contigus ou non. P ar exemple, si v ous slectionnez ( laide des
touches Maj et Ctrl) les colonnes C E, la colonne G, les lignes 4 6 et la ligne 8 comme
indiqu la Figure 3.10, le code de votre macro se prsentera ainsi :

Range("C:E,G:G,4:6,8:8").Select
Range("A8").Activate

Figure 3.10
Vous pouvez conjuguer la
slection de colonnes et de
lignes, contigus ou non.

Enfin, ous pouvez conjuguer la slection de lignes, colonnes et cellules contigus ou non.
Le code suivant indique la mme slection que dans le xemple prcdent, laquelle on a
ajout la slection des cellules A2 F2 et de la cellule B13.

Range("C:E,G:G,4:6,8:8,A2:F2,B13").Select
Range("B13").Activate

Rfrence relative aux cellules


Le codage Visual Basic des dplacements dans Excel par rfrence relati ve aux cellules
rpond aux mmes principes que le codage du dplacement par rfrence absolue aux
cellules. Cette section prsente donc de f aon sommaire les spcificits du dplacemen
par rfrence relative aux cellules.
Livre Macros excel.book Page 78 Vendredi, 3. avril 2009 7:45 07

78 Excel et VBA

Slection de cellules contigus


Lexpression Visual Basic pour une rfrence relative une cellule se prsente ainsi :

ActiveCell.Offset(RowOffset, ColumnOffset).Range("A1").Select

La proprit ActiveCell renvoie un objet Range qui reprsente la cellule active.


La proprit Offset renvoie un objet Range (cellule ou plage de cellules), fonction des
arguments nomms RowOffset et ColumnOffset. Ceux-ci indiquent (en nombre de
lignes et de colonnes) le dcalage effectuer partir de la cellule active pour atteindre
ladresse de cet objet.
Ces arguments prennent une v aleur numrique ngative si le dplacement sef fectue
vers le haut (RowOffset) ou vers la gauche (ColumnOffset).
La proprit Range("A1") prcise quil sagit dun dplacement de style A1. Autre-
ment dit, la cellule acti ve sert de rfrence et est virtuellement considre comme la
cellule A1. Bien que toujours prcise lors de lenre gistrement dune macro, cette
proprit est facultative et vous pouvez la supprimer du code de la macro.
La mthode Select entrane la slection de lobjet (ici la cellule) prcdemment dfini
Par exemple, lexpression Visual Basic ActiveCell.Offset(3, 2).Select entranera la
slection de la cellule situe trois lignes au-dessous et deux colonnes droite de la cellule
active.
Lexpression ActiveCell.Offset(-3, -2).Select entranera la slection de la cellule
situe trois lignes au-dessus et deux colonnes gauche de la cellule active.
Lorsque vous slectionnez une plage de cellules, le code Visual Basic gnr se prsente
ainsi :

ActiveCell.Offset(RowOffset, ColumnOffset).Range("A1:Cell2").Select

o Offset(RowOffset, ColumnOffset) indique le dplacement ef fectuer relative-ment


la cellule acti ve et A1:Cell2 reprsente la plage de cellules slectionnes en estimant
que la cellule active est A1.
Par exemple, lexpression Visual Basic

ActiveCell.Offset(-3, 0).Range("A1:A4").Select

revient tendre la slection de la cellule acti ve jusqu la cellule situe trois lignes au-
dessus. On obtient alors une slection qui valente la slection A1:A4 (il peut sagir de
B1:B4, C5:C8, etc.)
Livre Macros excel.book Page 79 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 79

Slection de cellules non contigus


Vous pouvez slectionner des cellules non contigus dans une feuille Excel en maintenant
la touche Ctrl enfonce. La syntax e de la proprit Range lors de la slection de cellules
non contigus est la suivante :
ActiveCell.Range("A1, Cell2,..., Celln").Select

o A1 reprsente la cellule acti ve et les ar guments Cell2,..., Celln reprsentent les


adresses des cellules successi vement slectionnes, par position relati ve la cellule
initiale. Largument Cell_Active reprsente la dernire cellule slectionne.

Lors de dplacements par rfr ence r elative aux cellules, le cod age Visual
Info Basic se fait par style de rfr ence A1 ; cela signifie que lad esse virtuelle
A1 est toujours attribue la cellule active , ce qui permet de r eprsenter les
dplacements et slections dautr es cellules par r apport cette adr esse
virtuelle.

Par exemple, lexpression Visual Basic


ActiveCell.Range("A1,A7,C7,C1").Select
ActiveCell.Offset(0, 2).Range("A1").Activate

indique que la macro slectionnera simultanment la cellule active (virtuellement A1) et


les cellules dont les adresses virtuelles (en style de rfrence A1) sont A7, C7, C1. L a
cellule acti ve sera la cellule situe deux colonnes droite Offset(0, 2) de la
cellule initialement active (virtuellement C1).
Si la cellule active au moment de lexcution de la macro est la cellule B5, les cellules B5,
B11, D11 et D5 seront slectionnes. La cellule D5 sera la cellule active.
Pour bien comprendre ce principe, gardez lesprit que ce qui fait la relativit du dplace-
ment est le repre dorigine. Les adresses des cellules sont dtermines par ladresse de la
cellule servant de repre.

Redimensionner une plage


Pour modifier lampleur dune plage de cellules, utilisez la mthode Resize selon la
syntaxe suivante :
expression.Resize(RowSize, ColumnSize)

o expression ren voie lobjet Range redimensionner . RowSize et ColumnSize son t


facultatifs et ren voient respectivement le nombre de lignes et le nombre de colonnes qui
Livre Macros excel.book Page 80 Vendredi, 3. avril 2009 7:45 07

80 Excel et VBA

doivent tre ajoutes (valeurs positives) ou retires (valeurs ngatives) la slection. Si


lun ou lautre de ces arguments est omis, il prend la valeur par dfaut de 0 et la dimension
correspondante nest pas modifie
Linstruction suivante tend la slection en cours dune ligne et dune colonne suppl-
mentaires. Elle utilise pour cela la proprit Count qui, applique la collection Rows,
renvoie le nombre de lignes et, applique la collection Columns, renvoie le nombre de
colonnes.

Selection.Resize(Selection.Rows.Count + 1,
Selection.Columns.Count + 1).Select

Rfrence aux cellules fonction de leur contenu


Vous pouvez effectuer ou modifier une slection fonction du contenu des cellules. Il ser
ainsi utile dtendre la slection lensemble des cellules non vides dun tableau a vant
deffectuer un tri ou didentifier la premire cellule vide dans une colonne afin dy insr du
contenu. VBA propose pour cela les proprits suivantes :
CurrentRegion retourne la plage de cellules courante (les cellules contigus qui
contiennent des donnes).
End permet didentifier les cellules vides dans une plage de cellules
UsedRange retourne une plage compose des cellules dune feuille contenant des
donnes.

La proprit CurrentRegion
Pour tendre la slection la zone courante, cest--dire la zone entoure par une combi-
naison de lignes et de colonnes vides, v ous utiliserez la proprit CurrentRegion selon la
syntaxe suivante :

Range.CurrentRegion.Select

o Range est une e xpression qui ren voie un objet Range. Considrez les deux instructions
suivantes :

ActiveCell.CurrentRegion.Select
Range("C8").CurrentRegion.Select

La premire instruction tend la slection la zone courante partir de la cellule acti ve,
tandis que la seconde procde de mme, mais partir de la cellule C8.
Livre Macros excel.book Page 81 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 81

A la Figure 3.11, la slection a t tendue la zone courante partir de la cellule C8.

Figure 3.11
La proprit CurrentRegion permet de "capturer" une zone contenant des donnes partir dune cellule.

La proprit End
La proprit End renvoie un objet Range qui reprsente la dernire cellule dune zone. Cela
revient employer dans un tableau Excel la combinaison clavier Fin + flche de direction
Utilisez la proprit End selon la syntaxe suivante :
Range.End(Direction)

o Range renvoie lobjet Range partir duquel on recherche la dernire cellule, et o


Direction reprsente le sens dans lequel on se dplace. Il peut sagir de lune des constantes
xlDirection suivantes :
xlDown: dplacement vers le bas.
xlToRight: dplacement vers la droite.
xlToLeft: dplacement vers la gauche.
Livre Macros excel.book Page 82 Vendredi, 3. avril 2009 7:45 07

82 Excel et VBA

xlUp: dplacement vers le haut.


Appliques au tableau de la Figure 3.11, les quatre instructions sui vantes ren voient
respectivement lobjet Range reprsentant les cellules E4, E12, C8 et H8.

Range("E8").End(xlUp).select renvoie la cellule E4


Range("E8").End(xlDown).select renvoie la cellule E12
Range("E8").End(xlToLeft).select renvoie la cellule C8
Range("E8").End(xlToRight).select renvoie la cellule H8

Vous pouvez videmment utiliser la proprit End pour slectionner des plages de cellules,
comme nous lavons vu prcdemment dans ce chapitre. Considrez les exemples suivants.
Slection dune plage de la premire la dernire cellule non vide dune colonne :

Range("A1", Range("A1").End(xlDown)).Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select

Slection dune plage de la dernire cellule non vide jusqu la premire :

Range("A32", Range("A32").End(xlUp)).Select
Range(ActiveCell, ActiveCell.End(xlUp)).Select

Si vous souhaitez slectionner la premire cellule vide dune zone plutt que la dernire
cellule non vide, utilisez la proprit Offset pour dcaler la slection. La premire
instruction, ci-aprs, slectionne la premire cellule vide au bas de la colonne, tandis que
la seconde slectionne la premire cellule vide droite :

Range("A1").End(xlDown).Offset(1, 0).Select
Range("A1").End(xltoRight).Offset(1, 0).Select

La proprit UsedRange
La proprit UsedRange retourne la plage de cellules contenant les donnes dune feuille.
Cette proprit est donc particulirement pratique pour identifier les cellules sur lesquel
les doi vent sappliquer des traitements lors de le xcution dun programme. La plage
retourne par UsedRange est une plage de cellules contigus dont les limites sont dfinie
par :
la cellule dont lindex de colonne est le plus lev ;
la cellule dont lindex de colonne est le plus faible ;
la cellule dont lindex de ligne est le plus lev ;
la cellule dont lindex de ligne est le plus faible.
Livre Macros excel.book Page 83 Vendredi, 3. avril 2009 7:45 07

Chapitre 3 Dplacement et slection dans une macro Excel 83

Figure 3.12
La proprit UsedRange retourne une plage qui englobe toutes les cellules contenant des donnes.

Linstruction suivante slectionne la plage de cellules utilise sur la feuille acti ve du classeur
actif :

ActiveWorkbook.ActiveSheet.UsedRange.Select

Rfrence aux plages de cellules nommes


Pour faire rfrence une plage de cellules nomme dans Excel, utilisez la syntaxe suivante :

Range("[NomClasseur]NomFeuille!NomPlage")

o NomClasseur est le nom du classeur , et NomFeuille celui de la feuille qui contient la


plage nomme NomPlage.
Livre Macros excel.book Page 84 Vendredi, 3. avril 2009 7:45 07

84 Excel et VBA

Lexemple suivant passe en gras les cellules de la plage nomme MaPlage, situe sur la
feuille Feuil1 du classeur Test.xls :
Range("[Test.xls]Feuil1!MaPlage").Font.Bold = True

Pour slectionner une plage nomme, utilisez la mthode GoTo qui active successivement
le classeur et la feuille si ncessaire, puis slectionne la plage v oulue. Les deux
instructions sui vantes slectionnent la plage nomme MaPlage, puis en ef facent le
contenu :
Application.Goto Reference:="[Test.xls]Feuil1!MaPlage"
Selection.ClearContents
Livre Macros excel.book Page 85 Vendredi, 3. avril 2009 7:45 07

4
Dcouvrir Visual Basic
Editor
Au sommaire de ce chapitre
Accder Visual Basic Editor
Les outils et les fentres de Visual Basic Editor
Paramtrer Visual Basic Editor
Livre Macros excel.book Page 86 Vendredi, 3. avril 2009 7:45 07

86 Excel et VBA

Visual Basic Editor est lenvironnement de dveloppement intgr de VBA. Cest dans
cet environnement que vous passerez lessentiel de votre temps lors du dveloppement
de projets VBA. Les chapitres prcdents v ous ont f ait dcouvrir la fentre Code de
Visual Basic Editor tra vers la modification et la cration de macros. Mais Visual
Basic Editor ne se rsume pas un simple diteur de code. Il sagit dun logiciel
complet, proposant des outils daide au dveloppement que ce chapitre vous propose de
dcouvrir.

Accder Visual Basic Editor


Lorsque vous choisissez de modifier une macro xistante ou de crer une nouvelle macro,
selon les procdures tudies au Chapitre 2, v ous accdez la fentre Code de Visual
Basic Editor . Vous pouv ez aussi dv elopper un projet VBA en accdant directement
Visual Basic Editor, sans passer par la bote de dialogue Macro.
On accde toujours Visual Basic Editor partir dune application hte. Autrement dit,
une session Visual Basic Editor peut tre lie Word, Po werPoint ou encore Excel,
mais ne permet daccder quaux projets de lapplication partir de laquelle il a t
excut.

Lorsque vous tes dans Visual Basic Editor, vous pouvez accder lensemble
Info des lments constitutifs des projets accessibles, y compris aux macros disponibles
dans la bote de dialogue Macro.

Pour quun projet soit accessible dans Visual Basic Editor, il faut que le document
ntion dans lequel il est stock soit ouvert dans lapplication hte.
Atte

Pour accder Visual Basic Editor partir dExcel 2007, activez longlet Dveloppeur du
ruban, puis slectionnez Visual BasicOutils, Macro, Visual Basic Editor , ou tapez le
raccourci clavier Alt + F11.
Pour accder Visual Basic Editor partir dune version dExcel antrieure 2007, slec-
tionnez Outils, Macro, Visual Basic Editor, ou tapez le raccourci cla vier Alt + F11. Vous
pouvez galement accder Visual Basic Editor partir du bouton Visual Basic Editor de
la barre doutils Visual Basic, si celle-ci est affiche
La Figure 4.3 prsente la fentre de Visual Basic Editor. Il se peut que, sur v otre ordina-
teur, la fentre ne prsente pas les mmes lments. Vous verrez par la suite comment affiche
les diffrents composants de Visual Basic Editor.
Livre Macros excel.book Page 87 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 87

Figure 4.1
Nouvelle interface dOffice 2007 obli e, laccs Visual Basic Editor se fait via le ruban.

Figure 4.2
Pour accder Visual Basic
Editor partir dune version
dExcel antrieure 2007,
slectionnez la commande...
Visual Basic Editor !

Figure 4.3
La fentre de Visual Basic Editor.
Livre Macros excel.book Page 88 Vendredi, 3. avril 2009 7:45 07

88 Excel et VBA

Dans bien des cas, lenregistrement de macros reste la mthode la plus rapide et la
eil plus sre pour dmarrer vos projets VBA. En laissant lEnregistreur de macro le
Cons soin de convertir les actions excutes en code Visual Basic, vous tes assur de ne
pas commettre derreur de saisie.
Il se peut cependant que la pr emire tape de dveloppement de votr e pr ojet
consiste crer une feuille permettant une interaction avec lutilisateur. Vous acc-
derez alors directement Visual Basic Editor, sans passer par la bote de dialo gue
Macro.

Pour quitter Visual Basic Editor et retourner lapplication hte, vous pouvez :
ouvrir le menu Fichier , slectionner la commande Fermer et retourner Microsoft
Excel ;
taper le raccourci clavier Alt + Q ;
cliquer sur la case de fermeture de Visual Basic Editor (situe lextrmit suprieure
droite de la fentre).
Pour retourner lapplication hte sans quitter Visual Basic Editor, vous pouvez :
cliquer sur licne Affichage Microsoft Excel, situe l xtrme g auche de la barre
doutils Standard ;
taper le raccourci clavier Alt + F11.

Les outils et les fentres de Visual Basic Editor


Cette section prsente sommairement les lments essentiels de linterface de Visual Basic
Editor. Vous en dcouvrirez plus prcisment les fonctionnalits au fur et mesure que
vous avancerez dans la lecture de louvrage.
Les lments essentiels de linterface de Visual Basic Editor sont :
LExplorateur de pr ojet. Il permet de visualiser les dif frents projets et lments
constitutifs qui les composent objets, modules, modules de classe, feuilles (ou
formulaires) et Rfrence , et daccder ces lments ou au code qui leur est atta-
ch. Pour quun projet apparaisse dans lExplorateur de projet, il faut que le document
auquel il est attach soit ouvert dans lapplication hte.
La fentr e Pr oprits. Elle permet de visualiser et de modifier lensemble de
proprits associes aux objets constitutifs dun projet.
Livre Macros excel.book Page 89 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 89

La fentr e Code. Vous pouv ez y diter le code de v os projets. Visual Basic Editor
propose des aides lcriture de code et des outils de dbogage.
La fentre UserF orm et la bote outils. La fentre UserF orm est lespace dans
lequel v ous conce vez les feuilles VBA. La bote outils propose des contrles
communs tels que des cases cocher ou des zones de listes droulantes que v ous
pouvez placer sur une feuille qui constituera une interface pour votre application.
LExplorateur dobjets. Il rfrence les classes, proprits, mthodes, vnements et
constantes disponibles dans les bibliothques dobjets et les procdures de votre projet.
Il permet de rechercher et dutiliser des objets que v ous crez, ainsi que des objets
provenant dautres applications.

Figure 4.4 Explorateur Fentre Fentre


Visual Basic Editor. de projet Code Proprits

Explorateur Bote Fentre


d'objets outils UserForm

LExplorateur de projet
LExplorateur de projet permet dexplorer les diffrents projets chargs dans lapplication
hte et les lments qui les composent. A partir de lExplorateur de projet, v ous pouvez
Livre Macros excel.book Page 90 Vendredi, 3. avril 2009 7:45 07

90 Excel et VBA

accder nimporte quel lment constitutif dun projet, y ajouter de nouv eaux lments
ou, au contraire, en supprimer.

Afficher et masquer lExplorateur de projet


Pour afficher lExplorateur de projet, ous pouvez :

choisir la commande Explorateur de projet du menu Affichage

taper le raccourci clavier Ctrl + R ;

cliquer sur le bouton Explorateur de projet de la barre doutils Standard de Visual


Basic Editor.

Pour masquer lExplorateur de projet, vous pouvez :

faire un clic droit dans sa fentre et slectionner la commande Masquer du menu


contextuel qui saffiche

faire un clic droit sur sa barre de titre et slectionner la commande Fermeture ;

taper le raccourci clavier Alt + F4 ;

cliquer sur la case de fermeture de la fentre.

Figure 4.5
LExplorateur de projet
permet daccder aisment
aux diffrents lments
constitutifs dun projet.
Livre Macros excel.book Page 91 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 91

Figure 4.6
Le menu contextuel de
lExplorateur de projet.

Naviguer dans lExplorateur de projet


A linstar de lExplorateur de Windows 95, lExplorateur de projet prsente les dif frents
projets et leurs lments constitutifs de faon hirarchique. Au premier niveau de lExplo-
rateur, apparaissent les dif frents projets. Sous chaque projet se trouv ent des dossiers
contenant chacun des lments spcifiques

Le dossier Micr osoft Excel Objets. Contient les documents associs au projet.
Il sagit du classeur dans lequel est stock le projet, et de ses feuilles de calcul. Vous
verrez au Chapitre 15 que v ous pouv ez associer des procdures spcifiques ce
objets de faon contrler les interventions dun utilisateur sur un classeur.

Le dossier Feuilles. Contient les feuilles (ou formulaires) du projet. Vous apprendrez
crer des feuilles aux Chapitres 12 14.

Le dossier Modules. Contient les modules standard (ou modules de code) tels que
les macros constitutifs dun projet.

Le dossier Modules de classe. Contient les ventuels modules de classe dun projet.

Le dossier Rfrences. Contient les rfrences dautres projets.

ntion Si un pr ojet ne contient aucun module ou module de classe , les dossier s


Atte correspondants nappar atront pas sous le pr ojet dans lExplor ateur de
projet.
Livre Macros excel.book Page 92 Vendredi, 3. avril 2009 7:45 07

92 Excel et VBA

Lorsque vous enr egistrez ou crez une macr o, elle est enr egistre dans un
Info nouveau module accessible via le dossier Modules du pr ojet correspondant.
Le nom de ce module est Module1, Module2 si Module1 existe dj, etc.

Le signe plus (+) permet de dv elopper larborescence dun dossier ou dun projet, et le
signe moins () de la rduire. A la Figure 4.6, larborescence du dossier Feuilles du projet
PERSO.XLS est dv eloppe, tandis que les autres dossiers ainsi que le projet Chif fres-
Representants.xls sont rduits.
Plutt quun af fichage par dossie , les lments constitutifs dun projet peuv ent tre
prsents par ordre alphabtique dans lExplorateur de projet. Cliquez simplement sur le
bouton Basculer dossiers de lExplorateur de projet. La Figure 4.7 prsente lExplorateur
de projet aprs masquage des dossiers. Pour re venir un affichage par dossie , cliquez de
nouveau sur ce bouton.

Figure 4.7
Lorsque laffi hage des
dossiers est dsactiv,
les icnes permettent de
distinguer les lments Modules de code
du projet.

Feuilles

Rfrence

Accder aux objets et au code des projets


Outre le bouton Basculer dossiers, lExplorateur de projet prsente deux boutons
permettant un accs simple et rapide au code et aux objets constitutifs dun projet :

Afficher le code Affiche le code de llment slectionn dans lExplorateur de projet


afin den permettre lcriture ou la modification.

Afficher lobjet Affiche lobjet slectionn dans lExplorateur de projet.


Il peut sagir dune feuille (dossier UserForm) ou dun document. Ce
bouton est dsactiv si lobjet slectionn est un module de code.
Livre Macros excel.book Page 93 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 93

LExplorateur dobjets
Lorsquon commence dv elopper en VBA, la difficult essentielle consiste manipule
les objets de lapplication hte (dans notre cas les objets Excel). Comment, par e xemple,
accder une plage de cellules dune feuille spcifique dun classeur Excel et y insre
une formule ? L Enregistreur de macros est dans de nombreux cas la solution ce
problme. Vous manipulez les objets Excel aprs avoir activ lEnregistreur de macro, puis
vous visualisez dans Visual Basic Editor les mots cls Visual Basic utiliss pour accder
aux objets, leurs proprits et leurs mthodes.
Cependant, certains lments de code dun programme VBA ne peuv ent tre gnrs
laide de lEnre gistreur de macro et ne peuv ent qutre saisis dans la fentre Code du
programme. Vous de vez alors connatre la position de lobjet auquel v ous souhaitez
accder dans la hirarchie de classes de lapplication. Vous de vez aussi connatre les
mthodes et proprits associes cet objet pour pouv oir le manipuler ou en e xtraire des
informations.

Les chapitres prcdents vous ont initi la syntaxe VBA permettant daccder un objet.
Pour autant, lorsque v ous commencerez dv elopper dans Visual Basic Editor , vous ne
connatrez pas toujours le chemin emprunter pour accder tel ou tel objet, ni la
mthode lui appliquer pour ef fectuer telle ou telle opration. LExplorateur dobjets
constitue pour cela une aide trs apprciable pour le dv eloppeur. L Explorateur
dobjets recense en effet lensemble des objets disponibles dans les bibliothques dobjets
accessibles pour un projet, ainsi que les proprits, constantes, mthodes et vnements
associs ces objets. Il constitue en cela un trs supplment laide de Visual Basic pour
Applications.

Une bibliothque dobjets est un fi hier contenant toutes les donnes


ition dobjets (leur s pr oprits, mthodes, vnements, constantes, etc.). Ce
Dfin
fi hier porte le xtension .OLB et cest lui que se rfr e Visual Basic lor s-
que vous manipulez des objets Excel. Le nom de fi hier de la bibliothque
dobjets dExcel ainsi que son emplacement varient dune ver sion lautre.
Pour le localiser, effectuez une recherche sur *.olb.

Lorsque vous recherchez un objet ou souhaitez en connatre les membres cest ainsi
que lon nomme les lments Visual Basic (mthodes, proprits, vnements, constan-
tes) associs un objet , lExplorateur dobjets v ous fournit une documentation
complte. Il permet daccder au modle dobjets de lapplication hte, mais aussi aux
objets dautres applications et aux objets, procdures et constantes que v ous avez crs
dans le cadre de v otre projet, ainsi quaux rubriques daide associes chacun de ces
lments.
Livre Macros excel.book Page 94 Vendredi, 3. avril 2009 7:45 07

94 Excel et VBA

Afficher et masquer lExplorateur dobjets


Pour afficher lExplorateur dobjets, ous pouvez :
slectionner la commande Explorateur dobjets du menu Affichage
taper le raccourci clavier F2 ;
cliquer sur le bouton Explorateur dobjets de la barre doutils Standard de Visual Basic
Editor.

Figure 4.8 Liste droulante Liste droulante


LExplorateur dobjets Rechercher un texte Projet/Bibliothque
permet dexplorer
lensemble des objets
disponibles pour un
projet.

Liste
Classes
Liste Membres

Zone
Dtails

Pour masquer lExplorateur dobjets, vous pouvez :


faire un clic droit dans sa fentre et slectionner la commande Masquer du menu
contextuel qui saffiche
cliquer sur licne situe g auche de la barre de titre et slectionner la commande
Fermeture ;
cliquer sur la case de fermeture de la fentre.

Naviguer dans lExplorateur dobjets


Sil peut effrayer le programmeur novice, lExplorateur dobjets est en ralit dune utili-
sation simple et intuitive. Cette section en prsente lutilisation.

La zone de liste Projet/Bibliothque


La zone de liste droulante Projet/Bibliothque permet de slectionner le projet ou la
bibliothque dobjets de v otre choix. Le Tableau 4.1 prsente les bibliothques les plus
courantes accessibles dans lExplorateur dobjets.
Livre Macros excel.book Page 95 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 95

Tableau 4.1 : Les bibliothques de lExplorateur dobjets

Bibliothque Description

<Toutes bibliothques> Lorsque cette option est slectionne, les objets sont affichs, toutes
bibliothques confondues.

MSForms Contient les objets accessibles dans la fentre UserForm, tels que les
boutons doptions, cases cocher, zones de liste, etc.

Office Contient les objets Microsoft Office. Il sagit des objets


communs aux applications Office, tels que lobjet Balloon reprsentant linfo-
bulle dans laquelle le Compagnon Office affiche les informations.

VBA Il sagit de la bibliothque Visual Basic pour Applications.


Les objets y sont classs par thme. Par exemple, le module Information
contient les procdures permettant de renvoyer et de vrifier des
informations, le module String contient les procdures permettant
deffectuer des oprations sur des chanes.

Excel Contient les objets dExcel.

Autres applications Contient les objets des autres applications rfrences


dans votre projet. Rfrencer une autre application permet daccder aux
objets de cette application partir dExcel.
Vous verrez au Chapitre 6 comment crer une rfrence la bibliothque
dobjets dune autre application, et comment manipuler des objets de cette
dernire.

Projets Affiche les objets propres au projet, tels que les feuilles,
les modules de classe et les modules de code que vous avez crs.

Les zones Classes et Membres de


Lorsque vous slectionnez une bibliothque dans la zone de liste Bibliothque/Projet, la
zone Classes affiche lensemble des classes disponibles dans cette bibliothque. Les classe
sont af fiches par type et par ordre alphabtique au sein de chaque type. Chaque typ
de classe (feuille, module de code, module de classe) est symbolis par une icne. Lors-
quune classe contient du code rdig par lutilisateur, son nom apparat en gras (voir Figure 4.9).
Pour explorer les membres dune classe, slectionnez cette classe dans la zone Classes.
Les membres disponibles pour cette classe apparaissent dans la zone Membres de
"Classe" o Classe est le nom de la classe slectionne.

On appelle membr es dune classe lensemble des lments rfr encs pour cette
ition classe, cest--dire ses proprits, constantes, mthodes et vnements.
Dfin
Livre Macros excel.book Page 96 Vendredi, 3. avril 2009 7:45 07

96 Excel et VBA

Figure 4.9
Les classes contenant
du code apparaissent
en gras.

Ces classes
comportent
du code rdig
par lutilisateur

Les membres affichs dans la zone Membres de "Classe" sont affichs par type (propri
ts, constantes, mthodes et vnements) et par ordre alphabtique au sein de chaque type.
Chaque type de membre est symbolis par une icne. Lorsquun membre contient du code
rdig par lutilisateur, son nom apparat en gras.

Pour affi her les membr es dune classe par or dre alphabtique, indpendam-
Astu
ce ment de leur type , faites un clic dr oit dans lExplor ateur dobjets et, dans le
menu conte xtuel qui saf fi he, slectionnez la commande Membr es du gr oupe.
Pour revenir un affi hage par groupe, rptez cette opration.

Accder la rubrique daide de lobjet slectionn


Lorsquun lment est slectionn dans lExplorateur dobjets, il est trs simple daccder
la rubrique daide qui lui est affecte. Vous pouvez :
cliquer sur le bouton Aide de lExplorateur dobjets ;
taper le raccourci clavier F1 ;
faire un clic droit sur llment v oulu et slectionner la commande Aide du menu
contextuel.
Vous obtenez ainsi une aide prcieuse sur lutilisation de llment v oulu (v oir
Figure 4.10). Vous pouvez ventuellement consulter lexemple de code fourni dans laide
de VBA et en copier la syntaxe afin de la coller dans otre propre code.
Livre Macros excel.book Page 97 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 97

Figure 4.10
LExplorateur dobjets
permet daccder
rapidement aux rubriques
daide des objets affi hs.

Les autres contrles de lExplorateur dobjets


La zone Dtails affiche un bref descriptif du membre slectionn dans la zone Membres d
(voir Figure 4.11). Si aucun membre nest slectionn, la description concerne la classe
slectionne dans la zone Classes. Enfin, si aucune classe nest slectionne, cette zon
indique le chemin daccs la bibliothque ou au projet af fich dans lExplorateu
dobjets.
Cette zone prsente aussi, sous la forme dun h yperlien de couleur v erte, la position de
lobjet slectionn dans le modle dobjets, et les lments du langage ventuellement lis
la syntaxe de cet objet. Pour af ficher les membres dun objet apparaissant en yperlien
dans la zone Membres de, cliquez sur lhyperlien le reprsentant.
Livre Macros excel.book Page 98 Vendredi, 3. avril 2009 7:45 07

98 Excel et VBA

Figure 4.11 Proprit Comment Renvoyant un


La zone Dtails rcapitule objet Comment
les donnes propres
llment slectionn.

Membres de Range

Le bouton Retourner permet de revenir aux slections prcdentes dans les listes Classes
et Membres de. Chaque clic v ous f ait remonter dune slection. Le bouton Avancer
permet de re venir aux dernires slections ef fectues aprs a voir utilis le bouton
Retourner.
Le bouton Copier place dans le Presse-papiers le te xte slectionn. Il peut sagir du te xte
de la zone Dtails, de la zone Membres de ou de la zone Classes. Le texte ainsi copi peut
tre coll dans une fentre Code.
Le bouton Afficher la dfinition est accessible lorsque la classe ou le membre de clas
slectionn contient du code rdig. Il entrane laf fichage de la fentre Code corres
pondant la slection en cours dans lExplorateur dobjets.

Rechercher du texte
LExplorateur dobjets of fre un outil permettant de rechercher des chanes de caractres
dans les bibliothques de v otre choix. Pour rechercher du te xte dans les bibliothques/
projets, procdez comme suit :
1. Dans la zone Bibliothque/Projet, slectionnez la bibliothque ou le projet dans
lesquels vous souhaitez que la recherche seffectue.
Si vous ne sa vez dans quelle bibliothque ef fectuer la recherche, slectionnez <T outes
bibliothques>.
Livre Macros excel.book Page 99 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 99

2. Dans la zone Rechercher texte, saisissez le texte rechercher.

Si vous ntes pas certain de lorthographe du texte rechercher, utilisez les carac-
ce tres gnriques suivants :
Astu
* toute chane ;
? tout caractre.

3. Cliquez sur le bouton Rechercher . La zone Rsultats de la recherche saf fiche. Pou
chacun des lments trouvs, la bibliothque, la classe et le membre sont indiqus
(voir Figure 4.12).

Figure 4.12
La zone Rsultat
de la recherche liste lensem-
ble des lments trouvs
contenant
la chane spcif e.

4. Si vous souhaitez af ficher les rsultats pour dautres bibliothques, modifiez simpl
ment la slection dans la zone Bibliothque/Projet. Les rsultats de la recherche sont
automatiquement mis jour.
5. Pour afficher les informations concernant lun des rsultats de la recherche dans le
zones Classe et Membres de, slectionnez llment v oulu dans la zone Rsultat de la
recherche.
Les zones Classe et Membres de sont automatiquement mises jour , les objets
concerns par la slection tant entours de pointills (voir Figure 4.13).
Livre Macros excel.book Page 100 Vendredi, 3. avril 2009 7:45 07

100 Excel et VBA

Figure 4.13 Le rsultat slectionn...


Slectionnez llment
qui vous intresse dans
la zone Rsultat de la
recherche

est reflt dans


les zones Classe
et Membres de...

ainsi que dans la zone Dtails

6. Pour ouvrir la rubrique daide associe lun des lments trouvs, slectionnez-le et
cliquez sur le bouton Aide, ou tapez le raccourci clavier F1.
7. Votre recherche termine, v ous pouv ez choisir de masquer la zone Rsultats de la
recherche. Pour cela, cliquez simplement sur le bouton Afficher/Masquer les rsultats de
la recherche.
Pour af ficher de nou eau cette zone sans lancer une nouv elle recherche, cliquez une
nouvelle fois sur le bouton.

La fentre UserForm
La fentre UserF orm permet de dessiner des botes de dialogue pour v os projets. Dans
Visual Basic pour Applications, ces botes de dialogue sont appeles des feuilles on
parle aussi de formulaires. Une feuille peut tre trs simple, ou prsenter un grand
nombre de fonctionnalits. La Figure 4.14 prsente une feuille cre dans Visual Basic
Editor.
Le dv eloppement de feuilles est un aspect essentiel de la programmation VBA. Les
Chapitres 12 14 sont entirement consacrs ce sujet. Cette section prsente sommai-
rement les possibilits de dveloppement dans la fentre UserForm.
Livre Macros excel.book Page 101 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 101

Figure 4.14
Une feuille dveloppe
dans Visual Basic Editor.

On peut distinguer deux phases essentielles dans la cration dune interface utilisateur :
le dveloppement visuel de la feuille trait au Chapitre 12 ;
lassociation de code aux dif frents lments de la feuille traite aux Chapitres 13
et 14.
La premire phase consiste dessiner la feuille, cest--dire crer linterface dont vous avez
besoin pour votre application. Cette phase consiste essentiellement placer des contrles sur
la feuille et en dterminer les positions respecti ves. Les contrles sont des lments
constitutifs dune fentre tels quune case cocher , une zone de liste droulante ou un
bouton de commande permettant une interv ention de lutilisateur. Un contrle est un
objet ; en tant que tel, il possde des proprits, des mthodes et des vnements dfinis
Par exemple, un contrle Checkbox (case cocher) possde une proprit Value indiquant
son tat ( True si la case est coche, False si elle est dcoche, et Null si elle nest ni
coche ni dcoche grise). Vous pouvez lui appliquer la mthode SetFocus pour lui
affecter le focus, cest--dire en f aire lobjet rece vant les vnements cla vier ou souris.
Enfin, un vnement Clik (un clic de souris) affectant cet objet peut tre dtect et entra-
ner un comportement spcifique de lapplication, tel que le dclenchement dune proc
dure (appele procdure dvnement).
Certains contrles, dits interactifs, ragissent aux actions de lutilisateur (un bouton OK
dclenchant la v alidation des donnes de la feuille et le dclenchement dune procdure) ;
les autres, dits statiques, ne sont accessibles quau niveau du code (un intitul sur la feuille
ne pouvant tre modifi par lutilisateur)
La Figure 4.15 prsente la bote de dialogue Police de Word sur laquelle v ous pouv ez
visualiser diffrents types de contrles.
Livre Macros excel.book Page 102 Vendredi, 3. avril 2009 7:45 07

102 Excel et VBA

Figure 4.15 Zone de texte ou


Les contrles que vous contrle TextBox
pouvez placer sur une
feuille sont les mmes Onglet ou
que ceux que vous contrle
rencontrez dans les TabStrip
applications Offic . Zone de liste
ou contrle
ListBox

Zone de liste
modifiable ou
Case cocher ou
contrle
contrle CheckBox
ComboBox

Intitul ou
contrle Label

Bouton de commande ou
contrle CommandButton

Par df aut, la bote outils propose les contrles les plus couramment rencontrs dans
lapplication hte (voir Figure 4.16). Vous verrez au Chapitre 12 que vous pouvez personna-
liser la bote outils en y ajoutant des contrles ou en en modifiant lordonnancement

Figure 4.16
Les contrles de la bote
outils peuvent trs simple-
ment tre dposs sur une
feuille.

Afficher et masquer la fentre UserForm et la bote outils


Pour afficher la fentre User orm, vous devez soit ouvrir une feuille dans un projet (acces-
sible dans le dossier Feuilles de lExplorateur de projet), soit crer une nouv elle feuille.
Pour quitter la fentre UserF orm, cliquez sur la case de fermeture situe dans langle
suprieur droit de la fentre.
Pour afficher/masquer la bote outils, une fentre User orm doit tre active :
Livre Macros excel.book Page 103 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 103

Slectionnez la commande Bote outils du menu Affichage


ou :
Cliquez sur le bouton Bote outils de la barre doutils Standard de Visual Basic Editor.

Vous verrez au Chapitre 12 que Visual Basic Editor propose des outils f acilitant grandement
la phase de dveloppement visuel des feuilles.

La fentre Code
La fentre Code est lditeur de code de Visual Basic Editor. Elle permet dcrire du code
Visual Basic ou de visualiser et de modifier le code xistant. Toute action quexcute une
application VBA existe sous forme de code et lensemble du code constitutif dun projet
est dit dans la fentre Code.
Une fentre Code est toujours attache lun des modules apparaissant dans lExplorateur
de projet (v oir Figure 4.17). Il peut sagir dun module standard, dun module de classe,
dune feuille ou du document auquel est attach le projet.

Figure 4.17 Le module La fentre Code du


Chacun des modules Exemples module Exemples
dun projet possde
une fentre Code.

La fentre Code prsente de nombreuses et prcieuses fonctionnalits, destines faciliter le


dveloppement de vos projets.
Livre Macros excel.book Page 104 Vendredi, 3. avril 2009 7:45 07

104 Excel et VBA

Vous pouvez, par exemple, ouvrir une fentre Code pour chacun des modules apparaissant
dans votre projet et copier, coller ou dplacer du code dune fentre et dune procdure
lautre, rechercher des chanes de caractres ou marquer certains endroits du code en y
plaant des signets, paramtrer la fentre Code afin que la synta e Visual Basic soit vrifi
au fur et mesure de la saisie du code, etc.

Figure 4.18
La fentre Code
est le cur de
Visual Basic Editor.

Afficher et masquer la fentre Code


Pour accder au code dun lment constitutif dun projet, ouvrez lExplorateur de projet
pz afficher le code. E fectuez ensuite lune des oprations suivantes :
Double-cliquez sur un module de code.
Faites un clic droit sur llment v oulu et choisissez la commande Code du menu
contextuel.
Cliquez sur le bouton Afficher le code de lExplorateur de projet
Slectionnez la commande Code du menu Affichage
Tapez le raccourci clavier F7.
La fentre Code de llment voulu saffiche
Livre Macros excel.book Page 105 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 105

Pour accder au code des contrles dune feuille , double-cliquez dessus ou


Info faites un clic dr oit et c hoisissez la commande Code du menu conte xtuel qui
saffi he.

Pour masquer la fentre Code, cliquez sur la case de fermeture ou f aites un clic droit
dans la fentre et slectionnez la commande Masquer du menu conte xtuel qui
saffiche

Figure 4.19
Le menu contextuel
de la fentre Code.

Naviguer dans la fentre Code


Par dfaut, la fentre Code af fiche lensemble des procdures constituant le module par
ordre alphabtique, spares par une ligne grise. Un mme module pouv ant contenir un
nombre important de procdures, la fentre Code intgre deux zones de listes destines
permettre un dplacement rapide dans le code du module affich

Une procdure est un bloc dinstructions, tel quune macr o, dlimit par des
ition instructions dencadrement et excut en tant quentit. Vous verrez au Chapi-
Dfin
tre 5 quune pr ocdure peut avoir pour fonction de r envoyer une valeur ou
dexcuter un certain nombre dactions. Le code excutable des projets VBA est
toujours contenu dans des procdures.

Les zones de listes Objet et Procdure


La zone de liste Objet rfrence tous les objets contenus dans le module (dans le cas dune
feuille, tous les contrles). Pour accder au code dun objet, droulez la zone de liste et
slectionnez-en le nom. Le code attach cet objet apparat dans le haut de la fentre
Code, le point dinsertion tant plac sur la premire ligne du code en question (v oir
Figure 4.20).
Livre Macros excel.book Page 106 Vendredi, 3. avril 2009 7:45 07

106 Excel et VBA

Figure 4.20 L'objet CmdOK dans la zone de liste Objet


La zone de liste Objet
rpertorie lensemble
des objets du module.

Le contrle CmdOK sur la feuille Le code de l'objet CmdOK

Les lments rfrencs dans la zone de liste Procdure peuv ent tre des procdures ou
des vnements, selon le type du module. Si la fentre Code est celle dun module de
code, la zone de liste Procdure rpertorie toutes les procdures du module en question.
La Figure 4.21 prsente la zone de liste Procdure dans la fentre Code du module
LivreExcel. Lensemble des procdures du projet y est rfrenc, ces dernires tant spares
par des lignes grises.

Figure 4.21
Utilisez cette zone
pour accder rapidement
une procdure
du module.
Livre Macros excel.book Page 107 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 107

Lorsque vous enregistrez ou crez des macros dans Excel, ces macros sont stoc-
Rap
pel kes dans un module nomm Modulen, accessible dans le dossier Modules de
lExplorateur de projet.

Dans le haut de la liste se trouve lentre (Dclarations). Il sagit des dclarations gnra-
les du module. Si la fentre Code est celle dune feuille, (Gnral) doit tre slectionn
dans la zone Objet pour que (Dclarations) apparaisse dans la zone Procdure.
Si la fentre Code est celle dune feuille, la zone de liste Procdure rfrence lensemble
des vnements (un clic de souris, une saisie au clavier, etc.) reconnus pour la feuille ou
le contrle slectionn dans la zone de liste Objet (v oir Figure 4.22) et la fentre Code
affiche la procdure dvnement correspondante. Si loption (Gnral) est s lectionne
dans la zone Objet, la zone Procdure rpertorie lensemble des dclarations et des procdures
de la feuille.

Une procdure dvnement (ou pr ocdure vnementielle) est une pr ocdure


ition attache un vnement spcifique tel quun clic de souris. Ce type de p oc-
Dfin
dure sexcute lorsque lvnement est r econnu par le pr ogramme. La cration
de procdures dvnement est traite au Chapitre 14.

Pour accder une procdure spcifique, droulez la zone de liste et slectionnez-en l


nom. Le code de la procdure choisie apparat dans le haut de la fentre Code, le point
dinsertion tant automatiquement plac sur la premire ligne de code de la procdure.

Figure 4.22 Cet objet... gre ces vnements


La zone de liste droulante
Procdure rpertorie
lensemble des vnements
rfrencs pour un objet.
Livre Macros excel.book Page 108 Vendredi, 3. avril 2009 7:45 07

108 Excel et VBA

Slection de texte dans la fentre Code


Lorsque vous vous trouvez dans une fentre Code, v ous pouvez slectionner du te xte
laide de la souris ou du cla vier. Nous supposons ici que v ous connaissez les mthodes
de slection standard laide de ces deux priphriques. Il e xiste cependant des modes de
slection spcifiques la fentre Code de Visual Basic Editor.
Pour slectionner une procdure laide de la souris, placez le pointeur sur la g auche
du code de f aon quil prenne la forme dune flche oriente ers la droite et double-
cliquez (voir Figure 4.23).

Figure 4.23
Vous pouvez slectionner
rapidement une procdure
entire.

Vous pouvez aussi vous dplacer ou ef fectuer des slections de blocs de code laide
du clavier. Pour atteindre la procdure prcdente, faites le raccourci clavier Ctrl + Pg.
Prc. Pour atteindre la procdure suivante, faites le raccourci Ctrl + Pg. Suiv. Pour ten-
dre la slection, utilisez les mmes combinaisons de touches auxquelles v ous ajouterez la
touche Maj.

La substitution des touc hes fl hes haut et bas aux touc hes Pg. Prc. et Pg .
ce Suiv. dans les combinaisons mentionnes ci-dessus permet datteindr e la
Astu
premire ligne de code sous la dclar ation de pr ocdure ( Sub, Function ou
Property) plutt que la dclaration de procdure elle-mme.
Livre Macros excel.book Page 109 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 109

Recherche et remplacement de texte


Vous pouvez rechercher du texte dans la fentre Code comme v ous le feriez dans un logi-
ciel de traitement de te xte tel que Word. Pour rechercher du te xte dans la fentre Code,
procdez comme suit :
1. A partir dune fentre Code, slectionnez la commande Rechercher du menu Edition
ou tapez le raccourci cla vier Ctrl + F, ou cliquez sur le bouton Rechercher de la barre
doutils Standard de Visual Basic Editor.
La bote de dialogue Rechercher reprsente la Figure 4.24 saffiche

Figure 4.24
La bote de dialogue Rechercher
de Visual Basic Editor
propose des options communes
lessentiel des traitements
de texte.

2. Dans la zone de texte Rechercher, saisissez le texte voulu.


3. Dans la zone Dans, slectionnez la porte de la recherche :
Procdure en cours. La recherche ne porte que sur le te xte de la procdure en
cours, cest--dire celle dans laquelle se trouve le curseur.
Module en cours. La recherche porte sur lensemble du module en cours, cest--
dire le texte de la fentre Code active.
Projet en cours. La recherche porte sur lensemble des modules du projet, que
leurs fentres de codes respectives soient ouvertes ou non.
Texte slectionn. La recherche porte sur la plage de te xte slectionne dans la
fentre active.
4. Dans la zone de liste droulante, slectionnez le sens dans lequel seffectuera la recherche
par rapport lemplacement du curseur : vers le haut, vers le bas ou dans les deux sens.
5. Cochez ventuellement les cases des options de recherche :
Mot entier. Le mot est recherch en tant que mot entier, et non en tant que suite de
caractres faisant partie dun autre mot.
Respecter la casse. La recherche porte sur le te xte dont la casse (majuscules ou
minuscules) est identique celle du texte saisi dans la zone Rechercher.
Critres spciaux. Lorsque cette case est coche, vous pouvez utiliser les carac-
tres gnriques (?, *, #, [ listedecar], et [! listedecar]) dans la zone de te xte
Rechercher.
Livre Macros excel.book Page 110 Vendredi, 3. avril 2009 7:45 07

110 Excel et VBA

6. Cliquez sur le bouton Suivant pour lancer la recherche.


Si la recherche aboutit, le texte trouv est affich en surbrillance dans la fentre Code
(Si la recherche porte sur le projet entier et si la chane est trouve dans un autre
module, la fentre de Code de ce module est ouverte.) Pour rechercher une autre occur-
rence du texte, cliquez de nouveau sur le bouton Suivant.
Si le texte recherch nest pas trouv, un message vous lindique.
Pour fermer la bote de dialogue Rechercher , cliquez sur le bouton Annuler ou sur sa
case de fermeture.

Une pression sur la touche F3 ou la commande Suivant du menu Edition relance


ce la dernire recherche effectue sans ouvrir la bote de dialogue Rechercher.
Astu

Pour remplacer du texte, procdez comme suit :


1. Slectionnez la commande Remplacer du menu Edition ou tapez le raccourci cla vier
Ctrl + H. Si la bote de dialogue Rechercher est ouv erte, cliquez sur le bouton
Remplacer. La bote de dialogue Remplacer saffiche ( oir Figure 4.25).

Figure 4.25
La bote de dialogue
Remplacer.

2. Indiquez le texte rechercher et dfinissez ltendue, le sens et les options de recherch .


Dans la zone Remplacer par, saisissez le texte de remplacement.
3. Si vous souhaitez effectuer le remplacement sur toutes les occurrences du texte recherch
dans la zone de recherche dfinie, cliquez sur Remplacer tout
Une bote de dialogue vous indique le nombre de remplacements effectus.
4. Pour visualiser les occurrences du te xte trouv a vant def fectuer le remplacement,
cliquez sur le bouton Sui vant pour lancer la recherche. Lorsque le te xte est trouv, il
apparat en surbrillance dans la fentre Code.
Pour remplacer loccurrence slectionne, cliquez sur le bouton Remplacer . Le te xte
est remplac et la recherche se poursuit.
Pour poursui vre la recherche sans ef fectuer de remplacement, cliquez sur le bouton
Suivant.
Livre Macros excel.book Page 111 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 111

Affichage de plusieurs fentres Code

Lorsque vous dvelopperez dans Visual Basic Editor , vous serez souv ent amen v ous
dplacer entre les fentres Code de diffrents lments de votre projet, voire changer du
code dune fentre lautre pour en pargner une nouvelle saisie. Pour passer dune fen-
tre Code lautre, ouvrez le menu Fentre de la barre de menus de Visual Basic Editor et
slectionnez la fentre que vous souhaitez passer au premier plan.
Pour afficher simultanment plusieurs fentres Code, procdez comme suit
1. Placez-vous dans lExplorateur de projet et ouvrez les fentres de code concernes
selon la procdure dcrite prcdemment dans ce chapitre.
2. Slectionnez les commandes Mosaque horizontale (v oir Figure 4.26) ou Mosaque
verticale (v oir Figure 4.27) du menu Fentre, de f aon visualiser simultanment
toutes les fentres Code ouvertes.
Figure 4.26
Les fentres
Code organises
en mosaque
horizontale.

Vous pouvez aussi sparer une fentre Code en deux v olets, afin da ficher simultanmen
des sections de code non contigus dun mme module. Vous pouvez ainsi copier, coller
ou dplacer du code dune section lautre du module. Procdez comme suit :
1. Placez le curseur sur la barre de fractionnement situe dans le haut de la barre de dfi
lement verticale de la fentre Code.
Livre Macros excel.book Page 112 Vendredi, 3. avril 2009 7:45 07

112 Excel et VBA

Figure 4.27
Les fentres
Code organises
en mosaque
verticale.

2. Lorsque le curseur se transforme en une double flche, aites glisser la barre de frac-
tionnement vers le bas, jusqu atteindre la dlimitation souhaite pour les deux volets.
Relchez le bouton de la souris.
La fentre Code tant spare en deux v olets autonomes (voir Figure 4.28), vous pouvez
modifier la fichage de lun ou lautre des olets laide des barres de dfilement erticales.

Figure 4.28
Le fractionnement
de la fentre Code
permet daffi her
simultanment
diffrentes
sections de code
dun mme
module.
Livre Macros excel.book Page 113 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 113

Les zones de listes Objet et Procdure sappliquent la fentre acti ve, cest--dire celle
dans laquelle se trouve le point dinsertion.
Pour annuler le fractionnement de la fentre Code, double-cliquez sur la barre de fractionne-
ment ou faites-la glisser vers le haut de la fentre.

Options daffichage
Laffichage du code dans la fentre Code de Visual Basic Editor peut tre paramtr de
diffrentes faons. Cette section prsente les options de paramtrage de la fentre. Les
options de paramtrage du code sont prsentes au Chapitre 5.
Par dfaut, la fentre Code af fiche lensemble des procdures du module, chaque proc
dure tant spare par un trait gris (voir Figure 4.29).
Figure 4.29
Lensemble des
procdures du code
est affi h.

Si laffichage de lensemble des procdures du module ne ous convient pas, vous pouvez
choisir de nafficher quune procdure dans la fentre Code. Pour dfinir les paramtres e la
fentre Code, procdez comme suit :
1. Choisissez la commande Options du menu Outils. Slectionnez longlet Editeur de la
bote de dialogue Options qui saffiche ( oir Figure 4.30).
2. Cochez ou dcochez les cases de la zone P aramtres de la fentre, en fonction du type
daffichage souhait
Livre Macros excel.book Page 114 Vendredi, 3. avril 2009 7:45 07

114 Excel et VBA

Glisser-dplacer pour ldition de texte. Cochez cette case pour autoriser les glisser-
dplacer de texte dans la fentre Code.
Affichage complet du module par dfaut Dcochez cette case si v ous souhai-
tez nafficher quune procdure dans la fentre Code ( oir Figure 4.31). Utilisez
alors la zone de liste droulante Procdure pour slectionner la procdure que
vous souhaitez affiche .
Sparation des procdures. Dans le cas dun af fichage complet du module, cett
option dtermine si un sparateur sera affich ou non entre les di frentes procdures
affiches
Figure 4.30
La zone Paramtres
de la fentre permet
de dfinir la fi hage
des procdures dans
la fentre Code.

Figure 4.31
Vous pouvez choisir
de naffi her quune
procdure dans la
fentre Code.

3. Cliquez ensuite sur OK pour valider les options choisies.


Livre Macros excel.book Page 115 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 115

La fentre Proprits
La fentre Proprits permet daccder aux proprits de divers lments dun projet. Vous
pouvez y visualiser et modifier les proprits dun classeur ou dune feuille de calcul
dune feuille UserF orm, dun contrle, dune classe, dun projet ou dun module. Vous
utiliserez la fentre Proprits essentiellement lors du dv eloppement de feuilles pour vos
projets.

Vous dcouvrirez les pr oprits essentielles des contrles ActiveX que lon place
Info sur les feuilles UserForm et apprendrez les modifier aux Chapit es 13 et 15.

Les proprits v arient en fonction de llment slectionn. Ainsi les proprits dun
contrle en dfinissent laspect et le comportement (sa position, sa taille, le ait que
lutilisateur peut ou non y apporter des modifications, etc.), tandis que les proprits
dun projet en dfinissent simplement le nom. La Figure 4.32 prsente la fentre
Proprits dun contrle CheckBox (case cocher) et la Figure 4.33, les proprits du
projet PERSO.XLS.

Figure 4.32 La colonne gauche affiche La colonne droite affiche les


La fentre Proprits les noms des proprits valeurs affectes aux proprits
dun contrle CheckBox.
Livre Macros excel.book Page 116 Vendredi, 3. avril 2009 7:45 07

116 Excel et VBA

Figure 4.33
La fentre Proprits
du projet PERSO.XLS.

Afficher et masquer la fentre Proprits


La fentre Proprits peut tre affiche partir de lExplorateur de projet ou partir dun
fentre UserForm. Pour afficher une fentre Proprits, procdez comme suit
1. Dans lExplorateur de projet, slectionnez le module dont v ous souhaitez af ficher le
proprits ou, dans la fentre UserF orm, slectionnez le contrle ou la feuille dont
vous souhaitez afficher les proprits

Lorsque plusieur s contrles sont slectionns sur une feuille , la fentr e


Info Proprits affi he les proprits communes aux contrles slectionns.

2. Dans le menu Affichage slectionnez la commande Fentre Proprits, ou cliquez sur l


bouton Proprits de la barre doutils Standard, ou encore tapez le raccourci clavier F4.
La fentre Proprits du module slectionn saffiche
3. Lorsque vous slectionnez un autre module dans lExplorateur de projet ou un autre
contrle dans la fentre UserF orm, la fentre Proprits af fiche les proprits d
llment slectionn.
Pour masquer la fentre Proprits, cliquez sur la case de fermeture situe le xtrmit
droite de la barre de titre ou faites un clic droit dans la fentre et, dans le menu contextuel qui
saffiche, slectionnez la commande Masque .

Naviguer dans la fentre Proprits


Lorsque vous vous trouvez dans la fentre Proprits dune feuille ou dun contrle, une
zone de liste droulante permet daccder aux proprits des contrles de la feuille acti ve.
Droulez simplement la liste et slectionnez le contrle dont v ous souhaitez af ficher le
proprits (voir Figure 4.34).
Livre Macros excel.book Page 117 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 117

Figure 4.34
Slectionnez lobjet
dont vous souhaitez
affi her les proprits.

La fentre Proprits prsente deux onglets dterminant le type daffichage des proprits

Alphabtique. Toutes les proprits recenses pour llment slectionn sont af fich s
par ordre alphabtique (voir Figure 4.32).
Par catgorie. Les proprits de lobjet slectionn sont regroupes par catgorie et,
lintrieur de chaque catgorie, par ordre alphabtique (v oir Figure 4.35). Les catgo-
ries apparaissent en gras. A linstar des dossiers de lExplorateur , les proprits qui y
sont recenses peuvent tre affiches ou masques lorsque ous cliquez sur les signes
plus (+) ou moins () situs gauche de chaque nom de catgorie.

Figure 4.35
Laffi hage par catgorie
permet daccder rapidement
aux proprits voulues.
Livre Macros excel.book Page 118 Vendredi, 3. avril 2009 7:45 07

118 Excel et VBA

Les catgories de proprits essentielles sont :


Apparence. Sous cette catgorie sont regroupes les proprits relatives lapparence
dun objet (sa couleur de fond, son intitul, le te xte de son info-b ulle, sil est ou non
visible, etc.).
Comportement. Cette catgorie regroupe les proprits dterminant le comportement
du contrle, cest--dire ses ractions aux actions de lutilisateur (sil est ou non modi-
fiable, longueur maximale de saisie dune chane, etc.)
Dfilement Cette catgorie regroupe les proprits concernant le dplacement dans un
contrle (prsence ou non de barres de dfilement, dimension et position relat ve des
barres de dfilement)
Divers. Vous trouverez sous cette catgorie des proprits v aries, telles que le nom
permettant dappeler ce contrle dans le code.
Emplacement. Les proprits concernant la taille dun contrle et sa position sur la
feuille sont regroupes sous cette catgorie.
Image. Si une image est associe un contrle, vous trouverez sous cette catgorie les
proprits spcifiques cette image (source, position relat ve).
Police. La police utilise pour lintitul du contrle est af fiche sous cette catgorie
Dans Office, la police utilise par d aut pour les contrles est le Tahoma.

Modifier une proprit


Comme nous lavons vu au Chapitre 1, diffrents types de valeurs peuvent tre affectes
une proprit. Il peut sagir :
dune chane de caractres ;
dune valeur numrique ;
dune constante ;
dune valeur boolenne.
Pour modifier la aleur dune proprit dans la fentre Proprits, procdez comme suit :
1. Slectionnez cette proprit dans la fentre Proprits. Elle apparat en surbrillance.
Appuyez sur la touche Tab pour slectionner la valeur en cours pour cette proprit.
2. Affectez ensuite la v aleur voulue la proprit. La dmarche v arie selon le type de
valeur affect la proprit :
Si la proprit accepte une chane de caractres ou une v aleur numrique, saisissez
directement la valeur souhaite au clavier.
Livre Macros excel.book Page 119 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 119

Si le type de v aleur af fect cette proprit est une v aleur boolenne ou une
constante, une flche apparat dans la cellule de aleur. cliquez sur cette flche pou
drouler la liste des v aleurs possibles pour la proprit, et slectionnez celle qui
convient (voir Figure 4.36).
Vous pouvez aussi utiliser les touches flches haut et bas pour ous dplacer dune
valeur lautre.
Si la proprit attend pour v aleur une chane indiquant un emplacement de fichie ,
un bouton permettant de parcourir les fichiers disponibles la recherche du fichi
voulu apparat dans la zone de valeur de la proprit.

Figure 4.36
Lorsquune proprit accepte
des valeurs prdtermines,
celles-ci sont recenses
dans une liste droulante.

Dans le cas des pr oprits acceptant une valeur boolenne ou une constante ,
ce vous pouvez passer dune valeur la suivante en double-cliquant simplement
Astu
dans la case de valeur dune proprit.

Les barres doutils


Visual Basic Editor contient quatre barres doutils, prsentes dans les figures su vantes.

Figure 4.37
La barre doutils Stan-
dard permet daccder
aux fonctions les plus
communes de Visual
Basic Editor.
Livre Macros excel.book Page 120 Vendredi, 3. avril 2009 7:45 07

120 Excel et VBA

Figure 4.38
La barre doutils Edition
permet dobtenir de laide,
de mettre en forme le texte
et de sy dplacer.

Figure 4.39
La barre doutils Dbogage
permet de tester le compor-
tement dun programme.

Figure 4.40
La barre doutils UserForm
propose des outils pour
organiser les contrles
sur une feuille.

Cette section prsente la barre doutils Standard. Vous dcouvrirez les autres barres
doutils de Visual Basic Editor au fur et mesure de la lecture de cet ouvrage.

Afficher, masquer et dplacer une barre doutils


Pour afficher ou masquer une barre doutils, a fichez le menu cont xtuel Barre doutils,
soit en cliquant du bouton droit sur une barre doutils ou sur la barre de menus de la
fentre Visual Basic Editor, soit en slectionnant la commande Barre doutils du menu
Affichage. Dans ce menu, slectionnez la barre doutils que ous souhaitez af ficher o
masquer une coche ct du nom dune barre doutils indiquant quelle est dj
affiche

Figure 4.41
Ces barres
Le menu contextuel d'outils sont
Barre doutils. affiches
Ces barres
d'outils sont
masques

Pour dplacer une barre doutils, cliquez sur celle-ci et, tout en en maintenant le bouton
enfonc, dplacez la souris jusqu atteindre lemplacement v oulu. Un contour gris vous
indique lemplacement que prendra la barre doutils. Relchez le bouton de la souris
lorsque le contour indique lemplacement voulu.
Livre Macros excel.book Page 121 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 121

Pour faire apparatre les info-bulles associes aux boutons de la barre doutils,
ce slectionnez la commande Options du menu Outils et, dans longlet Gnr al,
Astu
cochez loption Affi her les info-bulles.

La barre doutils Standard


La barre doutils Standard of fre un accs rapide aux commandes les plus usites. On y
retrouve des commandes communes lessentiel des applications, telles que Enre gistrer
ou Couper. Le Tableau 4.2 prsente les boutons de cette barre doutils.

Tableau 4.2 : Les icnes de la barre doutils Standard

Bouton Nom Description


Afficher Microsoft Bascule entre lapplication hte et le document Visual Basic actif (rac-
Excel courci clavier : Alt + F11).

Insertion En cliquant sur la flche, vous ouvrez un menu permettant dinsrer


lun des objets suivants dans le projet actif :

UserForm (feuille)

Module de classe

Module

Procdure

En cliquant sur le bouton, vous insrez lobjet reprsent. Le bouton


reprsente le dernier objet ajout. Le bouton par dfaut est la feuille
(UserForm).

Enregistrer Enregistre le document hte, y compris le projet et tous ses


<Document hte> composants feuilles et modules (raccourci clavier : Ctrl + S).

Couper Supprime le texte slectionn dans la fentre Code ou le contrle


slectionn sur la feuille active et le place dans le Presse-papiers (rac-
courci clavier : Ctrl + X).

Copier Copie le texte slectionn dans la fentre Code ou le contrle slec-


tionn sur la feuille active dans le Presse-papiers (raccourci clavier :
Ctrl + C).

Coller Insre le contenu du Presse-papiers lemplacement courant.


Ce bouton nest accessible que si le contenu du Presse-papiers est
compatible avec la fentre active fentre Code pour du texte et
fentre UserForm pour un contrle (raccourci clavier : Ctrl + V).
Livre Macros excel.book Page 122 Vendredi, 3. avril 2009 7:45 07

122 Excel et VBA

Tableau 4.2 : Les icnes de la barre doutils Standard (suite)

Bouton Nom Description


Rechercher Permet de rechercher une chane dans une fentre Code voir la
section "La fentre Code", plus haut dans ce chapitre (raccourci
clavier : Ctrl + F).

Annuler Chaque clic sur ce bouton annule la dernire modification effectue


(raccourci clavier : Ctrl + Z).

Rpter Chaque clic sur ce bouton rtablit la dernire action annule.


Pour quil soit accessible, il faut quune action ait t annule et
quaucune modification nait eu lieu depuis lannulation.

Excuter Excute une application fonction de la fentre active :


Sub/UserForm Fentre Code : la procdure en cours est excute.
ou Excuter la macro
Fentre UserForm : la feuille active est excute.
Autre : ouvre la bote de dialogue Macros du projet actif, partir de
laquelle vous pouvez excuter la macro de votre choix.

Arrt Interrompt lexcution en cours et bascule en mode Arrt.


En mode Arrt, vous pouvez relancer lexcution dune procdure,
rinitialiser un projet, tester un programme, etc. (raccourci clavier :
Ctrl + Pause).

Rinitialiser Rinitialise le projet.

Mode Cration/Quit- Active ou dsactive le mode Cration. On parle de mode Cration


ter le mode Cration par opposition au mode Excution. En mode Cration, le code dun
projet nest pas excut. Cela correspond la priode de dveloppe-
ment de votre projet cration dune feuille UserForm ou criture
de code. En mode Cration, vous pouvez placer des contrles
ActiveX sur les feuilles de calcul et leur affecter du code.

Explorateur de projet Affiche la fentre Explorateur de projet (raccourci clavier : Ctrl + R).

Fentre Proprits Affiche la fentre Proprits de lobjet slectionn (raccourci clavier :


F4).

Explorateur dobjets Affiche la fentre Explorateur dobjets (raccourci clavier : F2).

Bote outils Affiche la bote outils. Accessible uniquement si une fentre UserForm
est active.

Assistant Office Ouvre la fentre de lAssistant Office, dans laquelle vous tes invit
saisir le sujet sur lequel vous souhaitez obtenir de laide (raccourci
clavier : F1).
Livre Macros excel.book Page 123 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 123

Paramtrer Visual Basic Editor


Laffichage de Visual Basic Editor peut tre paramtr et personnalis. Testez ces options
de faon trouver les paramtrages qui vous conviennent le mieux.
Comme la plupart des fentres Windows, les fentres de Visual Basic Editor peuvent tre
dplaces en oprant un cliquer -glisser sur leur barre de titre, et redimensionnes en en
tirant les bords. Vous pouvez aussi choisir dancrer une ou plusieurs fentres lune des
bordures de la fentre de Visual Basic Editor.

Une fentre est dite ancre lor squelle est fixe la bo dure dune autre fen-
ition tre. Une fentr e peut tr e ancre la fentr e de lapplication ou une autr e
Dfin
fentre elle-mme ancre.

Une fentre ancre demeure au premier plan, et ce mme lorsquune autre fentre dont
lespace recouvre le sien est acti ve. Par ailleurs, si v ous maximisez une fentre dans
Visual Basic Editor , celle-ci viendra pouser la fentre ancre, sans en recouvrir
lespace. Vous pouvez ainsi afficher plusieurs fentres, tout en tirant pleinement parti d
lespace de Visual Basic Editor. A la Figure 4.42, nous avons ancr lExplorateur de projet et
maximis une fentre Code.

Figure 4.42 L'Explorateur de La fentre Code maximise pouse


Ancrer lExplorateur projet est ancr la fentre de l'Explorateur de projet
de projet permet
daccder rapide-
ment aux lments
de vos projets.
Livre Macros excel.book Page 124 Vendredi, 3. avril 2009 7:45 07

124 Excel et VBA

Les fentres pouvant tre ancres sont :


la fentre Excution ;
la fentre Variables locales ;
la fentre Espions ;
la fentre Explorateur de projet ;
la fentre Proprits ;
la fentre Explorateur dobjets.
Lorsquune fentre est ancre, elle se place automatiquement sur lune des bordures de la
fentre de Visual Basic Editor quand vous la dplacez. Si vous souhaitez pouvoir la dpla-
cer nimporte o dans la fentre de Visual Basic Editor, dsactivez-en lancrage.
Pour activer ou dsactiver lancrage des fentres de Visual Basic Editor, choisissez lune
des mthodes suivantes :
Faites un clic droit dans la fentre de v otre choix. Un menu conte xtuel saffiche, e
fonction de la fentre choisie. Ces menus contextuels ont en commun de possder une
commande Ancrable (v oir Figure 4.43). La slection de cette commande acti ve ou
dsactive lancrage de la fentre, une coche indiquant que la fentre est ancre.

Figure 4.43
Les menus contextuels
des fentres de
Visual Basic Editor
possdent une commande
Ancrable.

Slectionnez la commande Options du menu Outils et placez-v ous sur longlet


Ancrage (voir Figure 4.44). Cochez les cases des fentres que v ous souhaitez ancrer
et dcocher les cases des fentres dont vous voulez dsactiver lancrage. Cliquez sur
OK.

Si laccs aux commandes de Visual Basic Editor ne convient pas votre faon de
Info travailler, vous pouvez c hoisir den personnaliser les menus et les barr es doutils.
Vous pouvez ainsi ajouter ou supprimer des commandes aux menus et des boutons
Livre Macros excel.book Page 125 Vendredi, 3. avril 2009 7:45 07

Chapitre 4 Dcouvrir Visual Basic Editor 125

sur les barres doutils. Vous pouvez aussi crer une nouvelle barr e doutils ou un
nouveau menu dans lesquels vous placer ez les c ommandes de votr e c hoix. Pour
connatre les procdures de personnalisation de menus et de barres doutils, reportez-
vous au Chapitre 11.

Figure 4.43
La bote de dialogue Options
permet de modif er
les options dancrage
de plusieurs fentres
simultanment.
Livre Macros excel.book Page 126 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 127 Vendredi, 3. avril 2009 7:45 07

Partie II
Programmer
en Visual Basic
CHAPITRE 5. Dvelopper dans Visual Basic Editor
CHAPITRE 6. Variables et constantes
CHAPITRE 7. Contrler les programmes VBA
CHAPITRE 8. Fonctions Excel et VBA
CHAPITRE 9. Manipulation des chanes de caractres
CHAPITRE 10. Dbogage et gestion des erreurs
CHAPITRE 11. Intgrer des applications VBA dans linterface dExcel
Livre Macros excel.book Page 128 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 129 Vendredi, 3. avril 2009 7:45 07

5
Dvelopper dans
Visual Basic Editor
Au sommaire de ce chapitre
Structure des programmes Visual Basic
Les diffrents types de procdures
Des projets bien structurs
Crer une procdure
Appel et sortie dune procdure
Excuter du code
Aide lcriture de code
Livre Macros excel.book Page 130 Vendredi, 3. avril 2009 7:45 07

130 Excel et VBA

Les chapitres prcdents v ous ont permis dacqurir les concepts essentiels de la
programmation Visual Basic pour Applications et de dcouvrir len vironnement de
dveloppement Visual Basic Editor. Avec ce chapitre, nous entrons de plain-pied dans la
programmation VBA.
Vous apprendrez distinguer les composants essentiels dun projet et dterminer les
besoins de v otre projet. Vous serez ainsi mme de structurer de f aon cohrente v os
projets, leur assurant efficacit et lisibilit. Gardez lesprit que les projets sont attachs
une application hte (ici Excel). Pour crer un nouveau projet ou accder un projet exis-
tant, v ous de vez donc ouvrir Visual Basic Editor partir dExcel, selon les procdures
dcrites dans les chapitres prcdents. Le classeur auquel est af fect (ou auquel v ous
souhaitez affecter) votre projet doit aussi tre ouvert.

Structure des programmes Visual Basic


Si vous avez dj dvelopp dans des langages drivs du Basic, tels que le C, lorsque
vous pensez programme, v ous imaginez un listing dans lequel est contenu lensemble
du code e xcutable du programme. Il nen v a pas de mme a vec Visual Basic. Les
projets VBA sont constitus dobjets distincts, dont la runion constitue un programme
entier.

Les modules
Comme vous lavez vu en dcouvrant lExplorateur de projet dans le chapitre prcdent,
on distingue, dans un projet, les modules standard ou modules de code, les modules de
classe et les feuilles. Autrement dit, les dif frents composants du code dun projet VBA
sont structurs et distingus selon leur type. Ces lments interagissent et sappellent pour
constituer un programme complet.
Le code dcrivant linterface dun programme et le code affect aux diffrents vnements
qui peuvent toucher cette interface (un clic de souris sur un bouton OK, par exemple) sont
stocks dans un f chier UserForm. Pour chaque feuille dun projet, il existe un objet User-
Form accessible dans le dossier Feuilles de lExplorateur de projet. Vous pouvez voir la
Figure 5.1 que le projet affich contient onze feuilles
Le code standard se trouv e dans des modules de code, stocks dans le dossier Modules,
tandis que le code dcri vant les objets dv elopps pour v otre projet est stock dans le
dossier Modules de classe.
Livre Macros excel.book Page 131 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 131

Figure 5.1
A chaque feuille dun projet
est affect un fi hier
dans le dossier Feuilles.

Les procdures
A lintrieur dun mme module, le code est structur en procdures. Une procdure est
une squence dinstructions se xcutant en tant quentit. Cette dcomposition en proc-
dures rend le code plus performant et plus lisible.
Par exemple, lorsquun projet VBA ouvre une bote de dialogue (une feuille), pour chaque
vnement dclench par lutilisateur , lapplication vrifie sil xiste une procdure (une
unit de code) affecte cet vnement dans le module correspondant. Si tel est le cas, la
procdure est excute.
Cest lensemble des procdures dun projet et leurs interactions qui forme un
programme complet. Par exemple, lvnement clic de souris sur un bouton OK dune
bote de dialogue peut dclencher une procdure qui rcupre et traite lensemble des
informations contenues dans cette bote de dialogue (Cette case est-elle coche ? Quel
est le texte saisi dans cette zone de te xte ?, etc.). Cette procdure peut ensuite appeler
(ou invoquer) une autre procdure stocke dans le Module de code du projet et lui
passer les informations ainsi traites. On parle alors de procdure appele et de proc-
dure appelante. La procdure appele ef fectuera les tches pour lesquelles elle a t
crite en e xploitant les donnes fournies par la procdure appelante. Les informations
fournies par la procdure appelante la procdure appele sont les arguments passs.

On qualifie de p ocdure vnementielle ou procdure dvnement une proc-


ition dure dclenche par un vnement, telle quun clic de souris ou la frappe dune
Dfin
touche clavier, par opposition aux pr ocdures standard dun module de code ,
indpendantes de tout vnement utilisateur.
Livre Macros excel.book Page 132 Vendredi, 3. avril 2009 7:45 07

132 Excel et VBA

Dans les modules UserF orm, les pr ocdures sont prdtermines ; il e xiste
Info une procdure pour chaque vnement pouvant affecter un contrle. Dans les
modules de code , cest vous qui dterminez les dif frentes procdures. Vous
pouvez ainsi choisir que le code dun programme soit contenu dans une seule
procdure. Il est cependant conseill de structur er le code dun pr ogramme
en pr ocdures distinctes. La lectur e et le dbo gage de vos pr ogrammes en
seront considrablement amliors.

Nous v ous conseillons de structurer v os programmes sous forme de petites procdures


effectuant chacune un traitement spcifique dans le cadre de otre programme. Le
programme principal peut alors consister en une procdure qui appelle les autres proc-
dures ncessaires. Examinez le programme suivant :

Sub CalculPaieNette()
NomRepr = InputBox("Entrez le nom du reprsentant:")
Call VerifierNomRepresentant(NomRepr)
Salaire = QuelSalaire(NomRepr)
ChiffreRepr = InputBox("Entrez le chiffre daffaires ralis:")
Prime = CalculPrime(ChiffreRepr)
MsgBox "La paie nette sera de " & CalculPaie(SalaireRepr, Prim)
End Sub

Cette procdure est compose de six instructions dont quatre font appel dautres procdu-
res pour excuter des tches spcifiques. La procdure VerifierNomRepresentant est appe-
le afin de vrifier que le nom indiqu est alide. Si le nom nest pas valide, cette procdure
pourra prendre en char ge la rsolution du problme ou appeler une autre procdure conue
dans ce b ut. Les procdures QuelSalaire et CalculPrime sont ensuite appeles af n de
renvoyer le salaire et la prime du reprsentant. Enfin, la procdure CalculPaie est appele
pour renvoyer la paie du reprsentant, qui est affiche dans une bote de dialogue
Les techniques dappels de procdures sont traites en dtail plus loin dans ce chapitre.
Cette faon de procder prsente plusieurs avantages :
Les programmes sont plus faciles lire et comprendre. Chaque procdure prenant en
charge une tche spcifique du programme, il est plus ais den comprendre le fonc
tionnement.
En cas de bogue du programme, il est plus f acile disoler la procdure coupable et de
corriger le problme.
Le code est ainsi rutilisable. Certaines tches sont e xcutes par diffrents program-
mes. Si la tche a t isole dans une petite procdure, elle peut tre exploite par diff-
rents programmes.
Livre Macros excel.book Page 133 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 133

Dans lexemple prcdent, la procdure VerifierNomRepresentant est appele pour


contrler la v alidit du nom entr par lutilisateur . Cette procdure peut tre appele
par dautres programmes, sans quil soit ncessaire de la rcrire.

Les instructions
Une procdure est compose dinstructions. Chaque instruction e xcute une tche
prcise, qui peut tre vidente ou in visible pour lutilisateur , destine ef fectuer des
traitements propres au projet.

Une instruction Visual Basic est compose de mots cls du langage, de constantes et de
variables. Ces lments peuv ent tre combins pour former une expression. Une
expression peut vrifier des donnes ou e fectuer une tche.

Par e xemple, Mavar = Workbooks.Count est une instruction. Elle combine la v ariable
Mavar, et les mots cls =, Workbooks et Count. Pour affecter la variable Mavar une valeur
gale au nombre de classeurs ouv erts, on associe cette v ariable le xpression Work-
books.Count laide de loprateur arithmtique =. (La proprit Workbooks renvoie la
collection dobjets Workbooks reprsentant lensemble des classeurs ouv erts ; la proprit
Count renvoie le nombre dobjets de la collection spcifie.

Un mot cl est un mot ou un symbole r econnu comme lment du langa ge


ition Visual Basic. Il peut sa gir dune fonction, dune pr oprit, dune mthode ou
Dfin
encore dun oprateur arithmtique.

Les constantes sont des lments nomms af fects une valeur qui, contr airement
pel une variable , ne c hange pas dur ant lexcution du programme. Le nom de la
Rap
constante est utilis la place de la valeur qui lui est affecte. Un programme peut
exploiter des constantes propres lapplication ou dfinir ses p opres constantes
laide de linstruction Const (voir Chapitre 6).
Vous pouvez par e xemple dfinir une constante que vous nomme ez TVA et
laquelle vous affecterez la valeur 0,196. Chaque fois que vous souhaiter ez utiliser
cette valeur dans votre programme, il vous suffi a dutiliser le nom de la constante
qui lui est affecte. Ainsi, lexpression :
PrixHorsTaxe * TVA

sera quivalente
PrixHorsTaxe * 0.196
Livre Macros excel.book Page 134 Vendredi, 3. avril 2009 7:45 07

134 Excel et VBA

Les variables
pel Les variables sont dfinies par un nom aut e quun mot cl du langa ge et
Rap
permettent de stoc ker des informations pouvant tr e modifies au cou s de
lexcution du programme.

On distingue trois types dinstructions :


Les instructions de dclaration. Ces instructions sont in visibles pour lutilisateur et
servent nommer une variable, une constante ou une procdure. Le nom attrib u un
lment dans linstruction de dclaration sera ensuite utilis pour invoquer cet lment
tout au long du projet. Une instruction de dclaration peut aussi dterminer le type de
llment dclar.
Sub MaProcdure() est un e xemple dinstruction de dclaration, nommant la proc-
dure MaProcdure. Dim Mavar As String est aussi une instruction de dclaration.
Linstruction Dim sert nommer la variable MaVar, tandis que As String en spcifie l
type (String, cest--dire une chane de caractres).
Les instructions daffectation. Ces instructions af fectent une v aleur ou une e xpres-
sion une v ariable, une constante ou encore une proprit et contiennent donc
toujours loprateur =. Lexcution de ce type dinstructions peut tre visible comme
invisible pour lutilisateur.
MaVar = 5 et MaVar = Workbooks.Count sont des exemples dinstructions daffectation,
attribuant respectivement une valeur et une expression la variable MaVar.
Linstruction Let est linstruction daf fectation de Visual Basic. Ainsi linstruction
MaVar = 5 peut aussi tre crite sous la forme Let MaVar = 5. Cependant, cette
instruction est facultative et gnralement omise.
ActiveSheet.Range("C1").Font.Name = "Arial" est une instruction daf fectation
visible pour lutilisateur puisquelle applique la police Arial la cellule C1 de la feuille
Excel active la valeur "Arial" est affecte la proprit Name de lobjet Font de cette
cellule.
Les instructions excutables. Ces instructions accomplissent des actions
(excution dune mthode, dune fonction). Les instructions de contrle (traites au
Chapitre 7) sont aussi considres comme des instructions excutables.
MsgBox "Quel est le nombre de classeurs ouverts?", vbOKOnly & vbInforma-
tion, "Bonne question" est une instruction e xcutable entranant laf fichage de l
bote de dialogue reprsente la Figure 5.2. L instruction MsgBox est tudie au
Chapitre 7.
Livre Macros excel.book Page 135 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 135

Figure 5.2
Les instructions MsgBox sont
des instructions excutables.

La procdure suivante illustre lutilisation conjointe des diffrents types dinstructions :

Sub AfficherNbreClasseursOuverts()
Dim NbreClasseurs As Byte
NbreClasseurs = Workbooks.Count
MsgBox "Il y a actuellement " & NbreClasseurs & _
" classeurs ouverts.", vbOKOnly+vbInformation, "Informations"
End Sub

Cette procdure af fiche une bote de dialogue indiquant le nombre de classeurs ou erts
dans la session Excel active (voir Figure 5.3).

Figure 5.3
Dans une procdure,
les instructions excutables
sont les seules instructions
visibles pour lutilisateur.

Les deux premires instructions sont des instructions de dclaration, nommant successive-
ment la procdure AfficherNbreClasseursOuverts et la v ariable NbreClasseurs. La
valeur reprsentant le nombre de documents ouv erts est ensuite af fecte la v ariable
NbreClasseurs dans linstruction daf fectation de la ligne sui vante. Enfin, linstructio
dexcution MsgBox affiche une bote de dialogue indiquant lutilisateur le nombre d
classeurs ouverts dans la session Excel. Linstruction de dclaration End Sub signale la fi
de la procdure.

Les diffrents types de procdures


Une procdure peut e xcuter une tche visible pour lutilisateur comme ef fectuer des
tches invisibles, internes au projet, et qui seront e xploites ultrieurement par dautres
procdures. On distingue dif frents types de procdures, en fonction du type de tche
quexcute la procdure. Les types essentiels de procdures sont :
les procdures de type Sub;
Livre Macros excel.book Page 136 Vendredi, 3. avril 2009 7:45 07

136 Excel et VBA

les procdures de type Property;


les procdures de type Function.

Procdures Sub
Une procdure Sub (ou sous-routine) est une srie d instructions e xcutant une tche
dtermine au sein du projet, sans renvoyer de valeur. Une procdure Sub est structure de
la faon suivante :
Sub NomDeLaProcdure()
Instructions
...
End Sub

Les instructions Sub et End Sub dterminent le db ut et la fin de la procdure. NomDeLa-


Procdure correspond au nom attrib u v otre procdure et doit respecter les rgles
daffectation de noms de Visual Basic prsentes dans la note suivante. Ce nom est utilis
pour invoquer la procdure partir dune autre procdure. Dans le cas dune macro enre-
gistre ou cre partir dExcel, il sagit du nom attribu la macro dans la bote de dialo-
gue Macro ou Enre gistrer une macro. Instructions correspond aux instructions
quexcute la procdure.

Les noms de procdures, comme les noms de variables et de constantes, doivent


ntion obir aux rgles daf fectation de noms de Visual Basic. Ils doivent syst mati-
Atte
quement :
contenir au maximum 255 caractres ;
commencer par une lettre ;
ne pas comprendre despace et ne pas utiliser les car actres @, &, $, #, ainsi
que le point et le point dexclamation ;
ne pas tre identique un mot cl du langage, pour viter tout conflit

Linstruction de dclaration Sub peut aussi contenir des ar guments optionnels, selon la
syntaxe suivante :
[Private | Public] [Static] Sub NomDeLaProcdure([Arguments])
Instructions
...
End Sub

Private ou Public indique si la procdure est prive ou publique. Une procdure publi-
que peut tre invoque par nimporte quelle procdure du projet, y compris les p rocdu-
res stockes dans dautres modules. Une procdure pri ve ne peut tre invoque qu partir
Livre Macros excel.book Page 137 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 137

dune procdure stocke dans le mme module. On parle de porte de la procdure.


Lorsque les mots cls Private et Public sont omis dans la dclaration de procdure, la
procdure est publique.
Loption Static indique que les v ariables de la procdure Sub conserv ent leurs v aleurs
entre les dif frents appels de la procdure. Autrement dit, si une procdure Static est
invoque plusieurs reprises lors de le xcution dun programme, chaque appel, les
variables propres cette procdure ont la v aleur qui leur a t af fecte lors de lappel
prcdent.
Arguments reprsente les ar guments (des v aleurs) passs la procdure Sub par la
procdure appelante. La vir gule sert de sparateur entre les dif frentes valeurs trans-
mises.
Dans linstruction Sub suivante :
Sub MaProcdure(arg1, arg2)

La procdure MaProcdure est dclare comme ncessitant les ar guments arg1 et arg2.
Autrement dit, lorsque la procdure MaProcdure sera appele, la procdure appelante
devra lui transmettre ces ar guments ou une erreur sera gnre. Les appels de procdures
et le passage dar guments sont tudis dans la section "Appel et sortie dune procdure",
plus loin dans ce chapitre.
Chacun des arguments de arguments rpond la syntaxe suivante :
[Optional] [ByVal | ByRef] [ParamArray] NomVariable [As type]
[=ValeurParDfaut]

Tableau 5.1 : Dclaration darguments dans une instruction Sub

Elment Description
Optional Ce mot cl indique que les arguments transmis sont facultatifs. Aucune
erreur ne sera gnre si la procdure appelante ne passe pas les argu-
ments prcds de ce mot cl.
Lorsque vous dclarez un argument Optional, les arguments qui suivent
doivent aussi tre dclars Optional. Si vous souhaitez dclarer des
arguments facultatifs et dautres obligatoires, vous devez dabord dcla-
rer les arguments obligatoires.
Dans linstruction Sub suivante Sub MaProcdure(arg1, arg2, Optio-
nal arg3, Optional arg4), les arguments arg1 et arg2 doivent obli-
gatoirement tre passs par la procdure appelante, tandis que les
arguments arg3 et arg4 sont facultatifs.
Livre Macros excel.book Page 138 Vendredi, 3. avril 2009 7:45 07

138 Excel et VBA

Tableau 5.1 : Dclaration darguments dans une instruction Sub (suite)

Elment Description
ByVal ou ByRef Ces mots cls indiquent respectivement que largument est pass par
valeur ou par rfrence.
Lorsquun argument est pass par valeur, cest la valeur de la variable, et
non son adresse, qui est transmise la procdure appele. Autrement
dit, la valeur de la variable passe est exploite par la procdure appele,
mais ne peut tre modifie. Lorsquun argument est pass par rfrence,
cest ladresse de la variable qui est passe. La procdure exploite alors la
valeur de la variable transmise, mais peut aussi la modifier. Par dfaut
(lorsque ces mots cls sont omis), le passage dun argument se fait par
rfrence.
Dans lexemple suivant :
Sub MaProcdure(ByVal MaVar)
MaVar = MaVar * 100
End Sub
La valeur de la variable passe MaVar est multiplie par 100 dans la
procdure MaProcdure, mais la valeur relle de MaVar tant passe par
valeur, sa valeur relle ne sera pas modifie.
ParamArray Ce mot cl indique que largument est un tableau Optional. Largument
dclar avec ce mot cl doit tre en dernire position dans la liste des
arguments et ne peut utiliser conjointement lun des mots cls
prcdemment dcrits dans ce tableau.
As Type Spcifie le type de donnes de largument pass la procdure. Il peut
sagir de donnes de type Byte, Boolean, Integer, Long, Currency,
Single, Double, Date, String, Object, Variant, ou dun type dfini
par lutilisateur. Une erreur est gnre si le type de la variable passe par
la procdure appelante est incompatible avec le type dclar.
Linstruction de dclaration de MaProcdure suivante indique quun
argument Arg1 de type String (chane de caractres) est requis :
Sub MaProcdure(Arg1 As String)
Les diffrents types de donnes ainsi que la cration de types de
donnes sont tudis au Chapitre 6.
= ValeurParDfaut Indique une valeur par dfaut pour largument. Ce paramtre ne peut tre
utilis que conjointement avec le mot cl Optional.
Il permet ainsi de dterminer une valeur par dfaut qui sera employe si
largument nest pas pass par la procdure appelante.
Il peut sagir dune constante (valeur numrique, chane de caractres ou
valeur boolenne) ou dune expression constante. Une expression
renvoyant une valeur variable ne peut tre utilise.
Dans lexemple suivant, si largument Arg1 nest pas pass par la
procdure appelante, sa valeur sera la chane "Bonjour".
Sub MaProcdure(Arg1 = "Bonjour")
Livre Macros excel.book Page 139 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 139

Si vous indiquez des arguments facultatifs laide du mot cl Optional dans


ntion la dclaration dune procdure Sub sans spcifier une valeur par dfaut pou
Atte
les arguments concerns, la procdure doit tre conue pour sexcuter sans
faire appel ces ar guments lor squils ne sont pas tr ansmis. Dans le cas
contraire, une erreur sera gnre.

Le programme suivant illustre lutilisation du mot cl Static dans une instruction Sub:

Dim MaVar
Sub ProcdureAppelante()
MaVar = 2
Call ProcdureStatic(MaVar)
Call ProcdureStatic(MaVar)
Call ProcdureStatic(MaVar)
End Sub

Static Sub ProcdureStatic(MaVar)


Dim MaVarStatique
MaVarStatique = MaVarStatique+MaVar
MsgBox MaVarStatique
End Sub

La procdure ProcdureAppelante in voque trois reprises la procdure Procdure-


Static laide de linstruction Call en lui passant la v ariable MaVar dont la v aleur est 2.
A chaque appel, la procdure ProcdureStatic incrmente la v ariable MaVarStatique
de la valeur de MaVar et affiche sa aleur dans une bote de dialogue laide de la fonc-
tion MsgBox. La procdure appelante reprend alors la main (et invoque nouveau la procdure
ProcdureStatic).
Ce programme af fiche donc trois reprises une bote de dialogue dont le message es
successivement 2, 4, puis 6. En ef fet, la procdure ProcdureStatic tant dclare
Static, la v ariable locale MaVarStatique conserv e sa v aleur entre deux appels. Cette
valeur est incrmente de 2 chaque excution de la procdure.

Une variable est dite locale pour une pr ocdure lor squelle est pr opre la
ition procdure, par opposition une variable publique ou passe par la pr ocdure
Dfin
appelante.

Si vous supprimez linstruction Static de la dclaration de procdure Static Sub Proc-


dureStatic, la v ariable MaVarStatique ne conserv era plus sa v aleur entre les dif frents
appels de procdures, et le programme affichera trois reprises une bote de dialogue don
le message sera toujours 2.
Livre Macros excel.book Page 140 Vendredi, 3. avril 2009 7:45 07

140 Excel et VBA

Le programme suivant illustre le passage dun ar gument par valeur. Les lments ajouts
par rapport lexemple prcdent apparaissent en gras :

Dim MaVar
Sub ProcdureAppelante()
MaVar = 2
Call ProcdureStatic(MaVar)
Call ProcdureStatic(MaVar)
Call ProcdureStatic(MaVar)
End Sub

Static Sub ProcdureStatic(ByVal MaVar)


Dim MaVarStatique
MaVarStatique = MaVarStatique+MaVar
MsgBox MaVarStatique
MaVar = 100
End Sub

Ce programme se comporte donc comme nous la vons dtaill dans lexemple prcdent,
mais la procdure ProcdureStatic af fecte en plus la v aleur 100 MaVar a vant de
redonner la main la procdure appelante. Malgr cela, le programme continue daf fiche
trois botes de dialogue dont le message est successivement 2, 4 et 6. En effet, linstruction
de dclaration de ProcdureStatic spcifie que la gument MaVar est appel par v aleur
(ByVal), et non par adresse. La valeur de MaVar est donc exploite, mais sa valeur relle ne
peut tre modifie. MaVar reprend donc sa v aleur initiale ds que la procdure appelante
reprend la main.
Supprimez le mot cl ByVal dans linstruction de dclaration de ProcdureStatic. Largu-
ment MaVar est maintenant pass par adresse et sa v aleur peut donc tre modifie. L
programme ainsi modifi a fiche trois botes de dialogue dont le message est success ve-
ment 2, 102 et 202, refltant ainsi la modification de la aleur de MaVar effective lors des
deuxime et troisime excutions de la procdure ProcdureStatic.

Procdures Function
Une procdure Function (ou fonction) est une srie d instructions e xcutant une tche
dtermine au sein du projet et ren voyant une v aleur, qui sera e xploite par dautres
procdures. Une procdure Function est structure de la faon suivante :

Function NomDeLaProcdure(Arguments)
Instructions
...
NomDeLaProcdure = Expression
...
End Function
Livre Macros excel.book Page 141 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 141

Les instructions Function et End Function dterminent le dbut et la fin de la procdure


NomDeLaProcdure correspond au nom attrib u la procdure et doit respecter les rgles
daffectation de noms de Visual Basic. Ce nom est utilis pour in voquer la procdure
partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure.
NomDeLaProcdure = Expression affecte une valeur la fonction. NomDeLaProcdure est
le nom af fect la procdure dans linstruction de dclaration Function, et Expression,
une expression affectant une valeur la fonction. Cette instruction daffectation peut appa-
ratre plusieurs reprises et nimporte o dans le code de la fonction. La v aleur renvoye
par la fonction est alors la dernire valeur reue lorsque la fonction prend fin
Linstruction de dclaration Function peut aussi contenir des ar guments facultatifs, selon
la syntaxe suivante :

[Private | Public] [Static] Function NomDeLaProcdure ([Arguments])


[As Type]
Instructions
...
NomDeLaProcdure = Expression
End Function

As Type permet de prciser le type de v aleur renvoy par la procdure. Il peut sagir de
lun des types de v ariables prsents au Chapitre 6. A df aut dtre prcis, la fonction
renverra une valeur de type Variant. Comme nous la vons dj mentionn, il est recom-
mand de prciser cet argument afin de limiter la mmoire empl ye par le programme.
Les mots cls Private et Public indiquent si la procdure est pri ve ou publique. Le mot
cl Static indique que les v ariables locales de la procdure sont statiques, cest--dire
conservent leur valeur entre les appels. Pour un rappel de ces concepts, reportez-v ous la
section prcdente, "Procdures Sub".
Arguments reprsente les ar guments passs la procdure Function par la procdure
appelante. La virgule sert de sparateur entre les diffrentes variables transmises.
Dans linstruction Function suivante :

Sub MaFonction(arg1, arg2)

La procdure MaFonction est dclare comme ncessitant les ar guments arg1 et arg2.
Autrement dit, lorsque la procdure MaFonction sera appele, la procdure appelante
devra lui passer ces ar guments ou une erreur sera gnre. Les appels de procdures et le
passage darguments sont tudis dans la section "Appel et sortie dune procdure", plus
loin dans ce chapitre.
Livre Macros excel.book Page 142 Vendredi, 3. avril 2009 7:45 07

142 Excel et VBA

Chacun des arguments de Arguments rpond la syntaxe suivante :


[Optional] [ByVal | ByRef] [ParamArray] NomVariable [As type]
[=ValeurParDfaut]

Cette syntaxe est la mme que celle utilise pour les arguments dune instruction Sub. Pour
un rappel de lutilisation des dif frents lments de cette syntax e, reportez-v ous au
Tableau 5.1.
La procdure Function suivante calcule la surface dun cercle :
Function SurfaceCercle(Rayon As Long) As Long
Const Pi = 3.14
SurfaceCercle = Pi * Rayon * Rayon
End Function

La premire ligne dclare la fonction laide de linstruction Function en indiquant que


largument Rayon est requis. Cet argument devra donc tre prcis dans linstruction appe-
lante. La fonction ainsi que lar gument attendu sont de type Long. Une constante Pi est
ensuite dfinie. A la troisime ligne, la fonction SurfaceCercle est affecte une expres-
sion reprsentant la surface du cercle dun rayon de Rayon centimtres. Enfin, linstructio
End Function signale la fin de la procdure
Les procdures Function peuvent trs simplement tre appeles partir dautres procdu-
res. Lorsquune procdure Function est dfinie, ous pouvez lutiliser comme nimporte
quelle fonction intgre de Visual Basic, cest--dire en faisant apparatre son nom suivi de
la liste des arguments requis par la fonction entre parenthses, dans une expression.
Considrez le programme suivant :
Sub MaProcdure()
Dim Rayon
Rayon = 10
MsgBox "La surface du cercle est de " & SurfaceCercle(Rayon)
& " centimtres carr.", _
vbOKOnly & vbInformation, "Appel de fonction"
End Sub

Function SurfaceCercle(Rayon)
Const Pi = 3.14
SurfaceCercle = Pi * Rayon * Rayon
End Function

La sous-routine MaProcdure dclare la variable Rayon et lui affecte la valeur 10. Elle affi
che ensuite une bote de dialogue dont une partie du message (en gras, dans le listing) f ait
appel la fonction SurfaceCercle en lui passant largument Rayon prcdemment dfini
La fonction SurfaceCercle calcule donc la surf ace du cercle et rend la main la proc-
dure appelante qui affiche la bote de dialogue prsente la Figure 5.4
Livre Macros excel.book Page 143 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 143

Figure 5.4
Linstruction MsgBox fait appel
la fonction SurfaceCercle
pour affi her la surface
du cercle.

Procdures Property
Une procdure Property (ou procdure de proprit) est une srie d instructions excu-
tant une tche dtermine au sein du projet et manipulant des donnes de type
Proprits. Il existe trois types de procdures Property:
Les procdures Property Get ren voient la v aleur dune proprit qui sera ensuite
exploite par dautres procdures.
Les procdures Property Let dfinissent la aleur dune proprit.
Les procdures Property Set tablissent une rfrence entre un objet et une proprit.

Une proprit est un attribut nomm dun objet, dfinissant ses ca actristiques
pel ou son tat. P ar e xemple, la pr oprit Address dun objet Range r envoie
Rap
ladresse de cet objet (A1, par e xemple). La pr oprit ColorIndex dun objet
Font renvoie la couleur de cet objet (une police de caractres).

Procdures Property Get


Une procdure Property Get est structure de la faon suivante :
Property Get NomDeLaProcdure ()
Instructions
...
NomDeLaProcdure = Expression
...
End Property

Les instructions Property Get et End Property dterminent le dbut et la fin de la proc
dure. NomDeLaProcdure correspond au nom attrib u la procdure et doit respecter les
rgles daf fectation de noms de Visual Basic. Ce nom est utilis pour in voquer la
procdure partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure.
NomDeLaProcdure = Expression affecte une valeur la procdure de proprit. NomDeLa-
Procdure est le nom af fect la procdure dans linstruction de dclaration Property Get,
et Expression, une e xpression af fectant une v aleur la procdure. Cette instruction
daffectation peut apparatre plusieurs reprises et nimporte o dans le code de la procdure.
Livre Macros excel.book Page 144 Vendredi, 3. avril 2009 7:45 07

144 Excel et VBA

Lcriture dune procdure Property Get se justifie lorsque la aleur de la proprit ne peut
tre renvoye en une seule instruction Visual Basic par e xemple, lorsque lon souhaite
renvoyer sous forme de chane de caractres une proprit affecte une constante.
La procdure de proprit sui vante ren voie une chane de caractres reprsentant un
commentaire fonction de la v aleur de la cellule qui lui est passe. Cette information est
renvoye par la proprit Value de lobjet Cellule. En fonction de la valeur renvoye, une
chane de caractres est affecte la procdure.
1: Property Get RenvoyerCommentaire(Cellule As Range) As String
2: Select Case Cellule.Value
3: Case Is < 10000
4: RenvoyerCommentaire = "Trs mauvais"
5: Case 10000 To 20000
6: RenvoyerCommentaire = "Mauvais"
7: Case 20001 To 30000
8: RenvoyerCommentaire = "Correct"
9: Case 30001 To 40000
10: RenvoyerCommentaire = "Bon"
11: Case Is > 40000
12: RenvoyerCommentaire = "Trs bon"
13: End Select
14: End Property

Ce listing est numr ot de faon simplifier la prsentation des di frentes


ntion instructions de la procdure RenvoyerCommentaire. La prsence de cette numro-
Atte
tation dans la procdure relle gnrerait videmment une erreur lexcution.

A la ligne 1, linstruction Property Get dclare la procdure RenvoyerCommentaire, qui


doit recevoir largument Cellule de type Range (Cellule As Range), et qui ren voie une
valeur de type String (As String). Une instruction de contrle Select Case est utilise
pour tester la v aleur ren voye par le xpression Cellule.Value des lignes 2 13. Pour
chacune des plages de valeurs testes, une chane de caractres est affecte la procdure
de proprit (RenvoyerCommentaire = "commentaire").
Les procdures Property Get peuv ent trs simplement tre appeles partir dautres
procdures. Lorsquune procdure Property Get est dfinie, ous pouvez lutiliser dans
nimporte quelle e xpression e xploitant une v aleur de proprit, cest--dire en f aisant
apparatre son nom suivi de la liste des ventuels arguments entre parenthses.
Considrez les procdures suivantes :
Sub DefinirCommentaire()
Dim LaCellule As Range
For Each LaCellule In Selection
LaCellule.AddComment (RenvoyerCommentaire(LaCellule))
Next LaCellule
End Sub
Livre Macros excel.book Page 145 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 145

Property Get RenvoyerCommentaire(Cellule) As String


Select Case Cellule.Value
Case Is < 10000
RenvoyerCommentaire = "Trs mauvais"
Case 10000 To 20000
RenvoyerCommentaire = "Mauvais"
Case 20001 To 30000
RenvoyerCommentaire = "Correct"
Case 30001 To 40000
RenvoyerCommentaire = "Bon"
Case Is > 40000
RenvoyerCommentaire = "Trs bon"
End Select
End Property

La sous-routine DefinirCommentaire appelle la procdure de proprit RenvoyerCommen-


taire. Une variable objet de type Range y est cre, et une structure For Each...Next est
utilise pour ef fectuer un traitement sur chaque cellule de la slection en cours dans la
feuille de calcul acti ve. Nessayez pas pour linstant de comprendre ces instructions. Les
variables et les structures de contrle telles que les structures For Each Next et Select
Case sont prsentes en dtail dans les deux chapitres suivants.
La mthode AddComment est applique chaque cellule afin dinsrer un commentaire
Cette mthode sutilise selon la syntaxe suivante :
Expression.AddComment(Texte)

o Expression est une e xpression renvoyant un objet Range (une cellule ou une plage de
cellules) et Texte, le texte du commentaire.
Plutt quune chane de caractres, lar gument Texte reoit ici pour v aleur lexpression
RenvoyerCommentaire(LaCellule). Cette expression appelle la procdure Property Get
du mme nom, en lui passant largument LaCellule. Cette procdure sexcute et renvoie
une chane de caractres. Celle-ci est passe la procdure appelante qui laffecte comme
commentaire de la cellule (voir Figure 5.5).

Figure 5.5
Chacune des cellules
comprises dans la
slection au moment
de lexcution de la
macro sest vue affecter
un commentaire.
Livre Macros excel.book Page 146 Vendredi, 3. avril 2009 7:45 07

146 Excel et VBA

Procdures Property Let


Une procdure Property Let est structure de la faon suivante :
Property Let NomDeLaProcdure (VarStockage)
Instructions
End Property

Les instructions Property Let et End Property dterminent le dbut et la fin de la proc
dure. NomDeLaProcdure correspond au nom attrib u la procdure et doit respecter les
rgles daf fectation de noms de Visual Basic. Ce nom est utilis pour in voquer la
procdure partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure.
VarStockage est la variable recevant la valeur passe par la procdure appelante et assimi-
le la valeur affecte la proprit. Comme vous le verrez dans lexemple suivant, cette
valeur peut ensuite tre traite par la procdure afin de dterminer la aleur devant tre
affecte la proprit.
La procdure Property Let suivante est en quelque sorte la procdure miroir de la proc-
dure Property Get, dcrite plus haut. Cette procdure affecte une couleur de remplissage
chacune des cellules de la slection en cours, en fonction du commentaire af fect la
cellule. La chane reprsentant le commentaire dtermine la v aleur de la variable numri-
que qui sera affecte la proprit ColorIndex de lobjet Range (la cellule).
1: Property Let CouleurDeRemplissage(LaCellule As Range)
2: Dim IndexCouleur As Integer
3: Select Case LaCellule.Comment.Text
4: Case "Trs mauvais"
5: IndexCouleur = 3 Index de la couleur Rouge
6: Case "Mauvais"
7: IndexCouleur = 6 Index de la couleur Jaune
8: Case "Correct"
9: IndexCouleur = 5 Index de la couleur Bleu
10: Case Else
11: IndexCouleur = xlColorIndexNone
12: End Select
13: LaCellule.Interior.ColorIndex = IndexCouleur
14: End Property

A la ligne 1, linstruction Property Let dclare la procdure CouleurDeRemplissage,


spcifiant que la gument LaCellule de type Range doit tre pass par la procdure
appelante. La variable IndexCouleur est dclare laide de linstruction Dim la ligne 2.
Une instruction de contrle Select Case est ensuite utilise pour tester la v aleur de
lexpression LaCellule.Comment.Text, qui renvoie le texte de commentaire de la cellule
(lignes 3 12). Si la v aleur renvoye est g ale Trs mauvais, Mauvais ou Correc t,
une valeur reprsentant un inde x de couleur est af fecte la v ariable IndexCouleur.
Livre Macros excel.book Page 147 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 147

Si le commentaire de la cellule ne correspond aucune de ces v aleurs, IndexCouleur se


voit affecter la constante xlColorIndexNone. Enfin, linstruction de la ligne 13 affecte la
valeur de IndexCouleur la proprit ColorIndex de lobjet Interior de la cellule, cest-
-dire applique une couleur de remplissage la cellule
Pour appeler une procdure Property Let, utilisez une instruction daffectation, assimila-
ble laf fectation dune proprit ( Proprit = Valeur). Le nom de la procdure plac
gauche de linstruction daf fectation sera assimil une e xpression ren voyant une
proprit. Largument requis par la procdure Property Let place droite de le xpression
sera assimil la valeur affecte la proprit.
Considrez lexemple suivant :

Sub DefinirRemplissage()
Dim LaCellule As Range
For Each LaCellule In Selection
CouleurDeRemplissage = LaCellule
Next LaCellule
End Sub

Property Let CouleurDeRemplissage(LaCellule As Range)


Dim IndexCouleur As Integer
Select Case LaCellule.Comment.Text
Case "Trs mauvais"
IndexCouleur = 3 Index de la couleur Rouge
Case "Mauvais"
IndexCouleur = 6 Index de la couleur Jaune
Case "Correct"
IndexCouleur = 5 Index de la couleur Bleu
Case Else
IndexCouleur = xlColorIndexNone
End Select
LaCellule.Interior.ColorIndex = IndexCouleur
End Property

Dans la sous-routine DefinirRemplissage, linstruction daffectation CouleurDeRem-


plissage = LaCellule est assimile une af fectation de proprit. Couleur-
DeRemplissage est assimil une e xpression renvoyant une proprit et LaCellule, la
valeur affecte cette proprit. La procdure CouleurDeRemplissage est donc appe-
le par cette instruction. Elle se xcute et interroge la v aleur de la proprit Text de
lobjet Comment de la v ariable LaCellule. La v ariable IndexCouleur reoit une v aleur,
fonction du rsultat retourn. Cette v aleur est ensuite af fecte la proprit Color-
Index de lobjet Interior de la cellule. La procdure appelante reprend ensuite la
main et procde de la mme faon pour la cellule suivante de la slection.
Livre Macros excel.book Page 148 Vendredi, 3. avril 2009 7:45 07

148 Excel et VBA

Syntaxe avance
Au mme titre que les instructions Sub et Function, les instructions de dclaration Property
Get et Property Let peuvent tre prcdes des mots cls Private ou Public et/ou Static,
afin de spcifier si la procdure est p ve ou publique, et si ses variables locales sont statiques.
Pour un rappel de ces concepts, reportez-vous la section "Procdures Sub" de ce chapitre.
Les instructions de dclaration Property Get et Property Let peuvent aussi spcifier de
arguments dans les parenthses sui vant le nom de la procdure. Chacun des ar guments
rpond la syntaxe suivante :
[Optional] [ByVal | ByRef] [ParamArray] NomVariable [As type] [=ValeurParDfaut]

Cette syntaxe est la mme que celle utilise pour les ar guments des instructions de dcla-
ration Sub et Function. Pour un rappel de lutilisation des diffrents lments de cette
syntaxe, reportez-vous la section "Procdures Sub", plus haut dans ce chapitre.
Enfin, une instruction Property Get peut se terminer par largument As Type prcisant le
type de v aleur ren voy par la procdure. Il peut sagir de lun des types de v ariables
prsents au Chapitre 6.

Des projets bien structurs


Contrairement aux feuilles qui sont automatiquement stockes dans le dossier UserF orm
de votre projet, il v ous incombe de dterminer lor ganisation des modules de code et des
modules de classe. Vous pouvez ainsi structurer les procdures constituant votre projet, de
faon y accder facilement.
Les modules sont en quelque sorte les dossiers dans lesquels v ous rangez les papiers qui
constituent vos applications VBA. Une bonne organisation vous assurera de retrouver rapi-
dement les documents dont vous avez besoin.
Organisez les procdures dun projet par modules cohrents, en runissant les procdures
qui ont une fonction commune au sein dun mme module. Veillez aussi structurer le
code en procdures distinctes. Si une application VBA peut tre contenue dans une seule
procdure, la division des tches complexes en plusieurs procdures distinctes qui sappel-
leront est fortement recommande. Le code ainsi se gment sera plus f acile grer , et le
dbogage considrablement simplifi

Ajouter un module
Vous serez probablement amen dv elopper des applications VBA distinctes au sein
dun mme projet. Il est alors important de placer les procdures constituant une applica-
tion au sein de mmes modules. Si v ous stockez toutes les procdures dun projet au sein
Livre Macros excel.book Page 149 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 149

dun mme module, sans aucune distinction, v ous risquez dtre rapidement dpass par
un nombre important de procdures dont vous serez incapable de dfinir les rapports
Pour crer un module standard ou un module de classe, procdez comme suit :
1. Lancez Visual Basic Editor partir dExcel (Alt + F11) le document hte du projet
doit tre ouvert.
2. Dans Visual Basic Editor , af fichez lExplorateur de projet (Ctrl + R). Si plusieurs
projets sont accessibles dans lExplorateur de projet, cliquez sur nimporte quel
lment du projet auquel vous souhaitez ajouter un module, afin de lact ver.
3. Pour ajouter un module au projet actif, choisissez lune des trois mthodes suivantes :
Cliquez du bouton droit et, dans le menu conte xtuel qui saf fiche, slectionne
Insertion. Dans le sous-menu, slectionnez Module ou Module de classe.
Ouvrez le menu Insertion et choisissez la commande Module ou Module de classe.
Cliquez sur la flche du bouton Ajouter de la barre doutils Standard. Dans le
menu qui saffiche, slectionnez Module ou Module de classe
La fentre Code du module insr souvre. Le module insr est automatiquement
nomm : Module1 (Module2, sil existe dj un module nomm Module1) sil sagit
dun module standard, et Class1 (Class2, sil e xiste dj un module nomm Class1)
sil sagit dun module de classe.
4. Pour attribuer un nom au nouveau module, ouvrez sa fentre Proprits (F4). Indiquez un
nom reprsentatif. Le nom du module apparaissant dans la barre de titre de la fentre Code
et dans lExplorateur de projet est automatiquement mis jour (voir Figure 5.6).

Figure 5.6 Le nom du module est mis jour dans l'Explorateur


Choisissez des noms de projet et dans la barre de titre de la fentre Code
reprsentatifs pour
vos modules.

Dterminez le nom du module


dans la fentre Proprits
Livre Macros excel.book Page 150 Vendredi, 3. avril 2009 7:45 07

150 Excel et VBA

Supprimer un module
Pour supprimer un module ou une feuille dun projet, procdez comme suit :
1. Slectionnez un module ou une feuille dans lExplorateur de projet.
2. Cliquez du bouton droit et, dans le menu conte xtuel qui saf fiche, slectionne
Supprimer Module (o Module est le nom du module slectionn).
Visual Basic Editor affiche une bote de dialogue ous proposant dexporter le module
avant la suppression (voir Figure 5.7).

Figure 5.7
Pour sauvegarder les informa-
tions contenues dans un
module avant sa suppression,
exportez-le.

3. Si vous souhaitez supprimer dfinit vement le module, choisissez Non. Le module est
supprim.
4. Pour effectuer une sauvegarde du module afin de pou oir le rcuprer en cas de nces-
sit, choisissez Oui.
5. La bote de dialogue Exporter un fichier sa fiche ( oir Figure 5.8). Le type du fichie
export varie selon llment supprim :
Les modules standard ou modules de code sont e xports sous la forme de fichier
Basic portant lextension .bas.
Les modules de classe sont e xports sous la forme de fichiers Classe portan
lextension .cls.
Les feuilles sont e xportes sous la forme de fichiers Feuille portant l xtension
.frm.
6. Indiquez le rpertoire et le nom denregistrement, puis cliquez sur le bouton Enregistrer.

Pour exporter un module sans le supprimer, slectionnez la commande Expor -


Info ter un fi hier du menu Fichier. Vous pourrez ensuite limporter dans nimporte
quel projet en choisissant Fichier, Importer un fi hier.
Livre Macros excel.book Page 151 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 151

Figure 5.8
Indiquez le nom du f chier
export et son dossier
denregistrement.

Crer une procdure


Pour crer une procdure, acti vez la fentre Code du module dans lequel sera stocke la
procdure. Si v ous souhaitez crer un nouv eau module, reportez-v ous la section "Des
projets bien structurs", en fin de chapitre
Vous pouv ez ensuite crire directement linstruction de dclaration de la procdure ou
utiliser la bote de dialogue Ajouter une procdure.

Ecrire linstruction de dclaration


1. Dans la fentre Code du module v oulu, placez le point dinsertion lendroit o v ous
souhaitez insrer une procdure.

Les pr ocdures ne peuvent tr e imbriques. Veillez donc ce que le point


ntion dinsertion se trouve lextrieur de toute procdure.
Atte

2. Saisissez les v entuels mots cls prcisant la porte de la procdure ( Public ou


Private) et le comportement des variables locales (Static). (Etape facultative.)
3. Tapez linstruction de dclaration correspondant au type de procdure que v ous
souhaitez crer, soit Sub, Function, Property Get, Property Let ou Property Set.
4. Saisissez le nom de la procdure.
5. Indiquez ensuite les v entuels ar guments de la procdure entre parenthses. (Etape
facultative.)
6. Tapez sur la touche Entre afin de placer un retour chariot
Livre Macros excel.book Page 152 Vendredi, 3. avril 2009 7:45 07

152 Excel et VBA

Visual Basic Editor ajoute automatiquement linstruction End correspondant au type de


procdure ajout ( End Sub, End Function ou End Property). Si vous navez indiqu
aucun ar gument pour la procdure, une parenthse ouvrante, immdiatement sui vie
dune parenthse fermante, est automatiquement ajoute derrire le nom de la proc-
dure (voir Figure 5.9).
7. Saisissez le code de votre procdure entre ces instructions dencadrement.

Figure 5.9 Les parenthses et l'instruction End


Saisissez linstruction sont automatiquement ajoutes
de dclaration de la proc-
dure, et Visual Basic Editor
insrera linstruction End
correspondante.

Saisissez ici le code


de votre procdure

Vous pouvez aussi prciser le comportement et la disponibilit de la pr oc-


Info dure en ajoutant, par e xemple, le mot cl Static de vant linstruction de
dclaration de faon dfinir les variables locales comme statiques. our
plus de prcisions, reportez-vous au Chapitre 6.

La bote de dialogue Ajouter une procdure


1. Activez la fentre Code du module dans lequel vous souhaitez insrer une procdure.
2. Cliquez sur la flche situe droite du bouton Ajouter de la barre doutils Standard et,
dans le menu qui saffiche, slectionnez la commande Procdure
La bote de dialogue Ajouter une procdure prsente la Figure 5.10 saffiche

La commande Procdure nest pas disponible si la fentr e active nest pas une
Info fentre Code.

3. Entrez les informations dcrivant la procdure que vous souhaitez insrer dans la bote
de dialogue Ajouter une procdure :
Dans la zone Nom, saisissez le nom qui sera affect la procdure.
Livre Macros excel.book Page 153 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 153

Figure 5.10
La bote de dialogue Ajouter
une procdure.

Dans la zone Type, cliquez sur le bouton radio correspondant au type de procdure
que vous souhaitez ajouter.
Dans la zone Porte, spcifiez la porte de la procdure. Le mot cl correspondan
sera ajout devant linstruction de dclaration.
Cochez ventuellement la case Toutes les variables locales statiques. Cela ajoute le
mot cl Static devant linstruction de dclaration de la procdure.
4. Cliquez sur le bouton OK. La bote de dialogue se ferme, et les instructions dencadre-
ment de la procdure sont insres dans la partie infrieure de la fentre Code.
5. Saisissez les v entuels ar guments de la procdure entre les parenthses situes
derrire le nom de la procdure.
6. Saisissez le code de v otre procdure entre linstruction de dclaration de la procdure
et linstruction End correspondante.

Figure 5.11
Les instructions
dencadrement de
la procdure dfinie
dans la bote de
dialogue Ajouter
une procdure sont
automatiquement
insres dans la
partie infrieure
de la fentre Code.

Lorsque vous slectionnez le type Property, les instructions dencadr ement


Info dune procdure Property Get et dune procdure Property Let sont insres.
Livre Macros excel.book Page 154 Vendredi, 3. avril 2009 7:45 07

154 Excel et VBA

La notion de porte
La porte dune procdure est essentielle puisquelle en dtermine laccessibilit pour
les autres procdures du projet. Les procdures peuv ent tre publiques ou prives. Une
procdure publique est visible pour nimporte quelle procdure du projet, quel que soit son
module de stockage. Une procdure pri ve est in visible pour les procdures autres que
celles de son module.

Ainsi, une procdure de vant tre appele par une procdure appelante situe dans un
autre module doit tre publique. Si, au contraire, v ous souhaitez interdire lappel dune
procdure par une procdure appelante situe dans un autre module, v ous de vez la
dclarer prive.

La porte dune procdure est dtermine dans son instruction de dclaration. Le mot cl
Public indique une procdure de porte publique, tandis que le mot cl Private indique une
procdure de porte prive.

Par dfaut, les procdures des modules de code et des modules de classe sont publiques. Il
nest donc pas utile de placer le mot cl Public devant une instruction de dclaration de
procdure pour la rendre publique. P ar contre, si v ous souhaitez dclarer une procdure
prive, vous devez placer le mot cl Private devant linstruction de dclaration de cette
procdure.

Les procdures vnementielles sont, par dfinition, pr ves. Elles ne peuvent en effet pas
tre appeles par une autre procdure, puisque seul lvnement spcifi peut les dclen
cher. Comme vous le verrez au Chapitre 14, lorsque vous crez des procdures vnemen-
tielles, le mot cl Private est automatiquement insr.

Les deux instructions suivantes dclarent une procdure Sub de porte publique :

Sub MaProcdurePublique()
Instructions
End Sub

Public MaProcdurePublique()
Instructions
End Sub

Linstruction suivante dclare une procdure Sub de porte prive :

Private MaProcdurePrive()
Instructions
End Sub
Livre Macros excel.book Page 155 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 155

Ecriture et mise en forme du code


Les instructions constituant une procdure sont autonomes et sont gnralement crites sur
une ligne distincte. Pour crire une instruction, placez le curseur sur une ligne vier ge et
saisissez le te xte au cla vier. Linstruction crite, tapez sur la touche Entre et cri vez
linstruction suivante.

Caractre de continuit de ligne


Une instruction peut cependant tre crite sur plusieurs lignes de code en plaant le carac-
tre de continuit de ligne le trait de soulignement (_) afin dindiquer que linstruc
tion se poursuit sur la ligne sui vante. Le caractre de continuit de ligne f acilite dans
certains cas la lecture du code, en permettant de lire une instruction longue sans avoir se
dplacer dans la fentre Code laide de la barre de dfilement horizontale
Ainsi, la procdure suivante est compose des instructions de dclaration Sub et End Sub et
dune seule et mme instruction excutable MsgBox rpartie sur plusieurs lignes laide du
caractre de continuit de ligne :

Sub MaProcdure()
MsgBox ("Cette instruction affiche une bote de dialogue " _
& "dans laquelle est affich ce trs long message, que nous avons " _
& "rparti sur quatre lignes laide du caractre de continuit " _
& "de ligne")
End Sub

Notez que le message af fich par la fonction MsgBox a t spar en plusieurs chanes de
caractres concatnes laide de loprateur &. Le caractre de continuit de ligne ne peut
en effet tre utilis quentre des lments distincts dune instruction. Autrement dit, une
mme chane de caractres, une e xpression, un mot cl ou encore une constante ne
peuvent tre crits sur plusieurs lignes.

Les commentaires
Un commentaire est une indication destine f aciliter la lecture du code en dcri vant les
tches quexcute une instruction, la date de cration dune procdure, etc.
Linsertion de commentaires dans le te xte dune procdure peut se rvler utile, parti-
culirement si elle comprend un grand nombre dinstructions dont vous souhaitez reconnatre
rapidement les fonctions respectives.
Si v ous souhaitez insrer des commentaires dans le te xte dune procdure, il f aut bien
videmment que ceux-ci soient reconnus en tant que tels, et non en tant quinstructions, ce
qui gnrerait une erreur lors de lexcution de la procdure.
Livre Macros excel.book Page 156 Vendredi, 3. avril 2009 7:45 07

156 Excel et VBA

Visual Basic considre le te xte en tant que commentaire et lignore lors de le xcution
dune procdure sil est prcd :
dune apostrophe () ;
du mot cl REM.
Par dfaut, les commentaires apparaissent en v ert dans Visual Basic Editor. Pour modifie
la couleur daf fichage des commentaires, reportez- ous la section "Un code tout en
couleur", plus loin dans ce chapitre.

Utiliser lapostrophe
Lutilisation de lapostrophe pour marquer les commentaires permet de placer ceux-ci
nimporte quel endroit du te xte. Vous pouvez ainsi insrer un commentaire sur la mme
ligne que linstruction concerne en plaant autant despaces que v ous le souhaitez entre
celle-ci et lapostrophe. Lapostrophe se rvlera particulirement intressante et ef ficac
pour les instructions dont la syntax e est courte, puisquelle permettra daligner les dif f-
rents commentaires. A la Figure 5.12, lapostrophe a t utilise comme marqueur de
commentaires dans la macro GrasItalique du Chapitre 2.
Figure 5.12
Lapostrophe
permet daligner
les commentaires.

Utiliser REM
La syntaxe REM joue le mme rle que lapostrophe. Cependant, contrairement celle-ci, le
marqueur REM ne peut tre accol linstruction quil commente mais doit toujours tre
plac en db ut de ligne. Il sera donc utilis de prfrence pour commenter des blocs
dinstructions plutt quune seule instruction. La Figure 5.13 illustre lutilisation de REM.

ce Vous pouvez utiliser des car actres facilement discernables pour fair e ressowwwwr-
Astu tir les commentair es. Vous pouvez, par e xemple, prsenter vos commentair es de la
faon suivante :
*******************************
****Ceci est un commentaire****
*******************************
Livre Macros excel.book Page 157 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 157

Figure 5.13
Linstruction REM
ne peut tre place
quen dbut de ligne.

Commenter un bloc dinstructions


Lorsque vous testerez le comportement des applications VBA, il se rvlera parfois nces-
saire de placer en commentaire un bloc dinstructions que v ous ne souhaitez pas v oir
sexcuter lors de cette phase. Le bouton Commenter bloc de la barre doutils Edition
permet de commenter toutes les instructions slectionnes dans la fentre Code acti ve, en
plaant une apostrophe devant chaque ligne de la slection.
Pour ractiver un bloc dinstructions commentes, slectionnez les instructions en ques-
tion et cliquez sur le bouton Ne pas commenter de la barre doutils Edition. Toutes les
apostrophes de dbut de ligne du bloc dinstructions sont supprimes.

Lorsque vous enr egistrez une macr o dans lapplication hte , des lignes de
Info commentaires indiquant la date denr egistrement de la macr o sont places
derrire linstruction de dclaration de la procdure.

Mise en forme du code


La mise en forme du code consiste appliquer des retraits de ligne v ariables aux instruc-
tions, et effectuer dventuels sauts de ligne entre les blocs dinstruction afin damliore
la lisibilit et de faciliter linterprtation du code. On applique en gnral un mme retrait
aux instructions de mme niveau, cest--dire sexcutant un mme niveau dans la proc-
dure ou appartenant une mme structure. Lorsque des instructions sont imbriques dans
dautres instructions, on leur applique un retrait supplmentaire par rapport ces derni-
res. La hirarchie qui rgit les instructions dune procdure peut ainsi tre visualise, ce
qui en simplifie la lecture ( oir Figure 5.14).
Livre Macros excel.book Page 158 Vendredi, 3. avril 2009 7:45 07

158 Excel et VBA

Figure 5.14
Utilisez les retraits
de ligne pour am-
liorer la lisibilit
de votre code.

Des instructions sont dites imbriques lor sque leur e xcution sef fectue
ition lintrieur dun autre bloc dinstructions. Vous pouvez, par exemple, crer une
Dfin
instruction conditionnelle qui vrifie quune pl ge de cellules dune feuille de
classeur contient des valeurs numriques, et y imbriquer une autr e structure
conditionnelle qui effectuera des tches dtermines. Les structures de contrle
et leur imbrication sont tudies au Chapitre 7.

Pour appliquer des retraits de ligne, v ous pouvez placer indif fremment des espaces
ou des tabulations en dbut de ligne. Lditeur peut aussi tre paramtr de faon que,
lorsquun retrait de ligne est appliqu, le mme retrait soit appliqu la ligne
suivante :
1. Choisissez la commande Options du menu Outils et slectionner longlet Editeur de la
bote de dialogue Options.
2. Cochez la case Retrait automatique, puis dfinissez une aleur de retrait comprise entre
1 et 32 dans la zone Retrait de la tab ulation. Cette v aleur correspond au nombre
despaces qui seront appliqus lors de la frappe de la touche Tabulation.
3. Cliquez sur OK pour valider les paramtres dfinis
Pour augmenter ou diminuer simultanment le retrait de ligne de plusieurs instructions,
slectionnez celles-ci, puis cliquez sur le bouton Retrait ou sur le bouton Retrait ngatif de
la barre doutils Edition. La v aleur du retrait appliqu correspond la v aleur dfinie pou
le retrait de tabulation.

Un code tout en couleur


Toujours dans loptique de faciliter linterprtation du code, les lments constitutifs dune
procdure sont affichs dans di frentes couleurs, chaque couleur identifiant une catgori
spcifique du lan age. P ar e xemple, les commentaires sont af fichs par d aut en v ert,
tandis que les mots cls du langage apparaissent en bleu et que les erreurs de syntaxe sont
affiches en rouge ( oir Figure 5.15).
Livre Macros excel.book Page 159 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 159

Figure 5.15
Les couleurs dter-
minent les catgories
de texte et mettent
en valeur les erreurs
de syntaxe.

Pour dfinir os propres paramtres daf fichage du t xte dans la fentre Code, procdez
comme suit :
1. Choisissez la commande Options du menu Outils, puis acti vez longlet F ormat de
lditeur de la bote de dialogue qui saffiche ( oir Figure 5.16).

Figure 5.16
Longlet Format de lditeur
permet de personnaliser
laffi hage du code.

2. Dans la zone Couleur de code, slectionnez la catgorie dont v ous souhaitez modifie
les paramtres daf fichage. Dterminez ensuite les options da fichage de otre choix
dans les zone de liste droulantes suivantes :
Premier plan. Dfinit la couleur de premier plan. Lorsque le t xte nest pas slec-
tionn, il sagit de la couleur des caractres.
Arrire-plan. Dtermine la couleur darrire-plan.
Indicateurs. Dfinit la couleur des indicateurs apparaissant en ma ge, pour les
catgories du langage affichant ce type dindicateu .
Livre Macros excel.book Page 160 Vendredi, 3. avril 2009 7:45 07

160 Excel et VBA

3. Modifiez entuellement la police daf fichage du code, en slectionnant la police d


caractres de votre choix dans la zone de liste droulante Police et en dterminant un
corps de caractres dans la zone Taille.
4. Pour masquer la barre des indicateurs en marge, dcochez la case correspondante. Vous
gagnerez de lespace pour afficher le code, mais les indicateurs en ma ge ne seront plus
affichs
5. Cliquez sur OK pour valider les paramtres daffichage du code dfini

Les par amtres daf fi hage du code tels quils sont dfinis par dfaut dan
eil Visual Basic Editor assurent une lecture confortable lcran. Si vous souhai-
Cons
tez cependant per sonnaliser les par amtres daf fi hage du code , veillez
conserver cette qualit de lecture.

Dplacer une procdure


Si vous tes un adepte des grands mnages larri ve du printemps, il v ous arrivera de
souhaiter mettre de lordre dans vos projets VBA. Vous serez alors probablement amen
dplacer des procdures dun module un autre, afin de structurer de aon cohrente vos
projets. Pour dplacer une procdure vers un autre module, utilisez la technique du glisser-
dplacer :
1. Ouvrez les fentres Code concernes et af fichez-les simultanment laide de
commandes Mosaque horizontale ou Mosaque verticale du menu Fentre.
2. Slectionnez la procdure que vous souhaitez dplacer.
3. Cliquez sur le te xte ainsi slectionn et, tout en maintenant le bouton de la souris
enfonc, dplacez le curseur v ers la fentre Code v oulue. Une barre v erticale grise
indique o la procdure slectionne sera dplace.
4. Relchez le bouton de la souris.

Sil est impossible def fectuer un glisser-dplacer dans la fentre Code, slec-
Info tionnez Outils, Options et cochez la case Glisser-dplacer pour ldition de texte
de longlet Editeur.

Noubliez pas que lEnr egistreur de macr o peut rduir e de faon considr able le
eil travail dcriture de code. Nhsitez pas enregistrer les tches qui peuvent ltre
Cons
dans une macr o. Ajoutez ensuite les instructions Visual Basic qui ne peuvent tr e
enregistres dans la fentre Code de la macro.
Livre Macros excel.book Page 161 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 161

Si vous de vez ajouter des instructions une macr o, vous pouvez enr egistrer les
commandes correspondantes dans une nouvelle macr o, puis coller le code ainsi
gnr lemplacement voulu.

Appel et sortie dune procdure


La di vision dun programme en plusieurs modules ef fectuant des tches prcises en
amliore la lisibilit et f acilite les v entuels dbog ages. Pour e xcuter le programme,
lutilisateur excute une procdure. Celle-ci effectue alors les tches pour lesquelles elle
a t dfinie et peut appeler une autre procdure qui prendra en cha ge le xcution
dautres tches. Elle pourra elle-mme appeler dautres procdures, et ainsi de suite.
Lorsquune procdure en appelle une autre, cette dernire se xcute, puis la procdure
appelante reprend la main et se poursuit avec linstruction qui suit linstruction dappel.

Appel dune procdure Sub


Appeler une procdure consiste demander une procdure de sexcuter partir dune
autre procdure. La procdure appele est excute, puis la procdure appelante reprend
la main. Pour appeler une procdure de type Sub, utilisez le mot cl Call, selon la
syntaxe suivante :
Call NomProcdure

o NomProcdure est le nom de la procdure appeler.

Une instruction contenant simplement le nom dune pr ocdure suffit appele


Cons
eil cette dernire. Lomission du mot cl Call est cependant dconseille , car le
code y perd en lisibilit.

Considrez lexemple suivant :


Sub AppelsDeProcdures()
MsgBox "1er message de la procdure 1"
Call Procdure2
MsgBox "2e message de la procdure 1"
End Sub

Sub Procdure2()
MsgBox "1er message de la procdure 2"
Call Procdure3
MsgBox "2e message de la procdure 2"
End Sub
Livre Macros excel.book Page 162 Vendredi, 3. avril 2009 7:45 07

162 Excel et VBA

Sub Procdure3()
MsgBox "1er message de la procdure 3"
MsgBox "2e message de la procdure 3"
End Sub

Lexcution de la procdure AppelsDeProcdures entrane laf fichage successif de


messages suivants :
1er message de la procdure 1
1er message de la procdure 2
1er message de la procdure 3
2e message de la procdure 3
2e message de la procdure 2
2e message de la procdure 1
La premire instruction de la procdure AppelsDeProcdures af fiche un message. L
procdure Procdure2 est ensuite appele laide de linstruction Call. Elle af fiche u
message, puis appelle son tour la procdure Procdure3. Celle-ci se xcute et af fich
conscutivement deux messages. Elle se termine alors, et la procdure appelante,
Procdure2, reprend la main. Elle se poursuit a vec linstruction place immdiatement
sous lappel et affiche de nou eau un message. Elle se termine son tour et rend la main
la procdure qui la appele, AppelsDeProcdures, qui af fiche un ultime message et s
termine.

Pour appeler une pr ocdure, celle-ci doit tr e visible pour la pr ocdure appe-
ntion lante. P our plus dinformations, r eportez-vous la section "La notion de
Atte
porte", plus haut dans ce chapitre.

Appels de procdures Function et Property


Les procdures Function et Property ont pour premire fonction de ren voyer une valeur
vous pouvez y placer des instructions effectuant des tches prcises dans un document,
mais il est prfrable de rserv er ces oprations aux procdures Sub. Pour appeler une
procdure Function ou Property, il suf fit de placer le nom de la procdure dans un
expression lemplacement o une v aleur est attendue. La procdure Property ou Func-
tion se xcute alors et se v oit af fecter une v aleur qui se substitue son appel dans la
procdure appelante.
Pour des exemples dappels de ce type de procdures, reportez-vous aux sections "Procdures
Function" et "Procdures Property", plus haut dans ce chapitre.
Livre Macros excel.book Page 163 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 163

Passage darguments
Lorsquune procdure est appele, il est souvent ncessaire de lui passer des valeurs issues
de la procdure appelante. La procdure appele e xploite alors les v aleurs qui lui sont
transmises et peut son tour passer des v aleurs une autre procdure. Les ar guments que
peut recevoir une procdure dune procdure appelante doi vent apparatre entre parenthse s
dans linstruction de dclaration de la procdure. Ces arguments peuvent tre facultatifs ou
obligatoires, de type dfini ou non
Largument pass la procdure appele peut tre une v aleur ou toute e xpression
renvoyant une valeur accepte par largument, cest--dire dun mme type de donnes
les types de donnes sont tudis au Chapitre 6.
Pour une re vue dtaille de la syntax e de dclaration des ar guments dune procdure,
reportez-vous au Tableau 5.1.

Passage darguments par ordre dapparition


Pour passer des arguments une procdure, vous pouvez faire apparatre les valeurs passer
entre parenthses dans linstruction dappel, en sparant chaque ar gument transmis par une
virgule et en respectant lordre dapparition des ar guments dans la dclaration de la proc-
dure appele. Plus concrtement, pour passer des arguments la procdure suivante :
Sub MaProcdure(Arg1, Arg2, Arg3)

utilisez une instruction Call de la faon suivante :


Call MaProcdure(ValArg1, ValArg2, ValArg3)

o ValArg1, ValArg2 et ValArg3 sont respectivement les valeurs que prendront les arguments
Arg1, Arg2 et Arg3 de la procdure MaProcdure.
Certains arguments sont optionnels ; la procdure appele peut alors se xcuter correcte-
ment sans que ces arguments lui soient passs par la procdure appelante. Pour ignorer un
argument lors dun appel de procdures, placez deux vir gules conscutives dans linstruc-
tion dappel, correspondant lemplacement de lar gument dans linstruction de dclara-
tion de la procdure appele. Par exemple, linstruction utilise pour passer les arguments
Arg1 et Arg3 la procdure MaProcdure sera :

Call MaProcdure(ValArg1, , ValArg3)

Lorsque vous ignorez un argument, veillez ne pas oublier de placer une vir gule pour cet
argument dans linstruction dappel de procdure. Un tel oubli gnrerait un dcalage dans
le passage de valeur la procdure appele. Linstruction suivante :
Call MaProcdure(ValArg1, ValArg3)
Livre Macros excel.book Page 164 Vendredi, 3. avril 2009 7:45 07

164 Excel et VBA

passe respectivement les v aleurs ValArg1 et ValArg3 aux ar guments Arg1 et Arg2 de la
procdure MaProcdure.

Pour vrifier si des a guments facultatifs ont t omis lor s de lappel de la pr oc-
eil dure, utilisez la fonction IsMissing selon la syntaxe suivante :
Cons
IsMissing(NomArgument)
La valeur True est renvoye si aucune valeur corr espondant largument na t
passe la procdure ; False dans le cas contraire.

La fonction IsMissing fonctionne avec des valeur s de type Variant. Si vous


ntion testez un ar gument dun autr e type , IsMissing renverra toujour s False, que
Atte
largument ait t pass ou non.

Arguments nomms
Le passage dar guments une procdure selon leur ordre dapparition dans linstruction
de dclaration de la procdure appele est parfois prilleux. En particulier lorsque des
arguments facultatifs ne sont pas passs par la procdure appelante ; une simple vir gule
oublie dans linstruction dappel peut alors gnrer une erreur du programme ou, pire,
des rsultats errons dont il sera difficile de dtecter la source
Lutilisation des arguments nomms permet dviter de tels problmes, en nommant la
valeur passe la procdure afin dviter toute ambigut. Les aguments nomms sont des
arguments dont le nom est reconnu par le programme. Lorsque v ous dclarez une proc-
dure, les ar guments qui lui sont af fects deviennent des ar guments nomms. Au lieu de
passer les ar guments selon leur ordre dapparition, v ous pouvez affecter des v aleurs aux
arguments nomms, dans lordre de v otre choix, en mentionnant le nom de lar gument
dans linstruction dappel, selon la syntaxe suivante :
Call NomProcdure (ArgNomm:= valeur, AutreArgNomm:= valeur)
o NomProcdure est le nom de la procdure appele et valeur, les v aleurs affectes aux
arguments nomms. Dans lexemple suivant, la procdure PassageArgumentsNomms appelle
MaProcdure et lui passe les arguments nomms NomFichier et Propritaire:

Sub PassageArgumentsNomms()
Call MaProcdure(Propritaire:
=ActiveWorkbook.BuiltinDocumentProperties(3), _
NomFichier:=ActiveWorkbook.Name)
End Sub

Sub MaProcdure(NomFichier As String, Propritaire As String)


MsgBox "Lauteur du classeur " & NomFichier & " est " & _
Propritaire
End Sub
Livre Macros excel.book Page 165 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 165

La procdure MaProcdure accepte les ar guments NomFichier et Propritaire, tous deux


de type String (chane de caractres). La procdure PassageArgumentsNomms lui passe ces
arguments, sans tenir compte de leur ordre dapparition, mais en utilisant leurs noms dargu-
ments nomms. L argument Propritaire reoit pour v aleur la chane ren voye par
lexpression ActiveWorkbook.BuiltinDocumentProperties(3). La proprit BuiltinDo-
cumentProperties ren voie une collection DocumentProperties qui reprsente toutes les
proprits de document prdfinies. index 3 permet de ne ren voyer que le troisime
membre de la collection, en loccurrence le nom de lauteur . NomFichier se voit affecter la
chane retourne par le xpression ActiveWorkbook.Name qui ren voie le nom du classeur
actif. Ces arguments sont exploits par la procdure appele pour af ficher la bote de dialo
gue reprsente la Figure 5.17.

Figure 5.17
Utilisez les noms des argu-
ments nomms pour passer
des informations une proc-
dure dans un ordre alatoire.

Les arguments nomms ne sont pas une spcificit des p ocdures. La plupart des
Info fonctions intgres de Visual Basic intgrent des arguments nomms.

Sortie dune procdure


Il peut tre utile de quitter une procdure a vant la fin de son xcution. Pour quitter une
procdure avant la fin de son xcution, utilisez le mot cl Exit suivi du mot cl dterminant
le type de la procdure :
Exit Sub entrane la sortie dune procdure de type Sub.
Exit Property entrane la sortie dune procdure de type Property.
Exit Function entrane la sortie dune procdure de type Function.
Lorsquune sortie de procdure est pro voque par le mot cl Exit, le programme se
poursuit avec linstruction suivant immdiatement celle qui a appel la procdure quit-
te. Dans le xemple suivant, une bote de dialogue est af fiche laide de la fonctio
MsgBox, afin de demander lutilisateur sil souhaite xcuter de nouv eau le
programme.
Sub MonProgramme()
Instructions
Call AutreProcdure
Instructions
Livre Macros excel.book Page 166 Vendredi, 3. avril 2009 7:45 07

166 Excel et VBA

Recommencer = MsgBox "Recommencer lopration?", vbYesNo+vbQuestion


If Recommencer = vbYes Then
Call MonProgramme
Else
Exit Sub
End If
End Sub

La procdure MonProgramme e xcute des instructions, puis appelle une autre procdure.
Elle reprend ensuite la main et e xcute une autre srie dinstructions. Une bote de dialo-
gue est alors af fiche, proposant lutilisateur de ritrer lopration. Une structure d
contrle If...End If est utilise pour dterminer le comportement du programme, en
fonction de la rponse de lutilisateur . Sil choisit le bouton Oui, la procdure sappelle
elle-mme et se xcute de nouv eau ; sil choisit Non, une instruction Exit entrane la
sortie de la procdure et le programme se termine.

Les structures de contrle et les fonctions MsgBox et InputBox sont tudies au


Info Chapitre 7.

Sortie dun programme


Deux instructions permettent dinterrompre lexcution dun programme : End et Stop.
Une instruction End met fin l xcution dun programme et libre lensemble des
ressources mmoire quil utilise. Les v ariables perdent leur v aleur, les feuilles UserF orm
sont dchar ges, et les v entuels classeurs ouv erts par le programme laide de la
mthode Open sont ferms.
Si vous votre programme utilise des v ariables objet ou char ge des feuilles UserF orm,
linstruction End permet de rinitialiser lensemble des v aleurs, vous prservant ainsi
dventuels problmes de mmoire. Dautre part, si le programme est e xcut
nouveau lors de la session Excel en cours, toutes les v aleurs seront rinitialises
comme lors de la premire excution. Si vous ne mettez pas fin au programme par un
instruction End et si v ous ne librez pas les ressources utilises par le programme par
des instructions appropries, les valeurs telles que les donnes entres dans une feuille
UserForm restent char ges en mmoire et celles-ci saf ficheront vec les dernires
valeurs entres par lutilisateur si elles sont nouv eau affiches au cours de la sessio
Excel.
Linstruction Stop est utilise dans le cadre du dbogage (voir Chapitre 10) et de lanalyse
des programmes VBA afin de placer l xcution dun programme en mode Arrt.
Lorsquun programme atteint une instruction Stop, il sinterrompt et Visual Basic Editor
souvre sur la fentre Code du module contenant linstruction Stop qui apparat en
surbrillance. Les ressources mmoire ne sont pas libres et les v ariables conservent leurs
Livre Macros excel.book Page 167 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 167

valeurs. Vous pouvez poursuivre lexcution pas pas, crire des instructions dans la fen-
tre Excution afin d aluer ou de tester v otre programme ou encore poursui vre le x-
cution du programme. Les outils et les techniques de dbog age des programmes VBA
constituent le sujet du Chapitre 10.

Excuter du code
Pour excuter le code partir de Visual Basic Editor, placez le curseur dans la procdure
que vous souhaitez excuter, puis cliquez sur le bouton Excuter de la barre doutils Stan-
dard, ou choisissez la commande Excuter Sub/UserF orm du menu Excution, ou, enfin
appuyez sur la touche F5.
Seules les procdures Sub ne ncessitant pas dar guments sont accessibles par la bote de
dialogue Macro dExcel. Pour e xcuter une procdure Sub partir de lapplication hte,
choisissez Outils, Macro, Macros. Dans la bote de dialogue Macros, slectionnez la
procdure excuter, puis cliquez sur le bouton Excuter.

Macro or not macr o ? Les macros sont des pr ocdures de type Sub pouvant tr e
ition excutes de faon autonome, et donc ne ncessitant pas darguments. Une proc-
Dfin
dure qui attend des arguments ne peut qutre appele par une autre procdure et
napparat pas dans la liste des macros de la bote de dialogue Macro.

Vous pouvez aussi af fecter un bouton de barre doutils ou un menu de commande une
procdure Sub. Lactivation de ce bouton ou de ce menu excute alors la procdure. Pour
plus de prcisions, reportez-vous au Chapitre 11.

Si lexcution dun programme gnre une erreur, reportez-vous au Chapitre 10.


Info

Aide lcriture de code


Visual Basic Editor met v otre disposition des outils daide lcriture de code dans
Visual Basic Editor . Pour acti ver ou dsacti ver ces outils, choisissez la commande
Options du menu Outils et acti vez longlet Editeur . Cochez ou dcochez ensuite les
options de la zone P aramtres du code (v oir Figure 5.18). Si v ous db utez dans la
programmation en VBA, activez les options daide lcriture de code. Ils v ous accom-
pagneront dans votre apprentissage.
Livre Macros excel.book Page 168 Vendredi, 3. avril 2009 7:45 07

168 Excel et VBA

Figure 5.18
Visual Basic Editor propose
des outils daide lcriture
de code.

Vrification automatique de la syntaxe


Loption de vrification automatique de la synta e entrane la vrification automatique d
la validit de chaque ligne de code saisie. Chaque fois que v ous frappez la touche Entre
ou que vous changez de ligne, la ligne en cours est vrifie. Si une erreur est dtecte, u
message dcrivant lerreur de syntax e est af fich, et linstruction non alide apparat en
rouge (voir Figure 5.19).

Figure 5.19
Vous tes prvenu
chaque fois quune
erreur est dtecte.

Vous pouv ez alors cliquer sur le bouton OK et corriger lerreur si elle v ous apparat
vidente, ou choisir le bouton Aide afin da ficher la rubrique daide associe lerreu
repre. Celle-ci vous prsente les sources probables de lerreur et v ous propose des solu-
tions adaptes (voir Figure 5.20). Ds que vous entrez une modification dans linstructio
incrimine, celle-ci retrouv e sa couleur normale, que lerreur soit ou non corrige. Si
lerreur de syntaxe nest pas rsolue, le message saffichera de nou eau lorsque vous chan-
gerez de ligne.
Livre Macros excel.book Page 169 Vendredi, 3. avril 2009 7:45 07

Chapitre 5 Dvelopper dans Visual Basic Editor 169

Figure 5.20
Si vous ne parvenez pas
dceler lorigine de
lerreur, activez la
rubrique daide Visual
Basic.

Complment automatique des instructions


Loption Complment automatique des instructions affiche une liste alphabtique de mot
cls possibles chaque fois que lattente dun complment est reconnue lors de lcriture de
code. Cest par e xemple le cas lorsque v ous saisissez un nom de proprit appelant un
objet, directement suivi dun point. Visual Basic Editor reconnat alors quun membre de
lobjet (proprit ou mthode) est attendu et en affiche la liste ( oir Figure 5.21).

Figure 5.21
Loption de compl-
ment automatique des
instructions affi he la
liste des mots cls
possibles.
Livre Macros excel.book Page 170 Vendredi, 3. avril 2009 7:45 07

170 Excel et VBA

Vous pouvez alors slectionner lun des lments de la liste laide de la souris ou des
touches flches puis alider ce choix par la touche Espace, ou continuer saisir v otre
code, sans tenir compte de la liste affiche

Info express automatique


Chaque fois quune fonction intgre de Visual Basic ou quune procdure Function du
module est reconnue, loption Info e xpress automatique en af fiche la synta e dtaille,
dans un cadre situ sous linstruction saisie (voir Figure 5.22).

Figure 5.22
Loption dinfo express
automatique affi he
la syntaxe des fonctions
au cours de la saisie.

Les options daide lcritur e de code dans Visual Basic Editor peuvent aussi
ce tre actives par la barre doutils Edition.
Astu
Livre Macros excel.book Page 171 Vendredi, 3. avril 2009 7:45 07

6
Variables et constantes
Au sommaire de ce chapitre
Dclarer une variable
Types de donnes des variables
Porte et dure de vie des variables
Traitement interapplications laide de variables objet
Livre Macros excel.book Page 172 Vendredi, 3. avril 2009 7:45 07

172 Excel et VBA

Les variables sont un lment essentiel de la programmation. Elles permettent de stock er


les informations de v otre choix tout moment de le xcution dun programme et de les
rexploiter nimporte quel autre moment. Les v ariables sont un lieu de stockage que
vous dterminez. Vous pouvez, par e xemple, stocker dans une v ariable une v aleur repr-
sentant le nombre de classeurs ouv erts, le nom du fichie , la v aleur ou ladresse dune
cellule, les informations entres par lutilisateur dans une feuille VBA, etc.

Dclarer une variable


Pour crer une v ariable, v ous de vez la dclarer , cest--dire lui af fecter un nom quil
suffira par la suite de rutiliser pour xploiter la valeur qui y est stocke. La dclaration de
variables dans un programme VBA peut tre implicite ou e xplicite. Autrement dit, les
programmes VBA peuv ent reconnatre lutilisation dune nouv elle v ariable sans que
celle-ci soit pralablement cre dans une instruction de dclaration. Vous pouvez aussi
paramtrer Visual Basic Editor afin d xiger la dclaration e xplicite des v ariables avant
leur utilisation.

Dclaration implicite
Si la dclaration explicite des variables nest pas requise, le simple f ait de faire apparatre
un mot non reconnu par le programme dans une instruction daf fectation suffira pour qu
ce nom soit considr comme une variable de type Variant par le programme les types
de variables sont prsents plus loin dans ce chapitre. Cest le cas dans lexemple suivant :

Sub DclarImpliciteDeVariables()
mavar = Range("D7").Value
MsgBox "La somme totale des transactions est " & mavar, _
vbInformation+vbOKOnly
Instructions
End Sub

Le mot MaVar apparat pour la premire fois dans une instruction daf fectation valide. La
variable MaVar est donc cre et affecte la valeur de la cellule D7. Elle est ensuite utili-
se pour afficher un message lattention de lutilisateur ( oir Figure 6.1). Loprateur de
concatnation & est utilis pour f aire apparatre la v aleur de la v ariable au cur dune
chane de caractres dfinie

Figure 6.1
Les variables peuvent tre
utilises dans des chanes
laide de loprateur
de concatnation.
Livre Macros excel.book Page 173 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 173

Vous pouv ez attrib uer le nom de v otre choix une v ariable. Un nom de v ariable doit
cependant respecter les rgles suivantes :
Il doit commencer par une lettre.
Il ne peut contenir plus de 255 caractres.
Le point, le point dexclamation, les espaces et les caractres @, &, $ et # ne sont pas
autoriss.
Ce nom ne doit pas tre un mot rserv , cest--dire un mot reconnu comme un
lment du langage Visual Basic (nom de fonction, dobjets, de proprit, dar gument
nomm, etc.).

Dclaration explicite
Si les v ariables peuv ent tre dclares implicitement, il est fortement recommand de
dclarer explicitement les variables avant de les utiliser.

Forcer la dclaration des variables avec Option Explicit


Visual Basic Editor permet de forcer la dclaration des v ariables a vant leur utilisation,
grce linstruction Option Explicit. Lutilisation de cette option permet dviter les
risques derreurs lies une f aute de frappe dans le nom dune v ariable. Considrez la
procdure suivante :

Sub MacroErreur()
MaVariable = Workbooks.Count
While MaVarable < 10
Workbooks.Add
MaVariable = MaVariable+1
Wend
End Sub

Cette procdure a pour b ut douvrir des classeurs en boucle, jusqu ce que dix classeurs
soient ouverts au total. Le nombre de classeurs ouv erts ( Workbooks.Count) est affect
la v ariable MaVariable. Une instruction While...Wend que v ous dcouvrirez dans le
prochain chapitre est utilise pour crer un nouv eau classeur ( Workbooks.Add) et ajouter
1 MaVariable tant que la v aleur de celle-ci est infrieure 10. Cependant, le nom de la
variable a t incorrectement saisi dans linstruction suivante :

While MaVarable < 10

"MaVarable" nexistant pas, cette variable est cre et aucune valeur ne lui est affecte. La
procdure ouvre donc des documents et incrmente MaVariable de 1 linfini, sans que l
condition MaVarable < 10 ne soit jamais respecte.
Livre Macros excel.book Page 174 Vendredi, 3. avril 2009 7:45 07

174 Excel et VBA

Pour interr ompre une macr o se xcutant linfini, tapez la combinaiso


Info clavier Ctrl + Pause.

Pour viter ce type derreur , forcez la dclaration e xplicite des variables. Pour cela, placez-
vous dans la section Dclarations de la fentre Code du module et saisissez-y linstruction
Option Explicit (voir Figure 6.2).

Figure 6.2
Linstruction
Option Explicit
doit se trouver
dans la section
Dclarations
de la fentre Code.

Dornavant, lapparition de noms de v ariables non pralablement dclares laide de


linstruction Dim dans une procdure gnrera une erreur. Dans notre exemple, lutilisation
de linstruction Option Explicit entranera le message derreur prsent la Figure 6.3
lexcution du programme.

Figure 6.3
Loption Option Explicit
permet de dtecter immdia-
tement les erreurs de saisie
dans les noms de variables.

Vous pouvez aussi paramtrer Visual Basic Editor pour que linstruction Option Explicit
soit systmatiquement place dans la section de Dclarations de tout nouveau module.
Livre Macros excel.book Page 175 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 175

1. Slectionnez la commande Options du menu Outils et placez-vous sur longlet Editeur.


2. Cochez la case Dclaration explicite des variables, puis cliquez sur OK.
Linstruction Option Explicit sera dsormais automatiquement place dans la section
approprie de la fentre Code de chaque nouveau module.

Dclarer une variable avec Dim


La dclaration de variables se fait laide de linstruction Dim, selon la syntaxe suivante :

Dim NomVariable As Type

o NomVariable est le nom de la v ariable, qui sera utilis par la suite pour y f aire rf-
rence, et Type le type de donnes quaccepte la v ariable prsents dans la section
suivante. Largument Type est f acultatif, mais la dclaration dun type de v ariable peut
vous faire conomiser de lespace mmoire et amliorer ainsi les performances de v otre
programme. Lors de la dclaration de v ariables, une v ariable de type String prend pour
valeur une chane vide, une variable numrique prend la valeur 0.
Dans lexemple suivant, les variables Message, Boutons et Titre sont dclares laide de
linstruction Dim, des valeurs leur sont ensuite affectes, puis sont utilises comme arguments
de MsgBox afin da ficher la bote de dialogue de la Figure 6.4

Sub UtiliserDim()
Dim Message As String
Dim Boutons As Single
Dim Titre As String
Message = "La procdure est termine."
Boutons = vbOKOnly+vbInformation
Titre = "Cest fini"
MsgBox Message, Boutons, Titre
End Sub

Figure 6.4
Des variables peuvent tre
utilises comme arguments
dune fonction.

Plusieurs variables peuvent tre dclares dans une mme instruction Dim, selon la syntax e
suivante :

Dim NomVar1 As Type, NomVar2 As Type, ..., NomVarn As Type


Livre Macros excel.book Page 176 Vendredi, 3. avril 2009 7:45 07

176 Excel et VBA

o NomVar1 est le nom de la premire variable dclare, et ainsi de suite. Les trois instruc-
tions de dclaration de le xemple suivant peuvent ainsi tre ramenes une seule instruction
de dclaration :
Dim Message As String, Boutons As Single, Titre As String

Gardez lesprit que pour af fecter un type aux v ariables dune telle instruction, celui-ci
doit tre mentionn pour chacune des v ariables dclares. L instruction suivante dclare
une variable Message de type Variant et une variable Titre de type String:
Dim Message, Titre As String

Types de donnes des variables


Lorsque vous crez une variable, vous pouvez dterminer son type. Le type dune varia-
ble correspond au type de linformation qui peut y tre stocke. Il peut sagir dune
valeur numrique (un nombre ou une expression renvoyant un nombre), dune chane de
caractres, dune date, etc. Les v aleurs af fectes aux v ariables dans des inst ructions
daffectation doivent tre compatibles avec le type de la variable. Par exemple, dclarer une
variable de type numrique et lui af fecter par la suite une chane de caractres gnrera
une erreur.
Vous pouvez aussi choisir de ne pas dterminer le type dune variable. Elle sera alors de
type Variant, et vous pourrez y stocker tous les types de donnes. Cette section prsente
les diffrents types de variables.

Chanes de caractres
Les variables de type String encore appeles "v ariables de chane" permettent le
stockage de donnes reconnues comme une chane de caractres. Pour dclarer une v ariable
de type String, utilisez la syntaxe suivante :
Dim NomVariable As String

Une variable de chane peut tre af fecte toute e xpression renvoyant une valeur de type
chane (chane, proprit, fonction, etc.). Pour af fecter une chane de caractres une
variable de type String, placez celle-ci entre guillemets. Si v ous souhaitez placer des
guillemets dans une chane de caractres (ou tout autre caractre), utilisez conjointement
loprateur de concatnation & et la fonction Chr selon la syntaxe suivante :
"Chane de car." & Chr(codeANSI) & "Chane de car."

o codeANSI est le code ANSI du caractre que vous souhaitez insrer.


Livre Macros excel.book Page 177 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 177

Loprateur +peut aussi tre utilis pour concatner des c hanes de caractres.
Prfrez cependant loprateur &, afin de distinguer aisment la concatnation d
Info
chanes dadditions de valeurs numriques qui, elles, requirent loprateur +.

Les instructions daffectation suivantes sont toutes valides :


Prnom = "Luc"
NomFichier = ActiveWorkbook.Name
Message = "Le nom du classeur actif est " & Chr(34) & ActiveWorkbook.Name
& Chr(34) & "."
La premire instruction af fecte une chane dfinie la ariable Prnom. La seconde
instruction affecte la valeur de la proprit Name du classeur actif la variable NomFichier.
La troisime conjugue laf fectation de chanes dfinies dans le t xte, renvoyes par une
fonction et renvoyes par une proprit, en concatnant ces dif frentes chanes laide de
loprateur &.
La macro suivante affiche la bote de dialogue reprsente la Figure 6.5
Sub ConcatenerLesChaines()
Dim Message As String, Boutons As Single, Titre As String
Message = "Le nom du document actif est " & Chr(34) & _
ActiveWorkbook.Name & Chr(34) & "."
Boutons = vbInformation+vbOKOnly
Titre = "Concatnation de chanes"
MsgBox Message, Boutons, Titre
End Sub

Figure 6.5
Le message affi h par la
fonction MsgBox est toujours
une chane de caractres.

Les variables de chane dfinies prcdemment sont dites de longueur variable et peuvent
tre constitues den viron deux milliards de caractres. Vous pouvez cependant dclarer
des v ariables de chane de longueur fix , autorisant de 1 65 400 caractres, selon la
syntaxe suivante :
Dim NomVariable As String * longueur

o longueur est le nombre de caractres que peut rece voir la v ariable. La dclaration de
variables de chane de longueur fi e peut gnrer une conomie de mmoire et donc un
gain de performance pour v otre programme, mais doit tre utilise prudemment.
Livre Macros excel.book Page 178 Vendredi, 3. avril 2009 7:45 07

178 Excel et VBA

En effet, si la chane af fecte une v ariable de longueur fi e dpasse la capacit de cette


dernire, la chane sera purement et simplement rogne. Remplacez linstruction de dcla-
ration des variables de lexemple prcdent par celle-ci :
Dim Message As String * 15, Boutons As Single, Titre As String * 5

Vous obtenez la bote de dialogue prsente la Figure 6.6.

Figure 6.6
Utilisez les variables
de chane de longueur f xe
avec prudence.

Valeurs numriques
Les variables numriques permettent le stockage de valeurs exploitables en tant que telles,
cest--dire sur lesquelles vous pouvez effectuer des oprations arithmtiques. Il existe
plusieurs types de v ariables numriques. Elles se distinguent par lchelle des v aleurs
quelles acceptent et par la place quelles occupent en mmoire. Le Tableau 6.1 prsente
les diffrents types de variables numriques :

Tableau 6.1 : Types de donnes numriques

Mmoire
Types de donnes Valeurs acceptes
occupe
Byte (octet) Nombre entier, compris entre 0 et 255 1 octet
Integer (entier) Nombre entier compris entre 32 768 et 32 767 2 octets
Long (entier long) Nombre entier compris entre 2 147 483 648 4 octets
et 2 147 483 647
Single Nombre virgule flottante compris entre 1,401298E-45 4 octets
(simple prcision) et 3,402823E38 pour les nombres ngatifs, entre
1,401298E-45 et 3,402823E38 pour les nombres positifs
Double Nombre virgule flottante compris entre 8 octets
(double prcision) 1,79769373486232E308 et 4,94065645841247E-324
pour les nombres ngatifs, entre 4,94065645841247E-324
et 1,79769373486232E308 pour les nombres positifs
Currency Nombre virgule fixe, avec quinze chiffres pour la partie 8 octets
(montaire) entire et quatre chiffres pour la partie dcimale, compris entre
922 337 203 685 477,5808 et 922 337 203 685 477,5807
Livre Macros excel.book Page 179 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 179

Si v otre programme e xploite beaucoup de v ariables, laf fectation du type appropri


celui qui e xploite le moins despace mmoire aux diffrentes variables en amliorera
les performances. Veillez cependant ce que les valeurs quune variable est susceptible de
prendre soient toujours couv ertes par le type de donnes acceptes par la v ariable. Par
exemple, si une valeur suprieure 255 ou infrieure 0 est affecte une variable de type
Byte, une erreur sera gnre (voir Figure 6.7).

Figure 6.7
Le type de donnes acceptes
par une variable doit couvrir
lensemble des valeurs
possibles lors de lexcution
du programme.

Utilisez le point comme spar ateur dcimal dans le code VBA. Lutilisation de
ntion la virgule gnre une erreur.
Atte

Au mme titre que les variables de type String, une variable numrique peut tre concatne
avec une chane de caractres laide de loprateur &. Une v ariable numrique peut aussi
tre af fecte toute e xpression renvoyant une v aleur numrique (chane, proprit, fonc-
tion, etc.). Vous pouv ez aussi ef fectuer des oprations arithmtiques sur les v ariables
numriques en utilisant les oprateurs arithmtiques prsents dans le Tableau 6.2.

Tableau 6.2 : Les oprateurs arithmtiques

Oprateur Description

+ Addition.

Soustraction.

* Multiplication.

/ Division.

\ Division. Seule la partie entire du rsultat de la division est renvoye


(lopration 18 \ 5 retournera la valeur 3).

^ Elvation la puissance (2 ^ 4 renvoie 16).


Livre Macros excel.book Page 180 Vendredi, 3. avril 2009 7:45 07

180 Excel et VBA

A condition que le type de la v ariable numrique MaVar couvre les v aleurs qui lui sont
affectes, les instructions daffectation suivantes sont toutes valides :
MaValeur = 58
NbreClasseur = Workbooks.Count
Range("D5").Value = (Range("D3").Value+Range("D4").Value) / 2
SurfaceCercle = (varRayon ^ 2) * 3.14
La premire instruction af fecte une v aleur dfinie la ariable MaValeur. La deuxime
instruction affecte la v aleur de la proprit Count de lobjet (la collection) Workbooks (le
nombre de classeurs ouverts). La troisime utilise loprateur arithmtique + pour addition-
ner les v aleurs des cellules D3 et D4, et loprateur arithmtique / pour di viser la v aleur
obtenue par deux. La dernire instruction lv e la variable varRayon prcdemment dfini
au carr laide de loprateur ^, puis multiplie cette valeur par 2 laide de loprateur *.
Par contre, linstruction sui vante affecte une v aleur de type chane la v ariable numrique
Mavar et gnre une erreur (voir Figure 6.8).

Sub ErreurAffectation()
Dim Mavar As Byte
MaVar = ActiveWorkbook.Name
End Sub

Figure 6.8
Une chane de caractres
ne peut tre affecte
une variable numrique.

Rappelez-vous que les constantes sont en ralit des valeurs numriques. Une constante peut
donc tre af fecte une v ariable numrique et utilise dans une e xpression arithmtique.
Veillez ne pas utiliser loprateur &, rserv la concatnation de chanes, dans une
instruction daffectation de valeur une variable numrique. Par exemple, linstruction :
MsgBox "Le message de la bdg", vbOKOnly+vbInformation, "Titre"

est valide, tandis que linstruction :


MsgBox "Le message de la bdg", vbOKOnly & vbInformation, "Titre"

gnrera un message derreur , car loprateur & est utilis pour additionner les v aleurs
affectes aux constantes vbOKOnly et vbInformation.
Livre Macros excel.book Page 181 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 181

VBA intgre de nombreuses fonctions permettant de manipuler les v aleurs numriques.


Les deux fonctions suivantes en sont des exemples :
ABS(nombre). Renvoie la valeur absolue du nombre spcifi entre parenthses
Int(nombre). Renvoie la partie entire du nombre spcifi entre parenthses
La liste des fonctions VBA est consultable dans laide en ligne. Choisissez la rubrique
Manuel de rfrence du langage. Vous y trouverez une rubrique Fonctions rpertoriant les
fonctions par ordre alphabtique. Vous pouv ez g alement y choisir la rubrique Liste et
index. Vous y trouverez des rubriques thmatiques, telles que Rsum des mots cls financier ,
ou Rsum des mots cls mathmatiques.

Valeurs boolennes
Les variables de type Boolean servent stock er le rsultat de xpressions logiques. Une
variable de type Boolean peut renvoyer la valeur True ou False et occupe deux octets en
mmoire. Une v ariable boolenne peut rece voir la v aleur retourne par une e xpression
renvoyant une valeur de type Boolean, mais peut aussi tre af fecte une v aleur numri-
que. Dans ce cas, si la v aleur numrique est g ale zro, la v ariable prendra la v aleur
False, True dans le cas contraire. Une variable boolenne utilise comme chane de carac-
tres renvoie le mot Vrai ou Faux.
Dans lexemple suivant, la variable boolenne ClasseurSauvegard prend la v aleur False
si le classeur actif a subi des modifications depuis le dernier enr gistrement ; True dans le
cas contraire. Une bote de dialogue af fiche ensuite le message Vrai ou Faux, en fonction
de la valeur de ClasseurSauvegard.

Sub ClasseurSauvegardOuNon()
Dim ClasseurSauvegard As Boolean
ClasseurSauvegard = ActiveWorkbook.Saved
MsgBox ClasseurSauvegard
End Sub

Dates
Les dates comprises entre le 1er janvier 100 et le 31 dcembre 9999 peuvent tre affectes
des v ariables de type Date. Ces v ariables sont stockes sous la forme de nombres
virgule flottante et occupent huit octets en mmoire
La partie entire du nombre reprsente le jour. 0 correspond au 30 dcembre 1899, 1 au
31 dcembre 1899, etc. Les v aleurs ng atives reprsentent des dates antrieures au
30 dcembre 1899. La partie dcimale du nombre reprsente lheure. 0.5 correspond
12 heures, 0.75, 18 heures, etc. Ainsi, 36526.00001 correspond au 1 er janvier 2000,
00:00:01.
Livre Macros excel.book Page 182 Vendredi, 3. avril 2009 7:45 07

182 Excel et VBA

Visual Basic intgre des fonctions permettant de manipuler les dates. P ar e xemple, les
fonctions Date, Time et Now renvoient respectivement la date courante, lheure courante et
la date courante suivie lheure courante. La procdure suivante affiche la bote de dialogu
de la Figure 6.9 :

Sub DateEtHeure()
Dim LaDate As Date, LHeure As Date
LaDate = Date
LHeure = Time
MsgBox "Nous sommes le " & LaDate & ", il est " & LHeure & ".", _
vbOKOnly+vbInformation, "Fonctions Date et Time"
End Sub

Figure 6.9
Visual Basic intgre des fonctions
permettant de manipuler
les dates et les heures.

Pour plus dinformations sur les fonctions de date et dheure, reportez-vous laide Visual
Basic, en choisissant Rsum des mots cls de date et dheure de la rubrique Inde x/Listes
du Manuel de rfrence du lang age. Vous pouvez galement vous reporter au Manuel de
rfrence pour Microsoft Excel, disponible dans le sommaire de laide.

Linstallation par dfaut dExcel ninstalle pas laide en ligne de VBA. Si vous
ntion navez pas ef fectu une installation per sonnalise, vous de vrez lancer de
Atte
nouveau linstallation et installer laide en ligne de VBA.

Type Variant
Une variable, ou une variable de type Variant, accepte des valeurs de tout type et peut tre
automatiquement convertie dun type lautre, tant que sa v aleur est compatible a vec le
type vers lequel sopre la con version. Autrement dit, une v ariable de type Variant peut
tre initialement une chane de caractres, et tre e xploite par la suite en tant que v aleur
numrique. Si les donnes qui lui sont affectes sont assimilables une valeur numrique,
la con version se fera automatiquement, lorsque linstruction assimilable une opration
numrique sera excute.
Si les variables de type Variant sont trs pratiques, elles occupent un espace en mmoire
plus important que les autres types de v ariables (16 octets pour les v aleurs numriques et
22 octets pour les valeurs de chane) et peuvent donc ralentir lexcution du programme.
Livre Macros excel.book Page 183 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 183

Une variable, une constante ou un argument dont le type nest pas dclar sont assimils
une variable de type Variant. Vous pouvez cependant spcifier le type Variant pour faci-
liter la lecture de votre code. Les instructions suivantes sont quivalentes :
Dim MaVar
Dim MaVar As Variant

Variables de matrice
Une variable de matrice ou de type Array, parfois appele tableau, est une variable permet-
tant de stocker plusieurs valeurs. Contrairement une v ariable ordinaire ne pouvant rece-
voir quune seule v aleur, vous pouvez dterminer plusieurs emplacements de stockage pour
une v ariable de matrice. Les v ariables de matrice permettent de stock er des listes
dlments de mme type dans une mme variable. Vous pouvez par exemple stocker dans
une variable de matrice les chif fres daffaires de tous les reprsentants. Pour dclare r une
variable de matrice, utilisez la syntaxe suivante :
Dim NomVariable(NbreElements) As Type

o NomVariable est le nom de la variable, NbreElements, le nombre de valeurs que recevra


la variable, et Type, le type de donnes quaccepte la v ariable. Pour affecter des valeurs
une variable de matrice ou accder celles-ci, il suf fit de spcifier la position de la aleur
stocke dans la v ariable. La premire v aleur rece vant linde x 0, la dernire v aleur est
toujours gale au nombre dlments contenus dans la variable moins 1.

Pour dmarr er linde x dun tableau 1 plutt qu 0, placez linstruction


ce Option Base 1 dans la section Dclarations du module.
Astu

Une variable de matrice peut galement tre dclare selon la syntaxe suivante :
Dim NomVariable(Dbut To Fin) As Type

o Dbut et Fin dfinissent la plage de aleurs qui sera utilise pour stocker et accder aux
donnes de la variable.
Une variable de matrice peut vous servir stocker des donnes de mme type. Il est alors
recommand de dclarer un type appropri. Dans lexemple suivant, la variable de matrice
JoursSemaine stock e sous forme de chanes les jours de la semaine. Une structure de
contrle For...Next est ensuite utilise pour afficher les aleurs contenues par la variable
dans une bote de dialogue.
Sub VarMatrice()
Dim JoursSemaine(7) As String
JoursSemaine(0) = "Lundi"
Livre Macros excel.book Page 184 Vendredi, 3. avril 2009 7:45 07

184 Excel et VBA

JoursSemaine(1) = "Mardi"
JoursSemaine(2) = "Mercredi"
JoursSemaine(3) = "Jeudi"
JoursSemaine(4) = "Vendredi"
JoursSemaine(5) = "Samedi"
JoursSemaine(6) = "Dimanche"
Dim compteur as Byte
For compteur = 0 To 6
MsgBox JoursSemaine(compteur)
Next compteur
End Sub

Une variable de matrice peut aussi servir stock er des donnes de types dif frents. Elle
doit alors tre de type Variant. La procdure sui vante stocke dans une seule v ariable le
nom, la date de naissance, ladresse, la fonction et le salaire dun emplo y. Ces donnes
sont ensuite affiches dans une bote de dialogue ( oir Figure 6.10).
Sub InfosEmploy
Dim Employ(1 To 5) As Variant
Employ(1) = "Jean Dupont"
Employ(2) = "25/12/71"
Employ(3) = "14, rue des Arts"
Employ(4) = "Charg dtudes"
Employ(5) = 12000
MsgBox Employ(1) & " est n le " & Employ(2) & ". Il habite " & _
Employ(3) & " et est " & Employ(4) & ". Son salaire est de: " & _
Employ(5) & " euros", vbOKOnly+vbInformation, "Infos employ"
End Sub

Figure 6.10
Toutes les informations
relatives un mme
sujet peuvent tre
stockes dans une seule
variable de matrice.

Astu
ce Utilisez la fonction IsArray pour vrifier si une variable est de type Array.

Variables de matrice multidimensionnelles


Les variables de matrice peuv ent tre multidimensionnelles. Les donnes sont alors stoc-
kes horizontalement et verticalement, la manire dun tableau. Les variables de matrice
multidimensionnelles permettent de stock er de f aon cohrente les v aleurs dune feuille
Excel. Les v ariables multidimensionnelles se dclarent selon la mme syntax e que les
Livre Macros excel.book Page 185 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 185

variables de matrice une dimension, en ajoutant simplement les ar guments dindex de


dbut et de fin pour la deuxime dimension
Dim NomVariable(Dbut1 To Fin1, Dbut2 To Fin2) As Type

Considrez la feuille de classeur reprsente la Figure 6.11. Elle reprsente les v entes
mensuelles pour lanne 2003, de quatre types de produits, soit 12 lignes sur quatre colon-
nes. Une v ariable de matrice multidimensionnelle permettra de stock er lensemble des
valeurs de cette feuille logiquement.

Figure 6.11
Utilisez les variables
de matrice multidimen-
sionnelles pour stocker
les valeurs dun tableau.

La dclaration de la variable de matrice multidimensionnelle se prsentera comme suit :


Dim MonTableau(1 To 12, 1 To 4) As Single

Cette variable correspond un tableau de donnes de 12 lignes sur 4 colonnes. Il suffit ensuit
daffecter logiquement les valeurs de la feuille aux espaces de stockage de la variable :
MonTableau(1, 1) = Cells(3, 2).Value
MonTableau(1, 2) = Cells(3, 3).Value
MonTableau(1, 3) = Cells(3, 4).Value
MonTableau(1, 4) = Cells(3, 5).Value
MonTableau(2, 1) = Cells(4, 2).Value
MonTableau(2, 2) = Cells(4, 3).Value
MonTableau(2, 3) = Cells(4, 4).Value
MonTableau(2, 4) = Cells(4, 5).Value
Etc.

Ainsi, pour accder aux v entes dun mois, il suf fira de spcifier la aleur correspondante
comme premier index de la variable MonTableau (1 = janvier, 2 = fvrier, etc.). Pour accder
une catgorie de v entes, il suffira de spcifier la aleur correspondante comme second inde x
de la variable MonTableau (1 = Livres, 2 = Vido, 3 = Hi-Fi, 4 = Autres). Par exemple, MonTa-
bleau(1, 1) renverra le chiffre des ventes du mois de janvier pour les livres ; MonTableau(12,
2) renverra le chiffre des ventes du mois de dcembre pour la vido.
Livre Macros excel.book Page 186 Vendredi, 3. avril 2009 7:45 07

186 Excel et VBA

Nhsitez pas utiliser les v ariables de matrice pour stock er les donnes dune feuille Excel
auxquelles un programme VBA doit accder de multiples reprises. La v ariable ainsi cre
est charge en mmoire. Laccs aux donnes quelle contient en est sensiblement plus rapide
quun accs aux valeurs contenues dans les cellules dune feuille de calcul.
Lutilisation dune structure de contrle For...Next permettra daf fecter lensemble des
valeurs de ce tableau une variable de matrice en quelques lignes de code. Vous apprendrez
utiliser cette structure au Chapitre 7.

Une variable de matrice nest pas limite deux dimensions. Vous pouvez
Info parfaitement crer une variable de matrice trois dimensions, ou plus.

Les fonctions LBound et UBound renvoient respectivement le plus petit indice et le


eil plus grand indice disponible pour une dimension spcifie dun tableau et sutili
Cons
sent selon la syntaxe suivante :
LBound(NomVariable, Dimension) et UBound(NomVariable, Dimension)
o NomVariable est le nom de la variable de matrice et Dimension, la dimension
dont vous souhaitez connatr e le plus petit ou le plus gr and indice (1 pour la
premire dimension, 2 pour la deuxime , etc.). Si largument Dimension est omis,
le plus petit ou le plus grand indice de la premire dimension est renvoy.

Variables de matrice dynamiques


Les v ariables de matrice dynamiques sont des v ariables de matrice dont v ous pouv ez
modifier la taille. Pour dclarer une ariable de matrice dynamique, ne spcifiez pas d
valeur entre les parenthses qui suivent son nom. Linstruction suivante :
Dim NomVariable()

cre une v ariable de matrice dynamique. Avant daf fecter des v aleurs la v ariable de
matrice ainsi cre, vous devrez la redimensionner laide de linstruction ReDim, selon la
syntaxe suivante :
ReDim NomVariable(Dbut To Fin)

Vous pouvez utiliser le mot cl ReDim pour redimensionner une variable de matrice autant
de fois que vous le souhaitez. Les v ariables de matrice sont intressantes lorsque v ous ne
connaissez pas la quantit de donnes stock er. Supposez que, dans lexemple prcdent,
la feuille de calcul des ventes ne soit pas une feuille de calcul annuelle, mais mensuelle. Le
tableau senrichirait alors tous les mois dune nouv elle ligne. Pour que v otre programme
fonctionne tout au long de lanne, vous devrez crer une variable de matrice de longueur
variable. Cest ce que fait la procdure suivante :
Livre Macros excel.book Page 187 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 187

1: Sub AffectationVariableArray()
2: Dim MonTableau() As Single
3: Dim DerniereLigne As Byte
4: DerniereLigne = Range("A3").End(xlDown).Row
5: Dim NbreDeLignes As Byte
6: NbreDeLignes = DerniereLigne - 2
7: ReDim MonTableau(NbreDeLignes, 4)
8: Instructions daffectation de valeurs MonTableau
9: End Sub

Aux lignes 2 et 3, les variables MonTableau et DerniereLigne sont dclares. Linstruction


de la ligne 4 sert affecter le numro de la dernire ligne contenant des donnes la varia-
ble DerniereLigne. La fonction End ren voie lobjet Range correspondant la dernire
cellule non vide sous (xlDown) la cellule A3. La proprit Row renvoie la valeur du numro
de ligne de cet objet. La v ariable NbreDeLignes est cre ligne 5. On lui af fecte ensuite
une valeur gale DerniereLigne - 2, soit le nombre de lignes contenant des donnes
stocker dans la variable (les deux premires lignes ne contenant pas de donnes stocker).
A la ligne 7, la v ariable de matrice MonTableau est redimensionne de f aon accueillir
lensemble des chiffres de ventes de la feuille.

Lorsque vous r edimensionnez une variable de matrice , celle-ci est rinitialise et


ntion toutes les valeur s qui y taient stoc kes sont per dues. Pour conserver les valeur s
Atte
dune variable de matrice lor s de son r edimensionnement, placez le mot cl
Preserve devant linstruction ReDim. Lutilisation du mot cl Preserve est cepen-
dant subordonne certaines conditions :
Vous ne pouvez redimensionner que la dernire dimension de la variable.
Vous ne pouvez pas modifier le nomb e de dimensions du tableau.
Vous ne pouvez quagrandir la taille du tableau. Si vous rduisez la taille de la
variable, toutes les donnes seront perdues.
La fonction premire dExcel tant def fectuer des calculs sur des donnes af fiches sou
forme de tableaux, les v ariables de matrice sont trs utilises dans les programmes VBA
pour Excel. Elles permettent en ef fet de stock er les donnes de feuilles de calcul sous
forme de v ariables et de tra vailler directement sur la v ariable plutt que sur le tableau,
amliorant ainsi sensiblement les performances du programme.

Variables objet
Les variables objet sont utilises pour f aire rfrence un objet et occupent 4 octets en
mmoire. Une fois une v ariable objet dfinie, ous pouv ez interroger ou dfinir le
proprits de lobjet, excuter lune de ses mthodes en f aisant simplement rfrence la
variable. Pour dclarer une variable objet, utilisez la syntaxe suivante :
Dim NomVariable As Object
Livre Macros excel.book Page 188 Vendredi, 3. avril 2009 7:45 07

188 Excel et VBA

Vous pouv ez dclarer prcisment le type dobjet af fect la v ariable, en remplaant


Object par un nom dobjet reconnu par lapplication. Vous pouvez, par e xemple, dclarer
une variable objet Workbook (classeur) selon la syntaxe suivante :
Dim MonObjetClasseur As Workbook

Une fois la v ariable dclare, vous devez lui affecter un objet prcis, utilisez pour cela le
mot cl Set, selon la syntaxe suivante :
Set NomVariable = Expression

o Expression est une e xpression ren voyant un objet de lapplication. Dans le xemple
suivant, la variable objet Police est dclare en tant quobjet Font, puis affecte lexpression
Workbooks("Representant.xls").Sheets("Feuil1").Range("A1:D5") .Font, soit lobjet
Font (police) de la plage de cellules A1:D5 de la feuille libelle "Feuil1" du classeur Repre-
sentant.xls. La v ariable objet est ensuite utilise pour dfinir la proprit Bold de lobjet
True, cest--dire pour affecter lattribut gras la plage de cellules A1:D5 de ce classeur.

Sub VariablesObjet()
Dim Police As Font
Set Police = _
Workbooks("Representant.xls").Sheets("Feuil1").Range("A1:D5").Font
Police.Bold = True
End Sub

La fonction GetObject
Les variables objet vous permettent dagir sur un objet sans que celui-ci soit ouv ert. Vous
pouvez ainsi interroger les v aleurs dun Tableau Excel sans que celui-ci soit ouv ert.
Vous pouv ez galement modifier lobjet auquel ous accdez ainsi. Pour accder un
objet, stockez cet objet dans une variable objet et laide de la fonction GetObject, selon
la syntaxe suivante :
Set MonObjet = GetObject(pathname, class)

o pathname et class sont des arguments nomms de type chane, correspondant respecti-
vement au chemin daccs complet et au nom du fichier auquel ous souhaitez accder et
la classe de lobjet. Si largument pathname est spcifi, la gument class peut tre omis.
La procdure sui vante cre une v ariable objet de type Workbook et lui af fecte le fichie
Representant.xls, situ sur le Bureau de Windows.
Sub AccederObjetFerme()
Dim ObjetClasseur As Workbook
Set ObjetClasseur = _
GetObject("C:\Windows\Bureau\Representant.xls")
End Sub
Livre Macros excel.book Page 189 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 189

La fonction GetObject est particulirement intressante si des donnes entres dans un


classeur doivent tre rpercutes dans un ou plusieurs autres classeurs. Vous pouvez ainsi
crer un programme VBA, afin que, lorsquune commande est e fectue, le classeur conte-
nant les donnes de stock soit mis jour . Si ncessaire, un message pourra tre af fich
afin de pr enir lutilisateur quil est temps de renouv eler le stock, et ce sans mme quil
sache quil existe un classeur des stocks.
Cest ce que f ait la procdure sui vante, en supposant que la v aleur du stock pour le produit
command se trouve dans la cellule A13 du classeur stock.xls.
1: Sub Commande()
2: Instructions Dim UnitsCommandes As Integer
3: Dim StockRestant As Integer
4: Dim UnitsCommandes As Integer
5: UnitsCommandes = 50
6: StockRestant = VerifierEtMettreAJourStock(UnitsCommandes)
7: If StockRestant < 0 Then
8: MsgBox "Le stock ne permet pas dassurer la commande. " & _
"Le stock pour ce produit est de " & _
(StockRestant + UnitsCommandes) & " units."
9: Exit Sub
10: Else
11: MsgBox "Commande effectue. Le stock restant pour ce " & _
"produit est de " & StockRestant & " units."
12: End If
13: Suite des instructions de la commande
14: End Sub

15: Function VerifierEtMettreAJourStock(QteCommande)


16: Dim ObjetStock As Workbook
17: Dim StockDispo As Integer
18: Set ObjetStock = GetObject("C:\Documents and Settings\ Administrateur\
Bureau\Stock.xls")
19: StockDispo = ObjetStock.Sheets(1).Range("A13").Value
20: VerifierEtMettreAJourStock = StockDispo - QteCommande
21: If VerifierEtMettreAJourStock >= 0 Then
22: ObjetStock.Sheets(1).Range("A13").Value = _
StockDispo - QteCommande
23: ObjetStock.Save
24: End If
25: End Function

Veillez per sonnaliser le c hemin prcis pour la fonction GetObject la


ntion ligne 18, sinon cette macro ne fonctionnera pas.
Atte

A la ligne 6, la procdure Commande appelle la procdure VerifierEtMettreAJourStock


en lui passant la v aleur de la v ariable UnitsCommandes. La v aleur 50 a t af fecte
cette variable la ligne 5 pour faire fonctionner le programme. Il va de soi que cette variable
doit tre affecte au nombre dunits rellement commandes.
Livre Macros excel.book Page 190 Vendredi, 3. avril 2009 7:45 07

190 Excel et VBA

La fonction VerifierEtMettreAJourStock dclare la v ariable objet ObjetStock de type


Workbook (ligne 16) et la v ariable StockDispo de type Integer (ligne 17). Ligne 18, la
variable ObjetStock est affecte au classeur Stock.xls situ sur le Bureau de Windows.
A la ligne suivante, la variable StockDispo reoit la valeur de la cellule A13 de la premire
feuille de ce classeur. La fonction VerifierEtMettreAJourStock se voit ensuite affecter la
valeur de StockDispo - QteCommande. Enfin, lignes 21 24, une structure If...Then...
Else est utilise pour mettre jour la v aleur du stock restant. Linstruction de la ligne 21
vrifie que le stock restant aprs commande est suprieur zro. Si cest le cas, la aleur
de la cellule A13 est mise jour pour reflter le stock restant (ligne 22) et le classeur est
ensuite sauvegard (ligne 23).
La procdure Commande reprend alors la main. Lignes 7 12, une structure conditionnelle
If...Then...Else affiche un message lattention de lutilisateu , afin de linformer su
ltat du stock. Si le stock est insuf fisant pour assurer la commande StockRestant < 0),
linstruction de la ligne 8 est excute. Lutilisateur est alors averti que la commande na pu
tre v alide, et inform du stock disponible ( StockRestant + UnitsCommandes). Si le
stock permet dassurer la commande, linstruction de la ligne 11 af fiche un messag
informant lutilisateur du stock restant aprs commande.

La fonction CreateObject
La fonction CreateObject sert crer une instance dun objet, et sutilise selon la syntaxe
suivante :
CreateObject(class,servername)

o class et servername sont des ar guments nomms de type chane. class correspond
la classe de lobjet dont on cre une instance. servername est f acultatif et correspond au
nom dun serveur distant sur lequel est cr lobjet. Si v ous omettez cet argument, lobjet
est cr sur la machine sur laquelle sexcute le programme.
Une fois cre une instance dobjet, on accde aux proprits et aux mthodes de cet objet
en utilisant le nom de la variable laquelle il est affect.
Dans lexemple suivant, une instance de lobjet Excel est cre. Un nouv eau classeur est
cr, configur puis enr gistr dans cette instance.
1: Sub CreerInstancesExcel()
2: dclaration des variables
3: Dim Xl As Excel.Application
4: Dim NouvClasseur As Excel.Workbook
5: Dim NomFichier As String
6: cration dune instance de lobjet Excel
7: Set Xl = CreateObject("Excel.Application")
8: affichage de lobjet Xl
9: Xl.Application.Visible = True
Livre Macros excel.book Page 191 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 191

10: cration dun nouveau classeur dans lobjet Xl


11: Set NouvClasseur = Xl.Workbooks.Add
12: suppression de la troisime feuille de calcul
13: NouvClasseur.Sheets(3).Delete
14: affectation de noms aux feuilles 1 et 2
15: NouvClasseur.Sheets(1).Name = "Quantites"
16: NouvClasseur.Sheets(2).Name = "Chiffres"
17: dfinition du nom du classeur
18: Dim compteur As Byte
19: Dim Pos As Long
20: NomFichier = "Ventes " & Date & ".xls"
21: For compteur = 1 To 2
22: Pos = InStr(NomFichier, "/")
23: NomFichier = Left(NomFichier, Pos - 1) & "-" & _
24: Right(NomFichier, Len(NomFichier) - Pos)
25: Next compteur
26: enregistrement du classeur
27: NouvClasseur.SaveAs "C:\Documents and Settings\ Administrateur
\Bureau\Ventes\" & NomFichier
28: NouvClasseur.Close
29: Xl.Quit
30: End Sub

Veillez per sonnaliser le c hemin prcis pour la fonction GetObject la


ntion ligne 27, sinon cette macro ne fonctionnera pas.
Atte

Lignes 2 5, les variables sont dclares. Les variables Xl et NouvClasseur sont des varia-
bles objet de type Excel et Workbook. La v ariable NomFichier servira stock er le nom
denregistrement du classeur . Ligne 7, une instance de lobjet Application dExcel est
cre laide de linstruction CreateObject, et af fecte la v ariable Xl. La proprit
Visible de lobjet Application est ensuite dfinie True afin de aire apparatre la
session Excel lcran.
Ligne 11, un nouv eau classeur est ajout lobjet Application nouv ellement cr, et
affect la v ariable objet NouvClasseur . Notez que, par df aut, un nouv eau classeur est
cr dans la session Excel partir de laquelle le programme est e xcut. Pour que le
nouveau classeur soit cr dans la nouvelle session Excel, il est indispensable de faire rf-
rence lobjet Xl dans linstruction de la ligne 11 ( Xl.Workbooks.Add et pas simplement
Workbooks.Add). Lignes 13 16, la troisime feuille du classeur est supprime et les deux
autres sont renommes.
Lignes 17 25, le nom denregistrement du classeur est dfini. La ariable NomFichier se
voit tout dabord af fecter le nom Ventes suivi de la date du jour (V entes 12/08/2007, par
exemple). Ce nom contient deux fois le caractre barre oblique ( / ), non v alide dans les
noms de fichie . Lignes 21 25, une boucle For...Next est utilise pour rpter deux fois
le traitement appliqu au nom du classeur afin de substituer des traits dunion aux barre
obliques (les boucles sont tudies au prochain chapitre). On utilise pour cela les fonctions
Livre Macros excel.book Page 192 Vendredi, 3. avril 2009 7:45 07

192 Excel et VBA

de manipulation de chane InStr, Left, Right et Len. Instr est utilis pour ren voyer la
position du caractre / dans la chane NomFichier (ligne 22). Len renvoie le nombre de
caractres de la chane NomFichier (ligne 24). Les fonctions Left et Right sont utilises
pour renvoyer respectivement les caractres situs gauche et droite des barres obliques,
et un trait dunion est plac entre les deux chanes ainsi renvoyes.
Lignes 27 et 28, le classeur est enre gistr puis ferm. Ligne 29, la mthode Quit est
applique lobjet Excel, afin de fermer la session Excel cre en d ut de programme.

Librer une variable objet


Pour annuler laf fectation dun objet une v ariable objet, af fectez-lui la v aleur Nothing.
Linstruction sui vante annule laf fectation de la v ariable objet Police cre
prcdemment :

Set Police = Nothing

Il est important daffecter la valeur Nothing une variable objet, lorsque celle-ci nest plus
utilise par le programme. Vous librez ainsi lensemble des ressources systme et
mmoire associes lobjet. Dans lexemple de programme prcdent, vous devrez placer
cette instruction au-dessus de la ligne 24. La v ariable objet ObjetStock sera ainsi libre
avant que la procdure Commandes ne reprenne la main.

Types de donnes personnaliss


Le mot cl Type permet de crer des types de donnes personnaliss, associant les types de
donnes prsents ci-dessus. Une telle opration se rvle intressante lorsquun
programme doit associer de f aon rcurrente dif frents types de donnes. Vous pouv ez
alors crer un nouveau type de donnes auquel il suffira de aire rfrence chaque fois que
vous souhaiterez crer une nouvelle variable regroupant ces types de donnes.
A linstar des v ariables de matrice, le mot cl Type permet donc de crer des v ariables
capables de stock er des informations multiples. Mais, contrairement aux v ariables de
matrice, Type permet dassocier des types de donnes dif frents. La dclaration dun
nouveau type de donnes doit tre place dans la section Dclarations du module, selon la
syntaxe suivante :

Type NomType
Donnes1 As Type
Donnes2 As Type
....
Donnesn As Type
End Type
Livre Macros excel.book Page 193 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 193

o Donnes1, , Donnesn sont les donnes que contiendront les v ariables de type
NomType. Ces noms seront emplo ys par la suite pour af fecter des v aleurs aux dif frents
espaces de stockage des v ariables de type NomType. Type reprsente le type de donnes
affect chaque lment du nouveau type de donnes.
Dans lexemple suivant, un type de donnes Membre est cr, afin de pou oir intgrer dans
une seule variable lensemble des informations concernant un membre dune association :
Type Membre
Prnom As String
Nom As String
Adresse As String
CodePostal As String
Ville As String
Tlphone As String
Age As Byte
End Type

Vous pouvez maintenant crer une nouvelle variable de type Membre, qui sera prte rece-
voir toutes les informations contenues dans ce type. Les informations contenues dans une
variable peuvent ensuite tre interroges ou df nies en faisant suivre le nom de la variable
dun point, puis du nom de la donne. La procdure suivante cre une variable de type
Membre et dfinit ses aleurs, puis af fiche une bote de dialogue indiquant les donne
Prnom et Nom de la variable (voir Figure 6.12) :

Sub NouveauMembre
Dim NouvMembre As Membre
With NouvMembre
.Prnom = "Hlne"
.Nom = "Bienvenue"
.Adresse = "4, rue des oiseaux"
.CodePostal = "56000"
.Ville = "Vannes"
.Tlphone = "00 01 02 03 04"
.Age = 2
End With
MsgBox "Le nouveau membre sappelle " & NouvMembre.Prnom & " " & _
NouvMembre.Nom, vbOKOnly + vbInformation, "Nouveau membre"
End Sub

Figure 6.12
Les variables de type
personnalis peuvent
contenir un nombre ind-
termin dinformations.
Livre Macros excel.book Page 194 Vendredi, 3. avril 2009 7:45 07

194 Excel et VBA

Notez que, en phase de cration, un complment automatique est af fich lorsque ous
faites rfrence une v ariable de type personnalis (v oir Figure 6.13) condition que
loption correspondante soit valide.

Figure 6.13
Le complment automa-
tique dinstruction est
affi h pour les types de
donnes personnaliss.

Constantes
Les constantes permettent dattrib uer un nom une v aleur fi e. Il est ainsi plus ais
dexploiter cette v aleur dans le code en f aisant rfrence au nom de la constante, plutt
qu la v aleur elle-mme. P ar ailleurs, si une v aleur est susceptible dtre modifie (un
valeur de TVA, par e xemple), laffectation de cette v aleur une constante simplifiera le
ventuelles mises jour. Il vous suffira en e fet de modifier la aleur de la constante, plutt
que de modifier chaque occurrence de la aleur dans le code de lensemble de vos projets.

Une fois quune valeur a t af fecte une constante , celle-ci ne peut tr e


ntion modifie par la suit .
Atte

Pour dclarer une constante, utilisez linstruction Const, selon la syntaxe suivante :

Const NomConstante As Type = Valeur

o NomConstante est le nom de la constante, Type, le type de donnes de la constante il


peut sagir de nimporte lequel des types de donnes prsents plus haut , et Valeur,
la valeur qui lui est af fecte. Linstruction suivante dclare la constante TVA, laquelle la
valeur 20.6 est affecte.

Const TVA As Single = 20.6


Livre Macros excel.book Page 195 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 195

Validation et conversion des types de donnes


Il est souv ent ncessaire de vrifier que le type de donnes entres par lutilisateur dan
une cellule ou dans une feuille UserF orm est v alide, cest--dire correspond au type de
valeur attendue. Si tel nest pas le cas, il est probable que le programme gnre une erreur.
Celle-ci peut alors tre vite en convertissant le type de la variable.

Vrifier le type de donnes dune variable


VBA intgre des fonctions permettant de vrifier quune aleur correspond bien au type
attendu. Ces fonctions sont prsentes dans le Tableau 6.3.

Tableau 6.3 : Fonctions VBA permettant de vrifier les types de donnes

Fonction Description
IsArray(MaVar) Renvoie True si la variable MaVar est une variable de matrice ; False dans le
cas contraire.
IsDate(MaVar) Renvoie True si la variable MaVar est une variable de matrice ; False dans le
cas contraire.
IsNumeric(MaVar) Renvoie True si la variable MaVar est un nombre ; False dans le cas contraire.
IsObject(MaVar) Renvoie True si la variable MaVar est une variable objet ; False dans le cas
contraire.
IsMissing(MaVar) Renvoie True si largument optionnel MaVar est de type Variant et na pas
t pass la fonction ou la procdure en cours.
IsEmpty(MaVar) Renvoie True si la variable MaVar a t initialise, cest--dire si une valeur lui
a t affecte ; False dans le cas contraire. Valide uniquement pour les
variables de type Variant.
IsNull(MaVar) Renvoie True si la variable MaVar contient la valeur Null ; False dans le cas
contraire. Ne confondez pas une variable contenant une valeur Null et une
variable qui na pas t initialise et ne contient aucune valeur. Valide uni-
quement pour les variables de type Variant.
IsError(MaVar) Renvoie True si la variable MaVar stocke une valeur qui correspond lun des
codes derreur de VBA. False dans le cas contraire.

Vous pouvez galement utiliser les fonctions VarType ou TypeName pour interroger le type
dune variable. Utilisez VarType selon la syntaxe suivante :
MaVar = VarType(NomVar)

o MaVar est une v ariable de type Integer, et NomVar le nom de la v ariable dont v ous
souhaitez interroger le type.
Livre Macros excel.book Page 196 Vendredi, 3. avril 2009 7:45 07

196 Excel et VBA

La variable MaVar reoit pour v aleur une constante Visual Basic, indiquant le type de la
variable NomVar (vbInteger pour une variable de type Integer, vbDate pour une variable
de type Date, etc.).
TypeName sutilise selon la mme syntax e ( MaVar = VarType(NomVar)), mais renvoie une
chane de caractres reprsentant le type de la variable (voir Tableau 6.4).
Tableau 6.4 : Valeurs renvoyes par la fonction TypeName

Chane renvoye Variable


Type objet Objet dont le type est type_objet
Byte Octet
Integrer Entier
Long Entier long
Single Nombre virgule flottante en simple prcision
Double Nombre virgule flottante en double prcision
Currency Valeur montaire
Decimal Valeur dcimale
Date Valeur de date
String Chane
Boolean Valeur boolenne
Error Valeur derreur
Empty Non initialise
Null Aucune donne valide
Object Objet
Unknown Objet dont le type est inconnu
Nothing Variable objet qui ne fait pas rfrence un objet

La fonction EntrerUneDate suivante utilise la fonction InputBox pour demander lutili-


sateur dentrer une date. La fonction IsDate est employe pour vrifier si la aleur entre
par lutilisateur est bien une date. Si tel nest pas le cas, lutilisateur est de nouv eau invit
entrer une date.

Function EntrerUneDate()
Do
EntrerUneDate = InputBox("Entrez une date", "Vrification du type de donnes")
Livre Macros excel.book Page 197 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 197

Loop Until IsDate(EntrerUneDate) = True


End Function

La fonction InputBox et la structure de contrle Do...Loop sont prsentes en


Info dtail au chapitre suivant.

Modifier le type dune variable


VBA intgre des fonctions permettant de con vertir une v ariable dun type dfini ers un
autre type de donnes. Le Tableau 6.5 prsente sommairement ces fonctions. Pour plus de
prcisions, reportez-vous laide en ligne de VBA.

Tableau 6.5 : Fonctions de conversion de types de donnes

Fonction Description
CBool(MaVar) Convertit la variable. Renvoie True si MaVar est une valeur numrique diffrente
de 0 ; False si MaVar est gale 0. Une erreur est gnre si MaVar nest pas une
valeur numrique.
CByte(MaVar) Convertit MaVar en une variable de type Byte1.
CCur(MaVar) Convertit MaVar en une variable de type Currency (montaire)1.
CDate(MaVar) Convertit MaVar en une variable de type Date1.
CDbl(MaVar) Convertit MaVar en une variable de type Double1.
CDec(MaVar) Convertit MaVar en une variable de type Decimal1.
CInt(MaVar) Convertit MaVar en une variable de type Integer1.
CLng(MaVar) Convertit MaVar en une variable de type Long1.
CSng(MaVar) Convertit MaVar en une variable de type Single1.
CVar(MaVar) Convertit MaVar en une variable de type Variant. MaVar doit tre une valeur de
type Double pour les nombres et de type String pour les chanes.
CStr(MaVar) Convertit MaVar en une variable de type String. Si MaVar est une valeur de type
Boolean, la fonction CStr renvoie Vrai ou Faux. Si MaVar est une valeur de type
Date, la fonction CStr renvoie la date sous forme de chane. Si MaVar est une valeur
de type numrique, la fonction CStr renvoie cette valeur sous forme de chane.
1 MaVar doit tre une valeur compatible avec le type de donnes vers lequel sopre la conversion. Par exemple, si

vous utilisez la fonction Cbyte, MaVar doit tre une valeur numrique comprise entre 0 et 255. SiMaVar nest pas une
valeur compatible avec le type de donnes renvoy par la fonction, une erreur "Type incompatible" est gnre.

Notez que MaVar peut tre une variable ou toute expression valide.
Livre Macros excel.book Page 198 Vendredi, 3. avril 2009 7:45 07

198 Excel et VBA

Porte et dure de vie des variables


Outre leur type et leur v aleur, les v ariables et les constantes sont caractrises par leur
porte. La porte dune v ariable ou dune constante dsigne son accessibilit pour les
procdures et les modules du projet. Variables et constantes peuvent tre accessibles une
procdure, lensemble des procdures dun module, ou encore lensemble des modules
du projet en cours. Les v ariables sont aussi caractrises par leur dure de vie. La dure
de vie dune variable dsigne le temps pendant lequel la variable conserve sa valeur. Une
variable peut conserv er sa v aleur tant quune procdure se xcute, et tre rinitialise
lorsque la procdure est termine, ou conserv er sa v aleur entre les dif frents appels de
procdures.

Porte de niveau procdure


Une variable-constante est dite de niveau pr ocdure lorsquelle nest accessible qu la
procdure dans laquelle elle est dclare. Cest le cas de toute variable/constante dclare
lintrieur dune procdure. Les v ariables-constantes dclares lintrieur dune
procdure ne sont accessibles qu la procdure laquelle elles appartiennent.

Porte de niveau module prive


Une v ariable-constante est dite de niveau module priv lorsquelle est accessible
lensemble des procdures du module dans lequel elle est dclare. Elle doit pour cela
tre dclare dans la section Dclarations du module, cest--dire lextrieur de toute
procdure.
Par dfaut, les variables-constantes dclares dans la section Dclarations dun module ont
une porte prive, cest--dire ne sont accessibles quaux procdures du module. Vous
pouvez cependant substituer le mot cl Private Dim pour amliorer la lisibilit de v otre
code. La dclaration de la variable se prsente alors ainsi :
Private NomVariable As Type

Dans lexemple suivant, la constante Pi est dclare de niveau module priv et est accessi-
ble toutes les procdures du module.
Option Explicit
Private Pi As Single
Pi = 3.14

Sub Procdure-1 ()
[....] Instructions
End Sub
Livre Macros excel.book Page 199 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 199

[....] Autres procdures du module

Sub Procdure-n ()
[....] Instructions
End Sub

Porte de niveau module publique


Une v ariable-constante est dite de niveau module public lorsquelle est accessible
lensemble des procdures du projet, quel que soit le module de stockage. Elle doit pour
cela tre dclare dans la section Dclarations du module, laide de linstruction Public,
selon la syntaxe suivante :
Public NomVariable As Type

Lorsque vous utilisez une valeur dfinie de faon rcur ente dans un pr ojet
Cons
eil (une valeur de TVA, par exemple), affectez-lui une constante de niveau module
public et utilisez cette constante plutt que la valeur elle-mme dans les proc-
dures. Si cette valeur est modifi , il vous suf fi a de r edfinir linstructio
daffectation de la constante pour mettre jour la totalit du projet.

Variables statiques
Une v ariable conserv e sa v aleur tant que le programme se xcute dans son champ de
porte. Cette v aleur peut tre modifie, mais la ariable conserv e une v aleur. Lorsque
lexcution du programme sort de la porte de la v ariable, celle-ci est rinitialise et perd
sa valeur. Autrement dit, une v ariable de niveau procdure conserve sa valeur tant que la
procdure dans laquelle elle est dclare est en cours de xcution mme lorsque la
procdure appelle dautres procdures. Lorsque celle-ci se termine, la variable est rinitia-
lise. Une v ariable de ni veau module conserv e sa v aleur jusqu ce que le programme
prenne fin
Pour quune variable de niveau procdure conserve sa valeur entre diffrents appels, subs-
tituez le mot cl Static Dim dans linstruction de dclaration de la v ariable, selon la
syntaxe suivante :
Static NomVariable As Type

Pour dclarer toutes les variables dune pr ocdure Sub ou Function statiques,
Astu
ce placez le mot cl Static devant linstruction de dclaration de la procdure.
Livre Macros excel.book Page 200 Vendredi, 3. avril 2009 7:45 07

200 Excel et VBA

Traitement interapplications laide


de variables objet
Une variable objet peut tre af fecte un objet appartenant une application autre que
lapplication hte du projet. Un programme VBA Excel peut ainsi e xploiter des objets du
modle dobjets Word, Access ou toute autre application supportant Automation. Il v ous
suffit pour cela da fecter les objets auxquels vous souhaitez accder une variable objet
laide des fonctions GetObject et/ou CreateObject.

Automation, ou OLE Automation, est une fonction du modle dobjets compo-


ition sant (COM, Component Object Model). Il sa git dun standard quutilisent les
Dfin
applications pour e xposer leur s objets, mthodes et pr oprits aux outils de
dveloppement. Les applications Of fice supportent Automation. Un classeur
Excel peut ainsi exposer une feuille de calcul, un graphique, une cellule ou une
plage de cellules, etc. Un f chier Word pourra exposer une p age, un paragra-
phe, un mot, ou tout autr e objet de son modle dobjets. Visual Basic pour
Applications permet daccder ces objets, dinterr oger ou de r edfinir leu s
proprits, den excuter les mthodes, etc.

Pour quun projet puisse accder la bibliothque dobjets dune autre application,
celle-ci doit tre rfrence dans le projet. Pour rfrencer une bibliothque dobjets,
choisissez la commande Rfrence du menu Outils. Dans la bote de dialogue qui saffi
che, cochez les cases des bibliothques que v ous souhaitez rfrencer, puis cliquez sur
OK.

Figure 6.14
La bote de dialogue
Rfrences.
Livre Macros excel.book Page 201 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 201

Pour raliser lexemple suivant, rfrencez la bibliothque dobjets Microsoft Word Object
Library partir dun projet Excel. Crez ensuite un nouveau document Word et enregistrez-le
sur le Bureau de Windows, sous le nom MonDoc.doc.
Placez ensuite le code suivant dans un module Excel :

1: Sub InsereTableauDansFichierWord()
2: Dim MonDoc As Object
3: On Error Resume Next
4: Set MonDoc = GetObject(, "Word.Application")
5: If Err.Number <> 0 Then Err.Clear
6: Set MonDoc = GetObject("C:\Documents and settings\ Administrateur\
Bureau\MonDoc.doc")
7: Dim MaPosition As Word.Range
8: Set MaPosition = MonDoc.Range(0, 0)
9: MonDoc.Tables.Add Range:=MaPosition, NumRows:=3, NumColumns:=4
10: MonDoc.Save
11: Set MonDoc = Nothing
12: Word.Application.Quit
13: End Sub

Veillez per sonnaliser le c hemin prcis pour la fonction GetObject la


ntion ligne 18, sinon cette macro ne fonctionnera pas.
Atte

Excutez la procdure, puis ouvrez le fichierWord. Un tableau de quatre colonnes sur trois
lignes a t plac en dbut de document.

La v ariable objet MonDoc est dclare ligne 2. Elle est ensuite af fecte lobjet
Word.Application, reprsentant lapplication Word, laide de linstruction Set et de la
fonction GetObject (ligne 4). Si lapplication Word nest pas ouverte, une erreur est gn-
re. Un dtecteur derreurs est donc plac en ligne 3, de faon ignorer lerreur et passer
linstruction suivante. Si, effectivement, une erreur survient ( If Err.Number <> 0), la
proprit Number de lobjet Err est redfinie 0 (ligne 5). Cette v entuelle erreur tant
gre, MonDoc peut tre affecte MonDoc.doc (ligne 6).

La variable MaPosition de type Word.Range est ensuite dclare (ligne 7) lobjet Range
de Word reprsente une position de curseur dans un document. Ligne 8, la position repr-
sentant le dbut du document lui est affecte. Un tableau est ensuite insr cette position,
ligne 9. Le document est ensuite sauv egard. Ligne 11, la v ariable MonDoc est libre.
Enfin, linstruction de la ligne 12 permet de quitter Excel. En ef fet, lorsque v ous f aites
appel une v ariable objet dune autre application, le moteur de lapplication est lanc.
Nomettez donc pas demplo yer la mthode Quit, afin de librer les ressources occupe
par lapplication.
Livre Macros excel.book Page 202 Vendredi, 3. avril 2009 7:45 07

202 Excel et VBA

On distingue, dans laccs aux objets dautres applications laide dAutoma-


tion, la liaison tar dive de la liaison prcoce . La liaison est dite tar dive
Info
lorsquune variable objet de type Object ou Variant est dclare ( Dim MaVar
As Object). La variable est ensuite initialise et af fecte un objet de lappli-
cation trangre laide de la fonction GetObject. On parle de liaison prcoce
lorsque la variable est dclare dun type identifiant lapplication dont o
souhaite exploiter les objets ( Dim MaVar as Word.Application). Utilisez de
prfrence une liaison prcoce dans vos pr ogrammes. Les performances du
programme en seront amliores, et Visual Basic vrifie a la syntaxe spcifiqu
aux objets de lapplication trangre lors de lcriture de votre programme.

Notez quun programme Excel peut e xcuter une macro stocke dans une autre applica-
tion hte. Dans le xemple sui vant, la macro MacroW ord est e xcute sur un nouv eau
document partir dExcel. Pour raliser cet e xemple, commencez par crer la macro
MacroWord :
1. Lancez Word. Dfinissez le n veau de scurit des macros (Outils, Macro, Scurit)
Moyen de faon autoriser lexcution des macros.
2. Choisissez Outils, Macro, Macros. La bote de dialogue Macros de Word saffiche
3. Dans la zone Nom de la macro, saisissez MacroW ord et, dans la liste droulante
Macros disponibles dans, slectionnez Normal.dot (modle global).

Le modle Normal.dot de Word est lquivalent du classeur de macr os person-


Info nel dExcel : les macr os stockes dans ce modle sont accessibles tous les
documents Word.

4. Cliquez sur le bouton Crer.


Visual Basic Editor souvre sur la fentre Code de la macro MacroWord.
5. Compltez le code de la macro de la faon suivante :
Sub MacroWord()
MsgBox "Cette bote de dialogue est affiche par la macro MacroWord", _
vbOKOnly + vbInformation, "Excution dune macro Word partir dun
programme Excel"
End Sub

6. Enregistrez, puis fermez Word.


Retournez Visual Basic Editor pour Excel et crez la procdure suivante :
1: Sub ExecuterMacroWord()
2: Dim MonWord As Object
Livre Macros excel.book Page 203 Vendredi, 3. avril 2009 7:45 07

Chapitre 6 Variables et constantes 203

3: Set MonWord = CreateObject("Word.Application")


4: MonWord.Visible = True
5: MonWord.Documents.Add
6: MonWord.Run "MacroWord"
7: Set MonWord = Nothing
8: End Sub

Excutez la procdure ExecuterMacroWord. La bote de dialogue reprsente la


Figure 6.15 saffiche
Ligne 2, la v ariable MonWord est cre et reoit lobjet Word.Application la ligne
suivante. Ligne 4, la proprit Visible de lobjet MonWord est dfinie True afin da fi
cher Word lcran. Un document est ensuite cr. Ligne 6, on applique la mthode Run
lobjet MonWord afin d xcuter la macro MacroWord. La bote de dialogue reprsente
la Figure 6.15 saffiche alors. Ligne 7, la v ariable objet est libre et le programme
prend fin

Figure 6.15
Une macro Excel peut
contrler lexcution de
macros dans dautres appli-
cations hte.

Le programme complet prsent au Chapitre 17 fournit un bon exemple de trai-


Info tement interapplications, puisquil propose notamment dditer des documents
Word complexes partir de donnes traites dans le programme Excel.
Livre Macros excel.book Page 204 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 205 Vendredi, 3. avril 2009 7:45 07

7
Contrler
les programmes VBA
Au sommaire de ce chapitre
Rpter une srie dinstructions : les boucles
Utiliser des instructions conditionnelles
Dfinir linstruction sui ante avec GoTo
Interagir avec lutilisateur via des botes de dialogue
Utiliser les oprateurs logiques
Trier des donnes
Livre Macros excel.book Page 206 Vendredi, 3. avril 2009 7:45 07

206 Excel et VBA

Visual Basic intgre des instructions permettant dorienter le comportement dune


macro. Ces instructions sont appeles des structures de contrle on parle du flux d
contrle dun programme. La connaissance et la matrise de ces structures constituent un
pralable indispensable la cration de programmes VBA souples et puissants, se
comportant diffremment selon ltat du document et de lapplication au cours de son
excution, ou des informations fournies par lutilisateur.
Ce chapitre aborde une une les structures de contrle de Visual Basic. Leur combinaison
permettra de gagner un temps prcieux dans vos tches les plus communes comme les plus
complexes. Linstruction GoTo et les fonctions MsgBox et InputBox, ainsi que la collection
Dialogs sont aussi traites dans ce chapitre. Il ne sagit pas de structures de contrle, mais
elles permettront aussi de contrler le comportement des programmes VBA, et dinteragir
avec lutilisateur.

Rpter une srie dinstructions : les boucles


On entend par instructions en boucle, des instructions se rptant en srie. Des instructions en
boucles peuvent se rpter un nombre de fois dtermin dans le code ou un nombre de fois
indtermin, en fonction du contexte au moment de lexcution du programme.
Do...Loop et While...Wend permettent de gnraliser une srie dinstructions particu-
lires lensemble dun document ; dans ce cas, ce sont ltat du document et ltat de
lapplication qui dterminent le nombre de boucles ralises.
For...Next permet de rpter sur un document une srie dinstructions un nombre de
fois dtermin par lutilisateur.
For Each...Next permet dexcuter une srie dinstructions sur tous les objets dune
collection.

La boucle While...Wend
La structure de contrle While...Wend permet de rpter une srie dinstructions tant
quune condition spcifie est remplie. Cest lune des structures les plus utilises pou
automatiser les tches rptitives. Elle permet de rpter un traitement sur une chane, un
format, un objet, etc., dtermin dans un document.
La syntaxe de la structure While...Wend est la suivante :
While Condition
Srie dinstructions
Wend

o Condition est une e xpression comparant deux v aleurs laide dun oprateur rela-
tionnel. Lorsque la condition spcifie aprs While est ralise, le programme excute la
Livre Macros excel.book Page 207 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 207

Srie dinstructions, place entre While et Wend. Lorsque linstruction Wend est
atteinte, le programme retourne linstruction While et interroge nouv eau la
condition. Si elle est ralise, la Srie dinstructions sexcute nouveau, etc. Dans
le cas contraire, les instructions places entre While et Wend sont ignores, et le xcution
du programme se poursuit avec linstruction situe immdiatement aprs Wend.
Pour poser une condition, on conjugue gnralement une e xpression avec un oprateur
relationnel, ou oprateur de compar aison, et une v aleur. Loprateur relationnel permet
dtablir un rapport entre la v aleur renvoye par lexpression et la valeur qui lui est associe.
Si ce rapport est vrifi, la condition est respecte
Le Tableau 7.1 prsente les oprateurs relationnels de Visual Basic.

Tableau 7.1 : Les oprateurs relationnels de Visual Basic

Oprateur relationnel Signification


= Egal
> Suprieur
< Infrieur
<> Diffrent de
>= Suprieur ou gal
<= Infrieur ou gal
Like Identique (pour comparer des chanes de caractres)
Is Egal (pour comparer des variables objet)

Deux c hanes de car actres peuvent tr e compares laide des opr ateurs
Cons
eil relationnels =, <, >, etc. La compar aison seffectue alors entre les codes ANSI
attachs aux car actres compars. Si vous de vez ef fectuer des comparaisons
prcises, prfrez loprateur Like. Celui-ci permet en effet de prendre ou non en
compte la casse et permet lutilisation de car actres gnriques. Consultez
laide en ligne pour plus de prcisions.

La technique denregistrement dinstructions en boucle la plus courante consiste excuter la


srie dinstructions aprs a voir acti v lEnre gistreur de macro, puis ouvrir la fentre
Code de la macro et y insrer la structure While...Wend.
Nous utiliserons une structure While...Wend pour automatiser la saisie dinformations
dans une feuille de calcul. Considrez le classeur Representants par departements repr-
sent la Figure 7.1. La feuille de calcul active (libelle Representants) recense les dpar-
tements af fects chaque reprsentant de la socit. Les noms des reprsentants
Livre Macros excel.book Page 208 Vendredi, 3. avril 2009 7:45 07

208 Excel et VBA

apparaissent dans les cellules de la ligne 3. Pour chaque cellule contenant le nom dun
reprsentant, nous avons insr en commentaires les initiales du reprsentant. Sous le nom
du reprsentant se trouvent les numros des dpartements dont il a la charge.
Figure 7.1
La rpartition des
reprsentants par
dpartements.

Le classeur Representants par clients illustr la Figure 7.2 contient la liste des clients de
la socit (colonne A). La colonne B nous renseigne sur la ville du client, et la colonne D
sur son numro de client. Les deux premiers chif fres de ce numro correspondent au
dpartement dorigine du client. La colonne C contient les initiales du reprsentant en
charge du client. Nous profiterons de ce que ces deux classeurs ont en commun le numr
du dpartement pour automatiser la mise jour de la colonne C.
Figure 7.2
Le classeur avec la rpar-
tition des reprsentants
par clients avant mise
jour de la colonne C.

La macro suivante interroge les deux premiers chiffres du numro de client. Elle recherche
ensuite cette valeur dans le classeur Representants par departement de faon identifier l
reprsentant en charge du client. Les initiales du client sont alors insres dans la cellule
Livre Macros excel.book Page 209 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 209

situe g auche du numro de client. La structure While...Wend permet de rpter cette


procdure en boucle. Chaque fois que les initiales dun reprsentant ont t insres, la
cellule Numro de client sui vante est acti ve. La procdure se xcute TANT QUE la
cellule slectionne contient une valeur.

1: Sub InsererInitialesRepresentants()
2: Dim ClasseurRepresentants As Workbook
3: Dim NumDepartement As String
4: Dim Colonne As Variant
5: Dim Initiales
6: Set ClasseurRepresentants = _
GetObject("C:\Documents and settings\ Administrateur\Bureau\
Representants par departements.xls")

7: Range("D4").Select
8: While ActiveCell.Value <> ""
9: NumDepartement = Left(ActiveCell.Value, 2)
10: Colonne = ClasseurRepresentants.Sheets(1).Range("A4:I50")
.Find(What:=NumDepartement, LookIn:=xlFormulas,
LookAt:=xlWhole).Address
11: Colonne = Range(Colonne).Column
12: Colonne = CInt(Colonne)
13: Initiales = ClasseurRepresentants.Sheets(1).Cells(3, Colonne)
.Comment.Text
14: ActiveCell.Offset(0, -1).Range("A1").Select
15: ActiveCell.FormulaR1C1 = Initiales
16: ActiveCell.Offset(1, 1).Range("A1").Select
17: Wend
18: Set ClasseurRepresentants = Nothing
19: Workbooks("Representants par departements.xls").Close
20: End Sub

Lignes 2 6, les variables qui seront exploites par le programme sont dclares, et la
variable objet ClasseurReprsentant est af fect le classeur Representants par departe-
ments.xls, situ sur le Bureau. Ligne 7, la cellule D4 est slectionne.
La boucle While...Wend des lignes 8 17 se xcute tant que la cellule slectionne
contient des informations. Ligne 9, la fonction Left affecte la variable NumDepartement
les deux caractres de gauche (correspondant au numro de dpartement) de la valeur de la
cellule active. Cette v aleur est ensuite recherche dans le classeur des reprsentants par
dpartements (ligne 10). Lobjet Range renvoy par la mthode Find est affect la varia-
ble Colonne notez que la v ariable Colonne a t dclare de type Variant de sorte
quelle puisse recevoir des valeurs de diffrents types. Ligne 11, Colonne reoit la v aleur
correspondant au numro de la colonne de la cellule trouve. Li gne 12, la fonction CInt
convertit la valeur de Colonne en valeur de type Integer. La variable Colonne peut ainsi
tre utilise comme ar gument de la proprit Cells. Ligne 13, la v ariable Initiales reoit
pour valeur les initiales du reprsentant en charge du dpartement. On lui affecte pour cela
Livre Macros excel.book Page 210 Vendredi, 3. avril 2009 7:45 07

210 Excel et VBA

le te xte de commentaires de la cellule situe dans la mme colonne que lobjet Range
renvoy par la fonction Find, mais sur la ligne 3 la ligne des noms de reprsentants.
Lignes 14 et 16, un dplacement par rfrence relati ve aux cellules est ef fectu. Tout
dabord, la cellule situe gauche de la cellule active est slectionne et reoit la valeur de
la v ariable Initiales (ligne 15). Un dplacement dune cellule v ers la droite puis dune
cellule vers le bas est ensuite ef fectu. La cellule acti ve est alors la cellule sui vante de la
colonne D. Le mot cl Wend ren voie le xcution du programme linstruction While
correspondante. Celle-ci vrifie que la cellule act ve contient des donnes. Si tel est le cas,
les instructions situes entre While et Wend sont excutes, et les initiales du reprsentant
en charge du client insres.
Lorsque la condition While nest plus vrifie, les instructions situes entre While et Wend
sont ignores et le programme se termine a vec les instructions des lignes 18 et 19. L es
ressources systme occupes par la v ariable objet ClasseurRepresentants sont libres, et le
classeur des reprsentants par dpartements est ferm.

Pour scuriser dfinitivement cette mac o, commencez par lui fair e activer la
Cons
eil feuille de vant r ecevoir les informations. Elle de vra lo giquement tr e stoc ke
dans ClasseurRepresentants.xls, puisquelle ne servira qu ce classeur. Ainsi,
elle ne sexcutera que si le classeur est ouvert.

Figure 7.3
La macro a complt
les informations de
la colonne C.

La boucle Do...Loop
La structure de contrle Do...Loop est semblable While...Wend, mais of fre plus de
souplesse car elle peut se dcliner sur quatre modes diffrents :
Livre Macros excel.book Page 211 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 211

Do While...Loop tant que la condition est respecte, la boucle sexcute.

Do While Condition
Srie dinstructions
Loop

Do Until...Loop jusqu ce que la condition soit ralise, la boucle sexcute.

Do Until Condition
Srie dinstructions
Loop

Do...Loop While la boucle se xcute, puis se rpte, tant que la condition est
respecte.

Do
Srie dinstructions
Loop While Condition

Do...Loop Until la boucle se xcute, puis se rpte, jusqu ce que la condition


soit respecte.

Do
Srie dinstructions
Loop Until Condition

Le programme suivant utilise une boucle Do While...Loop pour supprimer les doublons
dans un classeur Excel. Les Figures 7.4 et 7.5 prsentent un classeur contenant des
doublons avant et aprs passage de la macro. On estime, dans cette premire version, quil
existe un doublon lorsque deux cellules de la colonne A contiennent les mmes donnes.

Figure 7.4
La feuille avant
passage de la macro.
Livre Macros excel.book Page 212 Vendredi, 3. avril 2009 7:45 07

212 Excel et VBA

Figure 7.5
La macro a supprim
les doublons.

Le programme commence par faire un tri des donnes. Le contenu de chaque cellule de la
colonne A est ensuite compar celui de la cellule sui vante. Sils sont identiques, la ligne
de la cellule courante est supprime.

1: Sub SuppressionDoublons()
2: Dim CelluleCourante As Range
3: Dim CelluleSuivante As Range
4: Set CelluleCourante = ActiveSheet.Range("A1")
5:
6: Tri des donnes sur la cellule A1
7: ActiveSheet.Range("A1").Sort key1:=Range("A1"), _
8: Order1:=xlAscending, Header:= xlGuess, OrderCustom:=1, _
9: MatchCase:=False, Orientation:=xlTopToBottom
10: Boucle
11: Do While Not IsEmpty(CelluleCourante) = True
12: Set CelluleSuivante = CelluleCourante.Offset(1, 0)
13: If CelluleSuivante.Value = CelluleCourante.Value Then
14: CelluleCourante.EntireRow.Delete
15: End If
16: Set CelluleCourante = CelluleSuivante
17: Loop
18: End Sub

Lignes 2 et 3 les variables objet de type Range CelluleCourante et CelluleSuivante sont


dclares. La v ariable CelluleCourante reoit ensuite un objet Range correspondant la
cellule A1 de la feuille acti ve. Linstruction des lignes 7 9 trie les donnes. On applique
pour cela la mthode Sort. Les ar guments Key1 et Order1 dfinissent respect vement le
premier critre de tri et lordre de tri. Header indique sil e xiste des lignes de tri et reoit
ici la constante xlGuess (Excel dfinit sil y a ou non une ligne de titre et, dans la firma
tive, de quelle ligne il sagit). OrderCustom reoit la v aleur 1 et le tri est donc "Normal".
Enfin MatchCase et Orientation correspondent au respect de la casse lors du tri et son
orientation (ici de haut en bas).
Livre Macros excel.book Page 213 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 213

Lignes 11 17, une boucle Do While...Loop est utilise pour tester toutes les cellules. La
cellule stocke dans CelluleCourante est teste, puis CelluleCourante reoit la cellule stocke
dans CelluleSuivante, soit la cellule situe immdiatement en dessous. La boucle se xcute
tant que la cellule stocke dans CelluleCourante nest pas vide [ Not IsEmpty(Cellule-
Courante) = True].
Ligne 12, la proprit Offset est utilise pour attribuer CelluleSuivante la cellule situe
une ligne en dessous, sur la mme colonne. Lignes 13 15, une instruction conditionnelle
sert supprimer la ligne de CelluleCourante ( CelluleCourante.EntireRow) si la cellule
contient les mmes donnes que la cellule sui vante. CelluleCourante reoit ensuite la
cellule stocke dans CelluleSuivante (ligne 16).
Ligne 17, linstruction Loop ren voie le programme linstruction While correspondante.
Lexpression While est de nouveau value et le corps de la boucle sexcute si elle est vri-
fie. Lorsque l xpression de la ligne 11 nest plus vrifie, le programme se poursuit vec
linstruction situe immdiatement sous linstruction Loop. En loccurrence, il prend fin
Le programme fonctionne correctement, mais ne prend en compte que le contenu des
cellules de la colonne A pour dterminer les doublons. La procdure sui vante supprime
une ligne uniquement si les donnes sont g alement identiques dans les colonnes B, C et
D. Les modifications apportes la premire ersion apparaissent en gras.
1: Sub SuppressionDoublons()
2: Dim Cellulecourante As Range
3: Dim Cellulesuivante As Range
4: Set Cellulecourante = ActiveSheet.Range("A1")
5:
6: Tri des donnes sur la cellule A1
7: ActiveSheet.Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending,
Key2:=Range("B1"), _
8: Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending,
Header:=xlGuess, _
9: OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
10: Boucle et test des cellules
11: Do While Not IsEmpty(Cellulecourante) = True
12: Set Cellulesuivante = Cellulecourante.Offset(1, 0)
13: If Cellulesuivante.Value = Cellulecourante.Value Then
14: If LignesIdentiques(Cellulecourante, Cellulesuivante) = True Then
15: Cellulecourante.EntireRow.Delete
16: End If
17: End If
18: Set Cellulecourante = Cellulesuivante
19: Loop
20: End Sub
21:
22: Function LignesIdentiques(CellCourante As Range, CellSuivante As Range)
As Boolean
23: If CellCourante.Offset(0, 1).Value <> CellSuivante.Offset(0, 1).Value
Then
24: LignesIdentiques = False
Livre Macros excel.book Page 214 Vendredi, 3. avril 2009 7:45 07

214 Excel et VBA

25: ElseIf CellCourante.Offset(0, 2).Value <> CellSuivante.Offset(0, 2)


.Value Then
26: LignesIdentiques = False
27: ElseIf CellCourante.Offset(0, 3).Value <> CellSuivante.Offset(0, 3)
.Value Then
28: LignesIdentiques = False
29: Else
30: LignesIdentiques = True
31: End If
32: End Function

Lignes 15, linstruction conditionnelle dfinissant si la ligne est supprime appelle la fonc
tion LignesIdentiques en lui passant les ar guments CelluleCourante et CelluleSui vante.
La fonction Lignesidentiques est dclare comme rece vant deux ar guments de type
Range et renvoyant une valeur de type Boolean (ligne 22).
Ligne 23 31, une structure conditionnelle sert dterminer la v aleur renvoye par la fonc-
tion. Le contenu des cellules dcales dune, de deux, puis de trois cellules droite de Cellu-
leCourante est successivement compar au contenu des cellules dcales de la mme f aon
par rapport CelluleSui vante [ Offset(0, 1), Offset(0, 2) et Offset(0,3)]. Si ce
contenu diffre, la valeur False est affecte la fonction (lignes 24, 26 et 28). Dans le cas
contraire, la fonction renvoie True (ligne 30). La procdure appelante reprend alors la main
et linstruction de la ligne 15 est e xcute si la fonction a ren voy True. Dans le cas
contraire, la condition nest pas vrifie et la cellule su vante est teste.

Pour interrompre une macr o qui ne fonctionne pas corr ectement (qui e xcute
pel une boucle sans fin, par xemple), appuyez sur Ctrl + Pause, puis voyez le
Rap
Chapitre 10.

La boucle For...Next
La structure de contrle For...Next permet de rpter une srie dinstructions un nombre
de fois dtermin dans le code, en utilisant un compteur. Utilisez linstruction For...Next
selon la syntaxe suivante :
For compteur = x To y Step Pas
srie dinstructions
Next compteur

La macro e xcute en boucle la srie dinstructions spcifie entre For et Next, en incr-
mentant la variable compteur de la valeur de Pas chaque passage de la boucle. Si largu-
ment Step est omis, le compteur est incrment de 1. Tant que la v aleur attache la
variable compteur est infrieure la valeur y, la boucle se rpte ; lorsque la valeur num-
rique de compteur est suprieure y, la boucle prend fin, et la procdure se poursuit avec les
instructions situes derrire linstruction Next.
Livre Macros excel.book Page 215 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 215

La procdure sui vante permet dappliquer un ombrage de cellules une ligne sur deux
dune feuille de calcul Excel, afin dobtenir une mise en forme semblable celle reprsen
te la Figure 7.6.

Figure 7.6
Une mise en forme
automatise.

1: Sub FormaterClasseur()
2: Dim compteur As Integer
3: Dim MaLigne As Variant
4: Cells.Interior.ColorIndex = 2
5: MaLigne = Range("A1").End(xlDown).Address
6: MaLigne = Range(MaLigne).Row
7: If Not MaLigne / 2 = Int(MaLigne / 2) Then
8: MaLigne = MaLigne+1
9: End If
10: For compteur = 2 To MaLigne Step 2
11: Range(compteur & ":" & compteur).Select
12: Selection.Interior.ColorIndex = 15
13: Next compteur
14: End Sub

Deux variables sont tout dabord dclares. La proprit ColorIndex de lobjet Interior
de tous les objets de la collection Cells (toutes les cellules de la feuille active) est ensuite
dfinie 2 (ligne 4) ce qui revient appliquer la couleur de fond blanche lensemble
des cellules de la feuille.
Les instructions des lignes 4 9 serv ent dterminer jusqu quelle ligne le formatage
doit seffectuer. Ladresse de la dernire cellule non vide sous la cellule A1 est affecte
la variable MaLigne (ligne 5), qui reoit ensuite pour v aleur le numro de ligne de cette
cellule (ligne 6). Une instruction conditionnelle If...End If est utilise pour vrifier qu
MaLigne est une valeur paire (lignes 7 9). Si tel nest pas le cas (si MaLigne divis par 2
nest pas un nombre entier), MaLigne est incrmente de 1.
La boucle For...Next peut maintenant tre e xcute. Le compteur de la boucle
commence 2 et est incrment de 2 chaque passage de la boucle, jusqu atteindre la
Livre Macros excel.book Page 216 Vendredi, 3. avril 2009 7:45 07

216 Excel et VBA

valeur MaLigne (ligne 10). A chaque passage de la boucle, la ligne correspondant la


valeur de la v ariable compteur est slectionne (ligne 11) et lombrage de cellule corres-
pondant la valeur 15 de la proprit ColorIndex lui est appliqu (ligne 12).
Le programme sui vant constitue une nouv elle version de la procdure SuppressionDou-
blons, dans laquelle la fonction LignesIdentiques a t amliore. La fonction utilise
maintenant une boucle For...Next pour dfinir le dplacement Offset) effectu lors des
comparaisons. Par ailleurs, le nombre de cellules de vant tre compares afin de dfinir
une ligne constitue un doublon peut ainsi tre dfini lors de lappel de la fonction
1: Sub SuppressionDoublons()
2: Dim Cellulecourante As Range
3: Dim Cellulesuivante As Range
4: Set Cellulecourante = ActiveSheet.Range("A1")
5:
6: Tri des donnes sur la cellule A1
7: ActiveSheet.Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending,
Key2:=Range("B1"), _
8: Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending,
Header:=xlGuess, _
9: OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
10: Boucle et test des cellules
11: Do While Not IsEmpty(Cellulecourante) = True
12: Set Cellulesuivante = Cellulecourante.Offset(1, 0)
13: If Cellulesuivante.Value = Cellulecourante.Value Then
14: If LignesIdentiques(Cellulecourante, Cellulesuivante, 3)
= True Then
15: Cellulecourante.EntireRow.Delete
16: End If
17: End If
18: Set Cellulecourante = Cellulesuivante
19: Loop
20: End Sub
21:
22: Function LignesIdentiques(CellCourante As Range, Cellsuivante As Range,
Num As Byte) As Boolean
23: LignesIdentiques = True
24: Dim compteur As Byte
25: boucle et test du Num colonnes
26: For compteur = 1 To Num
27: If CellCourante.Offset(0, compteur).Value <> Cellsuivante
.Offset(0, compteur).Value Then
28: LignesIdentiques = False
29: Exit For
30: End If
31: Next compteur
32: End Function

Ligne 14, la fonction LignesIdentiques est appele et reoit maintenant une v aleur de
type Byte pour largument Num (ici, 3).
Livre Macros excel.book Page 217 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 217

La fonction LignesIdentiques contrle ensuite Num cellules afin de dfinir si la ligne do


ou non tre supprime. Elle reoit dabord la v aleur True. La boucle For...Next
(lignes 26 31) se xcute ensuite Num fois. Les cellules testes chaque passage de la
boucle correspondent un dplacement de Num Cellules v ers la droite. Si, lors dun
passage de la boucle, deux valeurs diffrentes sont dceles (ligne 27), la valeur False est
affecte LignesIdentiques et linstruction Exit For entrane la sortie de la boucle. Si
les valeurs des cellules compares sont toujours identiques, la boucle prend fin aprs Num
passages, et la fonction garde la valeur True.
Boucle For...Next avec pas ngatif
Le programme suivant supprime les lignes vides de la feuille active. Il utilise pour cela une
structure For...Next avec un pas ngatif de 1, de faon parcourir lensemble des lignes
de la feuille, de la dernire ligne employe jusqu la premire.
1: Sub SupprLignesVides()
2: Dim DerniereLigne As Long
3: Dim Compteur As Long
4: DerniereLigne = ActiveSheet.UsedRange.Row - 1 + _
ActiveSheet.UsedRange.Rows.Count
5: For Compteur = DerniereLigne To 1 Step -1
6: If Application.WorksheetFunction.CountA(Rows(Compteur)) = 0 _
Then Rows(Compteur).Delete
7: Next Compteur
8: End Sub

Lignes 2 et 3, les variables sont dclares. Ligne 4, on affecte la variable DerniereLigne


le numro de la dernire ligne emplo ye. On se sert pour cela de la proprit UsedRange
qui renvoie la zone utilise sur la feuille acti ve, cest--dire la zone rassemblant lensem-
ble des cellules contenant des donnes sur la feuille. La proprit Row renvoie le numro de
la premire ligne de cette zone. En retirant 1 la v aleur ainsi obtenue, on obtient le
nombre de lignes vides prcdant cette zone. L expression Used-Range.Rows.Count
renvoie le nombre de lignes de la zone. En additionnant ces deux valeurs, nous obtenons le
numro de la dernire ligne de la zone utilise.
Une boucle For...Next est ensuite employe pour parcourir les lignes vrifie . La
boucle utilise un pas ngatif (Step 1) de faon effectuer le parcours de la dernire ligne
la premire. Ligne 6, on vrifie si la ligne teste est vide. On utilise pour cela la onction
Excel CountA qui ren voie le nombre de cellules de la zone interroge (ici la ligne
entire, Rows(Compteur)) contenant des donnes. Si la ligne est vide ( CountA renvoie 0),
elle est supprime. Le programme passe ensuite la v aleur sui vante, en dcrmentant
notre compteur de 1.
Lutilisation dun pas ngatif nous assure ici que le programme teste toutes les lignes.En
effet, si nous a vions emplo y un pas positif et parcouru la zone utilise de la premire
ligne la dernire, la suppression dune ligne aurait entran le dcalage de la ligne
Livre Macros excel.book Page 218 Vendredi, 3. avril 2009 7:45 07

218 Excel et VBA

suivante dune ligne vers le haut, et elle naurait donc pas t traite lors du passage suivant de
la boucle.

Boucles For...Next imbriques


Vous pouvez aussi utiliser des instructions For...Next imbriques. Veillez simplement
donner des noms diffrents chacune des variables compteur.
La procdure suivante utilise une structure For...Next pour stocker les valeurs du tableau
prsent la Figure 7.7 dans une variable de matrice multidimensionnelle.

Figure 7.7
Pour stocker les valeurs
dune feuille Excel dans
une variable de matrice,
utilisez des boucles
For...Next imbriques.

Dim MonTableau() As Single

1: Sub BouclesForNextImbriques()
2: Dim DerniereLigne As Byte
3: DerniereLigne = Range("A3").End(xlDown).Row
4: Dim NbreDeLignes As Byte
5: NbreDeLignes = DerniereLigne - 2
6: ReDim MonTableau(NbreDeLignes, 4)
7: Call AffecterValeursTableau(NbreDeLignes)
8: End Sub

9: Sub AffecterValeursTableau(DerniereLigneTableau)
10: Dim CompteurLignes As Byte
11: Dim CompteurColonnes As Byte
12: For CompteurLignes = 1 To DerniereLigneTableau
13: For CompteurColonnes = 1 To 4
14: MonTableau(CompteurLignes, CompteurColonnes) = _
Cells(CompteurLignes+2, CompteurColonnes+1)
15: Next CompteurColonnes
16: Next CompteurLignes
17: End Sub

La variable de matrice MonTableau() est dclare dans la section Dclarations du module,


afin dtre accessible toutes les procdures du module. La procdure BouclesForNex-
tImbriques la redimensionne de f aon quelle accueille lensemble des donnes de la
Livre Macros excel.book Page 219 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 219

feuille Excel active. Pour un descriptif des instructions de cette procdure, reportez-vous
la section "Variables de matrice dynamiques" du chapitre prcdent. Elle appelle ensuite la
procdure AffecterValeursTableau en lui passant la valeur de la variable NbreDeLignes.
La procdure AffecterValeursTableau commence par crer deux v ariables numriques
de type Byte qui serviront de compteur chacune des boucles For...Next (lignes 10
et 11). La premire boucle For...Next (lignes 12 16) utilise le compteur CompteurLi-
gnes pour rpter les instructions qui la composent un nombre de fois g al au nombre de
lignes contenant des donnes stock er. La boucle For...Next imbrique (lignes 13 15)
utilise le compteur CompteurColonnes pour rpter les instructions qui la composent une
fois par colonne contenant des donnes stock er. Linstruction qui la compose (ligne 14)
affecte une valeur un des espaces de stockage de la variable de matrice MonTableau. Les
valeurs de ligne de la variable et de ligne de la feuille Excel sont lies la valeur du comp-
teur de la boucle For...Next principale, tandis que les valeurs de colonne de la variable et
de colonne de la feuille Excel dpendent de la v aleur du compteur de la boucle
For...Next imbrique. La variable reoit les valeurs du tableau selon lordre suivant :
1. CompteurLigne = 1. La boucle For...Next imbrique se xcute quatre fois, et
affecte les v aleurs des cellules B3 E3 MonTableau(1, 1), MonTableau(1, 2),
MonTableau(1, 3) et MonTableau(1, 4).
2. CompteurLigne = 2. La boucle For...Next imbrique se xcute quatre fois et
affecte les v aleurs des cellules B4 E4 MonTableau(2, 1), MonTableau(2, 2),
MonTableau(2, 3) et MonTableau(2, 4).
[Etc.]

La boucle For Each...Next


Cette structure de contrle permet de gnraliser un traitement lensemble des objets
dune collection et sutilise selon cette syntaxe :
For Each lment In Collection
Instructions
Next lment

o lment est une v ariable de type Object ou Variant, utilise pour reprsenter chaque
objet de la collection dans les Instructions, et Collection le nom de la collection dobjets.
Les Instructions sont excutes une fois pour chaque objet de la collection. La procdure
suivante utilise une structure For Each...Next pour appliquer une couleur de police rouge
(ColorIndex = 3) tous les objets Cells de lobjet Selection (toutes les cellules de la
slection en cours) dont la valeur est suprieure 1 000.
Sub FortesValeursEnRouge()
Dim cellule As Range
Livre Macros excel.book Page 220 Vendredi, 3. avril 2009 7:45 07

220 Excel et VBA

For Each cellule In Selection.Cells


If cellule.Value > 1000 Then
cellule.Font.ColorIndex = 3
End If
Next cellule
End Sub

La procdure sui vante enre gistre tous les classeurs Excel ouv erts le xception du
classeur perso.xls au format Excel 4.0 et les ferme :

1: Sub EnregistrerFormatExcel4EtFermer()
2: Dim Classeur As Workbook
3: Dim position As Byte
4: Dim NomClasseur As String
5: For Each Classeur In Workbooks
6: If Not Classeur.Name = "perso.xls" Then
7: NomClasseur = Classeur.FullName
8: position = InStr(NomClasseur, ".xls")
9: NomClasseur = Left(NomClasseur, position - 1) & ".xlw"
10: Classeur.SaveAs FileName:=NomClasseur, _
FileFormat:=xlExcel4Workbook
11: Classeur.Close
12: End If
13: Next Classeur
14: End Sub

Les lignes 2 4 dclarent les v ariables ncessaires au programme. La condition de la


ligne 6 vrifie que le classeur Excel correspondant lobjet Classeur nest pas le classeu
de macros personnelles perso.xls. On utilise pour cela loprateur logique Not (prsent
la fin de ce chapitre), et la proprit Name qui, attache un objet Workbook, renvoie le nom
de fichier de ce dernier (sans le chemin)
Ligne 7, la variable NomClasseur se voit affecter le nom complet du classeur le chemin
suivi du nom de fichier renvoy par la proprit FullName. Les fonctions InStr et Left
sont utilises pour substituer le xtension .xlw le xtension .xls, afin de dfinir des no
denregistrement corrects pour les fichiers. La fonction InStr sert comparer deux cha-
nes de caractres. Ici, elle ren voie une v aleur numrique reprsentant la position de la
chane ".xls" dans la chane stocke dans la v ariable NomClasseur. La fonction Left sert
ren voyer un nombre dtermin de caractres situs g auche dune chane. Ici, elle
renvoie le nombre de caractres g al (position 1) dans la chane NomClasseur . On
obtient ainsi le nom du document sans le xtension ".xls". Il suf fit alors de concatner l
valeur de NomClasseur et la chane ".xlw" pour obtenir un nom de f chier possdant
lextension ".xlw". La mthode SaveAs est ensuite applique lobjet Classeur, en affectant
largument nomm FileName le nom ainsi dfini, et la gument nomm FileFormat, la
constante Excel xlExcel4Workbook. Enfin, la mthode Close ferme le document ainsi
enregistr.
Livre Macros excel.book Page 221 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 221

Le traitement des chanes de caractres est un sujet incontournable de la program-


mation. Vous serez invitablement amen manipuler des c hanes de car actres
Info (composes de lettres comme de chiffres) afin den xtraire les donnes voulues ou
de les modifie .
Les fonctions de traitement des chanes de caractres sont prsentes au Chapitre 11.

Boucles For Each...Next imbriques


A linstar des boucles For...Next et, plus lar gement, de lensemble des structures de
contrle, vous pouvez imbriquer des structures de contrle For Each...Next. Lexemple
suivant e xtrait lensemble des formules du classeur inscrit et les crit dans un document
Word qui est ensuite imprim. Nous utilisons pour cela deux structures For Each...Next.
La premire parcourt la collection des feuilles de tra vail ( ActiveWorkbook.Worksheets) du
classeur, tandis que la seconde y est imbrique et parcourt la collection des cellules de la
zone courante dfinie partir de la cellule A1 ( MaFeuille.Cells(1, 1).CurrentRe-
gion.Cells). Lorsque la boucle imbrique a fini de traiter les cellules de la zone courante d
la feuille de travail en cours de traitement, la premire structure For Each...Next reprend la
main et traite donc lobjet Worksheet la feuille de travail suivant de la collection.
1: Public Sub ExtraireMaFormulesWord()
2: Dim MaFormule As String
3: Dim MaCellule As Range
4: Dim MaFeuille As Worksheet
5: Dim MonWord As Object
6: On Error Resume Next
7: Set MonWord = GetObject(, "Word.Application")
8: If Err.Number <> 0 Then
9: Set MonWord = CreateObject("Word.Application")
10: Err.Clear
11: End If
12: MonWord.Visible = True
13: MonWord.Documents.Add

14: For Each MaFeuille In ActiveWorkbook.Worksheets


15: With MonWord.Selection
16: .Font.Name = "Arial"
17: .Font.Bold = True
18: .Font.Size = "13"
19: .TypeText "Formules de la feuille: " & MaFeuille.Name & Chr(13)
20: .Font.Size = "11"
21: .Font.Bold = False
22: End With
23: For Each MaCellule In MaFeuille.Cells(1, 1).CurrentRegion.Cells
24: If MaCellule.HasFormula = True Then
25: MaFormule = "{" & MaCellule.Formula & "}"
26: MonWord.Selection.TypeText "Cellule " & _
27: MaCellule.Address(False, False, xlA1) & _
28: ": " & MaFormule & Chr(13)
29: End If
Livre Macros excel.book Page 222 Vendredi, 3. avril 2009 7:45 07

222 Excel et VBA

30: Next MaCellule


31: Next MaFeuille

32: End Sub

Lignes 2 5, les variables sont dclares. Lignes 6 13, la variable MonWord reoit lobjet
Word.Application. Notez que la mthode GetObject est utilise a vec un gestionnaire
derreur afin de capturer lerreur gnre si Word nest pas ouvert. Auquel cas, la mthode
CreateObject cre une nouv elle instance de lapplication Word (ligne 9), et lobjet Err
qui reoit lerreur est rinitialis (ligne 10). Lignes 12 et 13, lapplication Word est affich
et un nouveau document est cr.
Lignes 14 31, la premire boucle For Each...Next parcourt la collection des feuilles du
classeur. Pour chaque feuille parcourue, le document Word reoit un te xte format
(lignes 15 22). Nous utilisons pour cela une structure With...End With qui dfinit l
police employe (Arial, corps 13) a vant dinsrer le texte "Formules de la feuille : " suivi
du nom de la feuille. La taille de la police est ensuite redfinie 11
La seconde structure For Each...Next (lignes 23 30) prend alors la main et traite chacune
des cellules de la collection MaFeuille.Cells(1, 1).CurrentRegion.Cells. Notez que
lon utilise ici la proprit CurrentRegion pour dfinir la zone courante partir de la cellul
A1 ( Cells(1, 1)) de la feuille. A chaque occurrence de notre boucle, on vrifie si l
cellule contient une formule (ligne 24), et si tel est le cas, celle-ci est insre dans le document
Word, prcde de ladresse de la cellule concerne.
Lorsque toutes les cellules ont t traites, la boucle imbrique prend fin et linstruction d
la ligne 31 appelle le passage suivant de la structure For Each...Next principale.

Figure 7.8
Toutes les formules
du classeur ont t extraites.
Livre Macros excel.book Page 223 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 223

Utiliser des instructions conditionnelles


Si les boucles permettent de raliser des macros puissantes, lusage des conditions leur
assurera souplesse et sret. Les instructions conditionnelles permettent entre autres
choses de :
sassurer que len vironnement de lapplication et ltat du document sont compatibles
avec lexcution du programme ;
modifier le comportement de la macro en fonction de ltat du document et de lappli
cation un moment prcis ;
changer des informations a vec lutilisateur lors de le xcution du programme
(combines avec la fonction MsgBox, par exemple).

La structure de contrle If...Then...Else


Au mme titre que While...Wend, If...Then...Else est une instruction conditionnelle.
Cependant, cette structure est plus souple et son utilisation comme structure
conditionnelle plus rpandue que celle de While...Wend, essentiellement utilise pour
raliser des boucles. La structure If...Then...Else permet en effet de spcifier di fren-
tes options dexcution dans une procdure, en fonction de ltat de lapplication ou/et du
document, ou de conjuguer les conditions dans des boucles imbriques.
Dans sa forme minimale, linstruction conditionnelle If se prsente ainsi :

If Condition Then
Srie dinstructions
End If

Lorsque la Condition spcifie est remplie, la Srie dinstructions est e xcute ;


sinon, ces instructions sont ignores et la procdure se poursuit a vec linstruction situe
immdiatement aprs linstruction End If.
La macro Auto_Open suivante utilise une structure If...End If pour contrler laffichag
de la bote de dialogue prsente la Figure 7.9. Elle utilise pour cela la fonction Date qui
renvoie la date du jour.

Figure 7.9
Ce message est affi h
chaque ouverture du classeur
effectue entre le 1er et le
7 dcembre.
Livre Macros excel.book Page 224 Vendredi, 3. avril 2009 7:45 07

224 Excel et VBA

Une macr o Auto_Open se xcute automatiquement louvertur e du classeur


pel Excel dans lequel elle est stocke.
Rap

Sub Auto_Open()
If Date > "30/11/07" and Date < "08/12/07" Then
MsgBox "Attention! Remise des budgets " & _
"prvisionnels le 8 dcembre.", _
vbOKOnly+vbCritical, "Soyez prt!"
End If
End Sub

La valeur attache loprateur relationnel dans une condition v arie selon lobjet de la
comparaison ; il peut sagir dune chane de caractres si lobjet de la condition est la
valeur renvoye par une v ariable de type String ou une e xpression renvoyant elle-mme
une chane de caractres. Il sagira dune v aleur numrique si lobjet de la condition est
une v ariable numrique ou une e xpression ren voyant une v aleur numrique, ou encore
dune valeur de type Boolean si lobjet de la condition est une variable de type Boolean ou
une expression renvoyant une valeur de ce type.
Dans lexemple suivant, linstruction If permet de sassurer que les conditions ncessaires
au bon fonctionnement du programme sont ralises (en loccurrence que deux fentres
de document sont ouv ertes). Si ce nest pas le cas, un message est af fich lattention d
lutilisateur et linstruction Exit Sub entrane la sortie de la procdure.
Sub VrifierConditions
If Workbooks.Count <> 2 Then
MsgBox "La macro ne peut tre excute. " & _
"Deux classeurs doivent tre ouverts."
Exit Sub
End if
Instructions excutes si deux classeurs sont ouverts
End Sub

Une structure If...Then...Else autorise un nombre de conditions indtermin. Vous


pouvez ainsi en visager les dif frents cas possibles dans une situation particulire et
indiquer la procdure les instructions excuter dans chacun de ces cas.
Linstruction rpond alors la syntaxe suivante :
If condition1 Then
Srie dinstructions 1
ElseIf condition2 Then
Srie dinstructions 2
ElseIf condition3 Then
Srie dinstructions 3
...
Else
Srie dinstructions n
End If
Livre Macros excel.book Page 225 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 225

Contrairement ElseIf, linstruction Else ne pose aucune condition : elle apparat en


dernire position et les instructions qui lui sont attaches sont automatiquement excutes si
aucune des conditions poses aupara vant na t ralise. P ar contre, si lune des
conditions poses par une instruction If ou ElseIf est ralise, la macro e xcute les
instructions qui lui sont attaches, puis ignore les autres conditions poses et se poursuit
avec les instructions situes aprs End If.
Les instructions ElseIf comme Else sont facultatives. Une instruction conditionnelle peut
tre compose dune ou de plusieurs instructions ElseIf et ne pas prsenter dinstruction
Else, et inversement. La fonction suivante dtermine la valeur dune remise sur un achat,
et insre cette valeur ainsi que le prix aprs remise dans la feuille de calcul.

1: Sub CalculRemiseEtPrixDefinitif()
2: Dim PrixAvantRemise As Single, PrixDefinitif As Single
3: PrixAvantRemise = ActiveSheet.Range("C11")
4: PrixDefinitif = PrixAvecRemise(PrixAvantRemise)
5: ActiveSheet.Range("C13").Value = PrixDefinitif
6: End Sub

7: Function PrixAvecRemise(ValeurAchat)
8: Dim PourcentageRemise As Single
9: If ValeurAchat <= 1000 Then
10: PourcentageRemise = 0
11: ElseIf ValeurAchat > 1000 And ValeurAchat <= 2000 Then
12: PourcentageRemise = 0.1
13: ElseIf ValeurAchat > 2000 And ValeurAchat <= 5000 Then
14: PourcentageRemise = 0.2
15: ElseIf ValeurAchat > 5000 And ValeurAchat < 10000 Then
16: PourcentageRemise = 0.25
17: Else
18: PourcentageRemise = 0.3
19: End If
20: ActiveSheet.Range("C12").Value = PourcentageRemise
21: PrixAvecRemise = ValeurAchat - (ValeurAchat * PourcentageRemise)
22: End Function

La procdure CalculRemiseEtPrixDefinitif dclare les v ariables PrixAvantRemise et


PrixDefinitif de type Single. La ariable PrixA vantRemise reoit la v aleur de la
cellule C11 de la feuille acti ve. Linstruction de la ligne 4 appelle la fonction PrixA vec-
Remise en lui passant la valeur de PrixAvantRemise.
La structure conditionnelle If...Then...Else des lignes 9 19 af fecte une v aleur la
variable PourcentageRemise, fonction de la valeur de ValeurAchat. La valeur de la
remise est insre dans la cellule C12. Ligne 21, la fonction reoit la v aleur aprs remise,
cest--dire la valeur de ValeurAchat moins le prix de la remise (ValeurAchat * Pourcen-
tageRemise).
Livre Macros excel.book Page 226 Vendredi, 3. avril 2009 7:45 07

226 Excel et VBA

La procdure principale reprend ensuite la main. Linstruction de la ligne 5 affecte alors


la cellule C13 la valeur de PrixDefinitif. La procdure prend fi

Une instruction conditionnelle peut aussi scrir e sur une seule ligne , en utilisant
Info deux points (:) comme spar ateurs entre les instructions e xcuter si la co ndition
est vrifi . Linstruction End If est alors omise et la syntaxe est la suivante :
If Condition Then Instruction1: Instruction2: ...: InstructionN

Par exemple, linstruction :


If Selection.Font.Italic() = True Then
Selection.Font.Italic() = False
Selection.Font.Bold() = True
End If

est aussi valide sous la forme :


If Selection.Font.Italic() = True Then Selection.Font.Italic()
= False

Pour prsenter plusieur s instructions sur une mme ligne , utilisez les deux points
(:) comme sparateur :
If Selection.Font.Italic() = True Then Selection.Font.Italic()
= False: Selection.Font.Bold = True

Conditions imbriques
Vous pouvez dfinir des conditions lintrieur dune condition initiale. On parle alors d
conditions imbriques. Les conditions imbriques permettent de prendre en considration
un grand nombre de possibilits lors de lexcution du programme.
Lexemple suivant est compos dune premire instruction conditionnelle qui vrifie qu
deux fentres sont ouv ertes avant de se xcuter. Nous y a vons imbriqu une instruction
conditionnelle (en gras, dans le texte de la macro), afin que la bote de dialogue a fiche s
la premire condition est ralise ( Workbooks.Count <> 2) varie en fonction du nombre
de fentres ouvertes.
Lorganigramme de la Figure 7.10 prsente la structure de cette macro.

Sub ConditionsImbriques()
If Workbooks.Count <> 2 Then
Dim Message As String
If Workbooks.Count < 2 Then
Message = "Au moins deux documents doivent tre ouverts."
Else
Message = "Seuls les deux documents concerns doivent tre ouverts."
End If
Livre Macros excel.book Page 227 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 227

MsgBox Message, vbOKOnly+vbInformation, "Excution impossible"


Exit Sub
End if
Instructions de la macro
End Sub

Figure 7.10
Sub
Les conditions imbriques
assurent aux macros
souplesse et prcision. Workbooks.Count

If = 2 If <> 2

If < 2 If > 2

Message 1 Message 2

Exit Sub

Instructions
de la macro

End Sub

Figure 7.11
Linstruction condition-
nelle imbrique dter-
mine le message qui
sera affi h.

La structure de contrle Select Case


La structure de contrle Select Case permet den visager dif frentes v aleurs pour une
mme expression et de dterminer des instructions spcifiques pour chaque cas e visag.
Elle rpond la syntaxe suivante :
Select Case Expression
Case valeur1
Instructions
Case valeur2
Instructions
...
Livre Macros excel.book Page 228 Vendredi, 3. avril 2009 7:45 07

228 Excel et VBA

Case valeurn
Instructions
Case Else
Instructions
End Select

o Expression est une expression renvoyant une valeur dont le type peut v arier. Lorsque la
valeur renvoye par Expression correspond lune des valeurs poses par les instructions
Case, les Instructions correspondantes se xcutent, et la procdure se poursuit a vec
linstruction qui suit End Select. Si aucune des valeurs poses par les instructions Case ne
correspond la v aleur renvoye par Expression, les instructions attaches Case Else
sont excutes. Lutilisation de Case Else est facultative.
Le programme suivant dtermine la valeur de la variable Reduction, fonction de la v aleur
de la cellule D7 de la feuille 1 du classeur commande.xls. Une bote de dialogue est
ensuite affiche, afin dinformer lutilisateur de la remise qui sera fectue.
1: Sub AffichageRduction()
2: Dim Rduction As Variant
3: Dim LongueurChane As Byte
4: Rduction = CalculerValeurReduction _
(Workbooks("commande.xls").Sheets(1).Range("D7").Value)
5: LongueurChane = Len(Rduction)
6: If LongueurChane = 3 Then Rduction = Rduction & "0"
7: MsgBox "La remise effectue sera de " & Rduction & "%."
8: End Sub

9: Function CalculerValeurReduction(PrixCommande)
10: Select Case PrixCommande
11: Case 0 To 999.99
12: CalculerValeurReduction = 0
13: Case 1000 To 1999.99
14: CalculerValeurReduction = 0.1
15: Case 2000 To 2999.99
16: CalculerValeurReduction = 0.25
17: Case Else
18: CalculerValeurReduction = 0.4
19: End Select
20: End Function

La variable Rduction est tout dabord dclare de type Variant. Elle stockera en effet une
valeur numrique, qui sera ensuite manipule en tant que chane de caractres. L instruc-
tion daf fectation de la ligne 4 appelle la fonction CalculerValeurReduction, en lui
passant la valeur de la cellule D7 de la premire feuille du classeur commande.xls.
La fonction CalculerValeurReduction utilise une structure Select Case pour ren voyer
une valeur fonction de la v aleur de largument PrixCommande (ici la v aleur de la cellule
D7). Le mot cl To est utilis pour dfinir des plages de aleurs (0 999.99, 1000
1999.99, etc.). La procdure principale reprend ensuite la main.
Livre Macros excel.book Page 229 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 229

Les instructions des lignes 5 et 6 servent formater la chane stocke dans la v ariable Rduc-
tion. La fonction Len renvoie la longueur (le nombre de caractres) de la v ariable Rduction,
qui est stocke dans la v ariable LongueurChane. Si la chane comprend trois caractres,
un 0 est ajout la fin de la chane Rduction (0,1 et 0,4 deviennent respectivement 0,10
et 0,40). Enfin, linstruction de la ligne 7 affiche une bote de dialogue informant lutilisa
teur de la valeur de la remise qui sera effectue.

Dans les instructions Visual Basic, le point est utilis comme spar ateur dcimal
Info des valeurs numriques. Cependant, lor sque vous af fi hez sous forme de c hane
une valeur numrique comme linstruction de la ligne 7 de le xemple prc-
dent , la virgule est utilise comme sparateur de dcimales.

Dfinir linstruction suivante avec GoTo


Linstruction GoTo permet dorienter le droulement dune procdure v ers lemplacement
spcifi par lutilisateu , et ce tout moment de lexcution. Cette instruction sutilise avec
une tiquette, cest--dire une balise place dans le te xte. La syntax e de GoTo est la
suivante :

GoTo Etiquette

Ltiquette spcifie aprs GoTo doit tre place en db ut dune ligne indpendante, situe
avant linstruction sur laquelle on v eut brancher la procdure et tre immdiatement sui vie
des deux points ":". Une instruction GoTo ne peut ren voyer qu une tiquette se trouv ant
dans la mme procdure que linstruction elle-mme. Les instructions GoTo rendent difficil
la lecture du code. Prfrez les structures de contrle linstruction GoTo.

Interagir avec lutilisateur via des botes de dialogue


Laffichage de botes de dialogue au cours de l xcution dun programme permet de
renseigner lutilisateur sur son droulement, ou de lui demander des informations qui en
modifieront le cours. Deux fonctions permettent la fichage de botes de dialogue
InputBox entrane laf fichage dune bote de dialogue prsentant une zone de t xte
dans laquelle lutilisateur est invit entrer des informations.
MsgBox permet daf ficher un message lattention de lutilisateur dans une bote d
dialogue et de lui proposer de choisir entre dif frentes possibilits en cliquant sur lun
des boutons de commande affichs
Livre Macros excel.book Page 230 Vendredi, 3. avril 2009 7:45 07

230 Excel et VBA

La fonction InputBox
La fonction VBA InputBox permet dafficher une bote de dialogue contenant une zone d
texte lgende, afin di viter lutilisateur y saisir linformation attendue ; linformation
saisie est renvoye sous forme de chane de caractres et stocke dans une variable afin d
pouvoir tre ensuite exploite par le programme.
La fonction InputBox sutilise selon la syntaxe suivante :

InputBox(prompt, title, default)

prompt, title et default sont des ar guments nomms de type String. prompt est le
message affich dans la bote de dialogue afin de lgender la zone de xte. Largument
title correspond au titre de la bote de dialogue (af fich dans la barre de titre) et e t
facultatif. Si cet argument est omis, le nom de lapplication apparat dans la barre de titre.
default est aussi facultatif et correspond au texte apparaissant par dfaut dans la zone de
texte lors de laffichage de la bote de dialogue
La procdure suivante affiche la bote de dialogue reprsente la Figure 7.12

Sub UtilisationDeInputBox()
Dim DateVal As String
DateVal = InputBox("Date de validit:", "Nouveau membre", Date)
End Sub

Figure 7.12
La fonction InputBox permet
de stocker des informations entres
par lutilisateur durant lexcution
du programme.

Pour stock er linformation fournie par lutilisateur dans une v ariable, il suf fit da fecter
une variable la fonction, selon la syntaxe suivante :

Variable = InputBox(prompt, title, default)

o Variable est une variable de type String ou Variant.

Si laffi hage dune rponse par dfaut nest pas indispensable, il peut se rv-
Cons
eil ler fort pr atique pour orienter lutilisateur lor sque linformation demande
autorise plusieur s formats. P ar e xemple, si vous demandez lutilisateur
dentrer une date, et sil est ncessair e, pour le bon dr oulement de la macr o,
Livre Macros excel.book Page 231 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 231

que celle-ci soit saisie sous le format jj/mm/aa. Laffi hage dune date hypoth-
tique laide de lar gument default permettr a dindiquer lutilisateur le
format attendu.

Vous pouvez afficher des ariables ou des caractres rservs (comme le guillemet ou la
virgule) dans une bote de dialogue. On utilise pour ceci :
loprateur de concatnation &;
la fonction Chr, pour afficher un caractre rserv en spcifiant le cod ASCII (entre 1
et 32).
La fonction InputBox se prsente alors ainsi :
InputBox("Texte"&variable+Chr(CodeAscii)+"Texte", "Titre",
"Entre par dfaut")

La procdure suivante affiche la bote de dialogue prsente la Figure 7.13


Sub OuvertureSession()
Dim Utilisateur As String, MotDePasse As String
Utilisateur = Application.UserName
MotDePasse = InputBox("Utilisateur: " & Utilisateur & Chr(10) & _
"Veuillez entrer votre mot de passe.", "Saisie du mot de passe")
Call VerifierMotDePasse(Utilisateur, MotDePasse)
End Sub

Figure 7.13
Utilisez loprateur de conca-
tnation & pour intgrer des
variables ou des caractres
rservs dans les chanes
de caractres.

Dans lexemple suivant la fonction InputBox sert demander lutilisateur dindiquer une
date dchance pour les oprations en cours. La procdure met ensuite en valeur les cellu-
les slectionnes dont la date est suprieure la date indique.
1: Sub VerifierEcheances()
2: Vrifier quil existe une plage de cellules est slectionne
3: Dim ZoneATester As String
4: ZoneATester = ActiveWindow.RangeSelection.Address
5: If ZoneATester = Null Then
6: MsgBox "Slectionnez la plage de cellules tester.", _
vbOKOnly & vbInformation
7: Exit Sub
8: End If
Livre Macros excel.book Page 232 Vendredi, 3. avril 2009 7:45 07

232 Excel et VBA

9: Demander lutilisateur la date dchance


10: Dim DateEcheance As Variant
11: DateEcheance = InputBox("Indiquez la date dchance.", _
"Echance des oprations en cours", Date+30)
12: DateEcheance = CDate(DateEcheance)

13: Tester toutes les cellules de la slection


14: Dim CellTest As Range
15: For Each CellTest In Range(ZoneATester)
16: If IsDate(CellTest) = True Then
17: If CellTest.Value > DateEcheance Then
18: CellTest.Interior.ColorIndex = 6
19: End If
20: End If
21: Next
22: End Sub

La procdure commence par vrifier quune plage de cellules a t slectionne dans l


classeur actif (lignes 2 8). Elle af fecte pour cela ladresse de la slection en cours la
variable ZoneA Tester. Si aucune zone nest slectionne ( ZoneATester = Null), un
message est af fich lattention de lutilisateur et linstruction de la ligne 7 entrane la
sortie de la procdure.
La fonction InputBox sert ensuite demander lutilisateur dindiquer une date
dchance (ligne 11). La fonction Date est utilise pour dterminer la valeur par dfaut de
la zone de te xte. Elle ren voie la date du jour laquelle on ajoute 30 jours. La chane
renvoye par la fonction InputBox est stocke dans la v ariable DateEcheancede type
Variant. Ligne 12, la fonction CDate est utilise pour con vertir la variable DateEcheance
en une variable de type Date.

Si vous dclar ez la variable de DateEcheance de type String, le pr ogramme


ntion fonctionnera correctement, mais linstruction de conversion de type de donnes
Atte
de la ligne 12 ne modifie a pas le type de la variable DateEcheance. Linstruc-
tion conditionnelle de la ligne 17 effectuera alor s une compar aison entre les
chanes de car actres et non entr e les dates. Le pr ogramme se dr oulera
correctement, mais produira des rsultats errons.

La procdure teste ensuite lensemble des cellules slectionnes. Une v ariable objet de
type Range est dclare ligne 14. Lignes 15 22, une structure de contrle For
Each...Next est utilise pour tester tous les objets Range de la collection dobjets
contenue dans la slection en cours.
Linstruction conditionnelle de la ligne 16 vrifie que la cellule traite contient des donne
de type Date. Si ce nest pas le cas, elle est ignore, et la boucle se poursuit a vec la cellule
Livre Macros excel.book Page 233 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 233

suivante. Si la cellule contient des donnes de type Date, la structure conditionnelle des
lignes 17 19 est excute : si la valeur de la cellule est suprieure la date stocke dans la
variable DateEcheance, la couleur jaune (ColorIndex = 6) est applique lintrieur de
la cellule. La Figure 7.14 reprsente une feuille de calcul aprs passage de la macro Verifier-
Echeances (lutilisateur a indiqu le 01/04/98 pour date dchance).

Si lutilisateur clique sur le bouton Annuler ou sur le bouton de fermetur e dune


ntion bote de dialo gue affi he laide de la fonction InputBox, la fonction r envoie
Atte
une c hane vide . Une err eur pourr a alor s tr e gnre par le pr ogramme sil
tente dexploiter la valeur retourne. Placez une instruction If...Then...Else
pour vrifier que la valeur etourne par InputBox nest pas une c hane vide .
Les instructions suivantes pourr ont tre places sous la ligne 11 du programme
prcdent afin de mett e fin la p ocdure si lutilisateur annule la saisie dune
valeur.
If DateEcheance = "" Then
Exit Sub
End if
De la mme faon, si lutilisateur saisit une valeur ne corr espondant pas la valeur
attendue, le programme pourra gnrer une erreur ou produire des rsultats errons.
Utilisez les instructions de contrle de type donnes prsentes au Chapitr e 6 pour
vous assurer que les informations fournies par lutilisateur sont valides. Dans le cas
du programme prcdent, si lutilisateur ne saisit pas une date dans la bote de dialo-
gue, une erreur sera gnre. Vous crirez le code permettant de grer ces ventuelles
erreurs au Chapitre 10.

Figure 7.14
Lensemble des cellules
dont la date est ultrieure
la date indique par
lutilisateur est mis en
vidence.
Livre Macros excel.book Page 234 Vendredi, 3. avril 2009 7:45 07

234 Excel et VBA

La mthode InputBox
Lobjet Application dExcel possde une mthode InputBox, que vous pouvez substituer
la fonction InputBox de Visual Basic. L intrt de la mthode InputBox dExcel est
quelle permet de spcifier le type de donnes qui sera re voy. Utilisez cette mthode
selon la syntaxe suivante :

Application.InputBox(prompt, title, default, left, top, helpFile,


helpContextID, type)

Si vous ne spcifiez pas de aleur pour largument title, le titre par dfaut de la bote de
dialogue sera "Entre". Les ar guments nomms left et top permettent de spcifie
lemplacement de la bote de dialogue sur lcran au moment de son af fichage, tandis qu
les arguments helpFile et helpContextID servent associer des fichiers daide la bot
de dialogue. Ils existent aussi pour la fonction InputBox de Visual Basic.
Largument de type Variant type est f acultatif. Il peut prendre lune des v aleurs prsen-
tes dans le Tableau 7.2, qui dterminera le type de donnes renvoy par la mthode Inpu-
tBox. La mthode InputBox peut renvoyer plusieurs types de donnes dfinis. Affectez
largument type le rsultat de la somme des v aleurs correspondantes. P ar exemple, pour
que lutilisateur soit autoris indiquer une valeur numrique ou une rfrence de cellules,
vous affecterez la valeur 9 largument type (1 + 8).

Tableau 7.2 : Valeurs admises par largument type


de la mthode InputBox dExcel

Valeur de Type Type de donnes renvoy par InputBox


0 Formule
1 Valeur numrique
2 Chane de caractres
4 Valeur boolenne (False ou True)
8 Rfrence de cellule (objet Range)
16 Valeur derreur
64 Tableau de valeurs

Si linformation saisie par lutilisateur dans la zone de te xte de la bote de


eil dialogue ne correspond pas au type de donnes dclar pour la mthode Inpu-
Cons
tBox, une err eur sera gnre. Pensez crer un g estionnaire derreur (voir
Chapitre 10), afin de prvoir les er eurs de saisie de lutilisateur final
Livre Macros excel.book Page 235 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 235

Lautre avantage de la mthode InputBox dExcel sur sa concurrente Visual Basic est de
permettre lutilisateur de slectionner une plage de cellules avant de cliquer sur le bouton
OK. Il est ainsi possible de slectionner un classeur ou une feuille spcifique, puis d
slectionner la plage voulue. Les coordonnes de celles-ci saffichent alors dans la zone d
texte de la bote de dialogue. L instruction sui vante af fiche une bote de dialogu qui
accepte pour valeur une rfrence de cellule. Lutilisateur est invit slectionner une plage
de cellules dans la feuille active (voir Figure 7.15).
Sub RenvoyerUnePlageAvecInputBox()
Dim MaPlage As Range
Set MaPlage = Application.InputBox(prompt:="Slectionnez la plage
de cellules.", _
Title:="Contrle des chances", Left:=3, Top:=-80, Type:=8)
End Sub

Figure 7.15
La zone de texte
de la bote de dialo-
gue reflte la slection
effectue sur la feuille
Excel.

Entranez-vous ! Modifiez la procdure VerifierEcheances, de f aon in viter lutilisa-


teur slectionner la plage de cellules traiter , plutt que de traiter la plage slectionne au
moment de lexcution de la macro.

Lorsque vous utilisez la fonction InputBox dExcel pour in viter lutilisateur


Cons
eil slectionner une plage de cellules, tirez profit des a guments Left et Top. Si la
bote de dialo gue est af fi he dans langle suprieur gauc he de la fentr e,
lutilisateur naura pas besoin de la dplacer pour slectionner des cellules sur
la feuille.
Livre Macros excel.book Page 236 Vendredi, 3. avril 2009 7:45 07

236 Excel et VBA

La fonction MsgBox
La fonction MsgBox permet daf ficher une bote de dialogue prsentant un message e
des boutons de commande, afin da ficher une information lattention de lutilisateu
ou dobtenir une rponse une question qui orientera le xcution du programme.
Une valeur de type Integer est ren voye fonction du bouton cliqu et stocke dans une
variable, pour tre ensuite exploite par le programme.
La fonction MsgBox sutilise selon la syntaxe suivante :

Variable = MsgBox(prompt, buttons, title)

o Variable est une v ariable de type Integer. prompt, buttons et title sont des ar gu-
ments nomms. prompt est un argument de type String, correspondant au message affich
dans la bote de dialogue. buttons est un argument de type numrique f acultatif. Il dter-
mine les boutons af fichs dans la bote de dialogue, le symbole identifiant le type
message (information, question, etc.) et le bouton par dfaut. Si cet argument est omis, un
seul bouton libell OK est affich et aucune icne nidentifie le type du message title est
un argument de type String facultatif, correspondant au titre de la bote de dialogue (aff -
ch dans la barre de titre). Si cet ar gument est omis, le nom de lapplication apparat
dans la barre de titre.
Largument buttons est dfini par la somme des aleurs choisies pour chacun des groupes
prsents dans le Tableau 7.3. Votre code gagnera cependant en lisibilit si vous utilisez les
constantes VBA intgres plutt que des valeurs numriques.

Tableau 7.3 : Dfinition de largument buttons

Constante Valeur Description


Bouton
vbOKOnly 0 OK
vbOKCancel 1 OK et Annuler
vbAbortRetryIgnore 2 Abandonner, Ressayer et Ignorer
vbYesNoCancel 3 Oui, Non et Annuler
vbYesNo 4 Oui et Non
vbRetryCancel 5 Ressayer et Annuler
Symbole
vbCritical 16 Message critique
vbQuestion 32 Question
Livre Macros excel.book Page 237 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 237

Tableau 7.3 : Dfinition de largument buttons (suite)

Constante Valeur Description


vbExclamation 48 Stop
vbInformation 64 Information
Bouton actif par dfaut
vbDefaultButton1 0 Premier bouton
vbDefaultButton2 256 Deuxime bouton
vbDefaultButton3 512 Troisime bouton
vbDefaultButton4 768 Quatrime bouton

Si v ous souhaitez, par e xemple, af ficher une bote de dialogue contenant le symbol
"Question", dans laquelle lutilisateur pourra rpondre la question pose par "Oui" ou
"Non", largument buttons sera gal 36 : 4 (pour les boutons) + 32 (pour le symbole).
Les trois instructions suivantes sont quivalentes et entranent laffichage de la bote d
dialogue reprsente la Figure 7.16. La troisime formule est cependant plus compr-
hensible.

rponse = MsgBox("Autre recherche?", 36, "Recherche")


rponse = MsgBox("Autre recherche?", 32+4, "Recherche")
rponse = MsgBox("Autre recherche?", vbYesNo+vbQuestion, "Recherche")

Figure 7.16
Une bote de dialogue affi he
laide de linstruction MsgBox.

Lorsque vous insrez la fonction MsgBox dans une procdure, placez le curseur
ce sur la fonction, puis tapez sur la touche F1 afin den activer la rubrique daid .
Astu
Vous pourrez ainsi consulter le tableau rpertoriant les constantes attacher
largument buttons.

Si vous souhaitez afficher une bote de dialogue dans le seul objectif da ficher une info -
mation lattention de lutilisateur (ne comportant quun bouton OK), il est inutile
daffecter une variable la fonction MsgBox. Cependant, une fonction ne peut tre utilise
que dans une instruction daf fectation. Vous devez alors utiliser linstruction MsgBox. Sa
syntaxe est la mme que celle de sa sur fonction, la dif frence prs que ses arguments
Livre Macros excel.book Page 238 Vendredi, 3. avril 2009 7:45 07

238 Excel et VBA

ne sont pas encadrs par des parenthses. Linstruction MsgBox suivante affiche la bote d
dialogue prsente la Figure 7.17.

MsgBox "Les documents sont en cours dimpression.", vbInformation

Figure 7.17
Pour affi her un simple message
informatif, utilisez une instruction
plutt quune fonction.

Par dfaut, le premier bouton est le bouton actif (celui qui sera valid si lutilisateur appuie
sur la touche Entre). Si une rponse positive de la part de lutilisateur peut tre lourde de
consquences, vous pouvez dfinir le deuxime ou le troisime bouton comme bouton pa
dfaut. Linstruction suivante affiche la bote de dialogue prsente la Figure 7.18

rponse = MsgBox("Supprimer toutes les informations?", _


vbYesNoCancel+vbCritical+vbDefaultButton2)

La valeur renvoye par la fonction MsgBox varie en fonction du bouton cliqu par lutilisa-
teur, selon la rgle suivante :

Bouton Constante Valeur


OK vbOK 1
Annuler vbCancel 2
Abandonner vbAbort 3
Ressayer vbRetry 4
Ignorer vbIgnore 5
Oui vbYes 6
Non vbNo 7

Une instruction conditionnelle est utilise pour interroger la v aleur de la v ariable rece-
vant linformation et orienter le droulement du programme en consquence. L encore, vous
pouvez interroger la valeur de la variable en utilisant la constante VBA ou la valeur numri-
que correspondante. Dans le cas de la bote de dialogue prsente la Figure 7.18, si
lutilisateur clique sur le bouton Oui, la valeur 6, correspondant la constante vbYes,
sera affecte la variable rponse ; sil clique sur le bouton Non, la valeur 7, comparable
Livre Macros excel.book Page 239 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 239

la constante vbNo sera retourne ; enfin, sil choisit le bouton Annuler cest la v aleur 2,
assimilable la constante vbCancel, qui sera renvoye.

Figure 7.18
Si lutilisateur appuie sur la touche
Entre du clavier, cest la rponse
"Non" qui sera valide.

Le programme suivant reprend lexemple donn prcdemment pour InputBox. Une fonc-
tion MsgBox a t utilise afin de proposer lutilisateur de dfinir une autre date, en cas
dpassement dchance. Sil ny a pas de dpassement dchance, une autre bote de
dialogue sera affiche pour en informer lutilisateu .
1: Sub VerifierEcheances()
2: Dim ZoneATester As String
3: ZoneATester = ActiveWindow.RangeSelection.Address
4: If ZoneATester = Null Then
5: MsgBox "Slectionnez la plage de cellules tester.", _
vbOKOnly & vbInformation
6: Exit Sub
7: End If

8: Dim DateEcheance As Variant


9: DateEcheance = InputBox("Indiquez la date dchance.", _
"Echance des oprations en cours", Date+30)
10: DateEcheance = CDate(DateEcheance)

11: Dim CellTest As Range


12: Dim DatesHorsEcheance As Boolean
13: DatesHorsEcheance = False
14: For Each CellTest In Range(ZoneATester)
15: If IsDate(CellTest) = True Then
16: If CellTest.Value > DateEcheance Then
17: CellTest.Interior.ColorIndex = 6
18: DatesHorsEcheance = True
19: End If
20: End If
21: Next

22: If DatesHorsEcheance = True Then


23: Dim RedfinirLaDate As Integer
24: RedfinirLaDate = MsgBox("Des problmes dchance ont t trouvs." & _
Chr(10) & "Souhaitez-vous spcifier une autre date?", _
vbYesNo+vbQuestion, "Redfinir la date dchance?")
25: If RedfinirLaDate = vbYes Then
26: Range(ZoneATester).Interior.ColorIndex = xlNone
Livre Macros excel.book Page 240 Vendredi, 3. avril 2009 7:45 07

240 Excel et VBA

27: Call VerifierEcheances


28: End If
29: Else
29: MsgBox "Pas de problme dchance.", _
vbOKOnly+vbInformation, "Echancier respect"
30: End If
31: End Sub

Lignes 12 et 13, la v ariable DatesHorsEcheance de type Boolean est dclare et se v oit


affecter la valeur False. Ligne 18, une instruction lui affecte la valeur True. Cette instruction
ne sera excute que si une date suprieure la date spcifie par lutilisateur est trouve
La mise en v aleur des v entuelles cellules hors chance termine, une instruction
conditionnelle If...Then...Else est utilise pour af ficher un message lattention d
lutilisateur (lignes 22 30). Si la v ariable DateHorsEcheance renvoie la v aleur True (si
des cellules contenant des dates au-del de la date spcifie par lutilisateur sont trouves)
les instructions des lignes 23 28 sont e xcutes. La bote de dialogue reprsente
la Figure 7.19 est alors af fiche. La aleur renvoye par la fonction MsgBox est stocke
dans la variable RedfinirLaDate. Une structure conditionnelle imbrique teste ensuite la
valeur de cette v ariable. Si la v ariable renvoie vbYes (lutilisateur a cliqu sur le bouton
Oui), la couleur dintrieur des cellules de la zone slectionne est supprime (ligne26), et
la fonction sappelle elle-mme (ligne 27). Si DateHorsEcheance renvoie False, une bote
de dialogue est affiche (ligne 29) afin dinformer lutilisateur quil ny a pas de problm
dchance.

Figure 7.19
Lutilisateur peut redfinir
une date dchance.

ition Une procdure qui sappelle elle-mme est une procdure rcursive.
Dfin
Livre Macros excel.book Page 241 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 241

Affichage de botes de dialogue Excel


Il peut tre utile daf ficher des botes de dialogue Excel un moment spcifique
lexcution dun programme. Vous pouv ez, par e xemple, af ficher la bote de dialogu
Enregistrer sous, afin que lutilisateur indique le dossier denr gistrement dun classeur.

Les botes de dialogue prdfinies dExcel


Les botes de dialogue sont des objets Dialog. Pour afficher une bote de dialogue Excel
faites appel la collection Dialogs et appliquez la mthode Show ou Display lobjet
dfini selon la synta e suivante :
Application.Dialogs(xlDialog).Show
Application.Dialogs(xlDialog).Display

xlDialog est une constante Excel qui indique la bote de dialogue de vant tre af fiche
Linstruction suivante affiche la bote de dialogue Ouvrir
Application.Dialogs(xlDialogOpen).Show

Lorsquune bote de dialogue Excel est affiche laide de la mthode Show, les comman-
des quelle prend en charge sexcutent normalement si lutilisateur valide les paramtres
quil y a dfinis. La procdure se poursuit ensuite vec linstruction situe derrire celle
qui a appel la bote de dialogue.
Vous pouv ez videmment af fecter un objet Dialog une v ariable de type Object ou
Variant, et f aire appel cet objet pour af ficher la bote en question. Les instruction
suivantes affichent la bote de dialogue Enr gistrer sous.
Dim BoteEnregistrerSous as Dialog
Set BoteEnregistrerSous = Application.Dialogs(xlDialogSaveAs)
BoteEnregistrerSous.Show

Vous trouverez une liste des constantes xlDialog dans laide de VBA pour Excel. Rfrez-
vous la rubrique Rfrences pour Microsoft Excel/Objets/Dialogs.

Les mthodes GetOpenFilename et GetSaveAsFilename


Les mthodes GetOpenFilename et GetSaveAsFilename dExcel permettent daf ficher le
botes de dialogue standard Ouvrir et Enre gistrer sous afin de rcuprer le nom dun fichi .
Celles-ci sont plus souples et plus fonctionnelles que les objets Dialogs correspondants.

Contrairement ce qui se passe lor sque vous appliquez la mthode Show un


ntion objet Dialog, quand une bote de dialo gue est af fi he laide de lune des
Atte
mthodes GetOpenFilename ou GetSaveAsFilename, aucune action nest
Livre Macros excel.book Page 242 Vendredi, 3. avril 2009 7:45 07

242 Excel et VBA

excute lorsque lutilisateur clique sur le bouton de validation de la bote de


dialogue. Ces mthodes permettent simplement de rcuprer un nom de fi hier.
Ce fi hier doit ensuite tre manipul par programmation.

Utilisez les mthodes GetOpenFilename et GetSaveAsFilename, selon la syntaxe suivante :

Application.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex,


Title, ButtonText)
expression.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText,
MultiSelect)

Tableau 7.4 : Arguments des mthodes GetOpenFilename et GetSaveAsFilename

Argument Description
InitialFilename Argument facultatif de type Variant. Le nom de fichier par dfaut apparais-
sant dans la zone de texte Nom. Si cet argument est omis, le nom du classeur
actif est utilis comme nom par dfaut.
FileFilter Argument facultatif de type Variant. Les critres de filtrage des fichiers. Cha-
que critre doit apparatre sous la forme dune paire compose du filtre de
fichier, suivi de la spcification de son extension, tels quils apparaissent dans la
zone Type de fichier. Les paires sont galement spares par des virgules. Si
plusieurs extensions sont associes un type de fichier, elles doivent tre spa-
res par un point-virgule. Par exemple la valeur suivante :
"Classeur Microsoft Excel (*.xls),*.xls,PageWeb (*.htm;
*.html),*.htm;*.html"
pour largument FileFilter laissera apparatre deux types de fichiers dans la
zone Type de fichier de la bote de dialogue affiche.
FilterIndex Argument facultatif de type Variant. Lindex du critre de filtrage par dfaut.
Spcifiez la valeur 1 pour que le premier critre de filtrage apparaisse comme
type de fichier par dfaut, la valeur 2 pour que le deuxime critre de filtrage
soit le type de fichier par dfaut, etc.
Le premier filtre de fichier est utilis si largument na pas t spcifi ou sil est
suprieur au nombre de filtres disponibles.
Title Argument facultatif de type Variant. Le titre apparaissant dans la barre de titre
de la bote de dialogue. Si cet argument est omis, le titre de la bote de dialo-
gue est Ouvrir.
ButtonText Argument facultatif de type Variant. Sur Macintosh uniquement. Le libell du
bouton Ouvrir.
MultiSelect Argument facultatif de type Variant. Si MultiSelect a la valeur True, lutilisa-
teur peut effectuer une slection multiple. Si MultiSelect a la valeur False
(valeur par dfaut), lutilisateur ne peut slectionner quun fichier.
Si plusieurs fichiers sont slectionns, la valeur est renvoye sous forme de
tableau et doit donc tre stocke dans une variable de type Variant ou Array.
Livre Macros excel.book Page 243 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 243

Utilisez linstruction ChDir pour modifier le dossier propos par d aut dans la bote de
dialogue affiche

Figure 7.20
La mthode GetOpenFile-
Name permet daffi her
une bote de dialogue
Ouvrir personnalise.

Figure 7.21
Les fi hiers slectionns sont
rcuprs dans une variable
de matrice.

Lexemple suivant affiche la bote de dialogue reprsente la Figure 7.20, puis affiche un
bote de dialogue indiquant la liste des fichiers choisis par lutilisateur ( oir Figure 7.21).
1: Sub OuvertureDeFichiers()
2: Dim OuvrirFichiers As Variant
3: modification du chemin par dfaut
4: ChDir ("c:\Documents and settings\ Administrateur\bureau\")
5: affichage de la bote de dialogue Ouvrir
6: OuvrirFichiers = Application.GetOpenFilename(filefilter:
="Classeur Microsoft Excel (*.xls),*.xls,PageWeb (*.htm; *.html),
*.htm;*.html", filterindex:=2, Title:="Ouverture des fichiers
ventes", MultiSelect:=True)
7: si lutilisateur a slectionn plusieurs fichiers
8: If UBound(OuvrirFichiers) > 1 Then
9: Dim rep As Long
10: Dim Liste As String
11: Dim compteur As Byte
Livre Macros excel.book Page 244 Vendredi, 3. avril 2009 7:45 07

244 Excel et VBA

12: For compteur = 1 To UBound(OuvrirFichiers)


13: Liste = Liste & vbCr & OuvrirFichiers(compteur)
14: Next compteur
15: affichage de lensemble de la liste des fichiers
et proposition douverture
16: rep = MsgBox("Lutilisateur a slectionn plusieurs fichiers.
En voici la liste." & _
17: Liste & vbCr & "Voulez-vous les ouvrir?", vbYesNo+vbQuestion, _
18: "Ouvrir les fichiers?")
19:
20: ouverture des fichiers en cas de rponse positive
21: If rep = vbYes Then
22: For compteur = 1 To UBound(OuvrirFichiers)
23: Workbooks.Open Filename:=OuvrirFichiers(compteur)
24: Next compteur
25: End If
26: si un seul fichier a t slectionn, il est ouvert
27: Else
28: Workbooks.Open Filename:=OuvrirFichiers(1)
29: End If
30: End Sub

La v ariable OuvrirFichiers dclare ligne 2 servira stock er le(s) fichier(s) slec


tionn(s) par lutilisateur. Ligne 4, le chemin par df aut est modifi laide de linstruc
tion ChDir, de f aon que le dossier propos par df aut lors de laf fichage de la bote d
dialogue soit le Bureau Windows.
Ligne 6, la bote de dialogue Ouvrir est af fiche. Le rsultat de la slection opre pa
lutilisateur est affect la variable OuvrirFichiers. Largument filefilter est dfin
de faon que les types de fichiers apparaissant dans la liste Type de fichier soient le
fichiers portant l xtension .xls et .htm ou .html. L argument filterindex dfinit l
deuxime type de fichier (.htm et .html) comme type par d aut. Enfin, le titre de l
bote de dialogue est dfini Ou erture des fichiers entes et la slection multiple est
autorise.
Lignes 8 29, une instruction conditionnelle If...Then...Else sert vrif er si plusieurs
fichiers ont t slectionns. Si tel est le cas (la condition pose ligne 8 est vrifie) les
instructions des lignes 8 26 sexcutent.
Lignes 9 11, les v ariables rep, Liste et Compteur sont dclares. Lignes 12 14, une
instruction For...Each...Next sert stock er la liste des fichiers slectionns dans l
variable Liste. La valeur initiale du compteur est 1, et elle est incrmente de 1 chaque
passage de la boucle jusqu atteindre la v aleur limite de la v ariable de matrice
[UBound(OuvrirFichiers)]. A chaque passage, la v ariable Liste reoit sa v aleur + un
retour chariot ( & vbCr) + la valeur stocke dans la v ariable OuvrirFichiers, la posi-
tion correspondant la valeur de Compteur [OuvrirFichiers(compteur)]. Les lignes 16
18, une instruction MsgBox est utilise pour aff cher la liste des f chiers slectionns par
Livre Macros excel.book Page 245 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 245

lutilisateur et lui proposer de les ouvrir (voir Figure 7.21). Lignes 21 25, une instruction
conditionnelle imbrique sert v aluer la rponse de lutilisateur . Une instruction
For...Next ouvre les fichiers en cas de rponse posit ve. Si un seul fichier a t slec
tionn (ligne 27), il est ouvert (ligne 28).

Si lun des classeur s slectionns ne saf fi he pas, cest quil est masqu.
Info Utilisez la commande Affi her pour en for cer laf fi hage. Si vous utilisez
Excel 2007, cette fonction est accessible via longlet Affi hage du ruban ;
avec une version ultrieure, utilisez la commande Affi her du menu Fentre.

Figure 7.22
Lannulation de louverture
est maintenant gre par le
programme.

Tel quil se prsente ici, ce programme gnrera une erreur si lutilisateur clique sur le
bouton Annuler ou sur la croix de fermeture de la bote de dialogue. Ajoutez les instruc-
tions apparaissant en gras dans le programme suivant pour rsoudre ce problme. Si aucun
fichier nest slectionn, le message de la Figure 7.22 sa fiche et la procdure prend fi
Sub OuvertureDeFichiers()
Dim OuvrirFichiers As Variant
ChDir ("c:\Documents and settings\Administrateur\bureau\")
OuvrirFichiers = Application.GetOpenFilename(filefilter:
="Classeur Microsoft Excel (*.xls),*.xls,PageWeb (*.htm; *.html),
*.htm;*.html", filterindex:=2, Title:="Ouverture des fichiers ventes",
MultiSelect:=True)
If OuvrirFichiers = False Then
MsgBox "Aucun fichier n a t slectionn. Fin de la procdure", _
VbOKOnly+vbCritical, "Fin de la procdure"
Exit Sub
End If
If UBound(OuvrirFichiers) > 1 Then
Dim rep As Long
Dim Liste As String
Dim compteur As Byte
For compteur = 1 To UBound(OuvrirFichiers)
Liste = Liste & vbCr & OuvrirFichiers(compteur)
Next compteur
rep = MsgBox("Lutilisateur a slectionn plusieurs fichiers.
En voici la liste." & _
Liste & vbCr & "Voulez-vous les ouvrir?", vbYesNo+vbQuestion, _
"Ouvrir les fichiers?")
Livre Macros excel.book Page 246 Vendredi, 3. avril 2009 7:45 07

246 Excel et VBA

If rep = vbYes Then


For compteur = 1 To UBound(OuvrirFichiers)
Workbooks.Open Filename:=OuvrirFichiers(compteur)
Next compteur
End If
Else
Workbooks.Open Filename:=OuvrirFichiers(1)
End If
End Sub

Utiliser les oprateurs logiques


Visual Basic propose des oprateurs logiques, qui permettront doptimiser les instruc-
tions conditionnelles While...Wend et If...Then...Else. Ils permettent en ef fet de
combiner plusieurs conditions et, ainsi, de simplifier les instructions conditionnelle
dans bien des cas. Linstruction conditionnelle suivante utilise loprateur logique And
pour vrifier que la aleur de la cellule A3 est infrieure 1 000 et suprieure
2 000 :

If Range("A3").Value < 1000 and Range("A3").Value > 2000 Then....

Les conditions tablies laide doprateurs logiques sont proches dune condition
exprime dans un lang age courant, ce qui en f acilite considrablement la compr-
hension.
Les instructions disponibles pour utiliser les oprateurs logiques sont prsentes dans le
Tableau 7.5.

Tableau 7.5 : Les oprateurs logiques

Oprateur Description
Or Contrle que lune des conditions spcifies est vrifie.
Si cest le cas, la condition renvoie True.
And Contrle que toutes les conditions spcifies sont vrifies.
Si cest le cas, lexpression conditionnelle renvoie True.
Xor Ou restrictif. Si lune ou lautre des conditions est respecte, lexpression
conditionnelle renvoie True. Si plus dune condition est vrifie, lexpression
conditionnelle renvoie False.
Not Cet oprateur nie lexpression devant laquelle il est situ.
La structure conditionnelle If Not condition Then... est vrifie
si la condition nest pas respecte.
Livre Macros excel.book Page 247 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 247

Vous pouvez employer les oprateurs Or et And un nombre de fois indtermin dans une
ce mme expression. Cependant, pour combiner ces opr ateurs dans une mme e xpres-
Astu
sion, vous devez utiliser des parenthses, afin de spcifier quels sont les apports entre-
tenus entre les diffrentes conditions. Vous obtiendrez alors des expressions du type :
If (Condition1 Or Condition2) And Condition3 Then
Srie dinstructions
End If
Dans le cas dune telle e xpression, la Srie dinstructions ne ser a excute que si
lune des deux pr emires conditions (ou les deux) est vrifi , et si la Condition3
est aussi vrifi .

Trier des donnes


Trier et rechercher des donnes est une opration courante pour lutilisateur dExcel. La
recherche tant en gnral subordonne au tri des donnes, cette question est fondamen-
tale pour le dv eloppeur dapplications pour Excel. Un programme VBA peut trier une
zone dfinie dune feuille Excel comme un utilisateur le ferait via la commande Trier du
menu Donnes, en faisant appel la mthode Sort.
Vous serez cependant amen trier des donnes stockes dans une variable et non sur une
feuille Excel. Par ailleurs, si un programme effectue de nombreuses oprations danalyse,
de traitement et de tri sur des donnes, vous gagnerez en rapidit dexcution en travaillant
sur ces donnes en mmoire plutt qu mme la feuille Excel. La mthode la plus simple
consiste alors stocker les donnes de la feuille dans une variable tableau et travailler sur
cette variable.
Les techniques de tri des variables tableau sont nombreuses. Nous vous proposons ici une
mthode simple et efficace qui consiste comparer des lments adjacents dans le tablea
et les interv ertir si ncessaire. On utilise pour cela une boucle For...Next imbrique.
Considrez la fonction suivante :
1: Public Function TriTableau(MaVar())
2: Dim i As Long
3: Dim j As Long
4: Dim temp
5: For i = LBound(MaVar) To UBound(MaVar) - 1
6: For j = i + 1 To UBound(MaVar)
7: If MaVar(i) > MaVar(j) Then
8: temp = MaVar(i)
9: MaVar(i) = MaVar(j)
10: MaVar(j) = MaVar(i)
11: End If
12: Next j
13: Next i
14: TriTableau = MaVar
15: End Function
Livre Macros excel.book Page 248 Vendredi, 3. avril 2009 7:45 07

248 Excel et VBA

Linstruction de dclaration de notre fonction indique quelle attend la v ariable de tableau


MaVar en argument. Lignes 2 4, les variables sont dclares. i et j sont les compteurs de
nos boucles For...Next, tandis que la v ariable temp servira simplement stock er provi-
soirement des donnes.
Lignes 5 13 se trouv ent les boucles For...Next imbriques qui assurent le tri de notre
variable. La boucle principale se xcute autant de fois que la v ariable contient despaces
de stockage 1. Elle permet ainsi def fectuer un tri de la v ariable indice par indice, du
premier au dernier.
La boucle imbrique (lignes 6 12) effectue le tri proprement parler. La valeur traite est
compare toutes les valeurs qui sont stockes aprs elle dans la variable tableau ( j = i
+ 1 To UBound(MaVar)). Lors de chaque comparaison, si la valeur traite est suprieure
la valeur laquelle elle est compare (ligne 7), les deux valeurs sont interverties (lignes 8
10). On stocke pour cela la valeur de mavar(i) dans la variable temp, puis on lui substi-
tue la v aleur de mavar(j). On remplace ensuite la v aleur de mavar(j) par la v aleur de
mavar(i) prcdemment mmorise dans la variable temp.
Une fois la boucle imbrique e xcute, la valeur stocke lindice i de notre v ariable est
plus petite que toutes celles qui la sui vent. La structure For...Next principale reprend
alors la main et passe lindice suivant de la variable tableau. Une fois lopration mene
pour lensemble des indices de la v ariable, les valeurs sont stockes par ordre croissant.
Notre fonction reoit alors la v aleur de MaVar (ligne 14) et prend f n, retournant la variable
maintenant trie.

Pour un tri dcr oissant, remplacez simplement le signe > de la ligne 7 par le
ce signe <.
Astu

Dans lexemple suivant, on utilise la mme mthode de comparaison pour trier les feuilles
de travail du classeur actif. Cette fois-ci les donnes ne sont pas stockes dans une variable
tableau, mais les feuilles sont directement tries sur le classeur.
1: Sub TriFeuilles()
2: Dim I As Integer
3: Dim J As Integer
4: Dim Min As Integer
5: Dim ModeCalcul As Integer
6: ModeCalcul = Application.Calculation
7: Application.Calculation = xlCalculationManual
8: Application.ScreenUpdating = False
9: With ActiveWorkbook.Worksheets
10: For I = 1 To .Count - 1
11: Min = I
12: For J = I + 1 To .Count
Livre Macros excel.book Page 249 Vendredi, 3. avril 2009 7:45 07

Chapitre 7 Contrler les programmes VBA 249

13: If .Item(J).Name < .Item(Min).Name Then Min = J


14: Next J
15: If Min <> I Then .Item(Min).Move before:=Worksheets(I)
16: Next I
17: End With
18: Application.Calculation = ModeCalcul
19: Application.ScreenUpdating = True
20: End Sub

Lignes 2 5, les variables sont dclares. Ligne 6, la valeur Application.Calculation (le


mode de calcul dfini pour le classeur) est mmorise. Les lignes 7 et 8 sont destines
optimiser le temps dexcution de la macro. Le classeur est ainsi pass en mode de calcul
manuel ligne 7 afin dempcher un entuel recalcul des v aleurs des cellules chaque
dplacement dune feuille. Ligne 8, la v aleur False est affecte la proprit ScreenUp-
dating de lobjet Application afin de ne pas mettre jour la fichage lcran lors d
lexcution de la macro.
Lignes 9 17, une structure With...End With est utilise a vec lobjet ActiveWork-
book.Worksheets afin de simplifier lcriture du code. Lignes 10 16, deux boucl
For...Next imbriques assurent le tri des feuilles.
La premire boucle sexcute autant de fois quil y a de feuilles dans le classeur 1. A
chaque passage, la v ariable Min reoit pour v aleur lindex de la feuille en cours de traite-
ment. La boucle imbrique (lignes 12 14) compare alors le nom stock dans la v ariable
Min avec le nom de chaque feuille situe aprs elle.A chaque comparaison, si un nom inf-
rieur (alphabtiquement antrieur) est trouv, la variable Min reoit pour valeur lindex de
la feuille portant ce nom.
A la fin de cette boucle, la ariable Min contient donc la valeur dindex de la feuille portant
le nom le plus petit parmi celles qui ont t compares. Ligne 15, on vrifie si on a
trouv une feuille portant un nom plus petit lors des comparaisons (If Min <> I). Si cest
le cas, cette feuille est place de vant la feuille en cours de traitement ( .Item(Min).Move
before:=Worksheets(I)).
La boucle principale reprend alors la main et la feuille sui vante est traite selon le mme
principe. Une fois les feuilles du classeur tries par ordre croissant de nom, le mode de
calcul du classeur est redfini son tat initial (ligne 18) et la mise jour de laf fichag
cran est ractive (ligne 19).

Notez que, dans lexemple prcdent, on vite des oprations inutiles de dpla-
Cons
eil cement de feuilles en mmorisant la donne la plus petite lor s des compar ai-
sons (ligne 13) et en nef fectuant quune seule substitution de position si
ncessaire la fin du pass ge de la boucle imbrique (ligne 15). Exercez-vous
modifier la fonction TriTableau prsente plus avant selon le mme principe.
Livre Macros excel.book Page 250 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 251 Vendredi, 3. avril 2009 7:45 07

8
Fonctions Excel et VBA
Au sommaire de ce chapitre
Utiliser les fonctions Excel dans VBA
Crer des fonctions Excel personnalises
Intgrer une fonction via lExplorateur dobjets
Recommandations pour lcriture de fonctions Excel
Principales fonctions VBA
Livre Macros excel.book Page 252 Vendredi, 3. avril 2009 7:45 07

252 Excel et VBA

Si les fonctions sont un lment cl du dv eloppement dapplications, quels que soient le


langage et len vironnement de programmation, cest particulirement vrai pour Excel,
dont lactivit principale consiste effectuer des calculs.
Vos projets VBA peuvent ainsi exploiter des fonctions Excel comme des fonctions VBA,
mais vous pouvez galement crer vos propres fonctions afin de complter celles qui son
proposes par dfaut dans le tableur.

Utiliser les fonctions Excel dans VBA


Excel offre un nombre impressionnant de fonctions intgres. De la simple addition aux
fonctions de calculs avancs, les fonctions dExcel permettent de raliser nombre dopra-
tions. La plupart de ces fonctions peuvent tre manipules via du code Visual Basic.

Ne confondez pas les fonctions spcifiques Excel et les fonctionsVisual Basic.


ntion Si de nombr euses fonctions mathmatiques Excel ont leur quivalent Visual
Atte
Basic, Excel propose des fonctions avances (statistiques, financi es, etc.) qui
sont bel et bien des fonctions Excel et non Visual Basic. Un programme exploi-
tant ces fonctions ne pourr a donc pas tr e excut dans une application hte
autre quExcel.

Pour utiliser une fonction Excel dans un programme VBA, v ous ferez appel lobjet
Application qui reprsente lapplication hte (en loccurrence Excel) qui contient ces
fonctions. Dans le xemple sui vant, la fonction QuelEstLeMax e xploite la fonction Max
dExcel qui renvoie la valeur la plus forte dans une liste darguments. Si vous ne faites pas
prcder la fonction Max du mot cl Application, la fonction ne sera pas reconnue et une
erreur sera gnre.

Public Sub QuelEstLeMax()


MsgBox "Le plus grand des chiffres reus est " _
& Application.Max(1, 2, 3, 4), vbInformation + vbOKOnly, _
"Utiliser les fonctions Excel dans VB"
End Sub

Crer des fonctions Excel personnalises


Vous serez probablement amen utiliser des fonctions quExcel ne prendra pas en char ge.
Le dveloppement de procdures de type Function permet de remdier ce problme.
Les fonctions personnalises que v ous crez dans Visual Basic Editor peuv ent tre utili-
ses dans Excel comme nimporte quelle fonction intgre. Elles apparaissent alors dans
Livre Macros excel.book Page 253 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 253

la liste des fonctions dExcel et peuvent tre employes dans un classeur Excel laide de
la commande F onction du menu Insertion. Crez la fonction sui vante dans Visual Basic
Editor :
Function Agessa(SalaireBrut)
Agessa = (SalaireBrut * 0.95) * 0.0085
End Function

Cette fonction calcule les AGESSA (cotisation sur les droits dauteur). Les AGESSA se
calculent sur une base de 95 % du salaire brut, au taux de 0,85 %.
La fonction Agessa tant cre, retournez dans Excel. Choisissez la commande F onction
du menu Insertion et slectionnez la catgorie F onctions personnalises. La fonction
apparat dans la liste Nom de la fonction, prcde du nom du classeur dans lequel elle
est stocke. Les arguments sont aussi visibles (voir Figure 8.1).

Figure 8.1
Les fonctions cres
dans Visual Basic
Editor peuvent tre
exploites dans
Excel, comme des
fonctions intgres.

Les fonctions cres dans Visual Basic Editor sont gres dans Excel comme nimporte
quelle fonction intgre du tableur. Si vous cliquez sur le bouton OK de la bote de dialo-
gue Coller une fonction, v ous serez invit prciser les cellules correspondant aux ar gu-
ments de la fonction (v oir Figure 8.2). La fonction apparatra ensuite dans la barre de
formule.
Livre Macros excel.book Page 254 Vendredi, 3. avril 2009 7:45 07

254 Excel et VBA

Figure 8.2
Vous tes invit spcif er les
cellules correspondant aux
arguments de la fonction.

Figure 8.3
La fonction personnalise
est affi he dans la barre
de formule.

Affectez des noms r eprsentatifs aux ar guments des fonctions que vous crez,
eil afin quils soient comprhensibles pour les aut es utilisateurs.
Cons

Intgrer une fonction via lExplorateur dobjets


Au vu des centaines de fonctions proposes par Excel et accessibles dans VBA, il est
difficile de mmoriser la synta e et les ar guments de lensemble de ces fonctions.
LExplorateur dobjets est alors la solution. Il recense en ef fet les fonctions Excel et VBA
intgres comme personnalises et en dtaille lusage et la syntaxe.

Insrer une fonction VBA dans votre code


Pour insrer une fonction VBA dans votre code partir de lExplorateur dobjets, proc-
dez comme suit :
1. Lancez lExplorateur dobjets.
2. Dans la liste droulante Projet/Bibliothque, choisissez VBA.
La zone Classes affiche la liste des objets, fonctions, procdures et constantes de VBA.
3. Dans la zone Classes, slectionnez la catgorie de fonctions v oulue ( Conversions,
DateTime, Financial, Math, Strings, etc.).
Livre Macros excel.book Page 255 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 255

4. Dans la zone Membres de, slectionnez la fonction voulue.


Les dtails de la fonction apparaissent dans la zone infrieure de lExplorateur
dobjets. Si v ous souhaitez consulter laide en ligne pour la fonction choisie, cliquez
sur le bouton Aide.

Figure 8.4
LExplorateur dobjets
permet daccder
lensemble des infor-
mations disponibles
pour une fonction.

5. Cliquez ensuite sur le bouton Copier dans le Presse-papiers, puis fermez lExplorateur
dobjets.
6. Dans la fentre Code, placez le curseur lendroit souhait, puis tapez le raccourci
Ctrl + V afin de coller la fonction
La fonction apparat dans le code. Lorsque vous saisissez un espace, la liste des arguments
attendus est affiche

Insrer une fonction Excel dans votre code


Pour insrer une fonction Excel dans votre code, procdez comme suit :
1. Lancez lExplorateur dobjets.
2. Dans la liste Projet/Bibliothque, choisissez Excel. Dans la zone Classes, choisissez
WorksheetFunction.
Les fonctions Excel disponibles dans VBA apparaissent dans la zone Membres de.
Livre Macros excel.book Page 256 Vendredi, 3. avril 2009 7:45 07

256 Excel et VBA

Figure 8.5
Les fonctions Excel sont
accessibles via lobjet
WorksheetFunction.

3. Slectionnez la fonction voulue, puis copiez-la.


4. Placez ensuite le curseur lendroit o vous souhaitez faire apparatre la fonction dans
la fentre Code.
5. Saisissez Application.WorksheetFunction., puis collez la fonction.

Plutt que de passer par lExplor ateur dobjets, vous pouvez simplement sa isir
ce Application.WorksheetFunction. dans votr e code pour fair e apparatre la liste
Astu
des fonctions disponibles.
Notez que vous pouvez omettre la proprit WorksheetFunction et vous contenter de
faire prcder la fonction par la proprit Application. Le code fonctionnera gale-
ment, mais VBA naffi hera pas daide lcriture de code lors de la saisie dans la
fentre Code.

Recommandations pour lcriture de fonctions Excel


Les limites de la cellule
Noubliez pas que v os fonctions serviront en gnral insrer des donnes dans une
cellule. Elles doivent donc prsenter les mmes limites que celles qui sappliquent aux
cellules. Veillez donc ce que vos fonctions ne retournent jamais une chane suprieure
255 caractres. Si ctait le cas, le rsultat retourn et insr dans la cellule serait tron-
qu au-del de cette limite.
Livre Macros excel.book Page 257 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 257

Prcisez le type du rsultat


Veillez toujours prciser le type de donnes renvoy par une fonction, afin que le rsulta
saffiche correctement dans la cellule. Ceci est particulirement vrai dans le cas dun
fonction renvoyant un rsultat de type Date. Excel nappliquera en effet le format de date
la cellule que si la fonction a t dclare comme retournant une valeur de type Date.

Des fonctions toujours jour


Par dfaut, Excel met jour le rsultat dune fonction personnalise dans une cellule de la
mme f aon quil le f ait pour les fonctions Excel. Vous pouvez cependant dclarer une
fonction volatile de faon quExcel calcule ou recalcule le rsultat dune fonction chaque
fois que le contenu dune cellule de la feuille est modifi
Pour marquer une fonction personnalise comme v olatile, insrez simplement linstruction
suivante immdiatement aprs linstruction de dclaration de la fonction :
Application.Volatile

Considrez la fonction CalculTauxBenefice suivante. Elle retourne le taux de bnfic


ralis partir du chiffre daffaires et des cots :
Public Function TauxBenefice(CA As Currency, Couts As Currency) As Long
Application.Volatile
TauxBenefice = ((CA - Couts) / CA) * 100
End Function

Notre fonction reoit les ar guments de type Currency CA (pour Chif fre dAf faires) et
Couts. La premire instruction de la fonction la dclare comme volatile. La fonction
calcule ensuite le taux de bnfice ralis en pourcentage

Principales fonctions VBA


Cette section prsente les fonctions de calcul VBA les plus couramment utilises dans le
cadre de la programmation Excel. Elles sont classes selon les catgories suivantes :
fonctions mathmatiques ;
fonctions de conversion de donnes ;
fonctions de conversion de types de donnes ;
fonctions de date et dheure ;
fonctions financires
Pour obtenir une aide plus dv eloppe concernant lutilisation de ces fonctions, consultez
laide en ligne de VBA.
Livre Macros excel.book Page 258 Vendredi, 3. avril 2009 7:45 07

258 Excel et VBA

Les fonctions de tr aitement des c hanes de car actres constituant une question
cl de la programmation, le chapitre suivant leur est entirement consacr.
Info

Notez que les ar guments des fonctions prsentes dans les tableaux suivants
Info sont pour la plupart des arguments nomms. Lorsquun argument nest pas un
argument nomm, il est traduit en franais.

Dans le Tableau 8.1, largument nomm Number reprsente une v aleur numrique passe
en argument.
Tableau 8.1 : Fonctions mathmatiques

Type
Fonction Description de donnes
renvoy
Abs(Number) Retourne la valeur absolue de Number. Mme type
que Number
Atn(Number) Retourne larctangente de Number, sous la forme dun angle Double
exprim en radians. Pour convertir des degrs en radians,
multipliez-les par pi/180. Inversement, pour convertir des radians
en degrs, multipliez-les par 180/pi.
Cos(Number) Retourne le cosinus de langle Number (exprim en radians). Double
Exp(Number) Retourne la valeur de la constante e leve la puissance Double
Number.
La constante e est la base des logarithmes npriens, et est
peu prs gale 2,718282.
Fix(Number) Renvoie la partie entire dun nombre. Mme type
Si Number est ngatif, Fix renvoie le premier entier ngatif que Number
suprieur ou gal Number.
Int(Number) Comme la fonction Fix, la fonction Int renvoie la partie entire Mme type
dun nombre. Par contre, si Number est ngatif, Int renvoie que Number
le premier entier ngatif infrieur ou gal Number.
Log(Number) Retourne le logarithme nprien de Number. Double
Rnd(Number) Retourne une valeur alatoire. Largument Number est facultatif Single
et dfinit le comportement de la fonction Rnd. Notez que la
fonction Rnd gnre la mme srie de nombres alatoires
chaque appel, car elle rutilise le nombre alatoire prcdent
comme valeur initiale pour le calcul du nombre suivant. Utilisez
linstruction Randomize pour initialiser le gn-rateur de nombres
alatoires partir dune valeur initiale tire de lhorloge systme.
Livre Macros excel.book Page 259 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 259

Tableau 8.1 : Fonctions mathmatiques (suite)

Type
Fonction Description de donnes
renvoy
Round(Number, Retourne la valeur arrondie de Number. Mme type
NumDigitsAfter- Largument facultatif NumDigitsAfterDecimal indique le nombre que Number
Decimal) de chiffres conserver aprs la virgule dans le nombre retourn.
Si cet argument est omis, Round renvoie la valeur entire arrondie.
Sgn(Number) Retourne une valeur reprsentant le signe de Number: Integer
1 si Number est infrieur zro.
0 si Number est gal zro.
1 si Number est suprieur zro.
Sin(Number) Retourne le sinus de langle Number exprim en radians. Double
Sqr(Number) Retourne la racine carre de Number. Double
Tan(Number) Retourne la valeur de la tangente de langle Number Double
exprime en radians.

Le Tableau 8.2 prsente les fonctions de con version de donnes de VBA. Ces fonctions
traitent la valeur reue en argument et renvoient le rsultat de ce traitement.
Les fonctions de conversion de type de donnes sont prsentes dans le Tableau 8.3.
Tableau 8.2 : Fonctions de conversion des donnes

Type de donnes
Fonction Description
renvoy
Asc(String) Renvoie une valeur reprsentant le code de caractres Integer
du premier caractre de la chane de caractres String.
Chr(CharCode) Renvoie le caractre dont le code de caractres est Integer
CharCode. CharCode est de type Long.
Format(Expres- Renvoie Expression sous forme de chane formate String
sion, Format) selon le Format dfini. Vous pouvez ainsi dfinir le format
dune date, ou modifier une chane pour afficher le symbole
de la monnaie et placer des sparateurs entre les milliers.
Hex(Number) Retourne la valeur hexadcimale de Number sous forme String
de chane. Si Number nest pas un nombre entier, il est
arrondi lentier le plus proche.
Oct(Number) Retourne la valeur octale de Number sous forme de chane. String
Livre Macros excel.book Page 260 Vendredi, 3. avril 2009 7:45 07

260 Excel et VBA

Tableau 8.2 : Fonctions de conversion des donnes (suite)

Type de donnes
Fonction Description
renvoy
RGB(Red, Green, Retourne un entier reprsentant la valeur RGB. Long
Blue) Les arguments Red, Green et Blue sont de type Integer
et correspondent chacun la valeur de la couleur associe
(rouge, vert, bleu), comprise entre 0 et 255.
Str(Number) Renvoie Number sous forme de chane de caractres. Number String
peut tre nimporte quelle valeur numrique que lon souhaite
traiter comme une chane.
Val(String) Retourne String sous forme de valeur numrique Type appropri
de type appropri. Si String ne peut tre converti en la valeur
valeur numrique, une erreur est gnre. retourne

Contrairement aux fonctions prsentes dans le tableau prcdent, les fonctions dcrites
dans le Tableau 8.3 ne renvoient pas les donnes reues en argument sous une forme diff-
rente, mais en modifient le type. La co version de donnes dans le type appropri est
souvent ncessaire au bon droulement dun programme VBA. P ar e xemple, tenter
dexcuter une fonction mathmatique sur une chane de caractres (mme si celle-ci nest
compose que de chiffres) gnrera une erreur. Vous devrez alors faire appel la fonction
de conversion numrique approprie afin que la gument pass la fonction soit reconnu
comme une valeur et non plus comme une suite de caractres.
Tableau 8.3 : Fonctions de conversion des types de donnes

CBool(MaVar) Convertit MaVar en une valeur boolenne. Renvoie True si MaVar est une valeur
numrique diffrente de 0 ; False si MaVar est gale 0. Une erreur est gnre si
MaVar nest pas une valeur numrique.
CByte(MaVar) Convertit MaVar en une variable de type Byte.

CCur(MaVar) Convertit MaVar en une variable de type Currency (montaire).

CDate(MaVar) Convertit MaVar en une variable de type Date.

CDbl(MaVar) Convertit MaVar en une variable de type Double.

CDec(MaVar) Convertit MaVar en une variable de type Decimal.

CInt(MaVar) Convertit MaVar en une variable de type Integer.

CLng(MaVar) Convertit MaVar en une variable de type Long.

CSng(MaVar) Convertit MaVar en une variable de type Single.


Livre Macros excel.book Page 261 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 261

Tableau 8.3 : Fonctions de conversion des types de donnes (suite)

CStr(MaVar) Convertit MaVar en une variable de type String. Si MaVar est une valeur de type Boo-
lean, la fonction CStr renvoie Vrai ou Faux. Si MaVar est une valeur de type Date, la
fonction CStr renvoie la date sous forme de chane. Si MaVar est une valeur de type
numrique, la fonction CStr renvoie cette valeur sous forme de chane.
CVar(MaVar) Convertit MaVar en une variable de type Variant. MaVar doit tre une valeur de type
Double pour les nombres et de type String pour les chanes.

Le Tableau 8.4 prsente les fonctions de date et dheure. Largument nomm date dsigne
toute expression valide qui renvoie une valeur de type Date.

Tableau 8.4 : Fonctions de date et dheure

Type
Fonction Description de donnes
renvoy
Date Retourne la date en cours partir de lhorloge systme de votre Date
ordinateur. Vous pouvez galement utiliser linstruction Date pour
dfinir la date de lhorloge systme.
Time Retourne lheure en cours partir de lhorloge systme. Utilisez Date
linstruction Time pour redfinir lheure systme.
Now Retourne la date et lheure en cours. Date
Year(Date) Retourne lanne correspondant Date sous la forme dun nombre Integer
entier.
Month(Date) Retourne le mois correspondant Date sous la forme dun entier Integer
compris entre 1 (janvier) et 12 (dcembre).
Day(Date) Retourne le jour correspondant Date sous la forme Integer
dun nombre entier compris entre 1 et 31.
Weekday(Date, Retourne un entier compris entre 1 et 7, qui reprsente Integer
Firs- le jour de la semaine correspondant la date Date.
tDayOfWeek) FirstDayOfWeek dfinit le jour considr comme le
premier jour de la semaine. Il peut sagir dune valeur comprise entre 0 et
7 ou de lune des huit constantes vbDayOfWeek: vbUseSystem, vbMonday,
vbTuesday, vbWednesday, vbThursday, vbFriday, vbSaturday et
vbSunday. Si largument Firstdayofweek est omis, la valeur par dfaut est
vbUseSystem et dpend donc du systme sur lequel est excute la
macro. En France, le premier jour de la semaine par dfaut est le lundi,
tandis quaux tats-Unis il sagira du dimanche. Il est donc recommand
de prciser largument Firstdayofweek afin dviter des diffrences de
comportements du programme dun ordinateur lautre.
Livre Macros excel.book Page 262 Vendredi, 3. avril 2009 7:45 07

262 Excel et VBA

Tableau 8.4 : Fonctions de date et dheure (suite)

Type
Fonction Description de donnes
renvoy
Weekday- Retourne une chane qui reprsente le nom du jour de la semaine String
Name(WeekDay, WeekDay. WeekDay peut tre une valeur num-rique comprise entre
Abbreviate, 0 et 7, ou lune des constantes vbDayOfWeek prsentes ci-avant.
Firs- La valeur retourne est renvoye dans la langue du systme sur lequel
tDayOfWeek) est excute la fonction. Sur un systme en franais, lundi, mardi,
dimanche. Largument nomm Abbreviate est facultatif et dfinit si
le jour est renvoy sous une forme abrge (lun. pour lundi). Sa
valeur par dfaut est False. FirstDayOfWeek dfinit quel est le jour
considr comme le premier jour de la semaine. Notez que la
fonction Weekday peut tre utilise comme argument de
WeekdayName:
... WeekDayName(WeekDay(Date))
Hour(Date) Retourne un nombre entier compris entre 0 et 23 et qui reprsente Integer
les heures de lheure fournie dans Date.
Si Date ne fournit pas dinformation dheure, la fonction renvoie 0.
Minute(Date) Retourne un entier compris entre 0 et 59 et qui reprsente Integer
les minutes de lheure fournie dans Date. Si Date ne fournit pas
dinformation de minutes, la fonction renvoie 0.
Second(Date) Retourne un entier compris entre 0 et 59 et qui reprsente Integer
les secondes de lheure fournie dans Date. Si Date ne fournit pas
dinformation de secondes, la fonction renvoie 0.
DateSerial Retourne une date prcise (jour, mois et anne), fonction Date
(Year, Month, des arguments Year, Month et Day reus.
Day)
TimeSerial Retourne une heure prcise (heures, minutes et secondes), Date
(Hour, Minute, fonction des arguments reus.
Second)
DateValue Renvoie la date reue en argument. Largument Date peut tre Date
(Date) une chane de caractres, un nombre, une constante
ou nimporte quelle expression renvoyant une date.
TimeValue Renvoie lheure reue en argument. Largument Date peut tre une Date
(Date) chane de caractres, un nombre, une constante ou nimporte quelle
expression renvoyant une heure.
Timer Renvoie le nombre de secondes coules depuis minuit (daprs Single
lhorloge systme de votre ordinateur).
Livre Macros excel.book Page 263 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 263

Le Tableau 8.5 prsente les fonctions financires de VBA.

Tableau 8.5 : Fonctions financires

Type
Fonction Description de donnes
renvoy
Fonctions de calcul damortissement
DDB(Cost, Retourne la valeur de lamortissement dun bien au cours Double
Salvage, Life, dune priode dfinie, en utilisant la mthode damortissement
Period,) dgressif taux double ou toute autre mthode prcise.
Les arguments nomms reus sont :
Cost: cot initial du bien.
Salvage: valeur du bien la fin de son cycle de vie.
Life: dure du cycle de vie du bien.
Period: priode sur laquelle lamortissement du bien est calcul.
Factor: facultatif. Taux utilis pour le calcul de lamortissement.
Si Factor est omis, la valeur 2 est employe (mthode
damortissement dgressif taux double).
SLN(Cost, Retourne lamortissement linaire dun bien sur une priode dfinie. Double
Salvage, Life) Les arguments nomms sont les mmes que pour la fonction DDB().
SYD(Cost, Retourne la valeur de lamortissement global dun bien sur une Double
Salvage, Life, priode donne. Les arguments nomms sont les mmes que pour
Period) la fonction DDB().
Fonctions de calcul de valeur future
FV(Rate, NPer, Retourne le futur montant dune annuit base sur des versements Double
Pmt, PV, Type) constants et priodiques et sur un taux dintrt fixe. Les arguments
nomms reus sont :
Rate: taux dintrt par chance. Pour un prt dont le taux
annuel serait 5 %, avec des chances mensuelles, le taux par
chance serait de 0,05/12, soit 0,0042.
NPer: nombre dchances de lemprunt ou du placement.
Pmt: montant du paiement effectuer chaque chance.
PV: facultatif. Valeur actuelle (ou somme globale) dune srie de
paiements devant tre effectus dans le futur. La valeur par dfaut est
0.
Type: facultatif. Date dchance des paiements. Indiquez la valeur
0 si les paiements sont dus terme chu, ou la valeur 1 si les
paiements sont dus terme choir. Si largument est omis, la valeur
par dfaut est 0.
Livre Macros excel.book Page 264 Vendredi, 3. avril 2009 7:45 07

264 Excel et VBA

Tableau 8.5 : Fonctions financires (suite)

Type
Fonction Description de donnes
renvoy
Fonctions de calcul de taux dintrt
Rate(NPer, Pmt, Retourne le taux dintrt par chance pour une annuit. Double
PV, FV, Type, Les arguments nomms NPer, Pmt, PV et Type sont les mmes
Guess) que pour la fonction FV() dcrite ci-dessus.
FV: facultatif. Valeur future ou solde que vous souhaitez obtenir
aprs avoir effectu le dernier paiement. Si vous souhaitez pargner
10 000 , la valeur future est de 10 000. Si largument est omis, la
valeur par dfaut est 0 (qui est la valeur future dun emprunt).
Guess: facultatif. Valeur qui devrait tre renvoye par la fonction
Rate. Sil est omis, Guess prend la valeur 0,1 (10 pour cent).
Fonctions de calcul de taux de rendement interne
IRR(Values(), Retourne le taux de rendement interne dune srie de mouvements Double
Guess) de trsorerie priodiques (paiements et encaissements). Les
arguments nomms sont les suivants :
Values(): tableau de donnes indiquant les valeurs des
mouvements de trsorerie. Le tableau doit contenir au moins
une valeur ngative (un paiement) et une valeur positive (un
encaissement).
Guess: facultatif. Valeur qui devrait tre renvoye par la fonction
IRR. Sil est omis, largument Guess prend pour valeur 0,1
(10 pour cent).
MIRR(Values(), Retourne le taux de rendement interne modifi dune srie Double
Finance_Rate, de mouvements de trsorerie priodiques
Reinvest_Rate) (paiements et encaissements).
Values() : idem que pour la fonction IRR dcrite
ci-dessus.
Finance_Rate: taux dintrt pay pour couvrir
le cot du financement.
Reinvest_Rate: taux dintrt peru sur les gains tirs des
sommes rinvesties.
Fonctions de calcul de nombre dchances
NPer(Rate, Pmt, Retourne le nombre dchances dune annuit Double
PV, FV, Type) base sur des versements constants et priodiques
et sur un taux dintrt fixe.
Les arguments nomms sont les mmes que pour
les fonctions FV et Rate dcrites plus avant dans ce tableau.
Livre Macros excel.book Page 265 Vendredi, 3. avril 2009 7:45 07

Chapitre 8 Fonctions Excel et VBA 265

Tableau 8.5 : Fonctions financires (suite)

Type
Fonction Description de donnes
renvoy
Fonctions de calcul de montant de versements
IPmt(Rate, per, Renvoie une valeur de type Double indiquant le Double
NPer, PV, FV, montant, sur une priode donne, dune annuit base
Type) sur des versements constants et priodiques et sur
un taux dintrt fixe.
Les arguments nomms sont les mmes que pour
les fonctions FV et Rate dcrites plus avant dans
ce tableau.
Pmt(Rate, NPer, Retourne le montant dune annuit base sur des Double
PV, FV, Type) versements constants et priodiques et sur un taux dintrt fixe.
Les arguments nomms sont les mmes que pour
les fonctions FV et Rate dcrites plus avant dans
ce tableau.
PPmt(Rate, per, Retourne la valeur du remboursement du capital, Double
NPer, PV, FV, pour une chance donne, dune annuit base sur
Type) des versements constants et priodiques et sur un taux dintrt
fixe.
Les arguments nomms sont les mmes que pour les fonctions FV et
Rate dcrites plus avant dans ce tableau.
Fonctions de calcul de montant de valeur actuelle
NPV(Rate, Retourne la valeur nette actuelle dun investissement, Double
Values()) calcule en fonction dune srie de mouvements de trsorerie
priodiques (paiements et encaissements) et dun taux descompte.
Les arguments nomms sont les
suivants :
Rate: taux descompte sur la priode, exprim sous
la forme dun nombre dcimal.
Values(): tableau de donnes indiquant les valeurs des
mouvements de trsorerie. Le tableau doit contenir au moins
une valeur ngative (un paiement) et une valeur positive (un
encaissement).
PV(Rate, NPer, Retourne le montant actuel dune annuit base sur Double
Pmt, FV, Type) des chances futures constantes et priodiques, et sur
un taux dintrt fixe.
Les arguments nomms sont les mmes que pour les
fonctions FV et Rate dcrites plus avant dans ce tableau.
Livre Macros excel.book Page 266 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 267 Vendredi, 3. avril 2009 7:45 07

9
Manipulation des chanes
de caractres
Au sommaire de ce chapitre
Modif er des chanes de caractres
Comparer des chanes de caractres
Rechercher dans les chanes de caractres
Livre Macros excel.book Page 268 Vendredi, 3. avril 2009 7:45 07

268 Excel et VBA

La manipulation de chanes de caractres est un aspect cl de la programmation, quel que


soit le langage de programmation. La manipulation de chanes permet par exemple daffiche
des messages lattention de lutilisateur pour linformer ou pour interagir avec lui. Dans ce
cadre, les valeurs numriques doivent souvent tre traites et formates comme des chanes
de caractres afin den xtraire les informations pertinentes. P ar ailleurs, les informations
retournes par la fonction InputBox ou via un contrle TextBox sont des chanes de caractres
et devront tre traites comme telles.

Modifier des chanes de caractres


Les chanes de caractres peuv ent tre modifies d peu prs toutes les aons. Vous
pouvez bien sr ajouter des lments une chane de caractres en la concatnant a vec
dautres chanes de caractres, mais vous pouvez aussi extraire une partie dune chane de
faon nen conserver que linformation pertinente.

Concatner des chanes


Concatner des chanes consiste les "accoler", cest--dire assembler plusieurs chanes
de caractres pour en crer une seule. Vous pouvez galement concatner lensemble des
lments dune variable de matrice, de f aon obtenir une chane qui en reprenne toutes
les valeurs.

Concatner des chanes simples


La concatnation des chanes est ralise laide des oprateurs & et +. Il est cependant
conseill de pri vilgier loprateur &, qui ne fonctionne qua vec les chanes, et de
conserver loprateur + pour les additions. Votre code sera ainsi sans ambigut.
Vous pouv ez concatner toute e xpression qui ren voie une chane de caractres. Il peut
sagir dune v ariable de type String comme dune fonction ren voyant une chane, ou
encore dune chane de caractres entoure de guillemets.

Vous ne pouvez pas concatner une chane de caractres et une valeur numri-
ntion que. Si vous souhaitez concatner une chane avec une valeur numrique, utili-
Atte
sez la fonction Str() de faon con vertir la valeur numrique en une c hane
de caractres, dans linstruction de concatnation.

Considrez lexemple suivant :


1: Sub ConcatenerDesChanes()
2: Dim MonNom As String
3: Dim MonBenefice As Long
4: Dim MonMessage As String
Livre Macros excel.book Page 269 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 269

5: MonNom = ActiveWorkbook.ActiveSheet.Cells(1, 2)
6: MonBenefice = ActiveWorkbook.ActiveSheet.Cells(1, 3).Value
7: MonMessage = "La prime de " & MonNom & " est de "
& Str(Int(MonBenefice / 20)) & " euros."
8: MsgBox MonMessage
9: End Sub

Lignes 2 4, les v ariables sont dclares. Notez que la v ariable MonBenefice est de type
Long et ne peut donc tre concatne telle quelle. Lignes 5 et 6, les v ariables MonNom et
MonBenefice reoivent respectivement pour valeur le contenu des cellules A2 et A3.
Ligne 7 a lieu la concatnation des dif frentes chanes de faon gnrer le message af fic
par la fonction MsgBox la ligne suivante.
Les lments concatns sont les suivants :
"La prime de" est une simple chane de caractres, entoure de guillemets.
MonNom est une v ariable de type String et peut donc tre concatne sans quil soit
ncessaire deffectuer une conversion de type de donnes.
"est de" est une simple chane de caractres. Notez que nous a vons fait prcder et
suivre le texte despaces, de manire gnrer une chane lisible.
Str(Int(MonBenefice / 20)) est une expression renvoyant une chane de caractres.
Tout dabord, la v aleur numrique MonBenefice est divise par 20, de faon obtenir
la valeur de la prime (5 % du bnfice). La fonction Int renvoie la valeur entire de la
somme ainsi obtenue. Enfin, la fonction Str con vertit le rsultat numrique ainsi
obtenu en une chane de caractres qui peut ainsi tre concatne a vec les autres cha-
nes.
"euros" est une simple chane de caractres.
On obtient ainsi le message affich dans la bote de dialogue de la Figure 9.1

Figure 9.1
La concatnation de chanes
permet daffi her des messages
lattention de lutilisateur.

Concatner les valeurs dune variable de matrice


Si vous souhaitez crer une seule chane de caractres partir des dif frentes valeurs dune
variable de matrice (ou variable tableau), utilisez la fonction Join selon la syntaxe suivante :

Join(SourceArray, Delimiter)
Livre Macros excel.book Page 270 Vendredi, 3. avril 2009 7:45 07

270 Excel et VBA

o largument nomm SourceArray est la v ariable de matrice dont on souhaite runir les
donnes en une chane, et Delimiter (facultatif) la chane de caractres qui sera utilise
comme sparateur entre les dif frentes donnes extraites de la v ariable. Si Delimiter est
omis, les lments du tableau sont concatns sans sparateur.
Dans le xemple sui vant, les jours de la semaine sont stocks dans le tableau Jours-
Semaine. La bote de dialogue reprsente la Figure 9.2 est ensuite affiche. Notez quo
utilise une virgule suivie dun espace comme sparateur, et que lon ajoute un point la fi
de la chane.

Sub ConcatenerUnTableau()
Dim JoursSemaine(1 To 7)
Dim n as Byte
For n = 1 To 7
JoursSemaine(n) = WeekdayName(Weekday:=n, abbreviate:=False, _
firstdayofweek:=vbMonday)
Next n
MsgBox "Les jours de la semaine sont: " & Join(JoursSemaine, ", ") & "."
End Sub

Figure 9.2
Utilisez la fonction Join pour
concatner les espaces de stockage
dune variable tableau.

Insrer des caractres non accessibles au clavier


Pour insrer, dans des chanes, des caractres qui ne peuvent tre saisis dans le code VBA
laide du clavier tels quun saut de paragraphe ou un retour la ligne , on fait appel
la fonction Chr() qui renvoie le caractre dont le code est prcis entre parenthses.
Utilisez la fonction Chr() selon la syntaxe suivante :

Chr(CharCode)

o largument nomm CharCode (de type Long) est le code ASCII du caractre que lon
souhaite insrer . Dans le xemple sui vant, on utilise la fonction Chr() pour insrer un
retour chariot (Chr(13)) et une puce ( Chr(149)) devant chaque jour de la semaine, afin d
gnrer le message ensuite affich dans une bote de dialogue ( oir Figure 9.3).

Sub UtiliserChr()
Dim n As Byte
Dim Message As String
Message = "Les jours de la semaine sont:"
For n = 1 To 7
Livre Macros excel.book Page 271 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 271

Message = Message & Chr(13) & Chr(149) & " " & WeekdayName(Weekday:
=n, abbreviate:=False, firstdayofweek:=vbMonday)
Next n
MsgBox Message
End Sub

Figure 9.3
Utilisez la fonction Chr()
pour insrer des caractres
non accessibles au clavier.

Afin damliorer la lisibilit de otre code, prfrez les constantes Visual Basic la fonc-
tion Chr() quand cela est possible. Le Tableau 9.1 prsente les constantes Visual Basic les
plus communment employes pour crer des chanes de caractres.

Tableau 9.1 : Constantes Visual Basic renvoyant un caractre

Constante Valeur Equivalent avec Chr()


vbCr Saut de paragraphe Chr(13)
vbLf Saut de ligne Chr(10)
vbCrLf Retour chariot + saut de ligne Chr(13) & Chr(10)
vbNewLine Saut de ligne spcifique la plate-forme : Chr(13) & Chr(10) Windows
quivaut vbCrLf pour Windows et vbCr Chr(13) Macintosh
sur un Macintosh
vbTab Tabulation Chr(9)

Rpter une srie de caractres


Utilisez la fonction String() pour renvoyer une chane compose dun caractre rpt un
nombre dfini de fois, selon la synta e suivante :

String(Number, Character)

o les arguments nomms Number et Character reprsentent respectivement le nombre de


rptitions et le caractre rpter. Lexpression suivante insre dans une chane la valeur
Livre Macros excel.book Page 272 Vendredi, 3. avril 2009 7:45 07

272 Excel et VBA

de la cellule A1 laquelle sont ajouts six zros. La v aleur, exprime en millions dans la
cellule, est ainsi rcupre sous forme dunits :
MsgBox Str(ActiveWorkbook.ActiveSheet.Range("A1").Value) & String(6, "0")

Vous pouvez utiliser la fonction Chr() pour lar gument Character. Ainsi
ce String(10, Chr(149)) renvoie une chane compose de dix puces.
Astu

Utilisez la fonction Space pour renvoyer une chane compose dun nombre dfini despace ,
selon la syntaxe suivante :
Space(Number)

o largument nomm Number est le nombre despaces renvoyer.

Supprimer les espaces superflus dune chane


Traiter les espaces dune chane est une opration souv ent indispensable au bon fonctionne-
ment dun programme. Par exemple, si vous recevez des informations de lutilisateur grce
la fonction InputBox, il sera prudent de supprimer les ventuels espaces superflus lune o
lautre des extrmits de la chane retourne avant de traiter ces donnes.
Visual Basic propose trois fonctions permettant de supprimer les espaces superflus dun
chane :
LTrim(String): retourne une chane de caractres partir de la chane String reue
en argument, dont les espaces situs gauche ont t supprims.
RTrim(String): retourne une chane de caractres partir de la chane String reue
en argument, dont les espaces situs droite ont t supprims.
Trim(String): retourne une chane de caractres partir de la chane String reue en
argument, dont les espaces situs droite et gauche ont t supprims.
Largument nomm String est une chane de caractres.
Linstruction suivante stock e les donnes saisies par lutilisateur dans la v ariable MaVar
aprs avoir pris soin de supprimer les ventuels espaces saisis par erreur :
MaVar = Trim(InputBox("Veuillez saisir votre nom:"))

Extraire une partie dune chane


Les fonctions Left(), Right() et Mid() permettent de rcuprer une partie dune chane
de caractres. Combines aux fonctions de recherche dans une chane (prsentes plus loin
Livre Macros excel.book Page 273 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 273

dans ce chapitre), elles permettent de xtraire des informations prcises dune chane. La
fonction Len() qui renvoie la longueur dune chane, cest--dire le nombre de carac-
tres qui la composent est souvent employe comme argument de ces fonctions. Utilisez
ces fonctions selon la syntaxe suivante :
Len(String) retourne une v aleur de type Double qui reprsente le nombre de caractres
prsents dans la chane String.
Left(String, Lenght) retourne les Lenght premiers caractres situs g auche de la
chane String reue en ar gument. Si Lenght est suprieur ou g al la longueur d e
la chane String, la totalit de la chane est retourne.
Right(String, Lenght) retourne les Lenght premiers caractres situs droite de la
chane String reue en ar gument. Si Lenght est suprieur ou g al la longueur de
la chane String, la totalit de la chane est retourne.
Mid(String, Start, Length) retourne une chane compose des Lenght caractres
situs dans la chane String partir du caractre dont la position est Start. Le
caractre situ la position Start est g alement retourn. Largument Lenght est
facultatif. Sil est omis ou sil est suprieur au nombre de caractres prsents aprs
la position Start, tous les caractres situs partir de la position Start et jusqu
la fin de la chane sont retourns
Considrez les trois instructions suivantes :

1: MonTexte = Left(MonTexte, Len(MonTexte) - 1)


2: MonTexte = Right(MonTexte, Len(MonTexte) - 1)
3: Trim(Mid(ActiveWorkbook.ActiveSheet.Range("A1").Value, InStr
(ActiveWorkbook.ActiveSheet.Range("A1").Value, Chr(34)) + 1))

La premire instruction modifie la ariable MonTexte en supprimant le dernier caractre (


droite). On utilise pour cela la fonction Len() qui retourne la longueur de la chane laquelle
on retire 1.
Ligne 2, on modifie la ariable MonTexte en supprimant le premier caractre ( g auche).
Comme dans linstruction prcdente, on utilise la fonction Len() pour retourner la
longueur de la chane laquelle on enlve 1.
Enfin, linstruction de la ligne 3 retourne le contenu de la cellule A1 partir du premier
guillemet (non inclus) prsent dans la chane. On utilise pour cela la fonction InStr()
prsente plus loin dans ce chapitre, qui retourne la position du caractre recherch (ici
Chr(34), soit un guillemet). On utilise cette valeur laquelle on ajoute 1 pour commencer
la chane partir du caractre qui suit le guillemet. Notez que lon emploie la fonction
Trim() afin de supprimer les entuels espaces prsents aux e xtrmits de la chane
retourne par la fonction Mid().
Livre Macros excel.book Page 274 Vendredi, 3. avril 2009 7:45 07

274 Excel et VBA

Effectuer des remplacements au sein dune chane


Utilisez la fonction Replace() pour effectuer des remplacements au sein dune chane de
caractres selon la syntaxe suivante :
Replace(Expression, Find, Replace, Start, Count, Compare)

o Expression est une expression valide qui renvoie la chane de caractres traiter. Find
est la chane recherche et est remplace par Replace. Les trois ar guments suivants sont
facultatifs :
Start prcise la position de caractres partir de laquelle doi vent sef fectuer les
remplacements dans Expression. Si cet argument est omis, lensemble de la chane est
trait.
Count indique le nombre de remplacements ef fectuer. Sil est omis, sa v aleur par
dfaut 1 est utilise, et toutes les occurrences de Find sont remplaces.
Enfin, Compare prcise le type de comparaison effectue. Il peut sagir de lune des valeurs
suivantes :
vbUseCompareOption ou 1 : cest la valeur de loption Option Compare prcise dans
len-tte du module dans lequel se trouve linstruction qui est utilise pour dfinir le typ
de comparaison.
vbBinaryCompare ou 0 : ef fectue une comparaison binaire. La recherche se f ait en
respectant la casse de Find.
vbTextCompare ou 1 : effectue une comparaison de te xte. La recherche se f ait sur le
texte, sans prendre en considration la casse des occurrences trouves.
vbDatabaseCompare ou 2 : effectue une comparaison sappuyant sur des informations
contenues dans une base de donnes Microsoft Access seulement.
Dans lexemple suivant, lignes 7 9, les donnes de la feuille acti ve sont stockes dans la
variable de matrice MesValeurs, tout en remplaant au passage les ";" par des ",".
1: Sub UtiliserReplace()
2: Dim MaCellule As Range
3: Dim n As Long
4: Dim MesValeurs()
5: ReDim MesValeurs(1 To ActiveWorkbook.ActiveSheet
.UsedRange.Cells.Count)
6: n = 0

7: For Each MaCellule In ActiveWorkbook.ActiveSheet.UsedRange.Cells


8: n = n + 1
9: MesValeurs(n) = Replace(MaCellule.Value, ";", ",")
10: Next MaCellule
11: End Sub
Livre Macros excel.book Page 275 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 275

Affectez une c hane nulle lar gument Replace pour supprimer toutes les
Astu
ce occurrences de Find dans la chane traite.

Modifier la casse des chanes de caractres


Les fonctions suivantes permettent de formater une chane :
StrConv(String, Conversion) convertit les majuscules et minuscules de la chane
String selon la valeur de Conversion:
vbUpperCase ou 1 convertit la chane en majuscules.
vbLowerCase ou 2 convertit la chane en minuscules.
vbProperCase ou 3 convertit les lettres de la chane en minuscules et applique une
majuscule la premire lettre de chaque mot.
UCase(String) retourne la chane String en convertissant toutes les lettres minuscules en
majuscules. Equi vaut utiliser la fonction StrConv() en af fectant la v aleur 1 ou
vbUpperCase largument Conversion.
LCase(String) retourne la chane String en convertissant toutes les lettres majuscu-
les en minuscules. Equivaut utiliser la fonction StrConv() en affectant la valeur 2
ou vbLowerCase largument Conversion.

Comparer des chanes de caractres


Comme vous le verrez en dveloppant vos programmes VBA, la comparaison de chanes
de caractres est souv ent utilise dans des structures de contrle pour rpter une opration
jusqu ce quune condition soit remplie.
La mthode la plus simple pour comparer des chanes consiste emplo yer les oprateurs
arithmtiques =, < et >. Vous pouvez galement utiliser la fonction StrComp(), en respectant
la syntaxe suivante :

StrComp(String1, String2, Compare)

o String1 et String2 sont les chanes comparer. Largument facultatif Compare dfinit le
type de comparaison effectuer et peut prendre les valeurs suivantes :
vbUseCompareOption ou 1 : cest la valeur de loption Option Compare prcise dans
len-tte du module dans lequel se trouve linstruction qui est utilise pour dfinir e
type de comparaison.
Livre Macros excel.book Page 276 Vendredi, 3. avril 2009 7:45 07

276 Excel et VBA

vbBinaryCompare ou 0 : ef fectue une comparaison binaire. La recherche se f ait en


respectant la casse de Find.
vbTextCompare ou 1 : effectue une comparaison de te xte. La recherche se f ait sur le
texte, sans prendre en considration la casse des occurrences trouves.
vbDatabaseCompare ou 2 : effectue une comparaison sappuyant sur des informations
contenues dans une base de donnes Microsoft Access seulement.
La fonction StrComp() peut renvoyer les valeurs suivantes :
1 : String1 est infrieur String2.
0 : String1 est gal String2.
1 : String1 est suprieur String2.
Null : String1 ou String2 est de type Null.
Pour comparer des chanes de caractres, la fonction StrComp() compare les codes ANSI
des caractres qui les composent par ordre de position. Lorsque le code de deux caractres
compars est diffrent, la comparaison sarrte et la fonction ren voie la valeur correspon-
dante. Si les deux caractres compars sont identiques, les caractres sui vants des deux
chanes sont leur tour compars, etc.
Le tableau sui vant prsente quelques e xemples de comparaisons de chanes en mode de
comparaison vbTextCompare:

String1 String2 Rsultat de la comparaison


a A Les deux chanes sont identiques
abc AbC Les deux chanes sont identiques
ab ba String1 est infrieur String2
abc a String1 est suprieur String2

La procdure sui vante fait appel la fonction InputBox() pour af ficher deux reprise
une bote de saisie dans laquelle lutilisateur est in vit entrer une chane de caractres.
Les deux chanes sont ensuite compares et le rsultat de la comparaison est af fich dan
une bote de dialogue grce linstruction MsgBox.
1: Sub ComparerDesChanes()
2: Dim MaChane1 As String
3: Dim MaChane2 As String
4: MaChane1 = InputBox("Veuillez entrer la valeur de la chane 1:",
"Comparaison de chanes")
5: Do Until MaChane1 <> ""
Livre Macros excel.book Page 277 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 277

6: MaChane1 = InputBox("Vous devez prciser une chane


comparer!" & _
7: vbCr & "Entrez une valeur pour la chane 1:", "Comparaison
de chanes")
8: Loop
9: MaChane2 = InputBox("Veuillez entrer la valeur de la chane 2:",
"Comparaison de chanes")
10: Do Until MaChane2 <> ""
11: MaChane2 = InputBox("Vous devez prciser une chane
comparer!" & _
12: vbCr & "Entrez une valeur pour la chane 2:", "Comparaison
de chanes")
13: Loop
14: Select Case StrComp(MaChane1, MaChane2, vbTextCompare)
15: Case -1
16: MsgBox "La chane 1 est infrieure la chane 2."
17: Case 0
18: MsgBox "La chane 1 et la chane 2 sont identiques."
19: Case 1
20: MsgBox "La chane 1 est suprieure la chane 2."
21: End Select
22: End Sub

Lignes 5 8 pour la premire chane et 10 13 pour la seconde, une structure Do


Until...Loop est employe pour afficher de nou eau une bote de saisie si lutilisateur a
valid avec une zone de saisie vide. On utilise ici loprateur <> pour comparer deux chane s
(la variable et une chane vide) afin de dfinir si la boucle doit tre xcute.
Lignes 14 21, une structure Select Case...End Select est utilise pour dfinir la aleur
renvoye par linstruction StrComp(MaChane1, MaChane2, vbTextCompare) et affiche
le message adquat.

Rechercher dans les chanes de caractres


La recherche de chanes dans des chanes de caractres est lune des oprations les plus
courantes du traitement de chanes. VBA permet de rechercher une chane de caractres au
sein dune autre chane, mais aussi de rechercher des chanes de caractres dans des variables
de matrice.

Rechercher une chane dans une chane


Pour rechercher une chane au sein dune autre chane, f aites appel la fonction InStr().
Elle renvoie la position dans une chane de la premire occurrence de la chane qui y est
recherche. InStr() est utilise selon la syntaxe suivante :
InStr(start, string1, string2, compare)
Livre Macros excel.book Page 278 Vendredi, 3. avril 2009 7:45 07

278 Excel et VBA

o string1 et string2 sont respectivement la chane dans laquelle seffectue la recherche


et la chane rechercher . Largument start est f acultatif et indique la position du carac-
tre partir duquel la chane doit tre recherche. Sil est omis, la recherche commence
ds le premier caractre. L argument facultatif compare dfinit le type de comparaison
effectuer. Il peut prendre lune des valeurs suivantes :
vbUseCompareOption ou 1 : cest la valeur de loption Option Compare prcise dans
len-tte du module dans lequel se trouv e linstruction qui est utilise pour dfinir l
type de comparaison.
vbBinaryCompare ou 0 : ef fectue une comparaison binaire. La recherche se f ait en
respectant la casse de Find.
vbTextCompare ou 1 : effectue une comparaison de te xte. La recherche se f ait sur le
texte, sans prendre en considration la casse des occurrences trouves.
vbDatabaseCompare ou 2 : effectue une comparaison sappuyant sur des informations
contenues dans une base de donnes Microsoft Access uniquement.
Dans lexemple suivant la procdure MaMacro appelle la fonction VerifierEnregistre-
ment pour sassurer que le document actif est enregistr avant de sexcuter. Si ce nest pas
le cas, la fonction ren voie False, et linstruction End met fin l xcution du programme
aprs avoir affich un message lattention de lutilisateu .
1: Sub MaMacro()
2: If VerifierEnregistrement(ActiveDocument) = False Then
3: MsgBox "Cette commande ne peut tre excute que sur un fichier
enregistr.", _
4: vbOKOnly + vbCritical, "Excution impossible"
5: End
6: End If
7: suite des instructions de la macro
8: End Sub

9: Function VerifierEnregistrement(MonDoc As Document) As Boolean


10: If InStr(MonDoc.FullName, Application.PathSeparator) = 0 Then
11: VerifierEnregistrement = False
12: Else
13: VerifierEnregistrement = True
14: End If
15: End Function

La fonction VerifierEnregistrement est appele ligne 2 et reoit en ar gument le docu-


ment actif. Ligne 10, on recherche le sparateur propre au systme sur lequel se xcute le
programme (Application.PathSeparator) au sein du nom complet du document, chemin
inclus (proprit FullName). Si le fichier na pas t enr gistr, la chane retourne par la
proprit FullName est la mme que celle qui serait retourne par la proprit Name et ne
contient pas de sparateur ; la fonction InStr() renvoie donc la v aleur 0 et notre f onction
Livre Macros excel.book Page 279 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 279

reoit la valeur False. Dans le cas contraire, cest la v aleur True qui est affecte la fonction
VerifierEnregistrement.
Dans le xemple sui vant, la fonction ScinderChaine est appele par MaMacro et reoit en
arguments deux chanes de caractres : la chane scinder en plusieurs parties et le spa-
rateur utiliser pour ef fectuer cette opration. Elle ren voie ensuite une v ariable de matrice
dont les zones de stockage contiennent les diffrentes chanes extraites de la chane reue en
argument. Celles-ci sont ensuite traites de faon tre affiches
1: Sub MaMacro()
2: Dim n As Long
3: Dim MonResultat()
4: Dim Exemple As String
5: Dim Message As String
6: Exemple = "Transports:Maritimes:Bateaux:A voile"
7: MonResultat = ScinderChaine(Exemple, ":")
8: For n = 1 To UBound(MonResultat)
9: Message = Message & vbCr & Chr(149) & _
" " & MonResultat(n)
10: Next n
11: MsgBox "La chane a t scinde en " & UBound(MonResultat) & _
" parties:" & Message
12: End Sub

13: Function ScinderChaine (machane As String, separateur As String)


14: Dim pos As Long
15: Dim mavar
16: ReDim mavar(1)
17: pos = InStr(machane, separateur)
18: Do While pos <> 0
19: mavar(UBound(mavar)) = Left(machane, pos - 1)
20: machane = Mid(machane, pos + Len(separateur))
21: pos = InStr(machane, separateur)
22: ReDim Preserve mavar(UBound(mavar) + 1)
23: Loop
24: mavar(UBound(mavar)) = machane
25: ScinderChaine = mavar
26: End Function

Ligne 7, la fonction ScinderChaine est appele et reoit en arguments la chane affecte


la variable Exemple la ligne prcdente, ainsi que le sparateur utiliser, en loccurrence
deux-points.
La fonction ScinderChaine prend alors la main. La variable de matrice mavar est dclare
puis initialise la ligne suivante. Ligne 17, pos reoit en valeur le rsultat de la recherche
du sparateur au sein de la chane.
Lignes 18 23, une structure de contrle Do While...Loop est employe afin de rpter l
recherche tant quelle aboutit, cest--dire tant que la fonction InStr() renvoie une valeur
diffrente de 0. A chaque nouvelle recherche, on affecte au dernier espace de stockage de
mavar la chane prcdant la position du sparateur trouv ( Left(machane, pos 1)).
Livre Macros excel.book Page 280 Vendredi, 3. avril 2009 7:45 07

280 Excel et VBA

La valeur de machane est ensuite redfinie de aon en supprimer la partie e xtraite, ainsi
que le sparateur recherch (ligne 20). On utilise pour cela les fonctions Mid() et Len() afi
de dfinir la position de dpart de la nou elle chane immdiatement aprs le sparateur (pos
+ Len(separateur)). La comparaison est alors de nouv eau effectue sur la nouvelle chane
(ligne 21) et la variable de mavar reoit un espace de stockage supplmentaire. Notez lutili-
sation du mot cl Preserve afin de prser er les valeurs dj stockes dans mavar.
Enfin, ligne 24, le dernier espace de stockage de mavar reoit la valeur de machane quand
la recherche na pas abouti. La procdure appelante reprend alors la main et le message
reprsent la Figure 9.4 est affich
Figure 9.4
Utilisez la fonction InStr()
pour scinder une chane
fonction dun sparateur.

Rechercher une chane dans une variable de matrice


Visual Basic propose deux fonctions pour rechercher une chane au sein de tous les espaces
de stockage dune variable de matrice : Filter() et Split().
La fonction Filter() renvoie un tableau de base zro dont les espaces de stockage sont les
mmes que ceux de la variable traite, dans lesquels la recherche a abouti. Si la recherche
na pas russi, la fonction ren voie 1. Utilisez la fonction Filter() en respectant la
syntaxe suivante :
Filter(sourcearray, match, include, compare)
o sourcearray reprsente la variable de matrice une dimension dans laquelle seffectue
la recherche, et match la chane recherche. include et compare sont facultatifs. Si include
est dfini True (valeur par df aut), les contenus des zones de stockage o a abouti la
recherche sont retourns. Si include est dfini False, ce sont les zones de stockage dans
lesquelles na pas abouti la recherche qui sont renvoyes.
Dans lexemple suivant, on affecte les noms des jours de la semaine aux dif frents espaces
de stockage dune v ariable de matrice. On ef fectue ensuite quatre recherches distinctes au
sein de la variable et on en affiche les rsultats
1: Sub RechercherDansUnTableau()
2: Dim n As Long
3: Dim JoursSemaine(1 To 7)
4: Dim MaRecherche1
5: Dim MaRecherche2
Livre Macros excel.book Page 281 Vendredi, 3. avril 2009 7:45 07

Chapitre 9 Manipulation des chanes de caractres 281

6: DimMaRecherche3
7: DimMaRecherche4
8: DimMessage As String
9: Forn = 1 To 7
10: JoursSemaine(n) = WeekdayName(Weekday:=n, abbreviate:=False,
firstdayofweek:=vbMonday)
11: Next n
12: MaRecherche1 = Filter(sourcearray:=JoursSemaine(), match:="M",
include:=True, Compare:=vbBinaryCompare)
13: MaRecherche2 = Filter(sourcearray:=JoursSemaine(), match:="M",
include:=False, Compare:=vbBinaryCompare)
14: MaRecherche3 = Filter(sourcearray:=JoursSemaine(), match:="M",
include:=True, Compare:=vbTextCompare)
15: MaRecherche4 = Filter(sourcearray:=JoursSemaine(), match:="M",
include:=False, Compare:=vbTextCompare)
16: If Not UBound(MaRecherche1) = -1 Then
17: Message = "- Rsultat de la recherche avec include:=True et
Compare:=vbBinaryCompare:" & vbCr
18: For n = 0 To UBound(MaRecherche1)
19: Message = Message & " " & MaRecherche1(n) & " /"
20: Next n
21: Else
22: Message = "- Pas de rsultat pour la recherche avec
include:=True et Compare:=vbBinaryCompare."
23: End If
24: If Not UBound(MaRecherche2) = -1 Then
25: Message = Message & vbCr & "- Rsultat de la recherche avec
include:=False et Compare:=vbBinaryCompare " & vbCr
26: For n = 0 To UBound(MaRecherche2)
27: Message = Message & " " & MaRecherche2(n) & " / "
28: Next n
29: Else
30: Message = Message & vbCr & "- Pas de rsultat pour la recherche
avec include:=False et Compare:=vbBinaryCompare."
31: End If
32: If Not UBound(MaRecherche3) = -1 Then
33: Message = Message & vbCr & "- Rsultat de la recherche avec
include:=True et Compare:=vbTextCompare" & vbCr
34: For n = 0 To UBound(MaRecherche3)
35: Message = Message & " " & MaRecherche3(n) & " / "
36: Next n
37: Else
38: Message = Message & vbCr & "- Pas de rsultat pour la recherche
avec include:=True et Compare:=vbTextCompare."
39: End If
40: If Not UBound(MaRecherche4) = -1 Then
41: Message = Message & vbCr & "- Rsultat de la recherche avec
include:=False et Compare:=vbTextCompare: " & vbCr
42: For n = 0 To UBound(MaRecherche4)
43: Message = Message & " " & MaRecherche4(n) & " / "
44: Next n
45: Else
46: Message = Message & vbCr & "- Pas de rsultat pour la recherche
avec include:=False et Compare:=vbTextCompare."
47: End If
48: MsgBox Message
49: End Sub
Livre Macros excel.book Page 282 Vendredi, 3. avril 2009 7:45 07

282 Excel et VBA

Lignes 9 11, le nom des jours de la semaine est affect aux sept espaces de stockage de la
variable de matrice JoursSemaine. On f ait pour cela appel la fonction WeekdayName()
prsente au chapitre prcdent. Lignes 12 15, on recherche quatre reprises la chane
"M" dans la variable avec, chaque fois, des valeurs diffrentes pour les arguments include
et compare.
Les mmes instructions sont ensuite appliques aux quatre v ariables ayant reu pour
valeur les rsultats des recherches, afin de crer le message qui sera afich (lignes 16 23,
24 31, 32 39 et 40 47). On utilise pour cela une structure If...Then...Else afin d
savoir si la recherche a abouti. Si cest le cas, une boucle For...Next est utilise pour
concatner le contenu des espaces de stockage de la variable tableau ayant reu le rsultat
de la fonction.
Enfin, on a fiche le message reprsent la Figure 9.5

Figure 9.5
La fonction Filter() permet
deffectuer des recherches
inclusives ou exclusives.

Considrez les rsultats de la recherche :


Dans le premier cas, la recherche ne renvoie aucun rsultat, car largument Compare est
dfini vbBinaryCompare et sef fectue donc en respectant la casse (M majuscule et
non minuscule).
Largument Compare de la deuxime recherche est g alement dfini vbBinaryCom-
pare. P ar contre, la fonction ren voie toutes les v aleurs de la v ariable JoursSemaine
puisque cette fois-ci largument include a t dfini False (tous les espaces de stoc-
kage o la recherche na pas abouti sont renvoys).
Pour la troisime recherche, les arguments include et compare ont respectivement t dfi
nis True et vbTextCompare. La recherche sapplique donc sans respecter la casse et toutes
les zones de stockage contenant la lettre m (minuscule ou majuscule) sont retournes.
Enfin, la quatrime recherche est e fectue en mode vbTextCompare, mais cette fois-ci
largument include a t dfini False. Ce sont donc tous les espaces de stockage ne
contenant pas la lettre M (majuscule) ou m (minuscule) qui sont retourns.
Livre Macros excel.book Page 283 Vendredi, 3. avril 2009 7:45 07

10
Dbogage et gestion
des erreurs
Au sommaire de ce chapitre
Les tapes et les outils du dbogage
Exemple de dbogage
Gestion des erreurs et des exceptions
Exemple de gestion derreur
Livre Macros excel.book Page 284 Vendredi, 3. avril 2009 7:45 07

284 Excel et VBA

Il arri vera immanquablement que des erreurs surviennent lors de le xcution dun
programme VBA ou que le rsultat dun programme ne soit pas celui qui tait escompt.
Vous devrez alors dterminer lorigine de lerreur et tester de nouveau le programme. VBA
dispose pour cela de prcieux outils. Ce chapitre vous les prsente.
Mais vous devez tout dabord distinguer le dbogage de la gestion des erreurs. Le dbo-
gage consiste corriger le code lorsquun programme ne fonctionne pas cause dun
problme li une erreur dans le code : faute de frappe, syntaxe incorrecte, etc. La gestion
des erreurs consiste prvoir les ventuelles erreurs susceptibles de survenir et y rem-
dier. Un programme peut a voir t test a vec succs au moment de sa cration et gnrer
des erreurs lors de son excution dans un contexte diffrent. La gestion des erreurs consiste
rendre un programme aussi fiable que possible, cest--dire sexcutant correctement dans
des contextes diffrents.

Les tapes et les outils du dbogage


Le dbogage consiste donc rgler les erreurs directement lies au code du programme et
indpendantes de len vironnement dans lequel se xcute le programme. Trois types
derreurs peuvent affecter un programme VBA :
Erreurs de compilation. Ce type derreur survient lorsque VBA rencontre une
instruction quil ne reconnat pas ; par e xemple, lorsquun mot cl contient une f aute
dorthographe (voir Figure 10.1).

Figure 10.1
Les erreurs de compilation
sont les plus faciles reprer.

Erreurs dexcution. Une erreur de xcution survient aprs que la compilation du


programme a t ralise a vec succs. Une erreur de xcution peut, par e xemple, tre
lie lutilisation de donnes incompatibles. Ce sera le cas si le programme ef fectue
une opration arithmtique sur une variable de chane (voir Figure 10.2).
Erreurs logiques. Les erreurs logiques sont les plus dif ficiles redresse . Contrai-
rement aux erreurs de compilation et de xcution, elles laissent le programme
sexcuter. Le rsultat obtenu ne sera pas celui que v ous escomptiez. Les sections
suivantes prsentent les outils de dbog age qui permettront de dtecter lorigine de
lerreur.
Livre Macros excel.book Page 285 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 285

Figure 10.2 Afficher la rubrique d'aide


Une valeur et un message associe l'erreur reconnue
dfinissent le type der eur
reconnue par Visual Basic.

Terminer l'excution Tenter de


du programme rsoudre l'erreur

eil Lactivation de loption Vrification automatique de la syntaxe (voir Chapi


Cons tre 5) de Visual Basic Editor permet de r eprer les err eurs de syntaxe ds
ltape de la saisie du code.

Il est r ecommand de for cer la dclar ation explicite des variables laide de
eil linstruction Option Explicit. Vous viterez ainsi tout risque derr eur li
Cons
une faute de fr appe lors de la saisie dun nom de variable . Pour plus dinfor -
mations reportez-vous au Chapitre 6.

Test du projet
Il est dusage de tester tout nouveau programme lors du dveloppement. Le premier test
consiste compiler le projet, afin de dtecter les entuelles erreurs de xcution. Lors
de la compilation, Visual Basic Editor teste chaque instruction du projet. Pour compiler
un projet, choisissez la commande Compiler du menu Dbog age. Si une e rreur est mise
en vidence, remdiez-y. Et recommencez jusqu ce que la compilation se droule norma-
lement.
Lorsque la compilation sef fectue correctement, testez le projet partir de Visual Basic
Editor : cliquez sur le bouton Excuter de la barre doutils Standard.

Ne testez pas un pr ogramme dont vous ntes pas certain sur un document
eil sensible. Il est prfr able deffectuer les tests sur une copie . Vous serez ainsi
Cons
assur de ne pas endomma ger des donnes prcieuses si le pr ogramme ne
sexcute pas correctement, ou sil produit des donnes errones.
Livre Macros excel.book Page 286 Vendredi, 3. avril 2009 7:45 07

286 Excel et VBA

Si une erreur dexcution est gnre, linstruction coupable est mise en vidence. Rem-
diez-y. Pour renouveler la procdure, rinitialisez le projet. Cliquez pour cela sur le bouton
Rinitialiser de la barre doutils Standard ou choisissez la commande Rinitialiser du
menu Excution. La mise en vidence de linstruction source de lerreur de xcution
disparat. Excutez nouv eau la procdure, et ce jusqu ce que le programme se xcute
normalement.
Lorsque survient une erreur de compilation ou dexcution, il est ais de reprer linstruction
errone. Si le projet a t compil partir de Visual Basic Editor, linstruction incrimine est
mise en vidence. Si le programme est e xcut partir de lapplication hte, la bote de
dialogue de la Figure 10.2 saf fiche. Un clic sur le bouton Dbo age ouvre Visual Basic
Editor (si ncessaire) et af fiche la procdure dans laquelle se trou e linstruction ayant
gnr lerreur. P ar df aut, celle-ci apparat en jaune et est signale par un indi cateur de
marge (voir Figure 10.3).

Figure 10.3
Linstruction ayant gnr
lerreur est mise en vidence
dans Visual Basic Editor.

Il est cependant plus dif ficile de reprer les erreurs logiques. Les outils de dbobage d
Visual Basic Editor sont alors dun grand secours. Ils sont accessibles via le menu Dbo-
gage et, pour les plus usits, via la barre doutils Dbogage.

Figure 10.4 Basculer le Fentre


La barre doutils Dbogage. point d'arrt Variables
Arrt Pas pas locales Fentre
principal Espions

Mode Pile des


Cration appels
Excuter / Pas pas Pas pas Espion
Continuer dtaill sortant Express
Rinitialiser Fentre
Excution
Livre Macros excel.book Page 287 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 287

Excuter pas pas


Lorsquun programme ne produit pas le rsultat escompt sans gnrer derreur , le
premier test consiste excuter la procdure pas pas, afin den xaminer le droulement
et les consquences sur le document, instruction aprs instruction.
Pour excuter un programme VBA pas pas :
1. Placez le curseur dans la procdure excuter, puis rduisez la fentre de Visual Basic
Editor afin de visualiser la fois la fentre de lapplication hte et la fentre Code de l
procdure tester.
2. Cliquez sur le bouton Pas pas dtaill de la barre doutils Dbogage ; ou choisissez la
commande Pas pas dtaill du menu Dbog age, ou appuyez sur la touche F8. La
premire instruction de la procdure est mise en vidence dans la fentre Code, tandis
que le bouton Arrt de la barre doutils Standard apparat estomp, indiquant que la
procdure est interrompue en cours dexcution.
3. Tapez de nouveau sur la touche F8. Linstruction prcdemment mise en vidence dans
la fentre Code se xcute, tandis que linstruction sui vante est son tour mise en
vidence (voir Figure 10.5).

Figure 10.5
Excutez les procdures
pas pas pour visualiser
les consquences de
chacune des instructions.

4. Rptez lopration de faon visualiser lincidence de chacune des instructions sur le


document.
5. Vous pouv ez aussi "lcher" le xcution de la procdure en cliquant sur le bouton
Continuer de la barre doutils Standard. L excution du programme se poursuit alors
normalement partir de linstruction suivant la dernire instruction excute.
Livre Macros excel.book Page 288 Vendredi, 3. avril 2009 7:45 07

288 Excel et VBA

Vous pouvez aussi e xcuter le code pr ocdure par procdure, afin dtudier l
faon dont les procdures sappellent dans le programme. Utilisez pour cela la
Info
commande P as pas principal. La commande P as pas sortant permet
dexcuter tout le code r estant dans la pr ocdure en cour s. L excution est
alors interrompue sur linstruction suivant linstruction dappel de la pr oc-
dure appelante.

La fentre Variables locales


Lorsque vous excutez une procdure pas pas, elle est en mode Arrt. Vous pouvez alors
visualiser la v aleur des v ariables et des constantes aux dif frents stades de le xcution du
programme.

ition Le mode Arrt dsigne ltat dune procdure dont lexcution est interrompue.
Dfin Cela est d une erreur dexcution, lexcution pas pas dune procdure,
la rencontre dune instruction End ou Stop dans la procdure, ou linterruption
manuelle de lexcution dune procdure.

Pour visualiser la valeur dune variable, activez loption Info-bulles automatiques (Outils,
Options). Lorsque le curseur est plac au-dessus dune variable, la valeur de celle-ci appa-
ratra dans une bulle daide (voir Figure 10.6).

Figure 10.6
Les info-bulles auto-
matiques permettent
de connatre la valeur
des variables un
moment prcis de
lexcution dun
programme.

La fentre Variables locales permet dobtenir des informations prcises sur toutes les
variables visibles un moment donn de le xcution du programme nom, type et
valeur des variables. Choisissez pour cela Affichage, Variables locales, ou cliquez sur le
bouton Variables locales de la barre doutils Dbog age. La liste des v ariables visibles est
affiche ( oir Figure 10.7).

Dans le haut de la fentre, le nom de la procdure en cours dexcution est affich ici, la
procdure Testdedeprocdure1, stocke dans le module Module1 du projet VBAProject.
Livre Macros excel.book Page 289 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 289

Figure 10.7
La fentre Variables
locales fournit des
informations compl-
tes sur les variables.

Les v ariables de ni veau module apparaissent sous le nom du module ici sous
Module1 , tandis que les v ariables de niveau procdure sont af fiches telles quelles
ici TypePres et CodePostal.
Si la procdure en cours a t appele, v ous pouvez visualiser les variables des proc-
dures appelantes. Cliquez sur le bouton Pile des appels. La fentre Pile des appels
souvre et af fiche les appels de procdure actifs. Cliquez sur la procdure dont ous
souhaitez visualiser les valeurs, puis sur Affiche . Vous pouvez voir la Figure 10.8 que
la procdure Testdeprocdure2 en cours a t appele par la procdure
Testdeprocdure1, elle-mme appele par la procdure Testdeprocdure. Lorsquune
procdure appele rend la main la procdure appelante, elle disparat de la pile des
appels.

Figure 10.8
La pile des appels affi he
les appels de procdure
actifs.

Vous pouv ez modifier la aleur des v ariables dans la fentre Variables locales, afin d
tester le comportement du programme dans dautres circonstances. Double-cliquez sur la
valeur modifie , puis saisissez la valeur voulue. Si la valeur choisie est incompatible avec
le type de la v ariable, un message derreur est af fich et la aleur de la v ariable reste
inchange.
Livre Macros excel.book Page 290 Vendredi, 3. avril 2009 7:45 07

290 Excel et VBA

Les points darrt


Les points darrt permettent dinterrompre le xcution dun programme sur une instruc-
tion prcise. Cette possibilit est particulirement intressante lorsque v ous souponnez
lorigine dune erreur. Vous pouvez ainsi excuter normalement toutes les instructions ne
posant pas de problme et dfinir un point darrt pour une instruction dont ous ntes pas
sr. Une fois le xcution interrompue, v ous pouvez la poursui vre pas pas, e xaminer la
valeur des variables, etc.
Pour placer un point darrt, placez le curseur sur linstruction v oulue et choisissez la
commande Basculer le point darrt du menu Dbog age, ou cliquez sur le bouton Point
darrt de la barre doutils, ou appuyez sur la touche F9. Vous pouvez aussi cliquer dans la
marge de la fentre Code, en f ace de linstruction v oulue. P ar df aut, linstruction sur
laquelle un point darrt a t dfini apparat sur un arrire-plan de couleur bordeaux et u
indicateur est plac en marge (voir Figure 10.9).

Figure 10.9
Les points darrt
permettent de
dfinir des inte -
ruptions dans
lexcution
du code.

Vous pouvez placer plusieurs points darrt dans le code, afin de vrifier ltat des aria-
bles ou du document diffrents stades de lexcution, sans avoir excuter le programme
pas pas. Pour supprimer un point darrt, procdez de la mme faon que pour placer un
point darrt. Pour supprimer tous les points darrt dun module, slectionnez la
commande Effacer tous les points darrt du menu Dbogage ou tapez le raccourci clavier.
Livre Macros excel.book Page 291 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 291

Lorsque vous quittez Visual Basic Editor, les points darrt ne sont pas enregis-
Cons
eil trs. Pour conserver des points dinterruption du pr ogramme lors de la ferme-
ture de Visual Basic Editor, utilisez linstruction Stop, qui entrane le passage
de lexcution dune procdure en mode Arrt.

Modifier lordre dexcution des instructions


En mode Arrt, vous pouvez tout moment dfinir linstruction su vante excuter dans
une procdure. Il peut sagir dune instruction prcdant linstruction actuelle ou au
contraire dune instruction v enir. Pour modifier linstruction su vante, placez le
curseur dans linstruction e xcuter et slectionnez la commande Dfinir linstructio
suivante du menu Dbog age, ou f aites glisser lindicateur de mar ge v ers linstruction
voulue. Le code intermdiaire est alors ignor et la procdure se poursuit partir de
linstruction dfinie
Vous pouvez ainsi ignorer une srie dinstructions ne vous intressant pas dans le cadre du
dbobage, ou au contraire viter les instructions gnrant une erreur , pour tudier le
comportement du programme dans dautres circonstances. Vous pouv ez alors utiliser la
fentre Excution pour excuter des instructions napparaissant pas dans v otre code, mais
que vous envisagez de substituer aux instructions ignores.

Linstruction suivante ne peut tr e dfinie qu lintrieur de la p ocdure en


Info cours.

La fentre Excution
En mode Arrt, la fentre Excution permet de xcuter tout type dinstruction qui ne se
trouve pas dans le code du programme. Il suf fit dy crire linstruction xcuter et
dappuyer sur Entre. Linstruction sexcute alors comme si elle f aisait partie intgrante
du code. Vous pouv ez ainsi interroger ou modifier la aleur dune v ariable ou dune
proprit, excuter une instruction, etc.

Pour afficher la fentre Excution, choisissez la commande Fentre Excution, ou clique


sur le bouton Fentre Excution de la barre doutils Dbog age, ou encore saisissez le
raccourci clavier Ctrl + G. A la Figure 10.10, la valeur indique par lutilisateur et affecte
la v ariable DateEcheance a gnr une erreur . Nous a vons plac un point darrt sur
linstruction ayant gnr une erreur , afin dy r venir par la suite. Nous a vons utilis la
commande Dfinir linstruction su vante du menu Dbog age pour passer linstruction
Livre Macros excel.book Page 292 Vendredi, 3. avril 2009 7:45 07

292 Excel et VBA

suivante et poursuivre lexcution du code. Enfin, nous vons redfini la aleur de DateE-
cheance "01/04/98" et nous avons excut de nouveau linstruction ayant gnr lerreur
dans la fentre Excution.

Figure 10.10
La fentre Excution
permet dexcuter
une instruction
comme si elle faisait
partie intgrante
du code.

Les espions
Les espions permettent despionner les v aleurs de v ariables ou de toute e xpression
renvoyant une valeur dans un contexte dtermin. Pour crer un espion, procdez ainsi :
1. Choisissez la commande Ajouter un espion du menu Dbog age. La bote de dialogue
Ajouter un espion saffiche lcran ( oir Figure 10.11).

Figure 10.11
La bote de dialogue Ajouter
un espion.

2. Dans la zone de texte Expression, saisissez lexpression dont vous souhaitez espionner la
valeur.
Livre Macros excel.book Page 293 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 293

3. Dans la zone Contexte, dterminez le contexte dans lequel lexpression sera espionne. Par
dfaut les zones Procdure et Module affichent respect vement la procdure et le module en
cours. Vous pouvez choisir despionner la valeur dune expression dans une procdure dun
module, dans toutes les procdures dun module, ou encore dans tous les modules. Il suffit
en gnral, de limiter la porte des espions la porte des expressions espionnes.
4. Dans la zone Type despion, choisissez lune des trois options disponibles :
Expression espionne. En mode Arrt, la valeur en cours de lexpression est affich e
dans la fentre Espions.
Arrt si la v aleur est vraie. La procdure passe en mode Arrt si la v aleur de
lexpression est dfinie True.
Arrt si la v aleur change. L excution du code sinterrompt si la v aleur de
lexpression est dfinie True.
5. Cliquez sur OK pour valider.
Vous pouvez aussi crer des espions en slectionnant la variable ou lexpression voulue et
en la faisant glisser dans la fentre Espions.
Pour afficher la fentre Espions, slectionnez la commande Fentre Espions du menuAffi
chage ; ou cliquez sur le bouton Fentre Espions de la barre doutils Dbog age. Sept
espions ont t placs dans la fentre Espions reprsente la Figure 10.12.

Figure 10.12
Placez des espions
dans votre code...

La fentre Espions contient quatre champs :


Expression. Affiche l xpression espionne. Il peut sagir dun nom de v ariable ou de
toute expression renvoyant une valeur.
Valeur. Affiche la aleur actuelle de lexpression espionne en mode Arrt. Dans le cas
dune expression de ni veau procdure, cette zone af fiche <Hors du contexte> si la
procdure ne f ait pas partie des appels de procdure actifs (elle napparat alors pas
dans la pile des appels).
Vous pouvez modifier la aleur dune expression dans la fentre Espions, afin de tester l
comportement du programme dans dautres circonstances. Double-cliquez sur la v aleur
Livre Macros excel.book Page 294 Vendredi, 3. avril 2009 7:45 07

294 Excel et VBA

modifie , puis saisissez la v aleur v oulue. Si la v aleur choisie est incompatible a vec
lexpression, un message derreur est affich et la aleur de lexpression reste inchange.
Type. Affiche le type de la ariable ou de la v aleur ren voye par le xpression. Si
linstruction en cours est hors du conte xte despionnage, cette zone af fiche Empty ou
Variant/Empty.
Contexte. Affiche le cont xte dfini pour l xpression espionne. A la Figure 10.12,
vous pouvez constater que la premire e xpression espionne est dfinie pour toutes le
procdures du module Module1, tandis que les autres espions sont limits une proc-
dure spcifique du module
Pour supprimer un espion, f aites un clic droit dans la fentre Espions et choisissez la
commande Supprimer un espion du menu contextuel, ou slectionnez-le et appuyez sur Suppr.
Si vous souhaitez interroger la v aleur dune e xpression pour laquelle v ous navez pas
plac despion, v ous pouvez faire appel lEspion e xpress. Slectionnez le xpression
voulue, puis choisissez la commande Expression e xpress du menu Dbog age. Vous
pouvez aussi cliquer sur le bouton Espion e xpress de la barre doutils Dbog age, ou
encore utiliser Maj + F9. La bote de dialogue Espion express vous renseigne alors sur
le contexte de le xpression slectionne et sur sa v aleur (voir Figure 10.13). Pour intgre r
cette expression la fentre Espions, cliquez sur Ajouter.

Figure 10.13
LEspion express :
toujours prt.

La pile des appels


La bote de dialogue Pile des appels recense les appels de procdure actifs en mode Arrt.
Lorsquune procdure est excute, elle est ajoute la liste des appels de procdures actifs.
Chaque fois quune procdure en appelle une autre, cette dernire est ajoute en haut de la
liste. Lorsquune procdure appele sachve, elle est supprime de la pile des appels. La pile
des appels recense donc toutes les procdures en cours dexcution, selon leur ordre dappel.
Il peut tre intressant de visualiser la pile des appels lors du dbog age dun programme
VBA. Vous avez ainsi une ide prcise des procdures en cours de xcution et des appels
successifs. Pour af ficher la pile des appels, choisissez la commande Pile des appels d
Livre Macros excel.book Page 295 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 295

menu Affichage, ou cliquez sur le bouton Pile des appels de la barre doutils Dbo age, ou
encore tapez le raccourci clavier Ctrl + L.
Vous pouvez voir la Figure 10.14 que la procdure en cours de xcution est Procdure3,
qui a t appele par Procdure2, elle-mme appele par AppelsDeProcdures.

Figure 10.14
La bote de dialogue
Pile des appels.

Exemple de dbogage
Nous allons crer ici un programme que nous dboguerons jusquau moment o nous attein-
drons une v ersion fiable. Supposons que ous possdez un classeur Excel contenant de
nombreuses donnes, mais dans lequel certaines lignes sont vides. Vous dcidez donc dcrire
une macro VBA ayant pour fonction de supprimer les lignes vides. Nous supposons ici que
lorsquune cellule de la colonne A ne contient pas de donnes, la ligne est vide et doit tre
supprime. Ainsi, les lignes 7, 10, 11 et 16 du classeur reprsent la Figure 10.15 doivent
tre supprimes.

Figure 10.15
Le programme devra
supprimer les lignes
ne contenant pas de
donnes.
Livre Macros excel.book Page 296 Vendredi, 3. avril 2009 7:45 07

296 Excel et VBA

Une dmarche logique consiste commencer par dfinir la zone d vant tre traite (de la
cellule A1 la dernire cellule de la colonne A ne contenant pas de donnes) par la
macro et af fecter celle-ci une v ariable objet. Nous utiliserons ensuite une structure
For Each...Next pour vrifier la aleur de chacune des cellules de la zone pralablement
dfinie, et supprimer la ligne correspondante chaque fois quune cellule ne contient pas d
donnes. Le programme correspondant se prsente ainsi :

1: Sub SupprLignesVidesBogue()
2: Dfinir la plage devant tre teste
3: On commence par dfinir la dernire cellule
4: de la colonne A contenant des donnes
5: Dim MaPlage As Range
6: Set MaPlage = Range("A1")
7: While Range(MaPlage.End(xlDown).Address(rowabsolute:=False,
columnabsolute:=False)).Value <> ""
8: Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute:
=False, columnabsolute:=False))
9: Wend
10: Set MaPlage = Range("A1:" & MaPlage.Address(rowabsolute:
=False, columnabsolute:=False))
11:
12: Supprimer les lignes ne contenant pas de donnes
13: Dim Cellule As Range
14: For Each Cellule In MaPlage
15: If Cellule.Value = "" Then
16: Rows(Cellule.Row).Delete
17: End If
18: Next Cellule
19: End Sub

Lignes 5 10, la plage de cellules de vant tre testes est dfinie et a fecte la v ariable
MaPlage de type Range. On commence par dclarer la variable MaPlage et par lui affecter
la cellule A1 (lignes 5 et 6). Lignes 7 9, une structure While...Wend sert dfinir l
dernire cellule de la colonne A contenant des donnes. MaPlage se voit affecter la cellule
renvoye par la proprit End (ligne 8), tant que celle-ci nest pas vide (ligne 7). Lorsque la
proprit End ren voie une cellule vide, cest que la cellule af fecte MaPlage est la
dernire cellule contenant des donnes. La boucle While...Wend prend alors fin. Ligne 10,
MaPlage reoit la plage de cellules allant de la cellule A1 la dernire cellule non vide de
la colonne A, prcdemment dfinie
Lignes 14 18, une instruction For Each...Next est utilise pour tester chacune des
cellules de MaPlage. Une instruction conditionnelle sert vrifier si la cellule est vide. S
tel est le cas, la ligne correspondante est supprime (ligne 16).
Livre Macros excel.book Page 297 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 297

Recherche du bogue
Figure 10.16
Excutez la macro
pas pas et observez
attentivement ses
effets sur les macros,
ainsi que les valeurs
que prennent les
variables.

Excutez le programme sur un classeur Excel contenant des lignes vides. Vous constatez
que, sil e xiste deux lignes vides conscuti ves, la deuxime nest pas supprime. Pour
comprendre do vient le problme, procdez comme suit :
1. Placez un point darrt avant la partie du programme qui semble gnrer lerreur. Le
problme ne vient visiblement pas de la premire partie du programme, puisque la
plage de cellules tester est correctement dfinie. Placez donc un point darrt d vant
linstruction de la ligne 14, afin dinterrompre l xcution du programme a vant quil
ne commence supprimer les lignes.
2. Excutez ensuite la macro. Lorsque linstruction de la ligne 14 est atteinte, la macro
sinterrompt et Visual Basic Editor passe au premier plan. L instruction contenant le
point darrt est en surbrillance, et le bouton Arrt de la barre doutils Standard est
estomp, indiquant que la macro est en mode Arrt.
3. Rduisez la fentre de Visual Basic Editor de f aon v oir le classeur Excel au
second plan. Poursui vez ensuite linstruction de la macro pas pas (touche F8).
Utilisez la barre de dfilement dExcel pour a ficher les parties du classeur masque
par la fentre de Visual Basic Editor chaque fois que cela semble ncessaire. F aites
ensuite repasser la fentre de Visual Basic Editor au premier plan laide des
touches Alt + Tab.
Livre Macros excel.book Page 298 Vendredi, 3. avril 2009 7:45 07

298 Excel et VBA

4. Observez attentivement leffet de chaque instruction sur le classeur , ainsi que les v aleurs
que prennent les dif frentes variables et e xpressions du programme. Placez pour cela le
curseur au-dessus des e xpressions Cellule.Value et Cellule.Row de f aon af ficher le
info-bulles automatiques. Soyez particulirement attentif lorsquune cellule vide est teste.
5. Vous devriez vous rendre compte que, lorsque la ligne 10 est supprime, la ligne 11
prend sa place et que la cellule suivante teste est la cellule A11.
La boucle For Each...Next traite les cellules de la plage MaPlage une une. La cellule A1
est teste, puis la cellule A2, etc., jusqu atteindre la dernire cellule de la plage de cellules
MaPlage. Lorsquune ligne est supprime, la ligne sui vante prend sa place ; elle est donc
ignore par la procdure. Dans le cas du classeur reprsent la Figure10.15, les cellules A10
et A11 sont vides. Les lignes correspondantes doi vent donc tre supprimes. Lorsque la
procdure atteint la cellule A10, celle-ci est supprime. Cela a pour consquence de dcaler
toutes les cellules vers le haut. La cellule A11 passe alors en A10, la cellule A12 en A11, etc.
La boucle For Each...Next traite alors la cellule suivante, soit la cellule A11. Le contenu de
la cellule prcdemment en A11 ne sera donc pas trait, puisque celle-ci est passe en A10.

Rsolution du bogue
Plusieurs solutions permettent de rgler ce problme.
1. Vous pouvez intgrer une instruction contrlant de nouv eau le contenu de la cellule
teste lorsquune ligne est supprime. Remplacez pour cela les instructions condition-
nelles des lignes 15 17 par les instructions suivantes :

If Cellule.Value = "" Then


Dim LigneSuppr As Long
LigneSuppr = Cellule.Row
Rows(Cellule.Row).Delete
If Range("A" & LigneSuppr) = "" Then
Rows(Range("A" & LigneSuppr).Row).Delete
End If
End If

Avant de supprimer une ligne, le numro de la ligne est stock dans la v ariable Ligne-
Suppr. La ligne est ensuite supprime. Une instruction conditionnelle imbrique
supprime nouveau cette ligne si la cellule de la colonne A correspondante est encore
vide. Le problme est ainsi rgl si deux lignes conscuti ves sont vides. Mais le
bogue persiste ds quil existe plus de deux lignes conscutives vides.
2. Vous pouvez galement utiliser une structure For...Next la place de la structure For
Each...Next. Lutilisation dune procdure For...Next permettra de dfinir un drou
lement de la boucle commenant par la dernire cellule plutt que par la premire. Le
programme se prsente alors ainsi (les modifications apparaissent en gras)
Livre Macros excel.book Page 299 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 299

Sub SupprLignesVidesVersion2()
Dim MaPlage As Range
Set MaPlage = Range("A1")
While Range(MaPlage.End(xlDown).Address(rowabsolute:
=False, columnabsolute:=False)).Value <> ""
Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute:
=False, columnabsolute:=False))
Wend

Dim DerLigne As Long


DerLigne = MaPlage.Row
Supprimer les lignes ne contenant pas de donnes
Dim Compteur As Long
For Compteur = DerLigne To 1 Step -1
If Range("A" & Compteur).Value = "" Then
Range("A" & Compteur).Delete
End If
Next Compteur
End Sub

3. On pourra galement stocker la liste des cellules vides dans une variable de matrice, et
ne procder la suppression des lignes vides quune fois la liste des lignes supprimer
dfinie. On d vra l aussi supprimer les cellules en partant de la dernire jusqu
atteindre la premire.
Option Base 1

1: Sub SupprLignesVidesVersion3()
2: Cration dune variable de matrice redimensionnable
3: Dim MonTableau()
4:
5: Dfinir la plage devant tre teste
6: Dim MaPlage As Range
7: Set MaPlage = Range("A1")
8: While Range(MaPlage.End(xlDown).Address(rowabsolute:
=False, columnabsolute:=False)).Value <> ""
9: Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute:
=False, columnabsolute:=False))
10: Wend
11: Set MaPlage = Range("A1:" & MaPlage.Address(rowabsolute:
=False, columnabsolute:=False))
12:
13: On stocke dans la variable de matrice les valeurs
14: de toutes les lignes devant tre supprimes
15: Dim Cellule As Range
16: For Each Cellule In MaPlage
17: If Cellule.Value = "" Then
18: Une erreur sera gnre lappel de la fonction
19: UBound si le tableau na encore reu aucune valeur
20: On Error Resume Next
21: ReDim Preserve MonTableau(UBound(MonTableau)+1)
22: Linstruction conditionnelle suivante gre cette erreur
23: If Err.Number = 9 Then
Livre Macros excel.book Page 300 Vendredi, 3. avril 2009 7:45 07

300 Excel et VBA

24: ReDim MonTableau(1)


25: Err.Clear
26: End If
27: MonTableau(UBound(MonTableau)) = Cellule.Row
28: End If
29: Next Cellule
30:
31: Suppression des lignes vides
32: Dim Compteur As Single
33: For Compteur = UBound(MonTableau) To LBound(MonTableau) Step -1
34: Rows(MonTableau(Compteur)).Delete
35: Next Compteur
36: End Sub

Linstruction Option Base 1 a t place dans la zone de dclarations du module, de faon


que la premire valeur dindex des tableaux soit 1 et non 0.
Ligne 3, une variable tableau redimensionnable est dclare. Elle servira stock er les
numros des lignes supprimer. Lignes 6 11, la zone traiter est dfinie et a fecte
la MaPlage, de la mme faon que dans les versions prcdentes du programme.
Lignes 15 29, les numros des lignes supprimer sont dfinis et stocks dans Mon-
Tableau. La variable Cellule de type Range est tout dabord dclare. Une structure For
Each...Next sert ensuite tester lensemble des cellules de MaPlage (lignes 16 29).
A chaque passage de la boucle, une structure conditionnelle (lignes 17 28) v alue la
valeur de la cellule teste et stock e le numro de la ligne la v ariable de matrice
MonTableau si la cellule est vide. La v ariable est tout dabord redimensionne
(ligne 21). On se sert pour cela de la fonction UBound qui renvoie la taille du tableau,
laquelle on ajoute 1. Ligne 27, le dernier espace de stockage de MonTableau Mon-
Tableau(UBound(MonTableau)) reoit le numro de la ligne de la cellule teste.

Notez lutilisation du mot cl Preserve lor s du r edimensionnement du tableau


pel (ligne 21). Celui-ci est indispensable pour que le tableau ne soit pas rinitialis.
Rap

Lignes 20 26, un gestionnaire derreur a t mis en place. En ef fet, la premire fois que la
fonction UBound est utilise (ligne 21), une erreur est gnre. Linstruction Resume Next de
la ligne 20 force le passage linstruction suivante en cas derreur. Ligne 23, on interroge la
valeur de la proprit Number lobjet Err pour vrifier si une erreur a t gnre. Si te
est le cas (si le tableau na pas encore t dimensionn), MonTableau est dimensionn a vec
un espace de stockage et lobjet Err est rinitialis laide de la mthode Clear.

Pour connatre le numro dune erreur (la valeur de la proprit Number de lobjet
Cons
eil Err), gnrez volontairement cette err eur et r elevez le numr o derreur indique
dans la bote de dialogue Visual Basic affi he au moment o lerreur survient.
Livre Macros excel.book Page 301 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 301

Lignes 32 35, les lignes vides sont supprimes. On utilise pour cela une boucleFor...Next
dont le compteur commence la v aleur dinde x la plus importante de MonTableau pour
atteindre la valeur la plus basse, et est dcrment de 1 chaque passage. A chaque passage
de la boucle, linstruction de la ligne 34 supprime la ligne dont le numro correspond la
valeur stocke dans lespace de stockage dindex Compteur de MonTableau.

Lintrt de cette ver sion du pr ogramme est de permettr e de stoc ker les lignes
Info supprimes dans une variable . Placez les instructions suivantes en fin d
programme pour affi her le nombre de lignes supprimes ainsi que la liste de ces
dernires :
Dim Message As String
Message = UBound(MonTableau) & " lignes ont t supprimes:"
For Compteur = 1 to UBound(MonTableau)
Message = Message & vbCr & MonTableau(Compteur)
Next Compteur
MsgBox Message, vbOKOnly+vbInformation

Figure 10.17
Cette version du programme
permet de connatre les
lignes supprimes.

Une telle mthode se rvlera particulirement intressante si v ous crez une procdure
destine supprimer des lignes contenant des informations, mais que v ous souhaitiez
rcuprer ces informations dans un autre classeur Excel. On utilisera alors une v ariable
de matrice dynamique multidimensionnelle. Celle-ci aura deux dimensions : lune
correspondant aux lignes du classeur, lautre correspondant aux colonnes. La taille de la
premire dimension (le nombre de lignes supprimer ou le nombre de colonnes du clas-
seur contenant des donnes conserv er) devra tre dfinie vant de stocker les donnes
dans la variable seule la dernire dimension pouv ant tre redfinie en conser ant les
valeurs de la variable.

Gestion des erreurs et des exceptions


Un programme VBA peut se xcuter correctement dans la plupart des cas et gnrer des
erreurs de xcution dans des conte xtes spcifiques. Une erreur peut, par xemple, tre
gnre si lutilisateur nentre pas le type dinformation attendue dans une bote de dialo-
gue. Une erreur sera g alement gnre si le format dune cellule ne correspond pas au
Livre Macros excel.book Page 302 Vendredi, 3. avril 2009 7:45 07

302 Excel et VBA

type de donnes quun programme tente de xploiter, ou encore si un programme tente de


modifier un classeur Excel en cours dutilisation. Nombre derreurs de ce type, lies u
code crit pour un conte xte particulier , sont susceptibles daf fecter une macro. Il est
important de prvoir ce type derreur et de mettre en place un gestionnaire derreur, afi
que la procdure contourne lerreur et sexcute normalement.

Un gestionnaire derreur est un ensemble dinstructions qui est cens permettre


ition la poursuite de le xcution dune pr ocdure. En gnr al, il est appel par un
Dfin
dtecteur derreur, dont la fonction est de reprer lerreur lorsquelle survient.

Pour dtecter une v entuelle erreur, placez une instruction On Error devant linstruction
susceptible den gnrer une :
On Error Resume Next ignore linstruction ayant gnr une erreur et passe
linstruction suivante.
On Error GoTo tiquette permet dappeler un gestionnaire derreur repr par
ltiquette.
Une technique courante consiste placer le gestionnaire derreur la fin de la procdure e
glisser une instruction Exit avant ltiquette le dlimitant :

Sub MaProcdure()
...
On Error GoTo GestionnaireErreur
Instruction susceptibles de gnrer une erreur
...
Exit Sub
GestionnaireErreur:
Instructions de gestion des erreurs
Resume
End Sub

Ainsi, ds quune erreur est dtecte, le gestionnaire derreur sera appel. L instruction
Resume ne peut tre place que dans un gestionnaire derreur. Elle rend la main linstruc-
tion ayant gnr une erreur, qui sexcute de nouveau. Si aucune erreur nest gnre, le
programme se droule normalement jusqu linstruction Exit Sub. La procdure
sachve alors, sans que le gestionnaire derreur ait t excut.
Lorsquune erreur est gnre, la proprit Number de lobjet Err se v oit af fecter une
valeur identifiant le type derreur sur enu. Aprs gestion de lerreur , il est important de
redfinir cette proprit 0 (pas derreur), afin que les entuelles autres erreurs puissent
tre dtectes. Utilisez alors linstruction daffectation Err.Number = 0.
Livre Macros excel.book Page 303 Vendredi, 3. avril 2009 7:45 07

Chapitre 10 Dbogage et gestion des erreurs 303

Exemple de gestion derreur


La procdure sui vante tudie au Chapitre 7 gnrera une erreur si lutilisateur
nentre pas une date au format valide dans la bote de dialogue affiche par la fonction Input-
Box (voir Figure 10.15).

Sub VerifierEcheances()
Vrifier quil existe une plage de cellules est slectionne
Dim ZoneATester As String
ZoneATester = ActiveWindow.RangeSelection.Address
If ZoneATester = Null Then
MsgBox "Slectionnez la plage de cellules tester.", _
vbOKOnly & vbInformation
Exit Sub
End If

Demander lutilisateur la date dchance


Dim DateEcheance As Variant
DateEcheance = InputBox("Indiquez la date dchance.", _
"Echance des oprations en cours", Date+30)
If DateEcheance = "" Then
Exit Sub
End if
DateEcheance = CDate(DateEcheance)

Tester toutes les cellules de la slection


Dim CellTest As Range
For Each CellTest In Range(ZoneATester)
If IsDate(CellTest) = True Then
If CellTest.Value > DateEcheance Then
CellTest.Interior.ColorIndex = 6
End If
End If
Next
End Sub

Figure 10.18
Cette erreur peut tre gre
par le programme.

La procdure suivante gre cette erreur en faisant appel un gestionnaire derreur qui affi
che une nouv elle bote de dialogue dans laquelle lutilisateur est in vit entrer une date
dans un format v alide. L instruction ayant gnr lerreur est alors rpte et le
programme se droule normalement, jusqu linstruction Exit Sub qui entrane la sortie
Livre Macros excel.book Page 304 Vendredi, 3. avril 2009 7:45 07

304 Excel et VBA

de la procdure. Si lutilisateur clique sur le bouton Annuler, la v ariable DateEcheance


renverra Empty et linstruction Exit Sub entranera la sortie du programme.

Sub VerifierEcheances()
Dim ZoneATester As String
ZoneATester = ActiveWindow.RangeSelection.Address
If ZoneATester = Null Then
MsgBox "Slectionnez la plage de cellules tester.", _
vbOKOnly & vbInformation
Exit Sub
End If

Dim DateEcheance As Variant


DateEcheance = InputBox("Indiquez la date dchance.", _
"Echance des oprations en cours", Date+30)
If DateEcheance = "" Then
Exit Sub
End if
On Error GoTo GestionnaireErreur
DateEcheance = CDate(DateEcheance)

Dim CellTest As Range


For Each CellTest In Range(ZoneATester)
If IsDate(CellTest) = True Then
If CellTest.Value > DateEcheance Then
CellTest.Interior.ColorIndex = 6
End If
End If
Next

Exit Sub

GestionnaireErreur:
Err.Number = 0
DateEcheance = InputBox("Format de date non valide." & _
Chr(10) & "Entrez une date au format jj/mm/aa", "Erreur gre", _
"jj/mm/aa")
If DateEcheance = Empty Then Exit Sub
Resume
End Sub

Figure 10.19
Lerreur est dtecte et
lutilisateur est invit
entrer une information valide
ou annuler lopration.
Livre Macros excel.book Page 305 Vendredi, 3. avril 2009 7:45 07

11
Intgrer des
applications VBA
dans linterface dExcel
Au sommaire de ce chapitre
Affecter une macro un raccourci clavier
Affecter une macro un bouton
Affecter une macro une commande de menu
Supprimer une commande de menu
Modif er limage et/ou le nom dune commande
Affecter une macro un objet
Livre Macros excel.book Page 306 Vendredi, 3. avril 2009 7:45 07

306 Excel et VBA

Vous pouvez trs simplement amliorer laccessibilit dune macro en lui af fectant un
raccourci clavier, une ligne de commande dans un menu ou encore un bouton de barre
doutils.
Si vous nutilisez que rarement une macro, contentez-v ous de le xcuter par la bote de
dialogue Macros. Cependant, la nature des macros ou la frquence de leur utilisation
peuvent justifier un accs plus rapide. Une macrocommande r groupant quelques
commandes ne prsente quun intrt limit si elle ne peut tre e xcute rapidement, par
un raccourci clavier ou une icne (ou les deux). Il sera par contre prfrable daffecter une
ligne de commande un programme aux consquences plus lar ges et dune utilisation
moins frquente.

Affecter une macro un raccourci clavier


Si vous navez pas af fect de raccourci cla vier une macro au moment de sa cration,
vous pouvez trs simplement le faire aprs coup :
1. Choisissez la commande Outils, Macro.

Dans Excel 2007, cliquez sur le bouton Macros de longlet Dveloppeur.


7
200

2. Dans la bote de dialogue Macro, slectionnez la macro v oulue puis cliquez sur le
bouton Options.
La bote de dialogue Options de macro saffiche lcran ( oir Figure 11.1).
3. Indiquez le raccourci de v otre choix en saisissant une lettre dans la zone conue cet
effet. Vous pouvez aussi ajouter une description la macro, si v ous avez omis de le
faire lors de la cration.
4. Cliquez sur OK pour valider les modifications

Figure 11.1
Vous pouvez aisment
affecter un raccourci clavier
une macro.
Livre Macros excel.book Page 307 Vendredi, 3. avril 2009 7:45 07

Chapitre 11 Intgrer des applications VBA dans linterface dExcel 307

Personnaliser la barre doutils Accs rapide


dExcel 2007
Dans Excel 2007, les onglets du ruban ne peuv ent tre personnaliss. Seule la barre
doutils Accs rapide peut tre modifie. Procdez comme suit
1. Cliquez sur le bouton Personnaliser la barre doutils Accs rapide et choisissez Autres
commandes (voir Figure 11.2).
2. Dans la zone de liste des catgories, choisissez Macros. Lensemble des macros acces-
sibles saffiche
3. Slectionnez la macro de votre choix, puis cliquez sur Ajouter. La macro apparat dans
la liste de droite, qui rpertorie les commandes de la barre doutils Accs rapide.
4. Cliquez sur le bouton Modifier afin de choisir un bouton et de modifier le nom de
commande (celui-ci apparatra lorsque lutilisateur placera le curseur sur le bouton).
5. Enfin, utilisez les flches situes sur la droite de la fentre pour dfinir la position
votre commande sur la barre doutils, puis validez.

Figure 11.2
Dans Excel 2007, vous
pouvez personnaliser la
barre doutils Accs rapide.

Pour supprimer un bouton de la barre doutils Accs rapide, cliquez du bouton


Info droit sur celle-ci et choisissez la commande Supprimer dans le menu contextuel
qui saffi he.
Livre Macros excel.book Page 308 Vendredi, 3. avril 2009 7:45 07

308 Excel et VBA

Figure 11.3
Choisissez un bouton et un nom parlant pour votre commande.

Figure 11.4
La macro est maintenant
accessible via la barre
doutils Accs rapide.
Livre Macros excel.book Page 309 Vendredi, 3. avril 2009 7:45 07

Chapitre 11 Intgrer des applications VBA dans linterface dExcel 309

Affecter une macro un bouton


Pour affecter un bouton de barre doutils une macro avec une version dExcel antrieure
2007, procdez ainsi :
1. Choisissez la commande Personnaliser du menu Outils et acti vez longlet Commandes
de la bote de dialogue Personnaliser.
2. Dans la liste Catgories, choisissez Macros. La liste Commandes de la bote de dialo-
gue Personnaliser af fiche deux options : Elment de menu personnalis et Bouton
personnalis.
3. Slectionnez Bouton personnalis et maintenez le bouton de la souris enfonc. Un
rectangle apparat sur le pointeur , tandis quun indique que lemplacement du curseu r
ne permet pas de crer une commande (voir Figure 11.5).

Figure 11.5
Faites glisser la macro
laquelle vous souhaitez
affecter un bouton de barre
doutils.

4. Tout en maintenant le bouton de la souris enfonc, placez le pointeur sur la barre


doutils voulue. Une barre verticale indique o sera place la commande, tandis que le
se transforme en un + (voir Figure 11.6).

Figure 11.6
Une barre verticale indique
o sera place la commande.
Livre Macros excel.book Page 310 Vendredi, 3. avril 2009 7:45 07

310 Excel et VBA

5. Relchez le bouton de la souris. Une icne reprsentant un Smile y saffiche dans l


barre doutils.
6. Cliquez droit sur le nouv eau bouton et choisissez la commande Affecter une macro.
Dans la bote de dialogue Affecter une macro qui saf fiche, slectionnez la macro oulue
et cliquez sur le bouton OK (voir Figure 11.7).
7. Reportez-vous la section Modifier limage et/ou le nom dune commande pour ter-
miner licne af fecter au raccourci ainsi cr, puis cliquez sur le bouton Fermer de la
bote de dialogue Personnaliser.

Figure 11.7
Slectionnez la macro
affecter au nouveau bouton.

Lorsque vous ajoutez un bouton une barr e doutils Excel, ouvr ez le menu
Cons
eil contextuel du bouton personnalis et affectez-lui un nom reprsentatif. Lorsque
le pointeur est plac au-dessus du bouton, son nom est af fi h dans une info-
bulle.

Affecter une macro une commande de menu


La procdure permettant daffecter une commande de menu une macro avec une version
dExcel antrieure 2007 sapparente lajout dun bouton sur une barre doutils. Proc-
dez ainsi :
1. Rptez les tapes 1 3 de la section prcdente, en choisissant Elment de menu
personnalis ltape 3.
2. Tout en maintenant le bouton de la souris enfonc, placez le pointeur sur le nom du
menu dans lequel vous souhaitez placer la commande. Le menu se droule.
3. Placez le curseur lendroit o v ous souhaitez dposer la commande. Une barre hori-
zontale vous indique prcisment lemplacement quelle prendra (voir Figure 11.8).
Livre Macros excel.book Page 311 Vendredi, 3. avril 2009 7:45 07

Chapitre 11 Intgrer des applications VBA dans linterface dExcel 311

Figure 11.8
Une barre horizontale
symbolise lemplacement
que prendra la commande.

4. Relchez le bouton de la souris. Le libell Elment de menu personnalis apparat dans


le menu (voir Figure 11.9).
5. Reportez-vous la section Modifier limage et/ou le nom dune commande pour modi
fier le nom de la commande et dterminer entuellement licne af fecter au
raccourci ainsi cr. Cliquez ensuite sur le bouton Fermer de la bote de dialogue
Personnaliser.

Figure 11.9
Il ne vous reste qu affecter
un nom reprsentatif la
nouvelle commande.

Il peut tre judicieux de r egrouper vos macros dans des menus qui leur soient
ce propres. P our crer un nouveau menu, slectionnez Nouveau menu dans
Astu
la zone Catgories de la bote de dialo gue Personnaliser, puis faites glisser la
commande Nouveau menu lemplacement voulu sur la barre de menus.
Livre Macros excel.book Page 312 Vendredi, 3. avril 2009 7:45 07

312 Excel et VBA

Supprimer une commande de menu


Pour supprimer un bouton de barre doutils ou une commande de menu, procdez ainsi :
1. Activez la bote de dialogue Personnaliser comme indiqu dans les sections prc-
dentes.
2. Faites un clic droit sur llment supprimer ou cliquez sur le bouton Modifier l
slection de la bote de dialogue Personnaliser. Dans le menu contextuel qui saffiche
slectionnez la commande Supprimer (v oir Figure 11.10). Vous pouv ez aussi f aire
glisser llment supprimer sur la bote de dialogue Personnaliser.

Figure 11.10
Ce menu contextuel permet
de personnaliser les
commandes de Visual Basic
Editor.

Pour rtablir un menu, slectionnez ce menu, puis c hoisissez la commande


Info Rtablir du menu conte xtuel qui lui est attac h. Vous lui r estituerez ainsi son
image, son texte, ses commandes et ses sous-menus dorigine.

Pour dplacer des icnes ou des commandes de menu sans activer la bote de
ce dialogue Personnaliser, maintenez la touche Alt enfonce, puis faites glisser les
Astu
lments voulus lemplacement de votre choix.
Livre Macros excel.book Page 313 Vendredi, 3. avril 2009 7:45 07

Chapitre 11 Intgrer des applications VBA dans linterface dExcel 313

Modifier limage et/ou le nom dune commande


Vous pouvez dterminer le type daf fichage souhait pour une commande de menu ou u
bouton de barre doutils cr selon les procdures dcrites prcdemment. Procdez ainsi :

1. Activez la bote de dialogue Personnaliser dExcel.

2. Slectionnez la commande dont vous souhaitez modifier la fichage

3. Faites un clic droit sur llment v oulu ou cliquez sur le bouton Modifier la slectio
de la bote de dialogue Personnaliser. Dans le menu contextuel qui saffiche, slectionn z
les options correspondant laffichage souhait ( oir Figure 11.10) :

Par dfaut. Sil sagit dune commande sur une barre doutils, seule licne est
affiche ; sil sagit dune commande de menu, licne et le t xte sont affichs
Texte seul pour ce bouton. Affiche uniquement le nom de la commande
Masquer les images sur les menus. Masque licne de la commande de menu
slectionne. Si llment slectionn est un bouton de barre doutils, cette option
est sans effet.
Image et texte. Affiche la fois licne et le nom du bouton de llment slec
tionn.
4. Pour modifie , le cas chant, laffichage du t xte attach la commande, slectionnez
le te xte de la zone Nom du menu conte xtuel et saisissez-y le te xte v oulu (v oir
Figure 11.11). Tapez ventuellement un "&" devant la lettre devant servir de raccourci
clavier pour la commande slectionne.

5. Pour modifier limage a fecte un bouton, utilisez lune des options suivantes :

Modifier limage du bouton. Dans la fentre qui souvre, slectionnez limage de


votre choix (voir Figure 11.12).
Rtablir limage du bouton. Cette option rtablit limage attribue par dfaut la
commande slectionne.
Copier-Coller limage du bouton. Utilisez la commande Copier limage du
bouton pour envoyer dans le Presse-papiers une icne que v ous souhaitez rcup-
rer. Faites un clic droit sur la commande de v otre choix, puis slectionnez la
commande Coller limage du bouton pour lui attribuer licne du Presse-papiers.
Editeur de boutons Ouvre lEditeur de boutons reprsent la Figure 11.13.
Testez les dif frentes possibilits puis, quand v ous tes satisf ait, cliquez sur le
bouton OK.
Livre Macros excel.book Page 314 Vendredi, 3. avril 2009 7:45 07

314 Excel et VBA

Figure 11.11
Saisissez dans cette zone le
nom que vous souhaitez
affecter la commande. Le texte de la
zone Nom...

... est affect la commande


slectionne

Figure 11.12
Si vous tes un pitre dessi-
nateur, slectionnez lune
des images mises votre
disposition.

Figure 11.13
Vous pouvez dessiner vos
propres boutons dans
lEditeur de boutons.
Livre Macros excel.book Page 315 Vendredi, 3. avril 2009 7:45 07

Chapitre 11 Intgrer des applications VBA dans linterface dExcel 315

Vous pouvez aussi modifier lun des boutons qui vous sont p oposs. Slection-
nez-le dans la zone Bouton de la bote de dialo gue Bouton per sonnalis, puis
Info
cliquez sur le bouton Modifie . Apportez ensuite les modifications souhaite
dans lEditeur de boutons, puis cliquez sur OK.

Pour rtablir le te xte et/ou licne par dfaut pour la commande slection-
Info ne, c hoisissez la commande Rinitialiser du menu conte xtuel qui lui est
attach.

Affecter une macro un objet


Une macro peut galement tre affecte un objet tel quun graphique Excel ou un dessin
de la couche Dessin des applications Office. Pour cela, aites un clic droit sur lobjet voulu
et choisissez la commande Affecter une macro du menu contextuel.
Lorsquune macro est af fecte un objet, le curseur se transforme en main lorsquil est
plac au-dessus de lobjet en question. Un clic sur celui-ci dclenche la macro.

Pour manipuler les commandes de menu et les barr es doutils Excel par
Info programmation par e xemple, ajouter ou supprimer des commandes selon le
contexte , utilisez la pr oprit CommandBars. P our plus de prcisions,
consultez laide en ligne.
Livre Macros excel.book Page 316 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 317 Vendredi, 3. avril 2009 7:45 07

Partie III
Dvelopper
des interfaces
utilisateur
CHAPITRE 12. Crer des interfaces utilisateur
CHAPITRE 13. Exploiter les proprits des contrles ActiveX
CHAPITRE 14. Programmer les interfaces utilisateur
Livre Macros excel.book Page 318 Vendredi, 3. avril 2009 7:45 07
Livre Macros excel.book Page 319 Vendredi, 3. avril 2009 7:45 07

12
Crer des interfaces
utilisateur
Au sommaire de ce chapitre
Les phases de dveloppement de feuilles
Crer une feuille
Les contrles de la bote outils
Placer des contrles sur une feuille
Mise en forme des contrles
Personnaliser la bote outils
Afficher/masquer une feuill
Livre Macros excel.book Page 320 Vendredi, 3. avril 2009 7:45 07

320 Excel et VBA

Les feuilles constituent un lment essentiel de la programmation Visual Basic. Les feuilles
sont des zones sur lesquelles v ous placez des contrles ActiveX tels que des cases cocher ,
des boutons doption, des zones de te xte, des boutons de commande, etc. Ils forment une
interface graphique permettant une interaction simple et intuiti ve entre lutilisateur final et l
programme.
Les vnements utilisateur , tels quun clic de souris ou une modification de la aleur dun
contrle, qui touchent les contrles sont automatiquement reprs par le programme. Il v ous
suffit dassocier du code un vnement donn pour que celui-ci s xcute lorsque
lvnement est repr. On parle alors de procdure vnementielle ou procdure dvnement.
Les contrles prennent une v aleur, dtermine par leur tat (case coche ou non coche, te xte
dune zone de te xte, etc.). Lexploitation des feuilles consiste gnralement passer les infor -
mations entres par lutilisateur sur la feuille (les v aleurs des dif frents contrles) une
procdure de code lorsque lutilisateur valide les informations fournies en cliquant sur un
bouton libell OK, par exemple. Ces donnes sont ensuite exploites par le programme.

Figure 12.1
Les feuilles constituent
linterface graphique
de vos projets VBA.

Les phases de dveloppement de feuilles


Les feuilles permettent de ramener des tches comple xes la simple information des
champs dune bote de dialogue pour lutilisateur final
La cration de feuilles VBA se ralise en trois phases :
Dtermination des besoins. Avant de vous lancer dans la cration dune feuille, rfl
chissez aux fonctions que devra jouer linterface dveloppe. Quels doivent en tre les
diffrents contrles ? Comment seront-ils organiss sur la feuille ? Quel type dinteraction
Livre Macros excel.book Page 321 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 321

entre les contrles ? A quels vnements utilisateur de vront-ils rpondre ? Nous v ous
conseillons de raliser sur papier un dessin approximatif de la f euille et de noter les
informations essentielles sur les dif frents contrles la composant avant dentamer la
deuxime phase.
Cration visuelle de la feuille. Durant cette phase, vous allez dessiner votre feuille dans
Visual Basic Editor . Vous crerez la feuille et y placerez les contrles v oulus (cases
cocher, boutons doption). Vous paramtrerez les proprits de la feuille et des contrles
qui la composent, afin den dterminer lapparence (couleu , taille, texte par dfaut) et le
comportement (accessibilit, nombre de caractres autoriss, etc.).
Ecriture du code attach la feuille. Sans code affect aux diffrents lments qui la
composent, une feuille nest quune jolie bote de dialogue sans fonctionnalit. Durant
cette phase, vous dterminerez le comportement de la feuille face aux diffrents vne-
ments utilisateur pouv ant laf fecter et crirez le code permettant de xploiter les
donnes fournies par lutilisateur.
Ce chapitre prsente la cration de feuilles. Vous y dcouvrirez les dif frents contrles
votre disposition, apprendrez les placer sur une feuille et utiliser les outils deVBA pour
crer des interfaces lapparence professionnelle. Les outils de dv eloppement visuel de
feuilles de Visual Basic permettent de crer simplement et rapidement des interf aces
compltes, semblables aux botes de dialogue des applications Office

Crer une feuille


Le dveloppement de feuilles se fait dans la fentre UserForm de Visual Basic Editor. Pour
accder la fentre UserForm, vous devez crer une nouvelle feuille ou ouvrir une feuille
existante.
Pour crer une nouvelle feuille :
1. Ouvrez lExplorateur de projet et slectionnez le projet dans lequel v ous souhaitez
crer une feuille.
2. Cliquez sur la flche du bouton Ajouter de la barre doutils Standard de Visual Basic
Editor et slectionnez UserForm ou slectionnez la commande UserForm du menu Inser-
tion ou f aites un clic droit sur nimporte quel lment du projet dans lExplorateur de
projet et, dans le menu contextuel qui saffiche, slectionnez Insertion, User orm.
3. Une fentre UserForm souvre (voir Figure 12.2). La feuille et la bote outils y sont
affiches. ar dfaut, la feuille est intitule UserForm1, UserForm2 sil existe dj une
feuille UserForm1, etc.
La nouvelle feuille apparat dans le dossier Feuilles de lExplorateur de projet.
Livre Macros excel.book Page 322 Vendredi, 3. avril 2009 7:45 07

322 Excel et VBA

Figure 12.2
Votre feuille encore vierge
de tout contrle.

4. Ouvrez la fentre Proprits de la feuille (F4) et attribuez-lui une proprit Name et une
proprit Caption.
La proprit Name est le nom qui sera utilis dans le code pour f aire rfrence cette
feuille. La proprit Caption correspond au libell de la feuille qui apparat dans sa
barre de titre. La Figure 12.3 prsente une feuille dont la proprit Caption a t dfini
"Exemple de feuille UserForm".

Figure 12.3 La proprit Caption correspond


Dfinissez les p oprits au titre de la feuille
Name et Caption de la
feuille.

Utilisez les poignes de


redimensionnement
pour modifier la taille de
votre feuille

5. Vous pouvez tout moment utiliser les poignes de redimensionnement pour modifier a
taille de la feuille.
6. Cliquez sur le bouton Enre gistrer de la barre doutils Standard pour enre gistrer votre
projet.
Pour ouvrir la fentre UserF orm dune feuille e xistante, ouvrez lExplorateur de projet
(Ctrl + R) et double-cliquez sur celle-ci.
Livre Macros excel.book Page 323 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 323

Les contrles de la bote outils


La bote outils contient les contrles que v ous pouvez placer sur votre feuille. Au mme
titre que la feuille elle-mme, les contrles sont des objets. Vous navez pas vous soucier
de la f aon dont les contrles fonctionnent. Il v ous suf fit den connatre les mthodes
proprits et vnements membres pour pouvoir les exploiter.
Pour afficher ou masquer la bote outils, cliquez sur le bouton Bote outils de l
barre doutils Standard ou slectionnez la commande Bote outils du menu Affichage

Figure 12.4
La bote outils contient des
contrles Windows usuels.
Outil Slection Contrle Label
Contrle TextBox Contrle ComboBox
Contrle ListBox Contrle CheckBox

Contrle OptionButton Contrle ToggleButton


Contrle Frame Contrle CommandButton

Contrle TabStrip Contrle MultiPage


Contrle ScrollBar Contrle SpinButton

Contrle Picture

Outil Slection
Loutil Slection permet de slectionner un ou plusieurs contrles sur une feuille. Il est
slectionn par dfaut dans la bote outils. Lorsque vous slectionnez un contrle dans la
bote outils, loutil Slection redevient actif ds que le contrle est dpos sur la feuille.
Si vous slectionnez un contrle dans la bote outils, puis dcidez de ne plus le placer sur
la feuille, cliquez sur loutil Slection.

Contrle Label
Le contrle Label, ou intitul, permet de placer un intitul sur la feuille. Il sert gnra-
lement placer un intitul ct dun contrle ne possdant pas cet attrib ut ( ct
dune zone de te xte par e xemple), afin de permettre lutilisateur den identifier
fonction.
Livre Macros excel.book Page 324 Vendredi, 3. avril 2009 7:45 07

324 Excel et VBA

Figure 12.5
Le contrle Label permet
dattacher un libell un
contrle nen possdant pas. Contrle Label

Contrle TextBox
Le contrle TextBox permet de placer une zone de texte sur la feuille, dans laquelle lutili-
sateur pourra saisir des informations. Les proprits dun contrle TextBox permettent de
contrler le nombre de caractres maximum que pourra entrer lutilisateur , laffichage su
plusieurs lignes du te xte ou encore le type dalignement du te xte dans la zone de te xte.
Elles sont tudies dans le chapitre suivant.

Figure 12.6
Le contrle TextBox
est lun des contrles
les plus utiliss.
Livre Macros excel.book Page 325 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 325

Contrle ComboBox
Le contrle ComboBox, ou zone de liste modifiable, est une zone de t xte permettant
lutilisateur de saisir une v aleur manuellement ou de la slectionner dans la liste qui se
droule lorsquil clique sur le bouton prvu cet effet. Un contrle ComboBox peut permet-
tre lutilisateur de saisir une valeur ne figurant pas dans la liste, ou nautoriser quune de
valeurs de la liste.

Figure 12.7
Le contrle ComboBox permet
lutilisateur de slectionner une
valeur dans la liste ou de saisir
une valeur de son choix.

Contrle Frame
Le contrle Frame ou cadre permet de placer un cadre prsentant un intitul sur une feuille,
afin dy placer des contrles. Il est gnralement utilis pour distinguer aisment les cat
gories de contrles dune feuille. Les cadres serv ent aussi associer des contrles
OptionButton: il suffit de placer les boutons doption sur un mme cadre pour que ceux
ci soient associs (voir la section "Contrle OptionButton", ci-aprs).

Figure 12.8
Un contrle Frame permet de
lgender un ensemble de
contrles.

Contrle ListBox
Le contrle ListBox, ou zone de liste, est une zone af fichant des options parmi lesquelle
lutilisateur peut oprer des slections. Les proprits dun contrle ListBox permettent
dautoriser la slection dun seul ou de plusieurs lments de la liste. Lorsque la hauteur
dune zone de liste ne permet pas den af ficher tous les lments, une barre de dfileme
verticale lui est associe.
Livre Macros excel.book Page 326 Vendredi, 3. avril 2009 7:45 07

326 Excel et VBA

Figure 12.9 Zones de liste


Une zone de texte peut tre
associe une zone de liste
afin den a fi her la valeur
slectionne.

Contrle CheckBox
Un contrle CheckBox, ou case cocher, peut tre activ (coch) ou dsactiv (non coch)
par lutilisateur, afin de alider ou non une option. Les proprits dun contrle CheckBox
permettent aussi de lui f aire accepter un troisime tat, Null (ni coch, ni dcoch). La
case cocher apparat alors grise.

Figure 12.10
Les cases cocher
permettent de valider
ou non une option.
Livre Macros excel.book Page 327 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 327

Contrle OptionButton
Les contrles OptionButton ou boutons doption permettent de proposer lutilisateur un
choix parmi plusieurs options. Lorsque plusieurs contrles OptionButton sont associs,
seul un deux peut tre acti v. Lactivation dun bouton doption entrane la dsacti vation
des autres boutons doption associs.

Figure 12.11
Un seul bouton doption
peut tre slectionn.

Contrle ToggleButton
Le contrle ToggleButton, ou bouton bascule, permet lutilisateur dactiver ou de dsacti-
ver une option, v oire de choisir ltat Null si les proprits du contrle ly autorisent. Ce
contrle offre en fait les mmes fonctionnalits quune case cocher, avec lapparence dun
bouton de commande. Lorsquun bouton bascule est activ, il semble enfonc sur la feuille ;
lorsquil est dsactiv, il est saillant ; ltat Null, il apparat estomp. La Figure 12.12
prsente les trois tats possibles pour un contrle ToggleButton.

Figure 12.12
Le contrle ToggleButton est
assez rarement utilis dans
les interfaces de programme.

Contrle CommandButton
Le contrle CommandButton ou bouton de commande est un bouton associ une action. Il
peut, par exemple, servir valider les informations entres dans la feuille (bouton OK) afi
de passer ltape sui vante du programme, ou au contraire interrompre le programme
(bouton Annuler).
Livre Macros excel.book Page 328 Vendredi, 3. avril 2009 7:45 07

328 Excel et VBA

Figure 12.13
Les boutons de commande
figu ent parmi les contrles
les plus courants.

Contrle TabStrip
Le contrle TabStrip, ou onglet, permet de crer une feuille dont laffichage ariera selon
longlet slectionn. Tout se passe comme si laccs plusieurs feuilles tait dirig partir
dune seule feuille. Les onglets permettent de rsoudre des problmes despace en organi-
sant les contrles dune feuille par types, classs sous diffrents onglets. Lorsque lutilisa-
teur clique sur un onglet, les contrles de la feuille sont mis jour par le code associ au
contrle.
Notez que les contrles ne peuv ent tre associs un onglet dun contrle TabStrip, ce
contrle ne possdant pas un espace propre chaque onglet. Les contrles sont placs sur
la feuille et leur mise jour lie la slection dun onglet ne peut tre ef fectue que par
lexcution de code prcdemment crit.

Contrle MultiPage
Le contrle MultiPage est semblable au contrle TabStrip, en ce sens quil permet
dconomiser de lespace en associant dif frents affichages une mme feuille. A la
diffrence du contrle TabStrip, les pages constituant le contrle MultiPage sont
autonomes de la feuille. Autrement dit, lorsque vous placez des contrles sur une page
dun contrle MultiPage, ceux-ci ne safficheront que si la page en question est slec
tionne. Vous naurez donc pas crire de code pour f aire v arier laf fichage de l
feuille, mais simplement placer les contrles v oulus sur les pages constituant le
contrle.
Livre Macros excel.book Page 329 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 329

Figure 12.14
Plusieurs contrles
MultiPage peuvent tre
placs sur une feuille,
chacun pouvant prsenter
un nombre variable
donglets.

Contrle ScrollBar
Le contrle ScrollBar, ou barre de dfilement, o fre lutilisateur une zone lui permettant
de se dplacer dans un en vironnement. Une barre de dfilement peut tre horizontale o
verticale. Pour dterminer la position dune barre de dfilement, redimensionnez-la e
utilisant ses poignes de slection. Le dplacement laide dune barre de dfilement peu
seffectuer par un clic sur lune des touches flches de la barre, un clic lintrieur de l
barre (entre le curseur de dfilement et lune des touches flches), ou encore par un glisse
dplacer du curseur de dfilement sur la barre
Un contrle ScrollBar est automatiquement af fect un contrle ListBox lorsque la
hauteur de ce dernier ne permet pas laffichage de tous les lments de la liste

Figure 12.15
Un contrle ScrollBar permet
lutilisateur de se dplacer
dans une zone de texte trop
petite pour affi her la totalit
de son contenu.

Contrle ScrollBar
Livre Macros excel.book Page 330 Vendredi, 3. avril 2009 7:45 07

330 Excel et VBA

Contrle SpinButton
Un contrle SpinButton, ou bouton toupie, est compos de deux flches permettant
lutilisateur de slectionner une v aleur en cliquant sur lune ou lautre des flches. Le
boutons toupies sont gnralement associs une zone de te xte dans laquelle est af fich
la valeur slectionne. Les proprits de la zone de te xte peuvent tre dfinies pour qu
lutilisateur puisse y entrer une valeur saisie au clavier ou pour que la valeur ne puisse tre
dfinie qu laide du bouton toupie

Figure 12.16
Un contrle TextBox
est gnralement associ
un contrle SpinButton af n
daffi her la valeur choisie
laide de ce dernier.

Placer des contrles sur une feuille


Pour placer un contrle sur une feuille :
1. Dans la bote outils, cliquez sur le contrle voulu. Le contrle prend lapparence dun
bouton enfonc.
2. Dplacez le pointeur au-dessus de la feuille. Le pointeur se transforme en croix et une
image reprsentant le type de contrle slectionn lui est accole (voir Figure 12.17).
3. Placez la croix lendroit o v ous souhaitez v oir apparatre langle suprieur g auche
du contrle et cliquez. Le contrle apparat sur la feuille (v oir Figure 12.18) et loutil
Slection est activ dans la bote outils.
4. Pour dplacer le contrle, slectionnez-le si ncessaire. Placez le curseur sur la bande
grise reprsentant la slection, de f aon quil prenne la mme forme qu la
Figure 12.19, et effectuez un glisser-dplacer jusqu lemplacement voulu.
5. Pour redimensionner le contrle, slectionnez-le si ncessaire, puis utilisez les poignes
de redimensionnement situes autour du cadre de slection (voir Figure 12.20).
Livre Macros excel.book Page 331 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 331

Figure 12.17
Une image accole
au pointeur indique
le type de contrle
slectionn.

Figure 12.18
Le contrle
OptionButton dpos
sur la feuille.

Figure 12.19
Cette forme de pointeur
indique que vous pouvez
dplacer le contrle.

Figure 12.20
Utilisez les poignes
de redimensionnement
pour ajuster la taille
du contrle.
Livre Macros excel.book Page 332 Vendredi, 3. avril 2009 7:45 07

332 Excel et VBA

Ds que vous avez plac un contrle sur une feuille , dfinissez sa p oprit
eil Name dans la fentre Proprits. La proprit Name dun contrle correspond au
Cons nom qui sera utilis dans le code pour faire rfrence ce contrle.

Pour accder la rubrique daide Visual Basic dun contrle , slectionnez ce


ce contrle sur la feuille et tapez sur la touche F1.
Astu

Ce chapitre traite du dv eloppement de feuilles VBA. De la mme f aon, des contrles


ActiveX peuvent tre placs sur une feuille de calcul Excel. Les procdures dexploitation
de ces contrles sont les mmes que pour une feuille UserF orm dveloppe dans Visual
Basic Editor. Lobjet correspondant la feuille UserF orm et dans lequel sont stockes les
procdures vnementielles des contrles est lobjet Feuille portant le nom de la feuille,
situ dans le module Objets Microsoft Excel.
Pour placer des contrles ActiveX sur une feuille de calcul plutt que sur une feuille User -
Form, affichez la barre doutils Visual Basic dans Excel et cliquez sur le bouton Cration.
Cliquez ensuite sur le bouton Bote outils Contrles, afin da ficher les contrle
disponibles. Pour quitter le mode Cration, cliquez nouveau sur le bouton Cration.

Figure 12.21
Vous pouvez aussi placer
des contrles sur une feuille
de calcul Excel.

Copier-coller des contrles


Si vous souhaitez placer plusieurs contrles identiques sur une feuille, vous pouvez rpter
la procdure indique prcdemment. Cependant, il est plus rapide de placer un contrle
sur la feuille, de le dimensionner votre convenance et den dterminer les proprits (voir
section suivante), puis de le copier et de le coller sur la feuille. Le contrle ainsi dupliqu
hritera des proprits du contrle stock dans le Presse-papiers, et v ous viterez ainsi
davoir les redfini .
Livre Macros excel.book Page 333 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 333

Pour copier et coller un contrle :


1. Slectionnez le contrle sur la feuille, puis copiez-le afin de le placer dans le Presse
papiers. Vous pouvez pour cela utiliser le bouton Copier de la barre doutils, slection-
ner la commande Copier du menu Edition ou du menu conte xtuel (clic droit sur le
contrle), ou encore le raccourci clavier Ctrl + C.
2. Collez ensuite le contenu du Presse-papiers (bouton Coller, commande Coller du menu
Edition ou du menu contextuel, ou encore le raccourci clavier Ctrl + V).
3. Dplacez si ncessaire le nouveau contrle sur la feuille.
4. Ouvrez ensuite la fentre Proprits du contrle en appuyant sur F4 ou en f aisant un
clic droit sur le contrle et en choisissant la commande Proprits du menu conte xtuel.
Dfinissez sa proprit Name.

Figure 12.22
La copie du contrle hrite
des proprits du contrle
source.

Pour copier -coller un contrle , vous pouvez aussi fair e un clic dr oit sur le
ce contrle et, tout en maintenant le bouton de la souris enfonc, le faire glisser
Astu
lendroit o vous souhaitez en placer une copie . Relchez ensuite le bouton de
la souris et, dans le menu contextuel qui saffi he, slectionnez Copier ici.

ce Pour dupliquer plusieur s contrles en une seule opr ation, slectionnez les
Astu contrles voulus sur la feuille.

Slectionner plusieurs contrles


Pour slectionner plusieurs contrles sur une feuille, utilisez les touches Maj et Ctrl :
Pour slectionner des contrles contigus, slectionnez le premier contrle. Appuyez
ensuite sur la touche Maj et, tout en la maintenant enfonce, slectionnez le dernier
contrle.
Livre Macros excel.book Page 334 Vendredi, 3. avril 2009 7:45 07

334 Excel et VBA

Pour slectionner des contrles non contigus, slectionnez le premier contrle.


Appuyez ensuite sur la touche Ctrl et, tout en la maintenant enfonce, slectionnez
successivement les contrles voulus.

Figure 12.23
Pour slectionner plusieurs
contrles sur une feuille,
utilisez les touches Maj et Ctrl.

Lorsque vous slectionnez plusieur s contrles, les poignes de slection de


Info lun deux apparaissent en blanc (celles des autres contrles sont noires). Il
sagit du contrle actif . Cette notion est particulir ement utile pour mettr e
en forme vos feuilles. Vous pouvez ainsi appliquer certaines pr oprits du
contrle actif telles que sa taille ou sa position aux autr es contrles
slectionns.

Supprimer des contrles


Pour effacer des contrles dune feuille, slectionnez les contrles v oulus et tapez sur la
touche Suppr pour les supprimer sans les stocker dans le Presse-papiers. Si vous souhaitez
coller les contrles dans une autre feuille, tapez Ctrl + X afin de placer les contrle
supprims dans le Presse-papiers. Activez ensuite la feuille de vant recevoir les contrles et
tapez Ctrl + V afin de coller ces derniers dans la feuille act ve.

Mise en forme des contrles


Le simple dplacement des contrles sur une feuille laide de la souris nest pas assez prcis
pour atteindre une mise en forme parf aite des contrles. Un certain nombre doutils sont
votre disposition pour peaufiner la mise en forme des contrles sur une feuille. Vous obtien-
drez ainsi des contrles parf aitement aligns et de dimensions proportionnes. La mise en
forme des contrles sur la feuille peut se f aire laide de la grille, des commandes du menu
Format ou de la barre doutils UserForm (voir Figure 12.24).

Figure 12.24
La barre doutils UserForm.
Livre Macros excel.book Page 335 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 335

La grille
La grille dsigne les points quadrillant une feuille dans une fentre UserF orm. Ces points
napparaissent quen phase de conception et ont pour fonction de faciliter la mise en place
des contrles sur la feuille.
Lorsque lalignement des contrles sur la grille est acti v, langle suprieur g auche des
contrles est automatiquement plac sur le point de la grille le plus proche et les contrles
ne peuvent tre placs ou dplacs que sur lun des points de la grille. Les contrles accep-
tent alors autant de positions quil e xiste de points de quadrillage sur la feuille. Pour acti-
ver lalignement des contrles sur la grille :
1. Slectionnez la commande Options du menu Outils de Visual Basic Editor, et acti vez la
page Gnral de la bote de dialogue qui saf fiche. La zone aramtres de grille de la
feuille (voir Figure 12.25) permet de dfinir les options dutilisation de la grille
2. Cochez les cases Afficher la grille afin de aire apparatre les points de quadrillage su r
la feuille, et dterminez la prcision de la grille en spcifiant des aleurs de largeur et de
hauteur.
3. Cochez la case Aligner les contrles sur la grille, puis cliquez sur OK.

Figure 12.25
Paramtrez lutilisation
de la grille.

La commande Ajuster la grille du menu F ormat ajuste la hauteur et la


Info largeur des contrles slectionns aux lignes de grille les plus proches.
Livre Macros excel.book Page 336 Vendredi, 3. avril 2009 7:45 07

336 Excel et VBA

Figure 12.26
Lalignement des contrles
sur la grille rend ais
lalignement des contrles
les uns par rapport
aux autres.

Aligner les contrles


Pour aligner des contrles sur une feuille :
1. Slectionnez les contrles aligner en prenant soin de f aire du contrle qui servira de
rfrence pour lalignement le contrle actif (celui dont les poignes de slection
apparaissent en blanc).

Pour modifier le contrle actif dune slection, maintenez la tou he Ctrl enfon-
ce ce et cliquez deux reprises sur le contrle que vous souhaitez rendre actif. Le
Astu
premier clic dslectionnera le contrle, le second le slectionner a nouveau
en le rendant actif.

2. Choisissez la commande Aligner du menu Format ou cliquez sur la flche de drouleme t


du bouton Aligner de la barre doutils UserForm (voir Figure 12.27).
3. Choisissez lalignement voulu parmi les sept types dalignement proposs.
Les contrles slectionns salignent sur le contrle actif.

Figure 12.27
Slectionnez un type
dalignement.

Un mauvais choix peut entraner la juxtaposition des contrles. Cliquez alors sur
Info le bouton Annuler de la barr e doutils Standar d ou tapez le r accourci Ctrl + Z
pour ramener les contrles leur position prcdente.
Livre Macros excel.book Page 337 Vendredi, 3. avril 2009 7:45 07

Chapitre 12 Crer des interfaces utilisateur 337

Figure 12.28
Lalignement des contrles
se fait sur le contrle actif
de la slection.

Uniformiser la taille des contrles


Pour donner la mme taille diffrents contrles dune feuille :
1. Slectionnez les contrles dont vous souhaitez uniformiser la taille, en prenant soin de
faire du contrle qui servira de rfrence le contrle actif.
2. Choisissez la commande Uniformiser la taille du menu Format ou cliquez sur la flch
de droulement du bouton Egaliser de la barre doutils UserForm.
3. Choisissez duniformiser la hauteur des contrles, leur largeur ou encore les deux.
Les contrles slectionns prennent tous la taille du contrle actif.

Figure 12.29
Une mme largeur et une
mme hauteur ont t affectes
aux contrles slectionns.

Vous pouvez adapter la taille dun contrle son contenu. Slectionnez pour
ce cela le contrle et choisissez la commande Ajuster la taille du menu Format.
Astu

Uniformiser lespace entre les contrles


Pour uniformiser lespace sparant les contrles dune feuille :
1. Slectionnez les contrles dont v ous souhaitez uniformiser lespace de sparation, en
prenant soin de faire du contrle qui servira de rfrence le contrle actif.
2. Choisissez la commande Espacement horizontal ou Espacement v ertical du menu
Format, en fonction des positions rciproques des contrles.
Livre Macros excel.book Page 338 Vendredi, 3. avril 2009 7:45 07

338 Excel et VBA

3. Choisissez lune des commandes du menu qui saffiche

Egaliser. Lespacement entre les contrles slectionns sera le mme.


Augmenter. Lespacement entre les contrles slectionns augmentera dune unit
de grille, soit dune distance g ale lespace sparant deux points adjacents de la
grille.
Diminuer. Lespacement entre les contrles slectionns diminuera dune unit de
grille, soit dune distance gale lespace sparant deux points adjacents de la grille.
Supprimer. Lespace sparant les contrles slectionns sera supprim. Pour autant ,
les contrles ne seront pas juxtaposs, mais accols.

Figure 12.30
Un mme espacement
vertical a t appliqu
aux contrles slectionns.

Vous pouvez adapter la taille dun contrle son contenu. Slectionnez pour
ce cela le contrle et choisissez la commande Ajuster la taille du menu Format.
Astu

Centrer les contrles


Pour centrer des contrles sur une feuille :

1. Slectionnez les contrles centrer, en prenant soin de faire du contrle qui servira de
rfrence le contrle actif.

2. Choisissez la commande Centrer sur la feuille du menu F ormat ou cliquez sur la flch
de droulement du bouton Centrer de la barre doutils UserForm.

3. Choisissez un centrage horizontal ou vertical, en fonction de la position des contrles sur


la feuille.

<