Vous êtes sur la page 1sur 568

Microsoft

Excel et VBA

Dveloppez
des macros
compatibles
avec toutes
les versions
dExcel
(de 1997
2010)

Codes sources
ssurr ww
su
www.pearson.fr

Mikal Bidault

LE P R O G RAM M E U R

Microsoft

Excel & VBA

Mikal Bidault

Pearson Education France a apport le plus grand soin la ralisation de ce livre afin de vous fournir
une information complte et fiable. Cependant, Pearson Education France nassume de responsabilits, 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
oudommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ou
programmes.
Tous les noms de produits ou marques cits dans ce livre 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
Collaboration ditoriale : Herv Guyader
ISBN : 978-2-7440-4158-7
Copyright 2010 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.

Sommaire

Introduction..........................................................  1
Partie I Dcouvrir la programmation
Excel....................................................................  11
1. Notions fondamentales de la programmation
oriente objet.................................................  13

11. Intgrer des applications VBA


dans linterface dExcel................................. 317
Partie III Dvelopper des interfaces
utilisateur............................................................ 327
12. Crer des interfaces utilisateur...................... 329

2. Premires macros...........................................  35

13. Exploiter les proprits des contrles


ActiveX.......................................................... 359

3. Dplacement et slection dans une macro


Excel..............................................................  63

14. Matriser le comportement des contrles....... 401

4. Dcouvrir Visual Basic Editor.......................  85

Partie IV Notions avances


de la programmation Excel............................... 437

Partie II Programmeren Visual Basic........... 127

15. Programmer des vnements Excel............... 439

5. Dvelopper dans Visual Basic Editor............ 129

16. Protger et authentifier des projets VBA....... 451

6. Variables et constantes................................... 173

17. Exemple complet dapplication Excel........... 475

7. Contrler les programmes VBA.................... 209


8. Fonctions Excel et VBA................................ 257

Annexe

9. Manipulation des chanes de caractres......... 275

Mots cls pour la manipulation de fichiers


et de dossiers........................................................ 535

10. Dbogage et gestion des erreurs.................... 293

Index.................................................................... 539

Table des matires

Introduction........................................................  1

2. Premires macros..........................................  35

VBA7: 64bits vs 32bits...............................  2

Crer une macro GrasItalique.........................  36

VBA, pour quoi faire?....................................  3

Afficher longlet Dveloppeur........................... 37

Des programmes............................................... 5

Dmarrer lenregistrement................................ 38

Une application hte et des projets................... 5

Enregistrer les commandes de la macro........... 40

Un langage de programmation......................... 6

Excuter la macro............................................. 40

Un environnement de travail............................. 8
Conventions typographiques...........................  9
Codes sources en ligne . .................................  10
I Dcouvrir la programmation Excel

11

1. Notions fondamentales de la programmation


oriente objet.................................................  13
Comprendre le concept dobjet.......................  14
Objets et collections dobjets............................ 14

Structure de la macro........................................ 42
Amliorer la macro........................................... 47
Une autre mthode denregistrement..............  49
Enregistrement.................................................. 50
Structure de la macro........................................ 50
crire la macro . .............................................  51
Excution de la macro....................................... 53
Choisir laccessibilit des macros...................  53

Application hte et modles dobjets................ 16

Accessibilit globale ou limite........................ 53

Accder aux objets............................................ 19

Classeurs et modles......................................... 54

Les proprits.................................................... 21

Le classeur de macros personnel...................... 55

Les mthodes..................................................... 27

Les macros complmentaires............................ 56

Les vnements.................................................. 28
Les fonctions..................................................... 29

Dfinir le classeur de stockage lors de


lenregistrement dunemacro........................... 60

Le modle dobjets dExcel............................  29

Accder aux macros dun classeur spcifique.. 60

VI

Excel et VBA

3. Dplacement et slection
dans une macro Excel...................................  63

Procdures Function.........................................141

Mthodes de slection dans une feuille


Excel...............................................................  64

Des projets bien structurs.............................. 149

Clavier............................................................... 64

Supprimer un module........................................151

Souris................................................................ 66

Crer une procdure........................................ 152

Notion de cellule active..................................... 66


Rfrences relatives et rfrences absolues...... 67
Coder les dplacements effectus lors
de lenregistrement dune macro....................  69
Rfrence absolue aux cellules......................... 69
Rfrence relative aux cellules.......................... 78
Rfrence aux cellules fonction
de leur contenu.................................................. 80
Rfrence aux plages de cellules nommes....... 83

Procdures Property..........................................143
Ajouter un module.............................................149

crire linstruction de dclaration....................152


La bote de dialogue Ajouter une procdure.....153
La notion de porte...........................................154
criture et mise en forme du code.....................155
Dplacer une procdure....................................161
Appel et sortie dune procdure...................... 162
Appel dune procdure Sub...............................162
Appels de procdures Function et Property......163
Passage darguments.........................................164

4. Dcouvrir Visual Basic Editor.....................  85

Sortie dune procdure......................................166

Accder Visual Basic Editor........................  86

Sortie dun programme.....................................167

Les outils et les fentres


de Visual Basic Editor.....................................  88

Excuter du code............................................. 168

LExplorateur de projet..................................... 89

Vrification automatique de la syntaxe.............169

LExplorateur dobjets...................................... 92

Complment automatique des instructions.......170

La fentre UserForm.........................................100

Info express automatique..................................171

La fentre Code.................................................102
La fentre Proprits.........................................116
Les barres doutils.............................................121
Paramtrer Visual Basic Editor....................... 124
II Programmer en Visual Basic

127

5. Dvelopper dans Visual Basic Editor.......... 129

Aide lcriture de code................................. 169

6. Variables et constantes.................................. 173


Dclarer une variable...................................... 174
Dclaration implicite .......................................174
Dclaration explicite.........................................175
Types de donnes des variables ..................... 178
Chanes de caractres.......................................178
Valeurs numriques...........................................180

Structure des programmes Visual Basic.......... 130

Valeurs boolennes............................................183

Les modules.......................................................130

Dates.................................................................184

Les procdures..................................................131

Type Variant.......................................................185

Les instructions.................................................133

Variables de matrice.........................................185

Les diffrents types de procdures.................. 136

Variables objet..................................................190

Procdures Sub.................................................136

Types de donnes personnaliss........................195

Table des matires

Constantes.........................................................197

VII

Validation et conversion des types de donnes.198

Recommandations pour lcriture de fonctions


Excel............................................................... 263

Porte et dure de vie des variables................ 201

Les limites de la cellule.....................................263

Porte de niveau procdure...............................201

Principales fonctions VBA.............................. 264

Porte de niveau module prive........................201

9. Manipulation des chanes de caractres..... 275

Porte de niveau module publique....................202


Variables statiques............................................203
Traitement interapplications laide
de variables objet............................................ 203

Modifier des chanes de caractres................. 276


Concatner des chanes....................................276
Insrer des caractres non accessibles au clavier

278

7. Contrler les programmes VBA.................. 209

Rpter une srie de caractres........................280

Rpter une srie dinstructions: les boucles.210

Supprimer les espaces superflus dune chane.. 280

La boucle While...Wend....................................210
La boucle Do...Loop.........................................215
La boucle For...Next..........................................218
La boucle For Each...Next.................................224
Utiliser des instructions conditionnelles......... 228
La structure de contrle If...Then...Else...........228
La structure de contrle Select Case.................233

Extraire une partie dune chane......................281


Effectuer des remplacements
au sein dune chane.........................................282
Modifier la casse des chanes de caractres.....283
Comparer des chanes de caractres............... 283
Rechercher dans les chanes de caractres...... 286
Rechercher une chane dans une chane...........286

Dfinir linstruction suivante avec GoTo........ 234

Rechercher une chane dans une variable


de matrice..........................................................289

Interagir avec lutilisateur via des botes


de dialogue...................................................... 235

10. Dbogage et gestion des erreurs.................. 293

La fonction InputBox........................................235

Les tapes et les outils du dbogage............... 294

La mthode InputBox........................................239

Test du projet.....................................................295

La fonction MsgBox.........................................241

Excuter pas pas............................................297

Affichage de botes de dialogue Excel...............246

La fentre Variables locales..............................298

Utiliser les oprateurs logiques....................... 252

Les points darrt..............................................300

Trier des donnes............................................ 253

Modifier lordre dexcution des instructions...301


La fentre Excution.........................................301

8. Fonctions Excel et VBA................................ 257

Les espions........................................................302

Utiliser les fonctions Excel dans VBA............ 258

La pile des appels ............................................304

Crer des fonctions Excel personnalises....... 258

Exemple de dbogage..................................... 305

Intgrer une fonction via lExplorateur


dobjets............................................................ 260

Recherche du bogue..........................................307

Insrer une fonction VBA dans votre code........260

Gestion des erreurs et des exceptions............. 312

Insrer une fonction Excel dans votre code......261

Exemple de gestion derreur........................... 313

Rsolution du bogue..........................................308

VIII

Excel et VBA

11. Intgrer des applications VBA


dans linterface
dExcel............................................................ 317

Mise en forme des contrles........................... 346

Affecter une macro un raccourci clavier...... 318

Uniformiser la taille des contrles....................348

Personnaliser le ruban et la barre doutils


Accs rapide.................................................... 319

Uniformiser lespace entre les contrles..........349

Personnaliser les barres doutils


dans les versions antrieures Excel 2007..... 321

Rorganiser les boutons....................................351

Personnaliser les menus dans les versions


antrieures Excel 2007................................. 323

Personnaliser la bote outils......................... 352

Affecter une macro un objet......................... 325

Ajouter/supprimer une page..............................355

III Dvelopper des interfaces utilisateur

327

12. Crer des interfaces


utilisateur..................................................... 329
Les phases de dveloppement de feuilles....... 331
Crer une feuille.............................................. 331
Les contrles de la bote outils..................... 333

La grille.............................................................346
Aligner les contrles.........................................347

Centrer les contrles.........................................350


Grouper ou sparer des contrles.....................351
Ajouter/supprimer un contrle..........................353
Afficher/masquer une feuille.......................... 357
13. Exploiter les proprits
des contrles ActiveX.................................... 359
Proprit Name............................................... 361
Apparence....................................................... 362
Alignment.........................................................362
BackColor.........................................................363

Outil Slection...................................................334

BackStyle..........................................................363

Contrle Label..................................................334

BorderColor......................................................363

Contrle TextBox..............................................334

BorderStyle.......................................................364

Contrle ComboBox.........................................335

Caption..............................................................364

Contrle Frame.................................................335

ControlTipText..................................................365

Contrle ListBox...............................................336

ForeColor..........................................................365

Contrle CheckBox...........................................336

SpecialEffect.....................................................366

Contrle OptionButton......................................337

Style..................................................................366

Contrle ToggleButton......................................338

Value.................................................................367

Contrle CommandButton................................338

Visible...............................................................369

Contrle TabStrip..............................................338

Comportement................................................ 372

Contrle MultiPage...........................................339

AutoSize............................................................372

Contrle ScrollBar............................................340

AutoTab.............................................................373

Contrle SpinButton.........................................340

AutoWordSelect................................................374

Placer des contrles sur une feuille................. 341

Cancel...............................................................374

Copier-coller des contrles...............................344

Default...............................................................375

Slectionner plusieurs contrles.......................345

Enabled.............................................................375

Supprimer des contrles....................................345

EnterKeyBehavior.............................................377

Table des matires

IX

HideSelection....................................................377

Police.............................................................. 399

Locked...............................................................378

Font...................................................................399

MaxLenght........................................................378
MultiLine..........................................................379
SelectionMargin................................................379
Style..................................................................380
TabKeyBehavior................................................380

1 14
14. Matriser le comportement des contrles. 401
Crer des procdures vnementielles............ 402

TextAlign..........................................................381

Crer une procdure..........................................402

TripleState.........................................................381

Les vnements..................................................408

WordWrap.........................................................382

Exemples dexploitation des contrles........... 415

Dfilement....................................................... 382

Contrle Label..................................................415

ScrollBars..........................................................382

Contrle TextBox..............................................418

KeepScrollsVisible............................................384

Contrle ComboBox.........................................421

Delay.................................................................384

Contrle ListBox...............................................426

Max et Min........................................................385

Contrles CheckBox et OptionButton..............429

SmallChange.....................................................386

Contrle ScrollBar............................................430

LargeChange.....................................................386

Contrle SpinButton.........................................432

Divers.............................................................. 387
Accelerator........................................................387
GroupName.......................................................388
HelpContextID..................................................388
MouseIcon.........................................................388

Exploiter les informations dune feuille VBA....435


IV Notions avances de la programmation
Excel
437
15. Programmer des vnements Excel........... 439

MousePointer....................................................389

Lobjet Application......................................... 440

TabIndex............................................................391

Dclaration et instanciation de lobjet


Application........................................................440

TabStop.............................................................392
Tag.....................................................................393
Emplacement.................................................. 393
Height et Width.................................................393
Left et Top.........................................................393
StartUpPosition.................................................394
Image.............................................................. 395

Cration de procdures vnementielles


de niveau application........................................441
Proprits de lobjet Application......................443
Mthodes de lobjet Application.......................445
Lobjet ThisWorkbook.................................... 445
Lobjet Worksheet........................................... 448

Picture...............................................................395

16. Protger et authentifier des projets VBA... 451

PictureAlignment..............................................396

Les virus macro............................................... 452

PictureSizeMode...............................................397

Se protger des virus macros.......................... 452

PicturePosition..................................................398

Dfinir un niveau de scurit dans Excel 2010


et Excel 2007.....................................................452

PictureTiling......................................................398

Excel et VBA

Dfinir un niveau de scurit


avec Excel 2000, XP et 2003.............................455
Les signatures numriques................................456
Effectuer des sauvegardes des macros..............457
Protger laccs aux macros............................ 459

Crer un modle Excel.................................... 485


Dfinir et crer des interfaces......................... 486
Feuille fmContratAuteur...................................487
Feuille fmContratConditions.............................500
Feuille fmContratDates.....................................514

Verrouiller un projet..........................................459

Feuille fmContratImpression............................520

Limiter les droits dexcution dune macro......460

Feuille fmContratFin.........................................527

Authentifier ses macros................................... 472


Obtenir une authentification.............................472

crire des procdures ddition


de documents.................................................. 528

Authentifier une macro......................................473

dition des feuilles de paie...............................529

17. Exemple complet dapplication Excel....... 475

Mise jour du Tableau Word............................531

Avant de commencer.........................................477

Annexe. Mots cls pour la manipulation


de fichiers et de dossiers.................................... 535

Identification des informations recueillir.......477

Index.................................................................... 539

Prsenter un projet dapplication Excel.......... 476

Dfinition de la structure du programme..........479

Introduction

Visual Basic pour Applications, VBA, est la solution de programmation propose avec les
applications de la suite Office. La connaissance de VBA permet lutilisateur dExcel de
tirer pleinement profit du tableur de Microsoft en en dveloppant les capacits et les fonctionnalits 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 dveloppement intgr complet et professionnel, remonte sa version97. Depuis, Microsoft a confirm
sa volont de faire de VBA un lment part entire des applications Office et la progressivement propos avec lensemble des applications de sa suite bureautique. Visual Basic pour
Applications constitue aujourdhui un langage et un environnement stables et prennes.
Bien que certains dveloppeurs demandaient le remplacement de VBA par VB.net, Microsoft confirme, avec Office 2010, sa volont de maintenir VBA comme solution de programmation des applications Office, puisque la nouvelle suite Office intgre la version 7 de
Visual Basic (les versions XP, 2003 et 2007 dOffice intgraient Visual Basic6.3). galement confirm dans cette version, le nouvel environnement apparu avec Office 2007 et le
remplacement des menus "classiques" des versions prcdentes par un systme de "ruban"
et d"onglets".
Cet ouvrage traite de la programmation VBA dExcel 2010, mais, sauf exception signale,
les explications et les exemples proposs sont aussi valides pour les versions 97, 2000,
XP, 2003 et 2007 dExcel. En effet, dune version lautre, il ny a pas eu de rvolution.
Le modle dobjets sest affin et les nouvelles fonctions dExcel, apparues au cours des
diffrentes versions du logiciel, peuvent galement tre manipules via la programmation
VBA. Cependant, le langage, la gestion des programmes, lenvironnement et les outils au

Excel et VBA

service du dveloppeur bref, tout ce que vous devez savoir pour programmer Excel et que
cet ouvrage se propose de vous apprendre restent inchangs dune version lautre.
Donc, que vous utilisiez encore Excel2003 ou que vous soyez pass la version2010, sachez
que vous pourrez appliquer les connaissances que vous aurez acquises lors de la lecture
de ce livre quand vous migrerez dune version lautre dExcel. Mieux, les programmes
dvelopps pour Excel97 fonctionnent avec toutes les versions ultrieures du tableur et,
sauf exception, les programmes dvelopps dans Excel2010 devraient fonctionner avec les
versions antrieures.
Dans cet ouvrage, vous dcouvrirez les diffrentes mthodes de cration de projets VBA
pour Excel, Visual Basic (le langage 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.

ition
Dfin

Vous rencontrerez le terme projet tout au long de cet ouvrage. Cest ainsi que
lon nomme un ensemble de programmes dvelopps avec Visual Basic pour
Applications.

VBA7: 64bits vs 32bits


Pour la premire fois de son histoire, Office est propose en deux versions : 32 bits et
64 bits. Ces deux versions sont pour ainsi dire indiffrenciables : seule la gestion de la
mmoire varie dune version lautre, autorisant la manipulation de fichiers nettement
plus volumineux avec la version 64bits. Cependant, Microsoft recommande linstallation
de la version 32 bits, y compris sur un systme dexploitation 64 bits, notamment pour
des raisons de compatibilit des complments (comme les macros VBA) avec les versions
prcdentes. Cest daillleurs la version 32bits qui est installe par dfaut, et les utilisateurs souhaitant installer la version 64bits doivent parcourir le CD afin dexcuter le fichier
dinstallation correspondant.
Consquence pour le dveloppement de macros Excel: la version7 de VBA est maintenant
une version 64 bits, qui intgre le support dun nouveau type de donnes permettant la
manipulation des pointeurs (les pointeurs permettent la manipulation des API Windows).
Cet ouvrage nabordant pas la manipulation des API notions rserves aux programmeurs
chevronns cette nouveaut na aucune incidence sur la validit de ce que vous explique
ce livre. Les concepts et techniques de programmation que vous apprendrez ici sont donc
compatibles avec la version 64bits dOffice comme avec les versions 32bits dOffice, sans
quil soit ncessaire dadapter le code.

Introduction

VBA, pour quoi faire?


Excel offre 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 caractristiques, des
fonctions et des commandes qui rpondent prcisment vos besoins.
La programmation VBA peut tre dfinie comme la personnalisation dun logiciel afin de
sassurer gain de temps, qualit des documents et simplification des tches 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 avons 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 en
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 fonction personnalise qui permet de calculer les taxes retenir sur un salaire (ou,
mieux, les primes y ajouter), etc. Vous pouvez, en outre, attacher vos programmes
VBA des raccourcis clavier, des icnes et des commandes de menu afin den
amliorer laccessibilit.

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

Excel et VBA

Automatiser des actions rptitives. Nous sommes parfois amens rpter certaines
oprations plusieurs fois sur un mme document ou ritrer des traitements spcifiques. Un programme VBA peut, par exemple, mettre en forme des cellules dans un
classeur Excel, effectuer des sries de calculs, etc.

Modifier et amliorer les commandes dune application. Les commandes Excel ne


sont pas toujours adaptes nos besoins ou prsentent parfois des limitations gnantes.
Un programme VBA peut modifier, brider ou complter les commandes dune application. 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 exploiter
des donnes issues de fichiers gnrs par dautres programmes et interagir avec ceux-ci
de faon transparente pour lutilisateur. Vous pouvez ainsi crer une commande qui
envoie automatiquement le classeur Excel ouvert en fichier joint dans un mail Outlook
des destinataires dfinis ou qui gnre un rapport Word partir de donnes Excel et
limprime.

Crer des interfaces personnalises. Les programmes VBA peuvent ramener des
tches complexes la simple information de champs dans des botes de dialogue personnalises pour lutilisateur final, simplifiant ainsi considrablement le travail de celui-ci,
tout en vous assurant quaucun oubli ou fausse manipulation naura lieu.

FigureI.2
Visual Basic pour
Applications vous
permet de dvelopper
des interfaces utilisateur volues.

Introduction

Visual Basic pour Applications permet le dveloppement de solutions adaptes vos besoins.
Les outils que vous apprendrez manier vous permettront de dvelopper 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 rptitive. Mais
vous pouvez aussi crer trs vite un petit programme VBA pour faire face une ncessit
immdiate; par exemple, afin de gnraliser un traitement exceptionnel lensemble dun
document.

Des programmes
Les projets VBA sont des programmes ou macros crits dans le langage Visual Basic. Si
vous ne possdez aucune exprience pralable de programmation, ne vous inquitez pas:
cet ouvrage aborde le dveloppement de projets VBA travers lenregistrement de macros.
Lorsque vous lactivez, lEnregistreur de macro mmorise chacune de vos 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
dexcuter la macro pour rpter lensemble des commandes enregistres.
ition
Dfin

Le terme macro dsigne le regroupement dun ensemble de commandes en une


seule. On parle parfois de macrocommandes pour dsigner un programme qui
se rsume lexcution dune srie de commandes, sans gard pour le contexte.
Des macros plus volues peuvent rpter des oprations en boucle, afficher
des botes de dialogue qui autorisent une interaction avec lutilisateur. Ces programmes se comporteront diffremment en fonction des informations entres ou
de ltat du document sur lequel elles sexcutent.
Le terme projet est plus large. Il dsigne lensemble des lments constituant vos
programmes VBA. Il sagit 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 moyen de se familiariser avec la programmation en Visual Basic. Ainsi, sans connatre le langage les instructions qui le composent et la faon dont elles sont structures , vous pouvez 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 dveloppement dapplications Windows. Les structures de contrle du

Excel et VBA

langage sont les mmes et lenvironnement 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 que les
programmes Visual Basic sont autonomes, les programmes VBA ne peuvent tre excuts
qu partir dune application intgrant cet environnement de dveloppement Excel ou une
autre application.
Lorsque vous dveloppez un programme VBA, vous lattachez une application. Il sagit
de lapplication hte du programme. Plus prcisment, vos programmes VBA sont attachs
un document (un fichier ou un modle Word, une feuille de calcul Excel, une prsentation
PowerPoint) spcifique lapplication hte. Lensemble des programmes VBA attachs
un document constitue un projet. Un projet regroupe des macros, mais peut galement
intgrer des interfaces 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 vous dcouvrirez au long de cet ouvrage sont valides pour toutes les applications
de la suite Office. Pour excuter une macro VBA, vous devez avoir accs au document
auquel elle est attache. Vous pouvez choisir de rendre certaines macros disponibles partir
de nimporte quel document Excel ou en limiter laccessibilit un classeur Excel spcifique. La disponibilit des programmes VBA est aborde au Chapitre2.

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 langage et apprendrez rapidement en discerner les composants et les relations quils entretiennent. Comme nous lavons dit prcdemment, lenregistrement de macros constitue une excellente initiation Visual Basic. Cest
sous cet angle que nous vous ferons dcouvrir ce langage.
Visual Basic est un langage 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 et
des documents et reproduire lexcution de la plupart des commandes disponibles dans
lapplication hte.
Vous verrez que certaines instructions sont spcifiques Excel. Cest, par exemple, le cas
des instructions permettant daffecter une formule une cellule. Vous nutiliserez probablement quun nombre limit de ces instructions, en fonction de votre usage personnel dExcel

Introduction

ou des besoins de votre entreprise. Par ailleurs, certaines instructions spcifiques Excel
apparatront presque toujours dans vos macros. Cest, par exemple, 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
de celles qui permettent de rgler le comportement dune macro: raliser des oprations
en boucle, induire des ractions face certains paramtres, afficher des botes de dialogue simples (voir FiguresI.3 et I.4) ou dvelopper des interfaces utilisateur volues (voir
FigureI.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.
FigureI.3
La fonction VBA MsgBox
permet dafficher une bote
de dialogue.

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

Cet ouvrage ne se veut pas un dictionnaire du langage, mais un guide qui vous enseignera le
dveloppement de projets VBA de qualit. Vous apprendrez enregistrer, modifier, excuter
et dboguer des macros, crer des interfaces utilisateur ainsi qu grer vos projets VBA.
Vous dcouvrirez, travers les nombreux exemples de projets VBA de cet ouvrage, un
certain nombre dinstructions spcifiques la hirarchie dobjets dExcel, qui vous familiariseront avec la logique de ce langage.
ition
Dfin

La hirarchie dobjets dune application, encore appele modle dobjets, est


le rapport quentretiennent entre eux les diffrents objets dune application.
Ce concept ainsi que les notions spcifiques aux langages orients objet seront
dvelopps au Chapitre1, "Notions fondamentales de la programmation oriente objet".

Excel et VBA

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


de contrle qui permettront de crer trs simplement des macros volues. Nous vous fournirons les bases du langage Visual Basic. Elles suffisent pour crer une infinit de macros
et rpondre vos besoins spcifiques.
Lorsque les principes du dveloppement de projets VBA vous seront acquis et que vous
crerez vos propres macros, il vous arrivera srement davoir 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 Applications ou dans lExplorateur dobjets tudi au Chapitre4. Vous verrez que laide de Visual
Basic pour Applications fournit une rfrence complte du langage, facilement accessible
et consultable.
Si vous navez aucune exprience de programmation, peut-tre ce Visual Basic vous apparat-il comme un langage barbare ou inaccessible. Ne vous inquitez pas: le dveloppement
de projets VBA ne requiert ni exprience pralable de la programmation, ni connaissance
globale du langage. Contentez-vous, au cours de votre 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.

Un environnement de travail
Visual Basic pour Applications dispose dun environnement de dveloppement part
entire: Visual Basic Editor.
Visual Basic Editor est lenvironnement de dveloppement intgr des applications Office.
Il permet de visualiser et de grer les projets VBA, dcrire, de modifier et de dboguer les
macros existantes, de visualiser comment les commandes propres une application Office
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 comportement. Vous pouvez ainsi excuter
les commandes de la macro pas pas, en suivre le droulement, insrer des commentaires
dans le texte de la macro,etc. Enfin, Visual Basic Editor intgre 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.

Introduction

FigureI.5
Visual Basic Editor
est lenvironnement
de dveloppement
de Visual Basic pour
Applications.

Explorateur
de projet

Explorateur
d'objets

Fentre
Code

Bote
outils

Fentre
Proprits

Fentre
UserForm

Conventions typographiques
Afin den faciliter la lecture, nous avons 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 langage 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 flche
() en dbut de ligne indique que le texte est la poursuite de ligne prcdente.
Par ailleurs, vous rencontrerez au long de cet ouvrage diffrents types de notes, signales
dans la marge par des pictogrammes.
Info

Ces rubriques apportent un complment dinformation en rapport avec le sujet


trait. Leur lecture nest pas indispensable. Mais elles peuvent vous aider
mieux cerner le sujet.

10

Excel et VBA

ition
Dfin

Vous trouverez sous ces rubriques la dfinition de termes techniques spcifiques


la programmation VBA.

ntion
Atte

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

pel
Rap

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


des connaissances acquises plusieurs chapitres auparavant, cette rubrique vous
les remmore brivement.

ce
Astu

Sous cette rubrique, vous trouverez des trucs pour aller plus vite et travailler
plus efficacement.

eil
Cons

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

it
ibil
pat
m
o
C

Ces notes prodiguent des informations spcifiques aux versions antrieures


Office2010.

Codes sources en ligne


Vous trouverez sur le site Pearson (www.pearson.fr), la page consacre cet ouvrage, les
codes sources des applications VBA dveloppes dans ce livre.

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

1
Notions fondamentales
de la programmation
oriente objet
Au sommaire de ce chapitre

Comprendre le concept dobjet


Le modle dobjets Excel

14

Excel et VBA

Visual Basic est un langage 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 vous familiariser avec ces
concepts et le vocabulaire qui les dcrit. Plus concrtement, ce chapitre vous fera dcouvrir 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 trouverez pas dans ce chapitre de programmes VBA. Il est destin vous 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 dapprhender
vos premiers programmes ds le Chapitre2.

Comprendre le concept dobjet


Comme pour tous les langages 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 avec les objets de la vie relle. Nous ne drogerons pas cette rgle. La programmation oriente objet repose en effet sur une structure qui rappelle, par de nombreux points,
les objets de la vie courante et les rapports quils entretiennent. Lanalogie 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 lon
peut excuter sur celui-ci. Une voiture est un objet. Lorsque vous parlez de lobjet Voiture,
vous pouvez faire rfrence un objet abstrait ("Je vais acheter une voiture") comme une
voiture 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, vous voquez un objet Voiture imprcis, et pourtant tout le monde
comprend de quoi vous parlez. Il vous suffit de prononcer le mot "voiture" pour que
chacun imagine et visualise une voiture bien spcifique, en fonction de ses gots, de ses
aspirations, de ses souvenirs,etc. Cependant, quelle que soit la voiture 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.

Chapitre 1

Notions fondamentales de la programmation oriente objet

15

Ce sont ces proprits et ces mthodes, communes toutes les voitures, qui dfinissent
lobjet Voiture. Elles sont sous-entendues, videntes et essentielles. Il existe donc des
milliers de voitures diffrentes, toutes reconnaissables par un certain nombre de caractristiques 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 objets Voiture
(leurs proprits et leurs mthodes). Il sagit du modle partir duquel vous pouvez imaginer et crer des milliers de voitures 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.

Info

Une collection porte le nom pluriel des objets quelle rassemble.

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 Work
sheets, toutes les feuilles de calcul dun objet Workbook, etc. La section "Le modle
dobjets dExcel" situe en fin de chapitre vous permettra de dcouvrir les objets Excel les
plus importants.

ition
Dfin

Le terme Classe dsigne la dfinition commune dun ensemble dobjets (questce quune voiture ?), tandis quune Collection dsigne lensemble des objets
appartenant une classe (toutes les voitures en circulation).

Lorsque vous parlez dacheter la 2CV rouge de vos rves, vous voquez une voiture
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 valeurs prcises. La carrosserie est rouge, la vitesse maximale est de
x km/h,etc. Vous pouvez matriser le comportement de votre voiture laide des mthodes
dfinies dans la classe Voitures (Acclrer, Freiner), mais leffet prcis de ces mthodes
est troitement li aux proprits de votre voiture. La puissance du moteur ne permet pas
datteindre 200km/h (mais vous 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 mthode
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.)

16

Info

Excel et VBA

Lorsque vous crez une instance dobjet, cet objet possde toutes les proprits et mthodes dfinies dans la classe de lobjet. Ce principe essentiel de la
programmation oriente objet est appel instanciation.

Le grand intrt de la programmation oriente objet est quil nest pas utile de savoir
comment fonctionne un objet pour lutiliser. Lorsque vous achetez une voiture, vous navez
pas besoin de savoir comment la carrosserie et le moteur ont t fabriqus, ni comment
les diffrents composants sont assembls, vous vous contentez de choisir un modle, une
couleur,etc. Il vous suffit de connatre les mthodes propres la classe Voitures pour lutiliser. Avec VBA, lorsque vous crez une instance dun objet, vous en dfinissez les proprits 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
tournez la cl de contact, le moteur de la voiture dmarre, sans que vous ayez vous soucier
du dtail des vnements et des technologies mises en uvre.
VBA permet, par exemple, de crer des interfaces graphiques pour vos programmes, en
dposant simplement les objets dont vous avez besoin (cases cocher, zones de texte,
boutons de commandes, etc.), sur une feuille. Ces objets ont des comportements spcifiques que votre 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 varieront
en fonction des actions que vous souhaitez que votre programme excute. Vous dfinirez et
associerez ces objets de faon crer une application complte. L encore, lanalogie avec
les objets de la vie courante est rvlatrice. Les objets que nous utilisons sont gnralement
ordonns selon leur fonction. Lorsque vous 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
savon avec le gant 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 trouver de brosse dents, ni aucun des objets spcifiques la
toilette. Par contre, vous 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 votre maison. Lorsque vous
choisissez de dvelopper un projet VBA, vous choisissez une application hte. Ilsagit de
lapplication Office qui contient les objets sur lesquels vous souhaitez agir. Cest dans

Chapitre 1

Notions fondamentales de la programmation oriente objet

17

cette application que vous dvelopperez vos programmes, et cest uniquement partir de
cette application quils pourront tre excuts. Si vous souhaitez travailler sur des textes,
vous choisirez dentrer dans Word; pour faire des calculs, vous savez que cest dans Excel
que vous trouverez les objets dont vous avez besoin; Access sert au dveloppement et au
maniement des bases de donnes et PowerPoint, la cration de prsentations.
Cependant, limage des pices de votre maison, les applications Office ne sont pas hermtiques. Vous pouvez parfaitement vous prparer un plateau repas dans la cuisine et choisir
de manger au lit. De faon semblable, des projets VBA volus peuvent utiliser des objets
de diffrentes applications Office. Un programme dvelopp dans Excel peut utiliser des
donnes stockes dans une base de donnes Access ou des objets Word pour imprimer un
courrier qui accompagnera une facture, et envoyer 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 avoir un accs facile puisque le programme ne pourra tre excut qu partir de
celle-ci.

Info

Tous les projets dvelopps dans cet ouvrage seront hbergs dans Excel. Pour
accder aux objets dune application autre que lapplication hte, vous utiliserez la technologie Automation. Laccs aux objets dune autre application est
trait au Chapitre6.

Lapplication est donc la pice dans laquelle votre programme sexcutera. 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 quils
entretiennent sont reprsents sous la forme dun organigramme. Tout en haut de lorganigramme se trouve lapplication (la pice dans laquelle sont rangs tous les objets).
Viennent ensuite les classes dobjets de premier niveau 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 Figure1.1 reprsente ce qui pourrait tre un
modle dobjets sommaire de lapplication Salle de bains.

Info

La plupart des lments dExcelpeuvent tre manipuls dans Visual Basic pour
Applications en tant quobjets. Un classeur Excel, une feuille de ce classeur,
une cellule ou une bote de dialogue Rechercher sont des objets qui peuvent tre
manipuls dans un programme Visual Basic.

18

Excel et VBA

Figure1.1
Lensemble des
objets dune application est structur
selon un modle
dobjets qui
en dfinit les
rapports et la
hirarchie.

Pice
(Salle de bain)

Rangements

Placard

Armoire

Produits de
nettoyage

Conteneurs

Etagres

Baignoire

Lavabo

Bidet

Savon
Surgras

Savons

Savon de
Marseille

Shampooings

Dentifrices

Savon
Monjoli

Au sommet du modle se trouve la pice lapplication. Tous les objets auxquels vous
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 trouve lobjet
Application.
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 de
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 trouve la classe Worksheets qui englobe tous les
objets Worksheet (toutes les feuilles de calcul) de lobjet Workbook dsign.

ce
Astu

Pour accder laide en ligne des objets Excel, affichez lAide de Microsoft
Visual Basic pour Applications partir du menu "?", puis slectionnez la commande Rfrence du modle dobjets Excel (Objets Microsoft Excel si vous
utilisez une version antrieure). 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 peuvent pas interagir. Lobjet Savon de Marseille peut se trouver sur ltagre, et vous pouvez 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
de 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

Chapitre 1

Notions fondamentales de la programmation oriente objet

19

objets Worksheet (feuilles de calcul), contenant eux-mmes des objets Range (cellules et
plages de cellules).
Figure1.2
Le modle dobjets dExcel.

Accder aux objets


Le modle dobjets dtermine le chemin emprunter pour accder un objet. Pour vous
laver les dents, vous devez dabord accder votre brosse dents. Mme si le processus
est inconscient, vous identifiez lobjet Brosse dents par son emplacement: il est situ
dans la salle de bains, parmi les objets et produits de toilette. De la mme faon, en Visual
Basic, vous devez identifier un objet avant de pouvoir agir dessus (appliquer lune de ses
mthodes ou modifier la valeur de lune de ses proprits). Lorsque vous souhaitez vous
laver les dents, vous pensez et suivez 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.

20

Excel et VBA

Pour accder un objet Excel, vous 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.
Le point est utilis comme sparateur entre les diffrentes 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")

ou
Le code VBA permettant daccder lobjet Dentifrice serait:
Piece.ProduitsNettoyants("Dentifrice").Prendre

La premire partie du code permet daccder lobjet Dentifrice; lexpression identifiant


un objet est appele rfrentiel dobjet. La mthode Prendre est ensuite applique cet
objet afin de sen saisir.
Le code Visual Basic permettant dappeler la feuille de classeur Excel nomme "MaFeuille",
et situe dans le classeur "MonClasseur.xlsm" ( condition que celui-ci soit ouvert), serait:
Application.Workbooks("MonClasseur.xlsm").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.

Info

Outre leur nom, les objets dune collection sont identifis au sein de la collection par une valeur dindice reprsentant 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 reprsente la position de lobjet dans la collection. Linstruction


suivante:
Workbooks(2).Activate

active le classeur Excel apparaissant en deuxime position dans le menu Fentre.


Poursuivons lanalogie. Si vous 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.

Chapitre 1

Notions fondamentales de la programmation oriente objet

21

De faon semblable, dans le code VBA, les objets de niveau hirarchique suprieur celui
de lobjet que vous souhaitez atteindre peuvent parfois tre ignors. Cest toujours le cas
pour lobjet Application. En effet, votre projet VBA tant stock et donc excut partir
dune application hte, il est inutile de rappeler que vous tes dans cette application.
Lexpression:
Workbooks("MonClasseur.xlsm").Sheets("MaFeuille").Activate

suffit donc activer la feuille intitule "MaFeuille" du classeur nomm "MonClasseur.


xlsm".
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

Info

Une petite finesse terminologique: les objets proprement parler napparaissent jamais dans le code. Pour faire rfrence un objet, on utilise une proprit
qui appelle ou renvoie lobjet voulu. Dans les exemples prcdents, Workbooks
est une proprit de lobjet Application, qui renvoie tous les classeurs ouverts
(la classe Workbooks). Sheets est une proprit de lobjet Workbook, qui renvoie
toutes les feuilles de classeur (la classe Sheets) de cet objet.

Les proprits
Revenons lanalogie avec lautomobile et prenons la classe Voitures. Toutes les proprits propres aux objets Voitures y sont dfinies. Les objets ou classes situs immdiatement
sous Voitures dans le modle dobjets appartiennent la collection dobjets Voitures. En
tant que tels, ils hritent de toutes les proprits dfinies dans la classe Voitures.
Les proprits peuvent tre un attribut de lobjet ou un aspect de son comportement. Par
exemple, les proprits dune voiture 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 valeurs spcifiques qui distinguent les diffrents objets de la
collection. La proprit Couleur dun objet Voiture peut prendre la valeur Rouge, tandis
que la mme proprit dun objet de la collection est attache la valeur Bleu.
Lorsque vous dvelopperez des programmes VBA, vous exploiterez les proprits dun
objet de deux faons:

22

Excel et VBA

En modifiant les valeurs attaches aux proprits de lobjet. Pour modifier un objet,
il suffit de changer les valeurs de ses proprits. Les proprits dont les valeurs peuvent
tre modifies sont dites en lecture-criture.

Certaines proprits ne peuvent tre modifies et sont dites en lecture seule. Vous
pouvez, par exemple, modifier la proprit Etat_du_moteur (allum ou teint) dun objet
Voiture, mais non sa proprit Marque. Vous pouvez modifier le nombre de feuilles qui
composent un classeur, mais non sa date de cration.

En interrogeant les valeurs attaches aux proprits dun objet. Les valeurs des
proprits peuvent tre lues afin de connatre les spcificits de lobjet et dorienter le
comportement du programme. Par exemple, si la proprit Marque dun objet Voiture
est affecte la valeur BMW et sa proprit Contenu_Rservoir, affecte une valeur
gale 40 (litres), vous ferez un plein 40euros. Si les proprits Marque et Modle sont
respectivement affectes aux valeurs Citron et 2CV et la proprit Contenu_Rservoir,
une valeur gale 20, vous ne ferez quun plein 20euros.

De la mme faon, un programme VBA peut excuter 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 environ 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 59caractres".

Chapitre 1

Notions fondamentales de la programmation oriente objet

23

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 chiffres par exemple "2000" , sans que vous
puissiez pour autant diviser cette valeur par un nombre quelconque.
Valeurs numriques
Une valeur numrique est une suite de chiffres. Elle peut tre un nombre entier ou dcimal,
positif ou ngatif.
Les exemples suivants sont des valeurs numriques:

0;
1548972;
1245,4542;
100E4.

Info

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


valeur numrique 100E4 est gale 100104.

Les valeurs numriques sont interprtes comme des chiffres. Il peut sagir de valeurs
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

Info

Notez quune expression arithmtique peut tre compose de nombres


(100 25), de variables auxquelles sont affectes des valeurs numriques
(nombre1 nombre2), ou dune combinaison des deux (nombre1 25). Les
variables sont tudies en dtail au Chapitre6.

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 valeur que peut prendre la proprit Size (taille) dun objet Font (police)

24

Excel et VBA

dExcel doit aussi tre comprise entre ces deux valeurs. Dans le cas de lobjet Voiture, la
proprit Contenu_Rservoir doit toujours tre suprieure 0, la valeur maximale dpendant dautres spcificits de lobjet, telles que ses proprits Marque et Modle.
Valeurs boolennes
Certaines proprits ne peuvent prendre que deux tats: elles sont vrifies ou elles ne le
sont pas. Ces proprits sont attaches une valeur de type Boolean, ou valeur boolenne.
Une valeur boolenne peut tre True ou False.
La proprit Moteur_Allum dun objet Voiture est attache une valeur boolenne. La
valeur True lui est affecte si le moteur de lobjet Voiture est allum. Dans le cas contraire,
la proprit Moteur_Allum sera gale False.
Comme vous le verrez au Chapitre15, 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 enregistrement, et False dans le cas contraire.

Info

En Visual Basic, la valeur True peut tre remplace par 1, et la valeur False,
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 valeurs reprsentant ces
tats sont souvent 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
caractres, mais correspondent en ralit des valeurs numriques.
Les constantes intgres dsignent ltat de proprits pour un objet spcifique. Chacune
des applications Office possde ses propres constantes (puisquelle possde ses propres
objets). Cependant, certaines proprits tant communes toutes les applications de la
suite Office, les constantes dsignant leur tat se retrouvent aussi dans toutes les applications Office. Les constantes intgres de VBA commencent par deux lettres en minuscules
indiquant lapplication laquelle appartient la constante. Le tableau ci-dessous reprend les
prfixes des constantes VBA les plus courantes pour Microsoft Office :

Chapitre 1

vb
wd
xl
pp
ac
ol
fp
bind
fm

Notions fondamentales de la programmation oriente objet

25

Visual Basic
Word
Excel
PowerPoint
Access
Outlook
FrontPage
Classeur Office
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 voiture peuvent accepter quatre tats diffrents: dsactivs, activs
droite, activs gauche, position Warning (les clignotants droite et gauche activs). 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 exige de


lutilisateur la slection dune option parmi plusieurs possibles, ces options sont gnralement reprsentes sous forme de constantes en langage VBA. Par exemple, lorsque vous
insrez une cellule dans une feuille de classeur (Insertion > Cellules), vous devez choisir
entre les options Dcaler les cellules vers la droite ou Dcaler les cellules vers le bas. Linstruction VBA correspondante sera:
Selection.Insert(Shift)

o largument Shift est une des constantes XlInsertShiftDirection spcifiant la


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

Info

Les constantes sont la reprsentation textuelle de valeurs numriques. Chacune


des constantes Clignotant correspond une valeur numrique. La proprit
ClignotantWarning pourrait, par exemple, correspondre la valeur numrique 3. Vous pouvez indiffremment utiliser les constantes VBA ou les valeurs
numriques auxquelles elles correspondent. Il est cependant conseill dutiliser
les constantes, afin de faciliter la lecture du code. Si vous comprenez langlais, les
constantes vous sembleront en effet plus parlantes que de simples chiffres.

26

Excel et VBA

Accder aux proprits


Pour modifier une proprit dun objet, on utilise la syntaxe 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 valeur (chane, valeur numrique, constante ou valeur boolenne) doit tre
adapt la proprit. Si tel nest pas le cas, le programme gnre une erreur. Par exemple,
la proprit Contenu_Rservoir dun objet Voiture naccepte quune valeur numrique;
vous ne pouvez pas lui affecter une chane de caractres.
Le Tableau1.1 illustre diffrentes possibilits de modifier lobjet Voiture "MaVoiture":
Tableau1.1: Pour modifier un objet, il suffit den changer les proprits

Syntaxe

Type de la valeur
affecte

Consquence
pour lobjet Voiture

Voitures("MaVoiture").Immatriculation
= "4444AB29"

Chane de caractres Une nouvelle immatriculation

Voitures("MaVoiture").Moteur_Allume
= True

Valeur boolenne

Le moteur est allum

Voitures("MaVoiture").Contenu_Rservoir
= 50

Valeur numrique

Le rservoir contient 50 litres

Voitures("MaVoiture").Cligotant.Etat
= ClignotantWarning

Constante

Lobjet clignotant est en


position Warning

Pour lire la valeur dune proprit dun objet, on stocke gnralement cette valeur dans une
variable, selon la syntaxe suivante:
variable = Expression.Proprit

Linstruction suivante passe la fentre active en mode daffichage Aperu des sauts de page,
en dfinissant sa proprit View xlPageBreakPreview.
ActiveWindow.View = xlPageBreakPreview

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


daffichage en cours:
TypeAffichage = ActiveWindow.View

Chapitre 1

Notions fondamentales de la programmation oriente objet

27

Les mthodes
Les mthodes reprsentent les actions quun objet peut excuter. Tandis que les proprits
dfinissent un tat, les mthodes dterminent un comportement. Les mthodes pouvant 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 peuvent tre communes des objets diffrents, mme si
elles ont des consquences diffrentes. Par exemple, la mthode Ouvrir peut sappliquer
aux objets Porte, Coffre ou Cendrier dune voiture, comme un objet Porte ou Robinet
dune maison. Certaines mthodes se retrouvent dans toutes les applications Office. Cest
le cas pour toutes les mthodes correspondant des commandes de menu communes aux
applications. Par exemple, les mthodes Open (ouvrir) et Close (fermer) peuvent sappliquer un classeur Excel comme un document Word, un formulaire Access ou encore une
prsentation PowerPoint.
Une mthode peut avoir des consquences sur ltat de certaines proprits de lobjet auquel elle sapplique, voire sur dautres objets. Par exemple, si vous appliquez la
mthode Acclrer un objet Voiture, la valeur affecte la proprit Vitesse de cet
objet augmentera.
Si vous modifiez le contenu dune cellule dun classeur Excel, la taille de la cellule pourra
tre modifie en consquence. Si dautres cellules sont lies par des formules la cellule
dont vous modifiez la valeur, leurs valeurs seront mises jour en consquence. Chaque fois
que vous crez un nouveau classeur laide de la mthode Add, la valeur de la proprit
Count de la collection Workbooks (le nombre de classeurs ouverts) est incrmente de 1.
Chaque fois que vous 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
au pralable les proprits de lobjet auquel elle sapplique. Par exemple, si vous souhaitez appliquer la mthode Tourner un objet Voiture, vous devez auparavant modifier la
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).

28

Excel et VBA

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 exemple, arrter toutes les voitures de la collection Voitures, en leur
appliquant la mthode Arrter:
Voitures.Arrter

Pour fermer tous les classeurs ouverts dans une session Excel, vous utiliserez linstruction
suivante:
Workbooks.Close

Cette syntaxe 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 longlet Fichier. Par exemple, 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 lavons 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.

ition
Dfin

Une procdure vnementielle est une procdure attache un vnement utilisateur tel quun clic de souris, la frappe dune touche, lactivation dune feuille
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 avec les contrles de formulaires que vous dvelopperez et avec les objets. Vous apprendrez exploiter les vnements utilisateur affectant

Chapitre 1

Notions fondamentales de la programmation oriente objet

29

un formulaire aux Chapitres13 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 Chapitre15.

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 valeur numrique, boolenne, de type Date,etc. Visual Basic intgre
un certain nombre de fonctions que vous pouvez exploiter directement. Par exemple, la
fonction Asc renvoie le code ASCII du caractre slectionn, tandis que la fonction Int
renvoie la partie entire dun nombre. Certaines fonctions sont particulirement utiles.
Cest le cas de la fonction MsgBox qui permet dafficher une bote de dialogue contenant
des boutons tels que Oui, Non, Annuler,etc., et qui renvoie une valeur refltant le choix
de lutilisateur.
Vous pouvez aussi crer vos propres fonctions qui traiteront les valeurs qui leur seront
passes pour renvoyer une valeur ensuite utilise par le programme. Dans le cas dun objet
Voiture, vous pouvez crer une fonction Cot_Plein qui exploitera les proprits Contenu_
Rservoir et Contenance_Rservoir de lobjet, ainsi quune variable reprsentant le prix
de lessence, pour renvoyer une valeur correspondant au cot dun plein. Lorsque 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 sexcute correctement: le contenu du rservoir, sa contenance et
le prix de lessence.

Le modle dobjets dExcel


Excel est lapplication Office qui supporte VBA depuis le plus longtemps et son modle
dobjets est le plus mr. Excel offre de multiples possibilits de personnalisation au
programmeur.
Les objets les plus importants sont prsents dans le Tableau1.2. Le Listing1.1 prsente
des exemples dinstruction VBA utilisant ces objets. Lessentiel de ces exemples a t
gnr laide de lEnregistreur de macro, sans quil soit ncessaire dcrire du code.

30

Excel et VBA

Tableau1.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. Accessibles dans la bote de dialogue Macros complmentaires (Outils >
Macros complmentaires).

Dialogs (Dialog)

Les botes de dialogue prdfinies dExcel.

LanguageSettings

Renvoie des informations sur les paramtres de langue utiliss dans


lapplication.

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 Worksheet
function 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 cellules3D.

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.

Chapitre 1

Notions fondamentales de la programmation oriente objet

Collection (objet)

Description

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.

QueryTables (QueryTable)

Les tables de requte de la feuille.

PivotTables (PivotTable)

Les tableaux et les graphiques croiss dynamiques.

31

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

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.

(FormatCondition)

Listing1.1: Exemples dutilisation des objets Excel


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

32

Excel et VBA

affectation du nom MaPlage la palge de cellule A1:C20 de la feuille MaFeuille


ActiveWorkbook.Names.Add Name:=hop, RefersToR1C1:==Feuil1!R5C2:R12C3
Names.Add Name:=MaPlage, RefersTo:==MaFeuille!$a$1:$c$20
ajout dun graphique
Charts.Add
affectation du type Histogramme empil au graphique actif
ActiveChart.ChartType = xlColumnStacked
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 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
With Selection.Font
.Name = Arial

Chapitre 1

Notions fondamentales de la programmation oriente objet

.FontStyle = Gras
.Size = 8
.ColorIndex = 46
End With
coloriage de lintrieur de la plage slectionne
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

33

2
Premires macros
Au sommaire de ce chapitre

Crer une macro GrasItalique


Diffrentes mthodes denregistrement
crire la macro
Crer une macro Titre_WordArt
Stocker des macros

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 clavier, le dplacement ( laide du clavier ou de la
souris) dans un classeur et la modification de ce dernier peuvent tre enregistrs dans
une macro. Il suffit simplement de dclencher lEnregistreur 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 vous le souhaitez la srie dinstructions ainsi
mmorises, en excutant simplement la macro. Lorsque la srie de commandes est enregistre dans une macro, vous pouvez en visualiser le codage dans la fentre Code de Visual
Basic Editor. Vous dcouvrez ainsi la structure et la syntaxe des programmes VBA par la
pratique.

ition
Dfin

Le code est le texte, crit dans le langage de programmation, constituant le


programme. Le codage dsigne le fait de gnrer du code, soit en utilisant lEnregistreur de macro, soit en lcrivant directement dans la fentre de code de
Visual Basic Editor.

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 fonctionnalit. Vous verrez que lenregistrement de macros est relativement souple, et que la
cration dune macro offre plusieurs possibilits, plus ou moins efficaces et plus ou moins
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 vous souhaitez enrichir le contenu dune cellule dattributs de caractres, une solution consiste choisir le Format de cellule du bouton Format (onglet Accueil), et slectionner longlet Police. On dfinit ensuite les attributs voulus et lon valide en cliquant sur
OK. Nous utiliserons ici cette mthode pour crer une macro enrichissant la cellule ou la
plage de cellules 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 vous initier aux diffrentes 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 vous crerez par la suite, et ce quel que soit leur niveau de
complexit.

Chapitre 2

Premires macros

37

Afficher longlet Dveloppeur


Avant toute chose, vous devez afficher longlet Dveloppeur dans le ruban pour accder
aux fonctions de programmation VBA. Cliquez sur longlet Fichier du ruban, puis sur la
commande Options. Dans la fentre Options Excel, slectionnez Personnaliser le ruban.
Cochez ensuite la case Dveloppeur de la liste Onglets principaux (voir Figure2.1), puis
validez. Longlet Dveloppeur apparat sur le ruban.
it
ibil
pat
Com

Avec Office 2007, cliquez sur le bouton Office, situ dans langle suprieur
gauche de la fentre Excel; dans la fentre qui saffiche, cliquez sur le bouton
Options Excel. Cochez ensuite la case Afficher longlet Dveloppeur dans le
ruban, puis validez. Dans les versions 2007, laccs aux macros se fait via la
commande Macros du menu Outils.

Figure 2.1
Activez longlet Dveloppeur pour accder
aux fonctions de programmation du logiciel.

Figure 2.2
Longlet Dveloppeur
est maintenant accessible sur le ruban.

38

Excel et VBA

Dmarrer lenregistrement
Avant de commencer lenregistrement de la macro GrasItalique, slectionnez une cellule
laquelle vous attribuerez les formats de caractres voulus.
1. Cliquez sur le bouton Enregistrer une macro du groupe Code de longlet Dveloppeur
afin de lancer lenregistrement de la macro.
it
ibil
pat
Com

Dans les versions antrieures 2007 dOffice, les fonctions VBA sont accessibles via la commande Macro du menu Outils (ici Outils > Macro > Nouvelle
macro). Ainsi, lorsque nous ferons rfrence longlet Dveloppeur du menu
ruban, orientez-vous vers la commande Macros du menu Outils si vous utilisez
une version dExcel utilisant les menus classiques.

Figure2.3
La bote de dialogue
Enregistrer une macro.

2. Par dfaut, la zone Nom de la macro indique Macro1. Remplacez ce nom par
GrasItalique.

eil
Cons

Il est plus rapide denregistrer une macro sous le nom que lui attribue Excel
par dfaut. Cependant, si vous enregistrez plusieurs macros, celles-ci deviendront rapidement indiscernables. Attribuez un nom reprsentatif vos macros
et entrez une rapide description de leur fonction dans la zone Description, vous
naurez ainsi aucun problme pour les distinguer.

3. Dans la zone Enregistrer la macro dans, choisissez Classeur de macros personnelles.


4. Dans la zone Description, tapez une brve description de la macro, en conservant la
date de cration et, ventuellement, le nom du crateur.

eil
Cons

Lorsque vous enregistrez une macro, la date de son enregistrement et le nom


dutilisateur dclar pour lapplication apparaissent dans la zone Description
sous la forme "Macro enregistre le Date par Utilisateur". Vous retrouverez les

Chapitre 2

Premires macros

39

mmes indications dans la fentre de Code de la macro. Si vous partagez vos


macros avec dautres utilisateurs, il peut tre utile de conserver le nom du crateur afin de les identifier rapidement. De mme, conserver la date de cration
dune macro permettra 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 gain de temps quelle apporte lutilisateur. Lattribution dun raccourci clavier lui donnera donc toute son efficacit.

Placez le curseur dans la zone de texte Touche de raccourci et saisissez une lettre qui,
combine la touche Ctrl, sera affecte lexcution de la macro GrasItalique (dans
notre exemple, la combinaison Ctrl+B). Vous pouvez aussi maintenir la touche Maj
enfonce de faon affecter votre macro une combinaison Ctrl+Maj+Lettre.

La bote de dialogue Enregistrer une macro doit maintenant se prsenter comme la


Figure2.4.

Figure2.4
La bote de dialogue
Enregistrer une macro
complte.

ntion
Atte

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


vous est fournie quant laffectation ou non de ce raccourci une commande.
Si le raccourci choisi tait dj affect une commande Excel, il sera rattribu la macro sans que vous en soyez notifi. Veillez donc ne pas attribuer
votre macro un raccourci clavier dj utilis par Excel. Et ce particulirement si
dautres utilisateurs sont amens utiliser vos macros. Ils risqueraient en effet
dexcuter involontairement la macro en pensant utiliser le raccourci clavier
dune commande Excel.

6. Enfin, cliquez sur OK.


Le libell du bouton Enregistrer une macro devient Arrter lenregistrement, indiquant


que la macro est en cours denregistrement.

40

Excel et VBA

it
ibil
pat
m
Co

Dans les versions dExcel antrieures Office 2007, la barre doutils Arrt
de lenregistrement, simplement compose de deux boutons, saffiche lcran.
Le bouton Arrter lenregistrement permet dinterrompre lenregistrement de la
macro, tandis que le bouton Rfrence relative dtermine lenregistrement de
vos dplacements dans la feuille Excel ce sujet est abord plus loin dans ce
chapitre.

Figure2.5
La commande Enregistrer
une macro devient Arrt de
lenregistrement, prcisant que
lenregistrement a commenc.

Enregistrer les commandes de la macro


Comme nous lavons dit au chapitre prcdent, la cration dune macro simple ne ncessite pas la moindre ligne dcriture. Il suffit dexcuter les commandes qui la composentaprs avoir activ lEnregistreur de macro: lapplication hte se charge de convertir
les commandes excutes en langage Visual Basic.
Pour enregistrer la macro GrasItalique:
1. Activez longlet Accueil du ruban puis cliquez sur le bouton Format, situ dans langle
infrieur droit du groupe Cellules, et slectionnez la commande Format de cellule.
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 enregistres. Cliquez sur le bouton
Arrter lenregistrement de longlet Dveloppeur.
ntion
Atte

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


cette manipulation sera enregistre. Par consquent, la macro appliquera
la 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 excuter la macro GrasItalique, vous pouvez
procder de manire classique, ou et cest l que rside son intrt utiliser le raccourci
clavier que nous lui avons attribu.

Chapitre 2

Premires macros

41

La bote de dialogue Macro


1. Activez longlet Dveloppeur du ruban, puis cliquez sur le bouton Macros du groupe
Code. La bote de dialogue Macro saffiche.
Figure2.6
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 automati
quement et les cellules slectionnes senrichissent des attributs Gras et Italique (voir
Figure2.7).
Si la procdure dexcution que vous venez de mettre en uvre convient 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.
Figure2.7
Les cellules slectionnes
aprs excution de la macro.

Le raccourci clavier
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 attributs de caractres
voulus.

42

Excel et VBA

Structure de la macro
Lors de lenregistrement de la macro, les actions que vous avez effectues ont t converties
en langage Visual Basic. Pour en visualiser la syntaxe:
1. Activez longlet Dveloppeur, puis cliquez sur le bouton 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 Modifier. Visual Basic Editor, lenvironnement de dveloppement
intgr dOffice, souvre sur la fentre Code de votre macro (voir Figure2.8).
Info

Lorsque vous tentez de modifier la macro, si Excel affiche le message "Impossible de modifier une macro dans un classeur masqu", vous devez afficher
le fichier PERSONAL.XLSB. Slectionnez longlet Affichage, puis cliquez sur
le bouton Afficher du groupe Fentre. Si vous utilisez une version antrieure
Excel 2007, slectionnez la commande Afficher du menu Fentre. Slectionnez ensuite le fichier PERSONAL.XLSB (Perso.xls dans les anciennes versions
dExcel) dans la fentre qui saffiche et validez.

Figure2.8
La fentre Code
de Visual Basic
Editor permet
de visualiser et de
modifier le code
dune macro.

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


Sub GrasItalique()

et se termine par linstruction:


End Sub

Chapitre 2

Premires macros

43

Ces deux instructions encadrent systmatiquement toute macro enregistre. Sub est labrviation 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 sousroutine cest--dire le nom de la macro. End Sub indique la fin de la macro. Ces instructions 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 lenregistrement de
la macro (voir Figure2.3). En loccurrence le nom du crateur et la date denregistrement
de la macro, ainsi que le texte descriptif de la macro.
Les commentaires sont des indications ajoutes dans le code dun programme et
destines en faciliter la reconnaissance et/ou la comprhension.

Info

Certains lments du code apparaissent en couleur. Cette mise en valeur permet de distinguer aisment les lments constitutifs du code. Par dfaut, Visual Basic Editor applique la
couleur verte aux commentaires et la couleur bleue aux mots cls du langage.

ition
Dfin

Un mot cl est un mot ou un symbole reconnu comme lment du langage de


programmation Visual Basic. Il peut sagir dune structure de contrle, dune
fonction ou de tout autre lment du langage indpendant du modle dobjets
delapplication hte. Les structures de contrle sont des instructions qui permettent de diriger le comportement dune macro (par exemple, rpter une
opration en boucle, neffectuer une instruction que dans un contexte spcifique). Vous apprendrez utiliser les structures de contrle de Visual Basic au
Chapitre7.

Entre les instructions Sub GrasItalique() et End Sub se trouvent les instructions quexcutera la macro:
With Selection.Font
.Name = Arial
.FontStyle = Gras italique
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False

44

Excel et VBA

.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With

it
ibil
pat
m
o
C

Si vous utilisez une version antrieure Excel 2007, les trois lignes ThemeColor,
TintAndShade et ThemeFont de code la ligne .ColorIndex = xlAutomatic sont
remplaces par une seule ligne de code:
.ColorIndex = xlAutomatic

Cette diffrence vient de nouvelles fonctionnalits apparues avec Excel 2007.


Il sagit des commandes effectues lors de lenregistrement : ces lignes indiquent la
macro les actions accomplir. Leur structure peut vous drouter, mais vous vous y habituerez 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 slection
en cours dans le document actif. Lorsque vous 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 de donnes,etc.)
est effectue sur une plage de cellules sans que celle-ci soit dfinie auparavant.
Info

Le code dun projet VBA reflte la hirarchie dobjets (ou modle dobjets) de
lapplication hte. Des proprits sont utilises pour appeler des objets spcifiques. Pour un rappel de ces concepts, reportez-vous au Chapitre1.

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, vous faites appel une bote de dialogue dans 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

Chapitre 2

ition
Dfin

Premires macros

45

Le verbe Coder dsigne la transcription dactions propres lapplication dans


un langage de programmation dtermin.

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.

chaque proprit est affecte 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.
pel
Rap

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


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

Une chane de caractres. 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 lenregistrement de la macro.

Une valeur numrique. Les valeurs possibles varient 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 valeur prdfinie qui permet de paramtrer une
proprit. Par exemple, la proprit Underline dfinit le type de soulignement
appliqu la police ou la plage. Sa valeur correspond ltat de loption Soulignement lors de lenregistrement de la macro. Elle est ici attache la constante
xlUnder
lineStyleNone qui correspond loption Aucun de la zone de liste droulante Soulignement. Il existe une constante XlUnderlineStyle spcifique pour
chaque option de la zone de liste droulante Soulignement (xlUnderlineStyle
Double pour Soulignement double, xlUnderlineStyleSingle pour Soulignement
simple,etc.).

Le Tableau2.1, en prsentant quelles options de la bote de dialogue Format de cellule


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

46

Excel et VBA

Tableau2.1: Les proprits de lobjet Font dExcel

Proprit

Format de cellule
(onglet Police)

Name

Zone de texte Police

Chane de caractres correspondant au nom dune police


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

Valeurs autorises

Strikethrough Case cocher Barr

True (barr) ou False (non barr)1.

SuperScript

True (mise en forme exposant) ou False (pas de mise en


forme exposant)1.

Case cocher
Exposant

Les attributs Exposant et Indice ne pouvant tre appliqus


une mme slection, lorsque vous affectez la valeur True
la proprit SuperScript, la proprit Subscript prend la
valeur False2.
SubScript

Case cocher Indice

True (mise en forme indice) ou False (pas de mise en forme


indice)2.

Les attributs Indice et Exposant ne pouvant tre appliqus


une mme slection, lorsque vous affectez la valeur True
la proprit SubScript, la proprit SuperScript prend la
valeur False2.
OutlineFont
et Shadow

[Aucune correspondance]

True ou False (sans effet).

Underline

Zone de liste
droulante
Soulignement

Une des cinq constantes xlUnderlineStyleNone reprsentant les cinq types de soulignement disponibles dans Excel1.

ThemeColor,
TintAndShade
et ThemeFont

Onglet Remplissage

Respectivement une des constantes xlThemeColor (la couleur de motif), une valeur numrique comprise entre 1 et 1
reprsentant la teinte applique cette couleur (de sombre
lumineux) et une des constantes xlThemeFont qui correspond la police du thme.

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.

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 proprit Name de
lobjet 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.

Chapitre 2

Premires macros

47

Comme le montre le tableau prcdent, les actions excutes sont codes selon des principes rcurrents auxquels lenregistrement de macros vous familiarisera.
La macro GrasItalique ouvre donc (virtuellement) la bote de dialogue Format de cellule
sur longlet Police et y dfinit les options telles quelles lont t lors de lenregistrement.
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.
la Figure2.9, 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 dialogue
Police ont en effet t pris en compte lors de lenregistrement de la macro.
Cela apparat clairement dans la fentre de code (voir Figure2.8): 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.
Figure2.9
Lensemble des arguments en
cours lors de lenregistrement
de la macro est appliqu.

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


fentre de code de la macro:
1. Activez longlet Dveloppeur du ruban, puis cliquez sur le bouton Macros du groupe
Code. Slectionnez GrasItalique, puis cliquez sur le bouton Modifier. Visual Basic
Editor souvre sur la fentre de code de la macro GrasItalique.

48

Excel et VBA

2. Supprimez toutes les proprits de lobjet Font que la macro ne doit pas modifier
(toutes les instructions sauf .FontStyle = "GrasItalique"). Dans le menu Fichier,
choisissez Enregistrer PERSONAL.XLSB ou cliquez sur le bouton Enregistrer 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.

Info

La structure With...End With est utilise pour paramtrer les proprits dun
objet sans avoir rpter la rfrence cet objet pour chaque proprit. Puisque
la macro ne dfinit ici quune proprit, 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 vous avancerez dans lapprentissage de la programmation Excel,


vous dcouvrirez par la pratique les diffrents lments des botes de dialogue Macro et
Enregistrer une macro. Le Tableau2.2 en prsente rapidement les fonctions.
Tableau2.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.

Modifier

Ouvre la fentre de code de la macro slectionne dans Visual Basic


Editor afin den permettre la modification.

Chapitre 2

Premires macros

49

Bouton

Description

Crer

Ouvre, dans Visual Basic Editor, une fentre Code simplement compose
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 saffiche.

Options

Ouvre la bote de dialogue Options de macro pour la macro slectionne, 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 saffiche 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 attribu


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

Une autre mthode denregistrement


LEnregistreur de macro est un instrument souple qui enregistre lensemble des commandes
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.

50

Excel et VBA

Dans le cas de la macro GrasItalique, il est plus simple de cliquer successivement 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. Cliquez sur le bouton Enregistrer une macro de longlet Dveloppeur. 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 saffiche, vous demandant de confirmer
le remplacement de la macro existante. Confirmez.
Figure2.10
Confirmez le remplacement
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
lenregistrement.

La macro est enregistre.

Vous pouvez aussi enregistrer la macro en utilisant les raccourcis clavier affects aux enrichissements Gras et Italique respectivement Ctrl+G et Ctrl+I.

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 (bouton Macro de longlet Dveloppeur, puis Modifier).
Le texte de la macro se prsente ainsi:
Sub GrasItalique()
Selection.Font.Bold = True
Selection.Font.Italic = True
End Sub

Chapitre 2

Premires macros

51

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 valides dans une seule action cest le cas
pour toutes les options dune bote de dialogue au moment o vous 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

crire la macro
Maintenant que vous connaissez la structure de la fentre de code dune macro, vous allez
crire directement la macro, sans laide de votre programmeur attitr, lEnregistreur de
macro.
Pour crire la macro GrasItalique:
1. Cliquez sur le bouton Macros de longlet Dveloppeur. Slectionnez la macro GrasItalique dont le nom saffiche alors dans la zone Nom de la macro. Cliquez sur le bouton
Supprimer. Excel vous demande de confirmer la suppression de la macro GrasItalique.
Confirmez.
2. Cliquez de nouveau sur le bouton Macros de longlet Dveloppeur. Dans la zone Nom
de la macro, saisissez GrasItalique, puis cliquez sur le bouton Crer. Visual Basic
Editor souvre sur la fentre de code de la nouvelle macro GrasItalique.

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 Enregistrer PERSONAL.XLSB, puis Fermer et
retourner dans Microsoft Excel.

52

Excel et VBA

Crer une macro nest pas plus compliqu que cela.


Contrairement la mthode de lenregistrement, la cration dune macro ne permet pas
lattribution dun raccourci clavier. Pour affecter un raccourci clavier 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
clavier et saisissez ventuellement une description pour la macro (voir Figure2.11).
Validez en cliquant sur OK
Figure2.11
La bote de dialogue Options
de macro permet daffecter
un raccourci clavier une
macro existante.

Info

ce
Astu

Visual Basic pour Applications ne tient pas compte des majuscules. Celles-ci
sont places dans le code (Selection.Font, par exemple) dans le seul but den
faciliter la lecture. Mais vous pouvez parfaitement saisir du texte dans une
fentre de code entirement en minuscules (selection.font).

Si vous saisissez du texte en minuscules dans une fentre de code, Visual Basic
replace les majuscules dans les instructions quil reconnat lorsque vous changez de ligne. Sil ne modifie pas la casse dune instruction saisie en minuscules,
cest quil ne la reconnat pas. Par exemple, selection.font.bold = true
deviendra Selection.Font.Bold = True lors du changement de ligne ; par
contre, si vous tapez selection.font.old = true, Word ne placera pas de
capitale old. Cest un bon moyen de vrifier que vous navez pas commis de
fautes lors de la saisie.

Chapitre 2

Premires macros

53

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 vous parat anodine, sachez que les principes acquis dans les sections
prcdentes sont valables pour toutes les macros, quelle que soit lapplication hte.
La macro GrasItalique est une vritable commande que vous avez ajoute Excel. En
procdant de la mme faon, 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 valeurs de cellules,etc.

Info

ce
Astu

Vous avez appris dans ce chapitre enregistrer ou crer une macro. La mise en
uvre de macros complexes ncessite souvent de combiner ces deux mthodes.
On enregistre en gnral les commandes de la macro, puis on y crit les fonctions
qui ne peuvent tre enregistres.

Pour quune macro sexcute automatiquement louverture dun classeur,


affectez-lui le nom Auto_Open. Cette fonction est intressante si vous souhaitez
paramtrer diffremment Excel selon les classeurs affichs. Enregistrez simplement les options dExcel dans une macro Auto_Open.
Pour quune macro sexcute automatiquement la fermeture dun classeur,
affectez-lui le nom Auto_Close. Vous pouvez ainsi mettre jour un autre fichier,
crer une sauvegarde du fichier dans un autre dossier,etc.

Choisir laccessibilit des macros


Lorsque vous enregistrez ou crez des macros, celles-ci sont stockes dans un projet VBA,
attach un document spcifique de lapplication hte. Pour excuter une macro, le document hbergeant 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 application puissante et efficace.

Accessibilit globale ou limite


Une macro peut tre accessible cest--dire excute, modifie, renomme ou supprime partir de nimporte quel document, ou limite des documents spcifiques. Sil est

54

Excel et VBA

intressant de pouvoir assurer une accessibilit globale aux macros, il est parfois prfrable
dattacher une macro un classeur spcifique. Cest le cas si la macro est conue pour fonctionner avec un certain type de donnes et si elle est inutile dans dautres classeurs voire
susceptible dy provoquer des dommages. En outre, limiter la disponibilit des macros aux
documents concerns en facilite la gestion.
Le stockage dune macro est dfini lors de son enregistrement ou de sa cration, et peut
tre modifi par la suite. Une macro peut galement 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 Chapitres4 et5.
Lors de lenregistrement dune macro, laffectation de la macro un document seffectue
par la zone de liste Enregistrer la macro dans de la bote de dialogue Enregistrer une macro
(voir Figure2.12). Les sections suivantes prsentent les possibilits de stockage des macros
Excel.
Figure2.12
Slectionnez le document
de stockage de la macro
lors de son enregistrement.

Classeurs et modles
Les macros enregistres dans Excel sont stockes dans des classeurs ou dans des modles.
Pour accder une macro, il faut que le classeur dans lequel est stocke la macro soit
ouvert. Si plusieurs classeurs sont ouverts, vous pouvez accder aux macros dun des classeurs
ouverts partir de nimporte quel autre classeur.
Les macros enregistres dans un modle sont accessibles lorsque vous crez un nouveau
classeur fond sur ce modle (en choisissant la commande Nouveau de longlet Fichier
Fichier et en slectionnant un modle). Lorsque vous enregistrez le nouveau classeur, les
macros du modle sont "copies" dans celui-ci, et restent donc disponibles par la suite,
lorsque vous rouvrez le classeur.

Chapitre 2

Premires macros

55

Notez cependant que les classeurs Excel nentretiennent pas de lien avec le modle partir
duquel ils ont t crs. Si vous ajoutez, modifiez ou supprimez des macros dans un modle,
ces changements ne seront pas effectifs pour les classeurs pralablement crs partir du
modle.
Pour enregistrer ou crer une macro dans un modle, vous devez ouvrir le modle en
question.
Les classeurs dans lesquels sont stockes les macros sont identifis par une extension spcifique. Il peut sagir dun "modle prenant en charge les macros" (.xltm) ou dun "classeur
prenant en charge les macros" (.xlsm).
it
ibil
pat
Com

Dans les versions antrieures Excel 2007, les classeurs prenant en charge les
macros ne portent pas dextension spcifique.

Le classeur de macros personnel


Lors de lenregistrement de vos macros, vous pouvez choisir de stocker la macro dans le
classeur actif afin den limiter la disponibilit ce dernier. La macro ne pourra alors tre
excute, modifie ou supprime qu condition que ce classeur soit ouvert. Mais vous
aurez certainement besoin daccder la plupart de vos macros partir de classeurs diffrents. Pour rendre une macro accessible partir de nimporte quel classeur Excel, il suffit
de lenregistrer dans le classeur de macros personnel, PERSONAL.XLSB.
Le classeur PERSONAL.XLSB est cr la premire fois que vous enregistrez une macro
dans le classeur de macros personnel. Lorsque vous quittez Excel aprs avoir enregistr
votre premire macro dans le classeur de macros personnel, la bote de dialogue prsente
la Figure2.13 saffiche.
Figure2.13
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.

Le classeur de macros personnel est ouvert chaque fois que vous excutez Excel. Vous
pouvez donc en excuter les macros qui y sont stockes partir de nimporte quel classeur.

56

Excel et VBA

Info

eil
Cons

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


Pour accder ce classeur, choisissez la commande Afficher de longlet Affichage, et slectionnez PERSONAL.XLSB dans la bote de dialogue Afficher.

Le classeur de macros personnel est stock dans le dossier XLSTART. Ce classeur contiendra probablement lessentiel de vos macros. Il est donc conseill
den effectuer rgulirement une sauvegarde. Lemplacement de ce fichier varie
en fonction de votre systme dexploitation, et aussi dune version dExcel
lautre.
Pour en connatre lemplacement, afficher le fichier PERSONAL.XLSB et choisissez la commande Enregistrer sous. Dans la bote de dialogue qui apparat,
relevez le chemin propos par dfaut.

Les macros complmentaires


Les macros peuvent galement tre attaches un classeur enregistr en tant que macro
complmentaire (extension XLAM et XLA pour les versions antrieures Excel 2007).
Ce type de classeur est particulirement adapt la distribution de macros. Les classeurs
de macros complmentaires peuvent en effet 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 "ouverts": 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 pouvez regrouper les macros par classeur tout en leur
assurant une accessibilit globale. Les principaux avantages des macros complmentaires
sont les suivants:

distribution et gestion simplifies;


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.

Chapitre 2

Premires macros

57

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 Dbogage >
Compiler.
3. Protgez ventuellement votre projet par mot de passe (voir Chapitre16).
4. Quittez ensuite Visual Basic Editor et, dans Excel affichez les Proprits du fichier en
cliquant sur longlet Fichier, puis sur Informations. Dans le volet droit de la fentre
qui saffiche, cliquez sur le bouton Proprits, puis choisissez Proprits avances.
it
ibil
pat
Com

Avec Excel 2007, cliquez sur le bouton Office, puis choisissez Prparer >
Proprits. Avec les versions antrieures dExcel, choisissez la commande
Proprits du menu Fichier.

5. Activez longlet Rsum de la bote de dialogue Proprits. Saisissez un nom et un


descriptif reprsentatifs dans les zones Titre et Commentaire (voir Figure2.14). Ce
sont le titre et le commentaire qui apparatront dans la bote de dialogue Macros
complmentaires.
Figure2.14
Choisissez un titre
et un commentaire clairs.

58

Excel et VBA

6. Choisissez Fichier > Enregistrer sous. Dans la zone Type de fichier, slectionnez
Macro complmentaire Excel (*.xlam). Le dossier AddIns est activ par dfaut.
it
ibil
pat
Com

Excel 2010 et Excel 2007 proposent deux formats pour les macros complmentaires : le format .xlam et le format Excel 97-2003 (extension .xla). Si vous
souhaitez distribuer vos macros, il est recommand de choisir ce second format,
afin dassurer la compatibilit de vos macros avec un maximum de versions
dExcel.

7. 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. Cliquez sur longlet Fichier, puis sur le bouton Options. Dans la fentre qui saffiche,
slectionnez Complments dans le volet gauche. La fentre reprsente la Figure
2.15 saffiche. Cliquez sur le bouton Atteindre ct de la zone Grer.

Les macros complmentaires sont affiches. Les macros complmentaires actives sont
coches.

it
ibil
pat
Com

Avec Excel 2007, cliquez sur le Bouton Office au lieu de longlet Fichier. Dans
les versions antrieures, choisissez Outils >Macros complmentaires ou Outils >
Complments.

2. Cliquez sur le bouton Parcourir. Si vous avez enregistr la macro complmentaire


dans le dossier propos par dfaut, elle apparat dans la liste. Slectionnez le fichier de
macro complmentaire voulu et validez.
3. Cochez ou dcochez la macro complmentaire. Le nom de la macro complmentaire et le descriptif qui apparaissent dans la bote de dialogue Macros compl
mentaires sont ceux qui ont t indiqus comme titre et commentaire du fichier (voir
Figure2.16).

Chapitre 2

Premires macros

59

Figure 2.15
La liste des complments
dExcel 2007.

Figure2.16
Notre macro complmentaire
apparat maintenant dans la
liste des macros complmentaires dExcel.

Les macros complmentaires intgres dExcel


Excel est livr avec un nombre important de macros complmentaires, telles que les Outils
pour leuro ou le Solveur,etc. Celles-ci doivent tre installes pour tre accessibles. Si ce
nest pas le cas, vous devez relancer linstallation dOffice et installer les macros complmentaires non disponibles.

60

Excel et VBA

eil
Cons

Avant de vous lancer dans des activits de programmation complexe, vrifiez


sil nexiste pas une macro complmentaire intgre rpondant vos besoins.
Vous pouvez galement tlcharger gratuitement des macros complmentaires
sur le site de Microsoft (http://www.microsoft.com/france). Enfin, des socits
de dveloppement spcialises commercialisent des macros complmentaires.

Dfinir le classeur de stockage lors de lenregistrement


dunemacro
Lors de lenregistrement dune macro, la zone Enregistrer la macro dans de la bote de
dialogue Enregistrer une macro, permet de dfinir le classeur dans lequel sera stocke la
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 (PERSONAL.XLSB) ou dun autre classeur.

Figure2.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 les
macros que vous souhaitez visualiser. Quatre options soffrent vous:

Tous les classeurs ouverts. Les macros de tous les classeurs ouverts (y compris le classeur de macros PERSONAL.XLSB) sont accessibles. Les macros qui ne sont pas stockes
dans le classeur de macros personnel apparaissent sous la forme Classeur!NomMacro,
o Classeur est le nom du classeur hbergeant la macro, et NomMacro le nom de la
macro.

Chapitre 2

Premires macros

61

Ce classeur. Seules les macros du classeur actif sont affiches. Les macros apparaissent
alors simplement sous la forme NomMacro.

PERSONAL.XLSB. 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.

Figure2.18
Vous pouvez dfinir le
classeur dont vous souhaitez
visualiser les macros.

ntion
Atte

ce
Astu

Si vous fermez le classeur de macros personnel, vous ne pourrez plus accder


aux macros qui y sont stockes, ni y enregistrer de nouvelles macros. Le classeur
de macros personnel souvrira de nouveau lors de la prochaine session Excel.
Pour enregistrer des macros daccs global ou accder aux macros du classeur
de macros personnel au cours de la session active, vous devez rouvrir le classeur
PERSONAL.XLSB.

Le classeur PERSONAL.XLSB souvre lexcution dExcel parce quil se


trouve dans le dossier XLSTART (ou XLOuvrir selon la version dOffice). Pour
ouvrir automatiquement un classeur au lancement dExcel, crez un raccourci
vers ce classeur et placez-le dans ce dossier.

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

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 techniques de
dplacement dans une feuille de calcul, et de comprendre les concepts de rfrence 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 indiffremment 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. Autrement
dit, si vous vous contentez de vous dplacer dans la feuille par des clics de souris ou en
utilisant les touches de dplacement du clavier sans jamais intervenir 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 vous le verrez
dans cette section, les proprits utilises varient selon le type de slection effectu, mais
toutes renvoient un objet Range.
Le codage en langage Visual Basic de vos dplacements dans la feuille de calcul Excel
varie selon que vous activiez ou non la rfrence relative aux cellules, en cliquant sur le
bouton correspondant de la barre doutils Arrt de lenregistrement (voir Figure 3.1) ou
dans la zone Code de longlet Dveloppeur si vous utilisez Excel 2007.

Rfrence absolue

Rfrence relative

Figure3.1
Vous pouvez enregistrer vos dplacements par rfrence relative ou absolue aux cellules.

Mthodes de slection dans une feuille Excel


Clavier
Lenregistrement de dplacements dans une feuille Excel, par rfrence relative aux cellules,
ncessite, dans certains cas, que vous utilisiez le clavier (par exemple, si vous souhaitez
activer la dernire cellule non vide dune ligne). Le Tableau3.1 prsente les diffrentes
possibilits de dplacement dans Excel laide du clavier.

Chapitre 3

Dplacement et slection dans une macro Excel

65

Tableau3.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
courante1

Ctrl+

Sur la dernire cellule non vide de la ligne courante1

Ctrl+

Sur la premire cellule non vide de la colonne courante1

Ctrl+

courante1

Ctrl+

Sur la premire cellule non vide de la ligne

Sur la dernire cellule non vide de la colonne

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

Ctrl+Dbut

Sur la cellule situe langle infrieur droit de la feuille active2

Ctrl+Fin

1. Si des cellules vides se trouvent entre la cellule active et la cellule vise, Excel sarrte successivement sur les
cellules 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+ entranera 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.

ntion
Atte

Lors de lenregistrement dune macro par rfrence absolue aux cellules, cest
ladresse des cellules qui est enregistre. Pour enregistrer un dplacement relatif (par exemple, la dernire cellule non vide de la ligne courante), vous devez
activer lenregistrement par rfrence relative aux cellules en cliquant sur le
bouton correspondant de la barre doutils Arrt de lenregistrement.

Pour tendre la slection de la cellule active une cellule donne de la feuille, utilisez lune
des combinaisons de touches prsentes dans le Tableau3.1, en maintenant la touche Maj
enfonce. Pour slectionner les colonnes entires correspondant aux cellules slectionnes,
utilisez le raccourci clavier Ctrl+Barre despace; pour slectionner les lignes entires, utilisez
Maj+Barre despace.
Notez que, pour slectionner des zones non contigus, vous devez obligatoirement utiliser
la souris.

66

Excel et VBA

Souris
Lutilisation de la souris pour effectuer 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
adjacentes, procdez de la mme faon, en cliquant sur les rfrences de ces lignes ou de
ces colonnes.
Pour slectionner des cellules non contigus, cliquez sur la premire cellule que vous
souhaitez slectionner, appuyez sur la touche Ctrl et, tout en la maintenant enfonce,
cliquez successivement sur les cellules que vous souhaitez slectionner. Pour slectionner
des lignes ou des colonnes non contigus, procdez de la mme faon, 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 voulus. Vous pouvez, par exemple,
slectionner simultanment la colonne C, la ligne5 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 ligne5, 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, lexception dune seule, sont noircies. La cellule non noircie est la cellule
active de la plage (voir Figure3.2).
Figure3.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 exemple), cette mise en
forme sera applique lensemble des cellules de la plage slectionne. Si vous appuyez

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 gnralement, si vous effectuez une opration pouvant 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 active de la plage slectionne
qui est affecte. Par exemple, 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.

Info

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

La cellule active dune plage de cellules dpend de lordre dans lequel vous avez slectionn les diffrentes cellules qui la composent. Vous verrez dans les sections qui suivent
comment le mode de slection dtermine la cellule active 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 signifie
que, lorsque vous vous dplacez dans les cellules dune feuille Excel, lEnregistreur 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, lexcution de
la macro entranera lactivation de la cellule B6, et ce, quelle que soit la cellule active au
moment de lexcution de la macro.
Le bouton Rfrence relative de la barre doutils Arrt de lenregistrement permet denregistrer les dplacements dans la feuille Excel relativement la cellule initialement active.
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 enregistr comme un
dplacement dune colonne vers la droite et de deux lignes vers 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 relatives et absolues, en cliquant sur le bouton Rfrence relative chaque fois que vous voulez
changer le type de rfrence aux cellules. Observez le classeur reprsent la Figure3.3.
La colonne D contient les chiffres daffaires effectus par les reprsentants. La colonne E
doit contenir les primes.

68

Excel et VBA

Figure3.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 Chapitre5 crer des fonctions
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
la 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 charge ce calcul, il vous faudra
utiliser une rfrence absolue aux cellules pour le point 1 et une rfrence relative aux
cellules pour les dplacements des points 3 et 5. Il vous suffit pour cela de vous assurer que
lenregistrement de la macro seffectue par rfrence absolue avant deffectuer la slection
de la cellule A4, puis de cliquer sur le bouton Rfrence relative, afin dactiver lenregistrement des dplacements par rfrence relative aux cellules.
ntion
Atte

La rfrence aux cellules (relative ou absolue) active au moment o vous interrompez lenregistrement dune macro sera aussi la rfrence active si vous
enregistrez une nouvelle macro dans la mme session Excel (sans avoir quitt,
puis relanc lapplication). Lorsque vous enregistrez une macro, pensez toujours vrifier que vos dplacements seront enregistrs selon la rfrence aux
cellules souhaites avant de commencer vous dplacer dans la feuille Excel.

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

Selection. Renvoie lobjet slectionn dans la feuille de calcul active. Si lobjet slectionn est une cellule ou un groupe de cellules, lobjet renvoy est un objet Range repr-

calcul.

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

70

Excel et VBA

Slection de cellules contigus


Lexpression Visual Basic pour une rfrence absolue une cellule se prsente ainsi:
Range(Adresse_Cellule).Select

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 suivie de la rfrence de ligne
(un nombre).
La mthode Select entrane la slection de lobjet Range prcdemment dfini (ici la
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 activer la feuille voulue laide de la
mthode Activate. Les instructions permettant de slectionner la cellule B5 de la feuille
intitule Janvier du classeur Ventes.xlsx sans quil soit ncessaire que Janvier soit la
feuille active sont:
Workbooks(Ventes.xlsx).Sheets(Janvier).Activate
Range(B5).Select

Info

Nous considrerons dans la suite de ce chapitre que la slection seffectue sur


la feuille active, et omettrons donc toute instruction destine activer la feuille
dont les cellules doivent tre slectionnes.

ce
Astu

La proprit Cells permet aussi de coder une rfrence absolue une cellule.
La proprit Cells sutilise avec la syntaxe suivante:
Cells (ligne, colonne)

o ligne est lindex de ligne et colonne lindex de colonne, tous deux exprims
par un chiffre largument colonne prend 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. Lorsque vous enregistrez un dplacement par rfrence absolue aux cellules, ce dplacement est toujours 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 Chapitre6.

Chapitre 3

Dplacement et slection dans une macro Excel

71

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.
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 vous 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 gauche 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 Figure3.4).
Figure3.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 syntaxe de la proprit Range lors de la slection de cellules non
contigus est la suivante:
Range(Cell1, Cell2,..., Celln).Select
Range("Cell_Active").Activate

72

Excel et VBA

o les arguments Cell1, Cell2, ..., Celln reprsentent les cellules successivement
slectionnes. Lexpression Range("Cell_Active").Activate a le mme rle que lors de
la slection dune plage de cellules (indique la cellule active de la slection). Largument
Cell_Active reprsente la dernire cellule slectionne.
Par exemple, lexpression Visual Basic:
Range(B5, D10, F2, A3).Select
Range("A3").Activate

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


touche Ctrl enfonce.

Slection de lignes et de colonnes


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

pel
Rap

Pour slectionner une colonne ou une ligne dans une feuille Excel, cliquez sur
len-tte de la ligne ou de la colonne que vous souhaitez slectionner, ou utilisez
lun des raccourcis clavier prsents dans le Tableau3.1. Pour slectionner des
colonnes ou des lignes contigus, slectionnez la premire 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 lexpression Range("cell_active").Activate, cell_active reprsente ladresse de
la cellule active dans la plage slectionne. Cette expression est omise si la cellule active
est la cellule situe langle suprieur gauche de la plage slectionne.

Chapitre 3

Info

Dplacement et slection dans une macro Excel

73

Lorsque vous slectionnez une plage de lignes dans une feuille Excel, la cellule
active est la premire cellule de la ligne que vous slectionnez. Par exemple, si,
lors de lenregistrement dune macro, vous slectionnez la ligne5, puis maintenez la touche Maj enfonce et slectionnez la ligne10, cest la cellule A5 (situe
langle suprieur gauche de la plage) qui sera active. En revanche, si vous
slectionnez la ligne10, puis la ligne5, en maintenant la touche Maj enfonce,
cest la cellule A10 qui sera active.

Si la slection ne porte que sur une ligne, les arguments ligne1 et ligne2 ont la mme
valeur et lexpression Range("cell_active").Activate est omise. Par exemple, si vous
enregistrez dans une macro la slection de la ligne5 de la feuille active, le code Visual
Basic correspondant se prsentera ainsi:
Rows(5:5).Select

Figure3.5
Lorsquune seule ligne
est slectionne, le code
ne spcifie pas de cellule
active.

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


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

74

Excel et VBA

Figure3.6
La cellule A10
est la cellule active.

Lorsque vous slectionnez une ligne, par dfaut, la premire cellule de la ligne est la cellule
active. Si vous modifiez la cellule active dans ou hors de la plage slectionne en maintenant la touche Ctrl enfonce et en cliquant sur la cellule que vous souhaitez activer, 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 active. Par exemple, si vous


slectionnez la ligne14, puis maintenez la touche enfonce et cliquez sur la cellule B14 lors
de lenregistrement dune macro, le code Visual Basic correspondant se prsentera ainsi:
Range("14:14,B14").Select
Range("B14").Activate

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

Chapitre 3

Dplacement et slection dans une macro Excel

75

o les arguments col1 et col2 reprsentent respectivement lindex 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 lexpression Range("cell_active").Activate, cell_active reprsente ladresse de
la cellule active dans la plage slectionne. Cette expression 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 arguments col1 et col2 ont la mme valeur
et lexpression Range("cell_active").Activate est omise. Par exemple, si vous enregistrez dans une macro la slection de la colonne B de la feuille active, le code Visual Basic
correspondant se prsentera ainsi:
Columns("B:B").Select

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 prsentera 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 active. Si vous modifiez la cellule active dans ou hors de la plage slectionne en
maintenant la touche Ctrl enfonce et en cliquant sur la cellule que vous souhaitez 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 largument cell_active reprsente ladresse de la cellule active. Par exemple, si vous


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

76

Excel et VBA

Figure3.8
La cellule E5
est la cellule active.

Info

Vous pouvez substituer la proprit Range aux proprits Rows et Columns dans
le code de votre macro, en conservant les mmes arguments. Par exemple, les
expressions Visual Basic Range("5:10").Select et Rows("5:10").Select correspondent toutes deux la slection des lignes5 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 lenregistrement 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 arguments vont par paires, chaque paire reprsentant une plage de lignes ou de colonnes contigus slectionnes le signe: est utilis comme sparateur. Les arguments 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

Chapitre 3

Dplacement et slection dans une macro Excel

77

Figure3.9
Vous pouvez conjuguer la slection de colonnes adjacentes et de colonnes non contigus.

Info

Si, lors de lenregistrement dune macro, vous slectionnez successivement


des lignes ou des colonnes contigus en maintenant la touche 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 exemple, 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 prsentera ainsi:
Range(A:A,B:B,C:C,E:E).Select
Range("C1").Activate

Vous pouvez effectuer la mme slection en utilisant la touche Maj. Cliquez sur
len-tte de la colonne A, puis appuyez sur la touche Maj et, tout en la maintenant enfonce, appuyez sur len-tte de la colonne C. Relchez ensuite la touche
Maj et appuyez sur la touche 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
de lignes et de colonnes, contigus ou non. Par exemple, si vous slectionnez ( laide des
touches Maj et Ctrl) les colonnes C E, la colonne G, les lignes4 6 et la ligne8 comme
indiqu la Figure3.10, le code de votre macro se prsentera ainsi:
Range(C:E,G:G,4:6,8:8).Select
Range("A8").Activate

78

Excel et VBA

Figure3.10
Vous pouvez conjuguer la slection de
colonnes et de lignes,
contigus ou non.

Enfin, vous pouvez conjuguer la slection de lignes, colonnes et cellules contigus ou non.
Le code suivant indique la mme slection que dans lexemple 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 relative aux cellules
rpond aux mmes principes que le codage du dplacement par rfrence absolue aux
cellules. Cette section prsente donc de faon sommaire les spcificits du dplacement par
rfrence relative aux cellules.

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 valeur numrique ngative si le dplacement seffectue


vers le haut (RowOffset) ou vers la gauche (ColumnOffset).

La proprit Range("A1") prcise quil sagit dun dplacement de style A1. Autrement
dit, la cellule active sert de rfrence et est virtuellement considre comme la cellule

Chapitre 3

Dplacement et slection dans une macro Excel

79

A1. Bien que toujours prcise lors de lenregistrement 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 effectuer relativement


la cellule active 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 active jusqu la cellule situe trois lignes
au-dessus. On obtient alors une slection quivalente la slection A1:A4 (il peut sagir de
B1:B4, C5:C8,etc.)

Slection de cellules non contigus


Vous pouvez slectionner des cellules non contigus dans une feuille Excel en maintenant
la touche Ctrl enfonce. La syntaxe 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 active et les arguments Cell2,..., Celln reprsentent les


adresses des cellules successivement slectionnes, par position relative la cellule initiale.
Largument Cell_Active reprsente la dernire cellule slectionne.

Info

Lors de dplacements par rfrence relative aux cellules, le codage Visual Basic
se fait par style de rfrence A1; cela signifie que ladresse virtuelle A1 est toujours attribue la cellule active, ce qui permet de reprsenter les dplacements
et slections dautres cellules par rapport cette adresse virtuelle.

80

Excel et VBA

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. La cellule
active sera la cellule situe deux colonnes droite Offset(0, 2) de la cellule initia
lement 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 dplacement 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 renvoie lobjet Range redimensionner. RowSize et ColumnSize sont facultatifs et renvoient respectivement le nombre de lignes et le nombre de colonnes qui 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 supplmentaires. 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 en fonction du contenu des cellules. Il
sera ainsi utile dtendre la slection lensemble des cellules non vides dun tableau avant
deffectuer un tri ou didentifier la premire cellule vide dans une colonne afin dy insrer
du contenu. VBA propose pour cela les proprits suivantes:

CurrentRegion. Retourne la plage de cellules courante (les cellules contigus qui


contiennent des donnes).

Chapitre 3

Dplacement et slection dans une macro Excel

81

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 combinaison de lignes et de colonnes vides, vous utiliserez la proprit CurrentRegion selon la
syntaxe suivante:
Range.CurrentRegion.Select

o Range est une expression qui renvoie 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 active,


tandis que la seconde procde de mme, mais partir de la cellule C8.
la Figure3.11, la slection a t tendue la zone courante partir de la cellule C8.

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

82

Excel et VBA

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.
xlUp. Dplacement vers le haut.

Appliques au tableau de la Figure3.11, les quatre instructions suivantes renvoient respectivement lobjet Range reprsentant les cellules E4, E12, C8 et H8.
Range("E8").End(xlUp).select
Range("E8").End(xlDown).select
Range("E8").End(xlToLeft).select
Range("E8").End(xlToRight).select

renvoie
renvoie
renvoie
renvoie

la
la
la
la

cellule
cellule
cellule
cellule

E4
E12
C8
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

Chapitre 3

Dplacement et slection dans une macro Excel

83

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 lesquelles
doivent sappliquer des traitements lors de lexcution dun programme. La plage retourne
par UsedRange est une plage de cellules contigus dont les limites sont dfinies 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.

Figure3.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 active 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.

84

Excel et VBA

Lexemple suivant passe en gras les cellules de la plage nomme MaPlage, situe sur la
feuille Feuil1 du classeur Test.xlsx:
Range("[Test.xlsx]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 voulue. Les deux instructions
suivantes slectionnent la plage nomme MaPlage, puis en effacent le contenu:
Application.Goto Reference:="[Test.xlsx]Feuil1!MaPlage"
Selection.ClearContents

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

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 vous ont fait dcouvrir la fentre Code de Visual
Basic Editor travers 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 existante ou de crer une nouvelle macro,
selon les procdures tudies au Chapitre2, vous accdez la fentre Code de Visual Basic
Editor. Vous pouvez aussi dvelopper 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, PowerPoint ou encore Excel, mais ne
permet daccder quaux projets de lapplication partir de laquelle il a t excut.
Info

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

ntion
Atte

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

Pour accder Visual Basic Editor partir dExcel 2007, activez longlet Dveloppeur du
ruban, puis slectionnez Visual Basic Editor, ou tapez le raccourci clavier Alt+F11.
it
ibil
pat
m
o
C

Pour accder Visual Basic Editor partir dune version dExcel antrieure
2007, slectionnez Outils > Macro > Visual Basic Editor, ou tapez le raccourci
clavier Alt+F11. Vous pouvez galement accder Visual Basic Editor partir du
bouton Visual Basic Editor de la barre doutils Visual Basic, si celle-ci saffiche.

Figure4.1
Nouvelle interface dOffice 2007 oblige, laccs Visual Basic Editor se fait via le ruban.

Chapitre 4

Dcouvrir Visual Basic Editor

87

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

La Figure4.3 prsente la fentre de Visual Basic Editor. Il se peut que, sur votre ordinateur,
la fentre ne prsente pas les mmes lments. Vous verrez par la suite comment afficher
les diffrents composants de Visual Basic Editor.
Figure4.3
La fentre de Visual
Basic Editor.

eil
Cons

Dans bien des cas, lenregistrement de macros reste la mthode la plus rapide
et la plus sre pour dmarrer vos projets VBA. En laissant lEnregistreur de
macro le 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 premire tape de dveloppement de votre projet
consiste crer une feuille permettant une interaction avec lutilisateur. Vous
accderez alors directement Visual Basic Editor, sans passer par la bote de
dialogue Macro.

88

Excel et VBA

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 lextrme gauche 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 projet. Il permet de visualiser les diffrents 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 attach. Pour
quun projet apparaisse dans lExplorateur de projet, il faut que le document auquel il
est attach soit ouvert dans lapplication hte.

La fentre Proprits. Elle permet de visualiser et de modifier lensemble des proprits


associes aux objets constitutifs dun projet.

La fentre Code. Vous pouvez y diter le code de vos projets. Visual Basic Editor
propose des aides lcriture de code et des outils de dbogage.

La fentre UserForm et la bote outils. La fentre UserForm est lespace dans lequel
vous concevez les feuilles VBA. La bote outils propose des contrles communs tels
que des cases cocher ou des zones de listes droulantes que vous 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 vous crez, ainsi que des objets
provenant dautres applications.

Chapitre 4

Figure4.4
Visual Basic Editor.

Dcouvrir Visual Basic Editor

Explorateur
de projet

Explorateur
d'objets

Fentre
Code

Bote
outils

89

Fentre
Proprits

Fentre
UserForm

LExplorateur de projet
LExplorateur de projet permet dexplorer les diffrents projets chargs dans lapplication
hte et les lments qui les composent. partir de lExplorateur de projet, vous pouvez
accder nimporte quel lment constitutif dun projet, y ajouter de nouveaux lments
ou, au contraire, en supprimer.

Afficher et masquer lExplorateur de projet


Pour afficher lExplorateur de projet, vous 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.

90

Excel et VBA

Figure4.5
LExplorateur de projet permet daccder aisment aux
diffrents lments consti
tutifs dun projet.

Pour masquer lExplorateur de projet, vous pouvez:

cliquer du bouton droit dans sa fentre et slectionner la commande Masquer du menu


contextuel qui saffiche;

Figure4.6
Le menu contextuel
de lExplorateur de projet.

Chapitre 4

Dcouvrir Visual Basic Editor

91

cliquer du bouton 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.

Naviguer dans lExplorateur de projet


linstar de lExplorateur de Windows95, lExplorateur de projet prsente les diffrents
projets et leurs lments constitutifs de faon hirarchique. Au premier niveau de lExplorateur, apparaissent les diffrents projets. Sous chaque projet se trouvent des dossiers
contenant chacun des lments spcifiques:

Microsoft 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 Chapitre15
que vous pouvez associer des procdures spcifiques ces objets de faon contrler
les interventions dun utilisateur sur un classeur.

Feuilles. Contient les feuilles (ou formulaires) du projet. Vous apprendrez crer des
feuilles aux Chapitres12 14.

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

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


Rfrences. Contient les rfrences dautres projets.

ntion
Atte

Si un projet ne contient aucun module ou module de classe, les dossiers correspondants napparatront pas sous le projet dans lExplorateur de projet.

Info

Lorsque vous enregistrez ou crez une macro, elle est enregistre dans un nouveau module accessible via le dossier Modules du projet correspondant. Le nom
de ce module est Module1, Module2 si Module1 existe dj,etc.

Le signe plus (+) permet de dvelopper larborescence dun dossier ou dun projet, et
le signe moins () de la rduire. la Figure 4.6, larborescence du dossier Feuilles du
projet PERSONAL.XLSB est dveloppe, tandis que les autres dossiers ainsi que le projet
ChiffresRepresentants.xlsx sont rduits.

92

Excel et VBA

Plutt quun affichage par dossier, les lments constitutifs dun projet peuvent tre prsents par ordre alphabtique dans lExplorateur de projet. Cliquez simplement sur le bouton
Basculer dossiers de lExplorateur de projet. La Figure4.7 prsente lExplorateur de projet
aprs masquage des dossiers. Pour revenir un affichage par dossier, cliquez de nouveau
sur ce bouton.
Figure4.7
Lorsque laffichage
des dossiers est dsactiv,
les icnes permettent de
distinguer les lments
du projet.

Modules de code

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.

LExplorateur dobjets
Lorsquon commence dvelopper en VBA, la difficult essentielle consiste manipuler
les objets de lapplication hte (dans notre cas les objets Excel). Comment, par exemple,
accder une plage de cellules dune feuille spcifique dun classeur Excel et y insrer une
formule? LEnregistreur 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.

Chapitre 4

Dcouvrir Visual Basic Editor

93

Cependant, certains lments de code dun programme VBA ne peuvent tre gnrs
laide de lEnregistreur de macro et ne peuvent qutre saisis dans la fentre Code
du programme. Vous devez alors connatre la position de lobjet auquel vous souhaitez
accder dans la hirarchie de classes de lapplication. Vous devez aussi connatre les
mthodes et proprits associes cet objet pour pouvoir le manipuler ou en extraire des
informations.
Les chapitres prcdents vous ont initi la syntaxe VBA permettant daccder un objet.
Pour autant, lorsque vous commencerez dvelopper dans Visual Basic Editor, vous ne
connatrez pas toujours le chemin emprunter pour accder tel ou tel objet, ni la mthode
lui appliquer pour effectuer telle ou telle opration. LExplorateur dobjets constitue
pour cela une aide trs apprciable pour le dveloppeur. LExplorateur 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.
Ilconstitue en cela un trs supplment laide de Visual Basic pour Applications.

ition
Dfin

Une bibliothque dobjets est un fichier contenant toutes les donnes dobjets
(leurs proprits, mthodes, vnements, constantes,etc.). Ce fichier porte lextension .OLB et cest lui que se rfre Visual Basic lorsque vous manipulez
des objets Excel. Le nom de fichier de la bibliothque dobjets dExcel ainsi que
son emplacement varient dune version 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, constantes)
associs un objet , lExplorateur dobjets vous fournit une documentation complte.
Ilpermet daccder au modle dobjets de lapplication hte, mais aussi aux objets dautres
applications et aux objets, procdures et constantes que vous avez crs dans le cadre de
votre projet, ainsi quaux rubriques daide associes chacun de ces lments.

Afficher et masquer lExplorateur dobjets


Pour afficher lExplorateur dobjets, vous 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.

94

Excel et VBA

Figure4.8
LExplorateur
dobjets
permet dexplorer
lensemble des
objets
disponibles pour
un projet.

Liste droulante
Rechercher un texte

Liste droulante
Projet/Bibliothque

Liste
Classes
Liste Membres

Zone
Dtails

Pour masquer lExplorateur dobjets, vous pouvez:

cliquer du bouton droit dans sa fentre et slectionner la commande Masquer du menu


contextuel qui saffiche;
cliquer sur licne situe gauche 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 utilisation 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 votre choix. Le Tableau4.1 prsente les bibliothques les plus courantes
accessibles dans lExplorateur dobjets.
Tableau4.1: Les bibliothques les plus courantes 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.

Chapitre 4

Dcouvrir Visual Basic Editor

95

Bibliothque

Description

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 Chapitre6 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 classes
sont affiches par type et par ordre alphabtique au sein de chaque type. Chaque type de
classe (feuille, module de code, module de classe) est symbolis par une icne. Lorsquune
classe contient du code rdig par lutilisateur, son nom apparat en gras (voir Figure4.9).
Figure4.9
Les classes contenant du
code apparaissent en gras.

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.

96

Excel et VBA

ition
Dfin

On appelle membres dune classe lensemble des lments rfrencs pour cette
classe, cest--dire ses proprits, constantes, mthodes et vnements.

Les membres affichs dans la zone Membres de "Classe" sont affichs par type (proprits,
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.
ce
Astu

Pour afficher les membres dune classe par ordre alphabtique, indpendamment de leur type, cliquez du bouton droit dans lExplorateur dobjets et, dans
le menu contextuel qui saffiche, slectionnez la commande Membres du groupe.
Pour revenir un affichage 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;
cliquer du bouton droit sur llment voulu et slectionner la commande Aide du menu
contextuel.
Vous obtenez ainsi une aide prcieuse sur lutilisation de llment voulu (voir Figure4.10).
Vous pouvez ventuellement consulter lexemple de code fourni dans laide de VBA et en
copier la syntaxe afin de la coller dans votre propre code.
Figure4.10
LExplorateur dobjets
permet daccder rapidement
aux rubriques daide des
objets affichs.

Chapitre 4

Dcouvrir Visual Basic Editor

97

Les autres contrles de lExplorateur dobjets


La zone Dtails affiche un bref descriptif du membre slectionn dans la zone Membres
de (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
zone indique le chemin daccs la bibliothque ou au projet affich dans lExplorateur
dobjets.
Cette zone prsente aussi, sous la forme dun hyperlien de couleur verte, la position de
lobjet slectionn dans le modle dobjets, et les lments du langage ventuellement lis
la syntaxe de cet objet. Pour afficher les membres dun objet apparaissant en hyperlien
dans la zone Membres de, cliquez sur lhyperlien le reprsentant.
Figure4.11
La zone Dtails rcapitule les
donnes propres llment
slectionn.

Proprit Comment

Renvoyant un
objet Comment

Membres de Range

Le bouton Retourner permet de revenir aux slections prcdentes dans les listes Classes et
Membres de. Chaque clic vous fait remonter dune slection. Le bouton Avancer permet de
revenir aux dernires slections effectues aprs avoir utilis le bouton Retourner.
Le bouton Copier place dans le Presse-papiers le texte slectionn. Il peut sagir du texte
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 classe
slectionn contient du code rdig. Il entrane laffichage de la fentre Code correspondant la slection en cours dans lExplorateur dobjets.

98

Excel et VBA

Rechercher du texte
LExplorateur dobjets offre un outil permettant de rechercher des chanes de caractres
dans les bibliothques de votre choix. Pour rechercher du texte 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 savez dans quelle bibliothque effectuer la recherche, slectionnez <Toutes


bibliothques>.

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

ce
Astu

Si vous ntes pas certain de lorthographe du texte rechercher, utilisez les


caractres gnriques suivants:
* toute chane;
? tout caractre.

3. Cliquez sur le bouton Rechercher. La zone Rsultats de la recherche saffiche. Pour


chacun des lments trouvs, la bibliothque, la classe et le membre sont indiqus
(voir Figure4.12).
Figure4.12
La zone Rsultat
de la recherche liste
lensemble des lments
trouvs contenant la chane
spcifie.

Chapitre 4

Dcouvrir Visual Basic Editor

99

4. Si vous souhaitez afficher les rsultats pour dautres bibliothques, modifiez simplement 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 les
zones Classe et Membres de, slectionnez llment voulu 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 Figure4.13).
Le rsultat slectionn...

Figure4.13
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, vous pouvez choisir de masquer la zone Rsultats de la
recherche. Pour cela, cliquez simplement sur le bouton Afficher/Masquer les rsultats
de la recherche.

Pour afficher de nouveau cette zone sans lancer une nouvelle recherche, cliquez une
nouvelle fois sur le bouton.

100

Excel et VBA

La fentre UserForm
La fentre UserForm permet de dessiner des botes de dialogue pour vos 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 Figure4.14 prsente une feuille cre dans Visual Basic Editor.
Figure4.14
Une feuille dveloppe dans
Visual Basic Editor.

Le dveloppement de feuilles est un aspect essentiel de la programmation VBA. Les


Chapitres12 14 sont entirement consacrs ce sujet. Cette section prsente sommairement les possibilits de dveloppement dans la fentre UserForm.
On peut distinguer deux phases essentielles dans la cration dune interface utilisateur:

le dveloppement visuel de la feuilletrait au Chapitre12;


lassociation de code aux diffrents lments de la feuilletraite aux Chapitres13 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 respectives. Les contrles sont des
lments constitutifs dune fentre tels quune case cocher, une zone de liste droulante

Chapitre 4

Dcouvrir Visual Basic Editor

101

ou un bouton de commande permettant une intervention 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 faire lobjet recevant les vnements clavier ou souris.
Enfin, un vnement Clik (un clic de souris) affectant cet objet peut tre dtect et entraner
un comportement spcifique de lapplication, tel que le dclenchement dune procdure
(appele procdure dvnement).
Certains contrles, dits interactifs, ragissent aux actions de lutilisateur(un bouton OK
dclenchant la validation 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 Figure4.15 prsente la bote de dialogue Police de Word sur laquelle vous pouvez visualiser diffrents types de contrles.
Zone de texte ou
contrle TextBox
Onglet ou
contrle
TabStrip

Zone de liste
ou contrle
ListBox
Zone de liste
modifiable ou
contrle
ComboBox

Case cocher ou
contrle CheckBox
Intitul ou
contrle Label

Bouton de commande ou
contrle CommandButton

Figure4.15
Les contrles que vous pouvez placer sur une feuille sont les mmes que ceux que vous rencontrez dans
les applications Office.

102

Excel et VBA

Par dfaut, la bote outils propose les contrles les plus couramment rencontrs dans lapplication hte (voir Figure4.16). Vous verrez au Chapitre12 que vous pouvez personnaliser
la bote outils en y ajoutant des contrles ou en en modifiant lordonnancement.
Figure4.16
Les contrles de la bote
outils peuvent trs simplement tre dposs sur une
feuille.

Afficher et masquer la fentre UserForm et la bote outils


Pour afficher la fentre UserForm, vous devez soit ouvrir une feuille dans un projet (accessible dans le dossier Feuilles de lExplorateur de projet), soit crer une nouvelle feuille.
Pour quitter la fentre UserForm, cliquez sur la case de fermeture situe dans langle suprieur
droit de la fentre.
Pour afficher/masquer la bote outils, une fentre UserForm doit tre active:

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 Chapitre12 que Visual Basic Editor propose des outils facilitant 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 existant. Toute action quexcute une

Chapitre 4

Dcouvrir Visual Basic Editor

103

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 (voir Figure4.17). Il peut sagir dun module standard, dun module de classe,
dune feuille ou du document auquel est attach le projet.
La fentre Code prsente de nombreuses et prcieuses fonctionnalits, destines faciliter
le dveloppement de vos projets.
Le module
Exemples

La fentre Code du
module Exemples

Figure4.17
Chacun des modules dun projet possde une fentre Code.

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 syntaxe Visual Basic soit vrifie
au fur et mesure de la saisie du code,etc.

104

Excel et VBA

Figure4.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
par lune des mthodes indiques ci-dessus et slectionnez-y llment dont vous souhaitez
afficher le code. Effectuez ensuite lune des oprations suivantes:

Double-cliquez sur un module de code.

Cliquez sur le bouton Afficher le code de lExplorateur de projet.

Cliquez du bouton droit sur llment voulu et choisissez la commande Code du menu
contextuel.
Slectionnez la commande Code du menu Affichage.
Tapez le raccourci clavier F7.

La fentre Code de llment voulu saffiche.

Info

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


c liquez du bouton droit et choisissez la commande Code du menu contextuel qui
saffiche.

Chapitre 4

Dcouvrir Visual Basic Editor

105

Pour masquer la fentre Code, cliquez sur la case de fermeture ou cliquez du bouton droit
dans la fentre et slectionnez la commande Masquer du menu contextuel qui saffiche.
Figure4.19
Le menu contextuel
de la fentre Code.

Naviguer dans la fentre Code


Par dfaut, la fentre Code affiche lensemble des procdures constituant le module par
ordre alphabtique, spares par une ligne grise. Un mme module pouvant 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.

ition
Dfin

Une procdure est un bloc dinstructions, tel quune macro, dlimit par des instructions dencadrement et excut en tant quentit. Vous verrez au Chapitre5
quune procdure peut avoir pour fonction de renvoyer 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 (voir Figure4.20).

106

Excel et VBA

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

L'objet CmdOK dans la zone de liste Objet

Le contrle CmdOK sur la feuille

Le code de l'objet CmdOK

Les lments rfrencs dans la zone de liste Procdure peuvent 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
Figure4.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.
Figure4.21
Utilisez cette zone pour
accder rapidement une
procdure du module.

Chapitre 4

pel
Rap

Dcouvrir Visual Basic Editor

107

Lorsque vous enregistrez ou crez des macros dans Excel, ces macros sont
stockes 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 gnrales
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 (voir Figure4.22) et la fentre Code affiche
la procdure dvnement correspondante. Si loption (Gnral) est slectionne dans la
zone Objet, la zone Procdure rpertorie lensemble des dclarations et des procdures de
la feuille.

ition
Dfin

Une procdure dvnement (ou procdure vnementielle) est une procdure


attache un vnement spcifique tel quun clic de souris. Ce type de procdure sexcute lorsque lvnement est reconnu par le programme. La cration
de procdures dvnement est traite au Chapitre14.

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


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.
Figure4.22
La zone de liste droulante Procdure rpertorie
lensemble des vnements
rfrencs pour un objet.

Cet objet...

gre ces vnements

108

Excel et VBA

Slection de texte dans la fentre Code


Lorsque vous vous trouvez dans une fentre Code, vous pouvez slectionner du texte
laide de la souris ou du clavier. Nous supposons ici que vous connaissez les mthodes
de slection standard laide de ces deux priphriques. Il existe 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 gauche
du code de faon quil prenne la forme dune flche oriente vers la droite et doublecliquez (voir Figure4.23).

Figure4.23
Vous pouvez slectionner
rapidement une procdure
entire.

Vous pouvez aussi vous dplacer ou effectuer 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 tendre
la slection, utilisez les mmes combinaisons de touches auxquelles vous ajouterez la
touche Maj.
ce
Astu

La substitution des touches flches haut et bas aux touches Pg. Prc. et Pg. Suiv.
dans les combinaisons mentionnes ci-dessus permet datteindre la premire
ligne de code sous la dclaration de procdure (Sub, Function ou Property)
plutt que la dclaration de procdure elle-mme.

Chapitre 4

Dcouvrir Visual Basic Editor

109

Recherche et remplacement de texte


Vous pouvez rechercher du texte dans la fentre Code comme vous le feriez dans un logiciel de traitement de texte tel que Word. Pour rechercher du texte dans la fentre Code,
procdez comme suit:
1. partir dune fentre Code, slectionnez la commande Rechercher du menu dition
ou tapez le raccourci clavier Ctrl+F, ou cliquez sur le bouton Rechercher de la barre
doutils Standard de Visual Basic Editor.

La bote de dialogue Rechercher reprsente la Figure4.24 saffiche.

Figure4.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 texte 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 texte 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 texte 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 caractres
gnriques (?, *, #, [listedecar], et [!listedecar]) dans la zone de texte Rechercher.

110

Excel et VBA

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


Si la recherche aboutit, le texte trouv saffiche 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
occurrence 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.

ce
Astu

Une pression sur la Touche F3 ou la commande Suivant du menu dition relance


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

Pour remplacer du texte, procdez comme suit:


1. Slectionnez la commande Remplacer du menu dition ou tapez le raccourci clavier
Ctrl+H. Si la bote de dialogue Rechercher est ouverte, cliquez sur le bouton Remplacer. La bote de dialogue Remplacer saffiche (voir Figure4.25).
Figure4.25
La bote de dialogue
Remplacer.

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


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 texte trouv avant deffectuer le remplacement,


cliquez sur le bouton Suivant pour lancer la recherche. Lorsque le texte est trouv, il
apparat en surbrillance dans la fentre Code.

Pour remplacer loccurrence slectionne, cliquez sur le bouton Remplacer. Le texte


est remplac et la recherche se poursuit.

Chapitre 4

Dcouvrir Visual Basic Editor

111

Pour poursuivre la recherche sans effectuer de remplacement, cliquez sur le bouton


Suivant.

Affichage de plusieurs fentres Code


Lorsque vous dvelopperez dans Visual Basic Editor, vous serez souvent amen vous
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
fentre 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 (voir Figure4.26) ou Mosaque
verticale (voir Figure 4.27) du menu Fentre, de faon visualiser simultanment
toutes les fentres Code ouvertes.

Figure4.26
Les fentres Code organises en mosaque horizontale.

112

Excel et VBA

Figure4.27
Les fentres Code organises en mosaque verticale.

Vous pouvez aussi sparer une fentre Code en deux volets, afin dafficher simultanment
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 dfilement verticale de la fentre Code.
2. Lorsque le curseur se transforme en une double flche, faites glisser la barre de fractionnement 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 volets autonomes (voir Figure4.28), vous pouvez
modifier laffichage de lun ou lautre des volets laide des barres de dfilement verticales.
Les zones de listes Objet et Procdure sappliquent la fentre active, cest--dire celle
dans laquelle se trouve le point dinsertion.

Chapitre 4

Dcouvrir Visual Basic Editor

113

Figure4.28
Le fractionnement de la fentre Code permet dafficher simultanment diffrentes sections de code
dun mme module.

Pour annuler le fractionnement de la fentre Code, double-cliquez sur la barre de fractionnement 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 Chapitre5.
Par dfaut, la fentre Code affiche lensemble des procdures du module, chaque procdure
tant spare par un trait gris (voir Figure4.29).

114

Excel et VBA

Figure4.29
Lensemble des procdures du code saffiche.

Si laffichage de lensemble des procdures du module ne vous convient pas, vous pouvez
choisir de nafficher quune procdure dans la fentre Code. Pour dfinir les paramtres de
la fentre Code, procdez comme suit:
1. Choisissez la commande Options du menu Outils. Slectionnez longlet diteur de la
bote de dialogue Options qui saffiche (voir Figure4.30).
2. Cochez ou dcochez les cases de la zone Paramtres de la fentre, en fonction du type
daffichage souhait:

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 vous souhaitez
nafficher quune procdure dans la fentre Code (voir Figure4.31). Utilisez alors
la zone de liste droulante Procdure pour slectionner la procdure que vous
souhaitez afficher.

Chapitre 4

Dcouvrir Visual Basic Editor

115

Sparation des procdures. Dans le cas dun affichage complet du module, cette
option dtermine si un sparateur sera affich ou non entre les diffrentes procdures affiches.

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


Figure4.30
La zone Paramtres
de la fentre permet de
dfinir laffichage des procdures dans la fentre Code.

Figure4.31
Vous pouvez choisir de nafficher quune procdure dans la fentre Code.

116

Excel et VBA

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 UserForm, dun contrle, dune classe, dun projet ou dun module. Vous
utiliserez la fentre Proprits essentiellement lors du dveloppement de feuilles pour vos
projets.

Info

Vous dcouvrirez les proprits essentielles des contrles ActiveX que lon place
sur les feuilles UserForm et apprendrez les modifier aux Chapitres13 et 15.

Les proprits varient en fonction de llment slectionn. Ainsi les proprits dun
contrle en dfinissent laspect et le comportement (sa position, sa taille, le fait 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 Figure4.33, les proprits du projet PERSONAL.XLSB.
Figure4.32
La fentre Proprits dun
contrle CheckBox.

La colonne gauche affiche


les noms des proprits

La colonne droite affiche les


valeurs affectes aux proprits

Chapitre 4

Dcouvrir Visual Basic Editor

117

Figure4.33
La fentre Proprits du
projet PERSONAL.XLSB.

Afficher et masquer la fentre Proprits


La fentre Proprits peut tre affiche partir de lExplorateur de projet ou partir dune
fentre UserForm. Pour afficher une fentre Proprits, procdez comme suit:
1. Dans lExplorateur de projet, slectionnez le module dont vous souhaitez afficher les
proprits ou, dans la fentre UserForm, slectionnez le contrle ou la feuille dont
vous souhaitez afficher les proprits.

Info

Lorsque plusieurs contrles sont slectionns sur une feuille, la fentre Proprits
affiche les proprits communes aux contrles slectionns.

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


le 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 UserForm, la fentre Proprits affiche les proprits de
llment slectionn.
Pour masquer la fentre Proprits, cliquez sur la case de fermeture situe lextrmit
droite de la barre de titre ou cliquez du bouton droit dans la fentre et, dans le menu contextuel
qui saffiche, slectionnez la commande Masquer.

118

Excel et VBA

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 active.
Droulez simplement la liste et slectionnez le contrle dont vous souhaitez afficher les
proprits (voir Figure4.34).
Figure4.34
Slectionnez lobjet dont
vous souhaitez afficher les
proprits.

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

Alphabtique. Toutes les proprits recenses pour llment slectionn sont affiches
par ordre alphabtique (voir Figure4.32).

Par catgorie. Les proprits de lobjet slectionn sont regroupes par catgorie et,
lintrieur de chaque catgorie, par ordre alphabtique (voir Figure4.35). Les catgories
apparaissent en gras. linstar des dossiers de lExplorateur, les proprits qui y sont
recenses peuvent tre affiches ou masques lorsque vous cliquez sur les signes plus
(+) ou moins () situs gauche de chaque nom de catgorie.

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 texte de son info-bulle, 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 modifiable, longueur maximale de saisie dune chane,etc.).

Chapitre 4

Dcouvrir Visual Basic Editor

119

Figure4.35
Laffichage par catgorie
permet daccder rapidement
aux proprits voulues.

Dfilement. Cette catgorie regroupe les proprits concernant le dplacement dans un


contrle (prsence ou non de barres de dfilement, dimension et position relative des
barres de dfilement).

Divers. Vous trouverez sous cette catgorie des proprits varies, 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 relative).

Police. La police utilise pour lintitul du contrle saffiche sous cette catgorie. Dans
Office, la police utilise par dfaut pour les contrles est le Tahoma.

Modifier une proprit


Comme nous lavons vu au Chapitre1, diffrents types de valeurs peuvent tre affectes
une proprit. Il peut sagir:

dune chane de caractres;


dune valeur numrique;
dune constante;
dune valeur boolenne.

120

Excel et VBA

Pour modifier la valeur 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 valeur voulue la proprit. La dmarche varie selon le type de
valeur affect la proprit:

Si la proprit accepte une chane de caractres ou une valeur numrique, saisissez directement la valeur souhaite au clavier.

Si le type de valeur affect cette proprit est une valeur boolenne ou une
constante, une flche apparat dans la cellule de valeur. cliquez sur cette flche
pour drouler la liste des valeurs possibles pour la proprit, et slectionnez celle
qui convient (voir Figure4.36).

Vous pouvez aussi utiliser les touches flches haut et bas pour vous dplacer
dune valeur lautre.

Si la proprit attend pour valeur une chane indiquant un emplacement de fichier, un


bouton permettant de parcourir les fichiers disponibles la recherche du fichier
voulu apparat dans la zone de valeur de la proprit.

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

ce
Astu

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

Chapitre 4

Dcouvrir Visual Basic Editor

121

Les barres doutils


Visual Basic Editor contient quatre barres doutils, prsentes dans les figures suivantes.
Figure4.37
La barre doutils Standard
permet daccder aux fonctions les plus communes de
Visual Basic Editor.
Figure4.38
La barre doutils dition
permet dobtenir de laide, de
mettre en forme le texte et de
sy dplacer.
Figure4.39
La barre doutils Dbogage
permet de tester le comportement dun programme.
Figure4.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, affichez le menu contextuel 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 vous souhaitez afficher ou masquer une
coche ct du nom dune barre doutils indiquant quelle est dj affiche.
Figure4.41
Le menu contextuel
Barre doutils.

Ces barres
d'outils sont
affiches

Ces barres
d'outils sont
masques

122

Excel et VBA

Pour dplacer une barre doutils, cliquez sur celle-ci et, tout en en maintenant le bouton
enfonc, dplacez la souris jusqu atteindre lemplacement voulu. Un contour gris vous
indique lemplacement que prendra la barre doutils. Relchez le bouton de la souris lorsque
le contour indique lemplacement voulu.

ce
Astu

Pour faire apparatre les info-bulles associes aux boutons de la barre doutils,
slectionnez la commande Options du menu Outils et, dans longlet Gnral,
cochez loption Afficher les info-bulles.

La barre doutils Standard


La barre doutils Standard offre un accs rapide aux commandes les plus usites. On y
retrouve des commandes communes lessentiel des applications, telles que Enregistrer ou
Couper. Le Tableau4.2 prsente les boutons de cette barre doutils.
Tableau4.2: Les icnes de la barre doutils Standard

Bouton

Nom

Description

Afficher Microsoft Excel

Bascule entre lapplication hte et le document Visual Basic


actif (raccourci 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 <Document
hte>

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


composantsfeuilles et modules (raccourci clavier: Ctrl+S).

Chapitre 4

Bouton

Dcouvrir Visual Basic Editor

123

Nom

Description

Couper

Supprime le texte slectionn dans la fentre Code ou le


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

Copier

Copie le texte slectionn dans la fentre Code ou le


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

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 Sub/UserForm ou
Excuter la macro

Excute une application fonction de la fentre active:


Fentre Code: la procdure en cours est excute.
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/Quitter le
mode Cration

Active ou dsactive le mode Cration. On parle de mode


Cration par opposition au mode Excution. En mode Cration, le code dun projet nest pas excut. Cela correspond
la priode de dveloppement 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.

124

Excel et VBA

Tableau4.2: Les icnes de la barre doutils Standard (suite)

Bouton

Nom

Description

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

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.

ition
Dfin

Une fentre est dite ancre lorsquelle est fixe la bordure dune autre
fentre. Une fentre peut tre ancre la fentre de lapplication ou une
autre fentre elle-mme ancre.

Une fentre ancre demeure au premier plan, et ce mme lorsquune autre fentre dont
lespace recouvre le sien est active. Par ailleurs, si vous 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 de lespace de Visual
Basic Editor. la Figure4.42, nous avons ancr lExplorateur de projet et maximis une
fentre Code.

Chapitre 4

Dcouvrir Visual Basic Editor

L'Explorateur de
projet est ancr

125

La fentre Code maximise pouse


la fentre de l'Explorateur de projet

Figure4.42
Ancrer lExplorateur de projet permet daccder rapidement aux lments de vos projets.

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

Cliquez du bouton droit dans la fentre de votre choix. Un menu contextuel saffiche,
en fonction de la fentre choisie. Ces menus contextuels ont en commun de possder

126

Excel et VBA

une commande Ancrable (voir Figure4.43). La slection de cette commande active ou


dsactive lancrage de la fentre, une coche indiquant que la fentre est ancre.
Figure4.43
Les menus contextuels
des fentres de Visual Basic
Editor possdent une
commande Ancrable.

Slectionnez la commande Options du menu Outils et placez-vous sur longlet Ancrage


(voir Figure4.44). Cochez les cases des fentres que vous souhaitez ancrer et dcocher
les cases des fentres dont vous voulez dsactiver lancrage. Cliquez sur OK.

Figure4.44
La bote de dialogue Options
permet de modifier
les options dancrage
de plusieurs fentres simultanment.

Info

Si laccs aux commandes de Visual Basic Editor ne convient pas votre faon
de travailler, vous pouvez choisir den personnaliser les menus et les barres
doutils. Vous pouvez ainsi ajouter ou supprimer des commandes aux menus et
des boutons sur les barres doutils. Vous pouvez aussi crer une nouvelle barre
doutils ou un nouveau menu dans lesquels vous placerez les commandes de
votre choix. Pour connatre les procdures de personnalisation de menus et de
barres doutils, reportez-vous au Chapitre11.

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

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

130

Excel et VBA

Les chapitres prcdents vous ont permis dacqurir les concepts essentiels de la programmation Visual Basic pour Applications et de dcouvrir lenvironnement 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 votre projet. Vous serez ainsi mme de structurer de faon cohrente vos
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
existant, vous devez donc ouvrir Visual Basic Editor partir dExcel, selon les procdures
dcrites aux chapitres prcdents. Le classeur auquel est affect (ou auquel vous 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, vous imaginez un listing dans lequel est contenu lensemble du code
excutable du programme. Il nen va pas de mme avec 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 au chapitre prcdent, on
distingue, dans un projet, les modules standard ou modules de code, les modules de classe
et les feuilles. Autrement dit, les diffrents 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 fichier UserForm. Pour chaque feuille dun projet, il existe un objet UserForm accessible dans le dossier Feuilles de lExplorateur de projet. Vous pouvez voir la
Figure5.1 que le projet affich contient onze feuilles.
Le code standard se trouve dans des modules de code, stocks dans le dossier Modules,
tandis que le code dcrivant les objets dvelopps pour votre projet est stock dans le
dossier Modules de classe.

Chapitre 5

Dvelopper dans Visual Basic Editor 

131

Figure5.1
chaque feuille dun projet
est affect un fichier dans le
dossier Feuilles.

Les procdures
lintrieur dun mme module, le code est structur en procdures. Une procdure est
une squence dinstructions sexcutant en tant quentit. Cette dcomposition en procdures 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 existe 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 texte?,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 procdure appelante. La procdure appele
effectuera les tches pour lesquelles elle a t crite en exploitant les donnes fournies par
la procdure appelante. Les informations fournies par la procdure appelante la procdure
appele sont les arguments passs.

132

Excel et VBA

ition
Dfin

Info

On qualifie de procdure vnementielle ou procdure dvnement une procdure dclenche par un vnement, telle quun clic de souris ou la frappe dune
touche clavier, par opposition aux procdures standard dun module de code,
indpendantes de tout vnement utilisateur.
Dans les modules UserForm, les procdures sont prdtermines ; il existe
une procdure pour chaque vnement pouvant affecter un contrle. Dans les
modules de code, cest vous qui dterminez les diffrentes procdures. Vous
pouvez ainsi choisir que le code dun programme soit contenu dans une seule
procdure. Il est cependant conseill de structurer le code dun programme en
procdures distinctes. La lecture et le dbogage de vos programmes en seront
considrablement amliors.

Nous vous conseillons de structurer vos programmes sous forme de petites procdures effectuant chacune un traitement spcifique dans le cadre de votre programme. Le programme
principal peut alors consister en une procdure qui appelle les autres procdures 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 procdures pour excuter des tches spcifiques. La procdure VerifierNomRepresentant est
appele afin de vrifier que le nom indiqu est valide. Si le nom nest pas valide, cette
procdure pourra prendre en charge la rsolution du problme ou appeler une autre
procdure conue dans ce but. Les procdures QuelSalaire et CalculPrime sont ensuite
appeles afin de renvoyer le salaire et la prime du reprsentant. Enfin, la procdure
CalculPaie est appele pour renvoyer la paie du reprsentant, qui saffiche 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
fonctionnement.

Chapitre 5

Dvelopper dans Visual Basic Editor 

133

En cas de bogue du programme, il est plus facile disoler la procdure coupable et de


corriger le problme.

Le code est ainsi rutilisable. Certaines tches sont excutes par diffrents programmes.
Si la tche a t isole dans une petite procdure, elle peut tre exploite par diffrents
programmes.

Dans lexemple prcdent, la procdure VerifierNomRepresentant est appele pour


contrler la validit 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 excute une tche prcise,
qui peut tre vidente ou invisible pour lutilisateur, destine effectuer des traitements
propres au projet.
Une instruction Visual Basic est compose de mots cls du langage, de constantes et de
variables. Ces lments peuvent tre combins pour former une expression. Une expression
peut vrifier des donnes ou effectuer une tche.
Par exemple, Mavar = Workbooks.Count est une instruction. Elle combine la variable Mavar,
et les mots cls =, Workbooks et Count. Pour affecter la variable Mavar une valeur gale au
nombre de classeurs ouverts, on associe cette variable lexpression Workbooks.Count
laide de loprateur arithmtique =. (La proprit Workbooks renvoie la collection dobjets
Workbooks reprsentant lensemble des classeurs ouverts ; la proprit Count renvoie le
nombre dobjets de la collection spcifie.)

ition
Dfin

pel
Rap

Un mot cl est un mot ou un symbole reconnu comme lment du langage Visual


Basic. Il peut sagir dune fonction, dune proprit, dune mthode ou encore
dun oprateur arithmtique.
Les constantes sont des lments nomms affects une valeur qui, contrairement une variable, ne change pas durant lexcution du programme. Le
nom de la constante est utilis la place de la valeur qui lui est affecte. Un
programme peut exploiter des constantes propres lapplication ou dfinir ses
propres constantes laide de linstruction Const (voir Chapitre6).
Vous pouvez par exemple dfinir une constante que vous nommerez TVA et
laquelle vous affecterez la valeur 0,186. Chaque fois que vous souhaiterez

134

Excel et VBA

u tiliser cette valeur dans votre programme, il vous suffira dutiliser le nom de la
constante qui lui est affecte. Ainsi, lexpression:
PrixHorsTaxe * TVA

sera quivalente
PrixHorsTaxe * 0.186

pel
Rap

Les variables sont dfinies par un nom autre quun mot cl du langage et permettent de stocker des informations pouvant tre modifies au cours de lexcution
du programme.

On distingue trois types dinstructions:

Les instructions de dclaration. Ces instructions sont invisibles pour lutilisateur et


servent nommer une variable, une constante ou une procdure. Le nom attribu 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 exemple dinstruction de dclaration, nommant la procdure


MaProcdure. Dim Mavar As String est aussi une instruction de dclaration. Linstruction Dim sert nommer la variable MaVar, tandis que As String en spcifie le type
(String, cest--dire une chane de caractres).

Les instructions daffectation. Ces instructions affectent une valeur ou une expression
une variable, 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 daffectation 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 daffectation
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.

Chapitre 5

Dvelopper dans Visual Basic Editor 

135

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 & vbInformation,


"Bonne question" est une instruction excutable entranant laffichage de la bote de
dialogue reprsente la Figure5.2. Linstruction MsgBox est tudie au Chapitre7.
Figure5.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 affiche une bote de dialogue indiquant le nombre de classeurs ouverts
dans la session Excel active (voir Figure5.3).
Figure5.3
Dans une procdure,
les instructions excutables
sont les seules instructions
visibles pour lutilisateur.

Les deux premires instructions sont des instructions de dclaration, nommant successivement la procdure AfficherNbreClasseursOuverts et la variable NbreClasseurs. La
valeur reprsentant le nombre de documents ouverts est ensuite affecte la variable Nbre
Classeurs dans linstruction daffectation de la ligne suivante. Enfin, linstruction dexcution MsgBox affiche une bote de dialogue indiquant lutilisateur le nombre de classeurs
ouverts dans la session Excel. Linstruction de dclaration End Sub signale la fin de la
procdure.

136

Excel et VBA

Les diffrents types de procdures


Une procdure peut excuter une tche visible pour lutilisateur comme effectuer des
tches invisibles, internes au projet, et qui seront exploites ultrieurement par dautres
procdures.
On distingue diffrents types de procdures, en fonction du type de tche quexcute la
procdure. Les types essentiels de procdures sont:

les procdures de type Sub;


les procdures de type Property;
les procdures de type Function.

Procdures Sub
Une procdure Sub (ou sous-routine) est une srie dinstructions excutant 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 dbut et la fin de la procdure. NomDeLaProcdure correspond au nom attribu votre 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 enregistre
ou cre partir dExcel, il sagit du nom attribu la macro dans la bote de dialogue
Macro ou Enregistrer une macro. Instructions correspond aux instructions quexcute la
procdure.

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


obir aux rgles daffectation de noms de Visual Basic. Ils doivent systmatiquement:
contenir au maximum 255caractres;

commencer par une lettre;

ntion
Atte

ne pas comprendre despace et ne pas utiliser les caractres @, &, $,


#, ainsi que le point et le point dexclamation;

ne pas tre identique un mot cl du langage, pour viter tout conflit.

Chapitre 5

Dvelopper dans Visual Basic Editor 

137

Linstruction de dclaration Sub peut aussi contenir des arguments 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 publique
peut tre invoque par nimporte quelle procdure du projet, y compris les procdures stockes dans dautres modules. Une procdure prive ne peut tre invoque qu partir 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 variables de la procdure Sub conservent leurs valeurs
entre les diffrents appels de la procdure. Autrement dit, si une procdure Static est invoque plusieurs reprises lors de lexcution dun programme, chaque appel, les variables
propres cette procdure ont la valeur qui leur a t affecte lors de lappel prcdent.
Arguments reprsente les arguments (des valeurs) passs la procdure Sub par la proc-

dure appelante. La virgule sert de sparateur entre les diffrentes valeurs transmises.
Dans linstruction Sub suivante:
Sub MaProcdure(arg1, arg2)

La procdure MaProcdure est dclare comme ncessitant les arguments arg1 et arg2.
Autrement dit, lorsque la procdure MaProcdure sera appele, la procdure appelante
devra lui transmettre ces arguments 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.
Chacun des arguments de arguments rpond la syntaxe suivante:
[Optional] [ByVal | ByRef] [ParamArray] NomVariable [As type] [=ValeurParDfaut]

ntion
Atte

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


dclaration dune procdure Sub sans spcifier une valeur par dfaut pour les
arguments concerns, la procdure doit tre conue pour sexcuter sans faire
appel ces arguments lorsquils ne sont pas transmis. Dans le cas contraire,
une erreur sera gnre.

138

Excel et VBA

Tableau5.1: Dclaration darguments dans une instruction Sub

lment

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 arguments 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 dclarer les arguments
obligatoires.
Dans linstruction Sub suivante Sub MaProcdure(arg1, arg2, Optional
arg3, Optional arg4), les arguments arg1 et arg2 doivent obligatoirement
tre passs par la procdure appelante, tandis que les arguments arg3 et arg4
sont facultatifs.

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

Chapitre 5

lment

Dvelopper dans Visual Basic Editor 

139

Description

= 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")

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 invoque trois reprises la procdure ProcdureSta


tic laide de linstruction Call en lui passant la variable MaVar dont la valeur est 2.
chaque appel, la procdure ProcdureStatic incrmente la variable MaVarStatique dela
valeur de MaVar et affiche sa valeur dans une bote de dialogue laide de la fonction
MsgBox. La procdure appelante reprend alors la main (et invoque nouveau la procdure
ProcdureStatic).
Ce programme affiche donc trois reprises une bote de dialogue dont le message est
successivement 2, 4, puis 6. En effet, la procdure ProcdureStatic tant dclare Static,
la variable locale MaVarStatique conserve sa valeur entre deux appels. Cette valeur est
incrmente de 2 chaque excution de la procdure.

140

Excel et VBA

ition
Dfin

Une variable est dite locale pour une procdure lorsquelle est propre la
procdure, par opposition une variable publique ou passe par la procdure
appelante.

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


dureStatic, la variable MaVarStatique ne conservera plus sa valeur entre les diffrents
appels de procdures, et le programme affichera trois reprises une bote de dialogue dont
le message sera toujours 2.
Le programme suivant illustre le passage dun argument 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 lavons dtaill dans lexemple prcdent,
mais la procdure ProcdureStatic affecte en plus la valeur 100 MaVar avant de redonner la main la procdure appelante. Malgr cela, le programme continue dafficher trois
botes de dialogue dont le message est successivement 2, 4 et 6. En effet, linstruction
de dclaration de ProcdureStatic spcifie que largument MaVar est appel par valeur
(ByVal), et non par adresse. La valeur de MaVar est donc exploite, mais sa valeur relle ne
peut tre modifie. MaVar reprend donc sa valeur initiale ds que la procdure appelante
reprend la main.
Supprimez le mot cl ByVal dans linstruction de dclaration de ProcdureStatic.
Largument MaVar est maintenant pass par adresse et sa valeur peut donc tre modifie.
Le programme ainsi modifi affiche trois botes de dialogue dont le message est successivement 2, 102 et 202, refltant ainsi la modification de la valeur de MaVar effective lors des
deuxime et troisime excutions de la procdure ProcdureStatic.

Chapitre 5

Dvelopper dans Visual Basic Editor 

141

Procdures Function
Une procdure Function (ou fonction) est une srie dinstructions excutant une tche
dtermine au sein du projet et renvoyant une valeur, qui sera exploite par dautres procdures. Une procdure Function est structure de la faon suivante:
Function NomDeLaProcdure(Arguments)
Instructions
...
NomDeLaProcdure = Expression
...
End Function

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


NomDeLaProcdure correspond au nom attribu la procdure et doit respecter les rgles
daffectation de noms de Visual Basic. Ce nom est utilis pour invoquer la procdure
partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure.
NomDeLaProcdure = Expression affecte une valeur la fonction. NomDeLaProcdure est le
nom affect la procdure dans linstruction de dclaration Function, et Expression, une
expression affectant une valeur la fonction. Cette instruction daffectation peut apparatre
plusieurs reprises et nimporte o dans le code de la fonction. La valeur renvoye par la
fonction est alors la dernire valeur reue lorsque la fonction prend fin.

Linstruction de dclaration Function peut aussi contenir des arguments 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 valeur renvoy par la procdure. Il peut sagir de lun

des types de variables prsents au Chapitre6. dfaut dtre prcis, la fonction renverra
une valeur de type Variant. Comme nous lavons dj mentionn, il est recommand de
prciser cet argument afin de limiter la mmoire employe par le programme.
Les mots cls Private et Public indiquent si la procdure est prive ou publique. Le mot
cl Static indique que les variables locales de la procdure sont statiques, cest--dire
conservent leur valeur entre les appels. Pour un rappel de ces concepts, reportez-vous la
section prcdente, "Procdures Sub".

142

Excel et VBA

Arguments reprsente les arguments passs la procdure Function par la procdure appe-

lante. 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 arguments arg1 et arg2.
Autrement dit, lorsque la procdure MaFonction sera appele, la procdure appelante devra
lui passer ces arguments 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.
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 diffrents lments de cette syntaxe, reportez-vous au
Tableau5.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 appelante. La fonction ainsi que largument attendu sont de type Long. Une constante Pi est
ensuite dfinie. la troisime ligne, la fonction SurfaceCercle est affecte une expression reprsentant la surface du cercle dun rayon de Rayon centimtres. Enfin, linstruction
End Function signale la fin de la procdure.
Les procdures Function peuvent trs simplement tre appeles partir dautres procdures. Lorsquune procdure Function est dfinie, vous 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

Chapitre 5

Dvelopper dans Visual Basic Editor 

143

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 affiche
ensuite une bote de dialogue dont une partie du message (en gras, dans le listing) fait appel
la fonction SurfaceCercle en lui passant largument Rayon prcdemment dfini. La
fonction SurfaceCercle calcule donc la surface du cercle et rend la main la procdure
appelante qui affiche la bote de dialogue prsente la Figure5.4.
Figure5.4
Linstruction MsgBox
fait appel la fonction
SurfaceCercle pour afficher
la surface du cercle.

Procdures Property
Une procdure Property (ou procdure de proprit) est une srie dinstructions excutant une tche dtermine au sein du projet et manipulant des donnes de type Proprits.
Ilexiste trois types de procdures Property:

Property Get. Elles renvoient la valeur dune proprit qui sera ensuite exploite par
dautres procdures.

Property Let. Ces procdures dfinissent la valeur dune proprit.


Property Set. Elles tablissent une rfrence entre un objet et une proprit.

pel
Rap

Une proprit est un attribut nomm dun objet, dfinissant ses caractristiques
ou son tat. Par exemple, la proprit Address dun objet Range renvoie ladresse
de cet objet (A1, par exemple). La proprit ColorIndex dun objet Font renvoie
la couleur de cet objet (une police de caractres).

144

Excel et VBA

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 procdure. NomDeLaProcdure correspond au nom attribu la procdure et doit respecter les
rgles daffectation de noms de Visual Basic. Ce nom est utilis pour invoquer la procdure
partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure.
NomDeLaProcdure = Expression affecte une valeur la procdure de proprit. NomDeLaProcdure est le nom affect la procdure dans linstruction de dclaration Property Get,
et Expression, une expression affectant une valeur la procdure. Cette instruction daf-

fectation peut apparatre plusieurs reprises et nimporte o dans le code de la procdure.


Lcriture dune procdure Property Get se justifie lorsque la valeur de la proprit ne peut
tre renvoye en une seule instruction Visual Basic par exemple, lorsque lon souhaite
renvoyer sous forme de chane de caractres une proprit affecte une constante.
La procdure de proprit suivante renvoie une chane de caractres reprsentant un
commentaire fonction de la valeur 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

Chapitre 5

ntion
Atte

Dvelopper dans Visual Basic Editor 

145

Ce listing est numrot de faon simplifier la prsentation des diffrentes


instructions de la procdure RenvoyerCommentaire. La prsence de cette numrotation dans la procdure relle gnrerait videmment une erreur lexcution.

la ligne1, linstruction Property Get dclare la procdure RenvoyerCommentaire, qui


doit recevoir largument Cellule de type Range (Cellule As Range), et qui renvoie une
valeur de type String (As String). Une instruction de contrle Select Case est utilise pour tester la valeur renvoye par lexpression Cellule.Value des lignes2 13. Pour
chacune des plages de valeurs testes, une chane de caractres est affecte la procdure
de proprit (RenvoyerCommentaire = "commentaire").
Les procdures Property Get peuvent trs simplement tre appeles partir dautres
procdures. Lorsquune procdure Property Get est dfinie, vous pouvez lutiliser dans
nimporte quelle expression exploitant une valeur de proprit, cest--dire en faisant 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
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 effectuer un traitement sur chaque cellule de la slection en cours dans
la feuille de calcul active. Nessayez pas pour linstant de comprendre ces instructions.

146

Excel et VBA

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 expression renvoyant un objet Range (une cellule ou une plage de
cellules) et Texte, le texte du commentaire.
Plutt quune chane de caractres, largument Texte reoit ici pour valeur 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 Figure5.5).
Figure5.5
Chacune des cellules
comprises dans la slection
au moment de lexcution
de la macro sest vue affecter
un commentaire.

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 procdure. NomDeLaProcdure correspond au nom attribu la procdure et doit respecter les
rgles daffectation de noms de Visual Basic. Ce nom est utilis pour invoquer la procdure
partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure.

Chapitre 5

Dvelopper dans Visual Basic Editor 

147

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 valeur devant tre
affecte la proprit.
La procdure Property Let suivante est en quelque sorte la procdure miroir de la procdure Property Get, dcrite plus haut. Cette procdure affecte une couleur de remplissage
chacune des cellules de la slection en cours, en fonction du commentaire affect la
cellule. La chane reprsentant le commentaire dtermine la valeur de la variable numrique 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

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


spcifiant que largument LaCellule de type Range doit tre pass par la procdure appelante. La variable IndexCouleur est dclare laide de linstruction Dim la ligne2. Une
instruction de contrle Select Case est ensuite utilise pour tester la valeur de lexpression
LaCellule.Comment.Text, qui renvoie le texte de commentaire de la cellule (lignes3 12).
Si la valeur renvoye est gale Trs mauvais, Mauvais ou Correct, une valeur reprsentant un index de couleur est affecte la variable IndexCouleur. Si le commentaire de la
cellule ne correspond aucune de ces valeurs, IndexCouleur se voit affecter la constante
xlColorIndexNone. Enfin, linstruction de la ligne13 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, assimilable
laffectation dune proprit (Proprit = Valeur). Le nom de la procdure plac gauche
de linstruction daffectation sera assimil une expression renvoyant une proprit. Largument requis par la procdure Property Let place droite de lexpression sera assimil
la valeur affecte la proprit.

148

Excel et VBA

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 CouleurDeRemplis


sage = LaCellule est assimile une affectation de proprit. CouleurDeRemplissage
est assimil une expression renvoyant une proprit et LaCellule, la valeur affecte
cette proprit. La procdure CouleurDeRemplissage est donc appele par cette instruction.
Elle sexcute et interroge la valeur de la proprit Text de lobjet Comment de la variable
LaCellule. La variable IndexCouleur reoit une valeur, fonction du rsultat retourn. Cette
valeur est ensuite affecte la proprit ColorIndex 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.

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 prive ou publique, et si ses variables locales sont
statiques. Pour un rappel de ces concepts, reportez-vous la section "Procdures Sub" de
ce chapitre.

Chapitre 5

Dvelopper dans Visual Basic Editor 

149

Les instructions de dclaration Property Get et Property Let peuvent aussi spcifier des
arguments dans les parenthses suivant le nom de la procdure. Chacun des arguments
rpond la syntaxe suivante:
[Optional] [ByVal | ByRef] [ParamArray] NomVariable [As type] [=ValeurParDfaut]

Cette syntaxe est la mme que celle utilise pour les arguments des instructions de dclaration 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 valeur renvoy par la procdure. Il peut sagir de lun des types de variables prsents
au Chapitre6.

Des projets bien structurs


Contrairement aux feuilles qui sont automatiquement stockes dans le dossier UserForm
de votre projet, il vous incombe de dterminer lorganisation 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 vous rangez les papiers qui
constituent vos applications VBA. Une bonne organisation vous assurera de retrouver rapidement 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 sappelleront
est fortement recommande. Le code ainsi segment sera plus facile grer, et le dbogage
considrablement simplifi.

Ajouter un module
Vous serez probablement amen dvelopper des applications VBA distinctes au sein
dun mme projet. Il est alors important de placer les procdures constituant une application au sein de mmes modules. Si vous stockez toutes les procdures dun projet
au sein dun mme module, sans aucune distinction, vous risquez dtre rapidement
dpass par un nombre important de procdures dont vous serez incapable de dfinir les
rapports.

150

Excel et VBA

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, affichez 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 lactiver.
3. Pour ajouter un module au projet actif, choisissez lune des trois mthodes suivantes:

Cliquez du bouton droit et, dans le menu contextuel qui saffiche, slectionnez
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 existe 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
Figure5.6).
Figure5.6
Choisissez des noms
reprsentatifs pour
vos modules.

Le nom du module est mis jour dans l'Explorateur


de projet et dans la barre de titre de la fentre Code

Dterminez le nom du module


dans la fentre Proprits

Chapitre 5

Dvelopper dans Visual Basic Editor 

151

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 contextuel qui saffiche, slectionnez
Supprimer Module (o Module est le nom du module slectionn).

Visual Basic Editor affiche une bote de dialogue vous proposant dexporter le module
avant la suppression (voir Figure5.7).

Figure5.7
Pour sauvegarder les informations contenues dans un
module avant sa suppression,
exportez-le.

3. Si vous souhaitez supprimer dfinitivement le module, choisissez Non. Le module est


supprim.
4. Pour effectuer une sauvegarde du module afin de pouvoir le rcuprer en cas de ncessit, choisissez Oui.
5. La bote de dialogue Exporter un fichier saffiche (voir Figure5.8). Le type du fichier
export varie selon llment supprim:

Les modules standard ou modules de code sont exports sous la forme de fichiers
Basic portant lextension .bas.
Les modules de classe sont exports sous la forme de fichiers Classe portant
lextension .cls.
Les feuilles sont exportes sous la forme de fichiers Feuille portant lextension .frm.
6. Indiquez le rpertoire et le nom denregistrement, puis cliquez sur le bouton Enregistrer.
Figure5.8
Indiquez le nom du fichier
export et son dossier denregistrement.

152

Excel et VBA

Info

Pour exporter un module sans le supprimer, slectionnez la commande Exporter


un fichier du menu Fichier. Vous pourrez ensuite limporter dans nimporte quel
projet en choisissant Fichier > Importer un fichier.

Crer une procdure


Pour crer une procdure, activez la fentre Code du module dans lequel sera stocke la
procdure. Si vous souhaitez crer un nouveau module, reportez-vous la section "Des
projets bien structurs", en fin de chapitre.
Vous pouvez ensuite crire directement linstruction de dclaration de la procdure ou utiliser
la bote de dialogue Ajouter une procdure.

crire linstruction de dclaration


1. Dans la fentre Code du module voulu, placez le point dinsertion lendroit o vous
souhaitez insrer une procdure.
ntion
Atte

Les procdures ne peuvent tre imbriques. Veillez donc ce que le point


dinsertion se trouve lextrieur de toute procdure.

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


Private) et le comportement des variables locales (Static). (tape facultative.)
3. Tapez linstruction de dclaration correspondant au type de procdure que vous
souhaitez crer, soit Sub, Function, Property Get, Property Let ou Property Set.
4. Saisissez le nom de la procdure.
5. Indiquez ensuite les ventuels arguments de la procdure entre parenthses. (tape
facultative.)
6. Tapez sur la touche Entre afin de placer un retour chariot.

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 argument pour la procdure, une parenthse ouvrante, immdiatement
suivie dune parenthse fermante, est automatiquement ajoute derrire le nom de la
procdure (voir Figure5.9).

7. Saisissez le code de votre procdure entre ces instructions dencadrement.

Chapitre 5

Dvelopper dans Visual Basic Editor 

Figure5.9
Saisissez linstruction
de dclaration de la procdure, et Visual Basic Editor
insrera linstruction End
correspondante.

153

Les parenthses et l'instruction End


sont automatiquement ajoutes

Saisissez ici le code


de votre procdure

Info

Vous pouvez aussi prciser le comportement et la disponibilit de la procdure


en ajoutant, par exemple, le mot cl Static devant linstruction de dclaration
de faon dfinir les variables locales comme statiques. Pour plus de prcisions, reportez-vous au Chapitre6.

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 Figure5.10 saffiche.


Info

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

Figure5.10
La bote de dialogue Ajouter
une procdure.

154

Excel et VBA

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.

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 correspondant


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 dencadrement de la procdure sont insres dans la partie infrieure de la fentre Code.
5. Saisissez les ventuels arguments de la procdure entre les parenthses situes derrire
le nom de la procdure.
6. Saisissez le code de votre procdure entre linstruction de dclaration de la procdure
et linstruction End correspondante.

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

Info

Lorsque vous slectionnez le type Property, les instructions dencadrement


dune procdure Property Get et dune procdure Property Let sont insres.

La notion de porte
La porte dune procdure est essentielle puisquelle en dtermine laccessibilit pour
les autres procdures du projet. Les procdures peuvent tre publiques ou prives. Une
procdure publique est visible pour nimporte quelle procdure du projet, quel que soit

Chapitre 5

Dvelopper dans Visual Basic Editor 

155

son module de stockage. Une procdure prive est invisible pour les procdures autres que
celles de son module.
Ainsi, une procdure devant tre appele par une procdure appelante situe dans un autre
module doit tre publique. Si, au contraire, vous souhaitez interdire lappel dune procdure
par une procdure appelante situe dans un autre module, vous devez 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. Par contre, si vous 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, prives. Elles ne peuvent en effet pas
tre appeles par une autre procdure, puisque seul lvnement spcifi peut les dclencher. Comme vous le verrez au Chapitre 14, lorsque vous crez des procdures vne
mentielles, 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

criture 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 vierge
et saisissez le texte au clavier. Linstruction crite, tapez sur la touche Entre et crivez
linstruction suivante.

156

Excel et VBA

Caractre de continuit de ligne


Une instruction peut cependant tre crite sur plusieurs lignes de code en plaant le caractre de continuit de ligne le trait de soulignement (_) afin dindiquer que linstruction
se poursuit sur la ligne suivante. Le caractre de continuit de ligne facilite 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 affich 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 expression, un mot cl ou encore une constante ne peuvent
tre crits sur plusieurs lignes.

Les commentaires
Un commentaire est une indication destine faciliter la lecture du code en dcrivant les
tches quexcute une instruction, la date de cration dune procdure,etc.
Linsertion de commentaires dans le texte dune procdure peut se rvler utile, particulirement si elle comprend un grand nombre dinstructions dont vous souhaitez reconnatre
rapidement les fonctions respectives.
Si vous souhaitez insrer des commentaires dans le texte dune procdure, il faut 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.
Visual Basic considre le texte en tant que commentaire et lignore lors de lexcution
dune procdure sil est prcd:

dune apostrophe ();


du mot cl REM.

Chapitre 5

Dvelopper dans Visual Basic Editor 

157

Par dfaut, les commentaires apparaissent en vert dans Visual Basic Editor. Pour modifier la couleur daffichage des commentaires, reportez-vous la section "Un code tout en
couleur", plus loin dans ce chapitre.
Utiliser lapostrophe
Lutilisation de lapostrophe pour marquer les commentaires permet de les placer nimporte quel endroit du texte. Vous pouvez ainsi insrer un commentaire sur la mme ligne
que linstruction concerne en plaant autant despaces que vous le souhaitez entre celle-ci
et lapostrophe. Lapostrophe se rvlera particulirement intressante et efficace pour
les instructions dont la syntaxe est courte, puisquelle permettra daligner les diffrents
commentaires. la Figure5.12, lapostrophe a t utilise comme marqueur de commentaires dans la macro GrasItalique du Chapitre2.
Figure5.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 dbut de ligne. Il sera donc utilis de prfrence pour commenter des blocs dinstructions plutt quune seule instruction. La Figure5.13 illustre lutilisation de REM.
Figure5.13
Linstruction REM ne peut
tre place quen dbut de
ligne.

158

Excel et VBA

ce
Astu

Vous pouvez utiliser des caractres facilement discernables pour faire ressortir
les commentaires. Vous pouvez, par exemple, prsenter vos commentaires de la
faon suivante:
*******************************

****Ceci est un commentaire****


*******************************
Commenter un bloc dinstructions
Lorsque vous testerez le comportement des applications VBA, il se rvlera parfois ncessaire de placer en commentaire un bloc dinstructions que vous ne souhaitez pas voir sexcuter lors de cette phase. Le bouton Commenter bloc de la barre doutils dition permet de
commenter toutes les instructions slectionnes dans la fentre Code active, en plaant une
apostrophe devant chaque ligne de la slection.
Pour ractiver un bloc dinstructions commentes, slectionnez les instructions en question
et cliquez sur le bouton Ne pas commenter de la barre doutils dition. Toutes les apostrophes de dbut de ligne du bloc dinstructions sont supprimes.

Info

Lorsque vous enregistrez une macro dans lapplication hte, des lignes de commentaires indiquant la date denregistrement de la macro 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 variables aux instructions, et effectuer dventuels sauts de ligne entre les blocs dinstruction afin damliorer
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 procdure ou appartenant une mme structure. Lorsque des instructions sont imbriques dans
dautres instructions, on leur applique un retrait supplmentaire par rapport ces dernires.
La hirarchie qui rgit les instructions dune procdure peut ainsi tre visualise, ce qui en
simplifie la lecture (voir Figure5.14).

ition
Dfin

Des instructions sont dites imbriques lorsque leur excution seffectue lintrieur dun autre bloc dinstructions. Vous pouvez, par exemple, crer une
instruction conditionnelle qui vrifie quune plage de cellules dune feuille de
classeur contient des valeurs numriques, et y imbriquer une autre structure

Chapitre 5

Dvelopper dans Visual Basic Editor 

159

conditionnelle qui effectuera des tches dtermines. Les structures de contrle


et leur imbrication sont tudies au Chapitre7.
Figure5.14
Utilisez les retraits
de ligne pour amliorer
la lisibilit de votre code.

Pour appliquer des retraits de ligne, vous pouvez placer indiffremment 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 diteur de la
bote de dialogue Options.
2. Cochez la case Retraitautomatique, puis dfinissez une valeur de retrait comprise
entre 1 et 32 dans la zone Retrait de la tabulation. Cette valeur 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 dition. La valeur du retrait appliqu correspond la valeur dfinie pour
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 diffrentes couleurs, chaque couleur identifiant une catgorie
spcifique du langage. Par exemple, les commentaires sont affichs par dfaut en vert,
tandis que les mots cls du langage apparaissent en bleu et que les erreurs de syntaxe sont
affiches en rouge (voir Figure5.15).

160

Excel et VBA

Figure5.15
Les couleurs dterminent les catgories de texte et mettent en valeur les erreurs de syntaxe.

Pour dfinir vos propres paramtres daffichage du texte dans la fentre Code, procdez
comme suit:
1. Choisissez la commande Options du menu Outils, puis activez longlet Format de
lditeur de la bote de dialogue qui saffiche (voir Figure5.16).
2. Dans la zone Couleur de code, slectionnez la catgorie dont vous souhaitez modifier
les paramtres daffichage. Dterminez ensuite les options daffichage de votre choix
dans les zone de liste droulantes suivantes:

Premier plan. Dfinit la couleur de premier plan. Lorsque le texte nest pas slectionn, il sagit de la couleur des caractres.

Arrire-plan. Dtermine la couleur darrire-plan.

Indicateurs. Dfinit la couleur des indicateurs apparaissant en marge, pour les


catgories du langage affichant ce type dindicateur.

3. Modifiez ventuellement la police daffichage du code, en slectionnant la police de


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 marge ne
seront plus affichs.
5. Cliquez sur OK pour valider les paramtres daffichage du code dfinis.

Chapitre 5

Dvelopper dans Visual Basic Editor 

161

Figure5.16
Longlet Format de lditeur
permet de personnaliser
laffichage du code.

eil
Cons

Les paramtres daffichage du code tels quils sont dfinis par dfaut dans
Visual Basic Editor assurent une lecture confortable lcran. Si vous souhaitez
cependant personnaliser les paramtres daffichage du code, veillez conserver
cette qualit de lecture.

Dplacer une procdure


Si vous tes un adepte des grands mnages larrive du printemps, il vous 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 faon cohrente
vos projets. Pour dplacer une procdure vers un autre module, utilisez la technique du
glisser-dplacer:
1. Ouvrez les fentres Code concernes et affichez-les simultanment laide des
commandes Mosaque horizontale ou Mosaque verticale du menu Fentre.
2. Slectionnez la procdure que vous souhaitez dplacer.
3. Cliquez sur le texte ainsi slectionn et, tout en maintenant le bouton de la souris
enfonc, dplacez le curseur vers la fentre Code voulue. Une barre verticale grise
indique o la procdure slectionne sera dplace.
4. Relchez le bouton de la souris.

Info

Sil est impossible deffectuer un glisser-dplacer dans la fentre Code, slectionnez Outils puis Options et cochez la case Glisser-dplacer pour ldition de
texte de longlet diteur.

162

Excel et VBA

eil
Cons

Noubliez pas que lEnregistreur de macro peut rduire de faon considrable


le travail dcriture de code. Nhsitez pas enregistrer les tches qui peuvent
ltre dans une macro. Ajoutez ensuite les instructions Visual Basic qui ne peuvent
tre enregistres dans la fentre Code de la macro.
Si vous devez ajouter des instructions une macro, vous pouvez enregistrer les
commandes correspondantes dans une nouvelle macro, puis coller le code ainsi
gnr lemplacement voulu.

Appel et sortie dune procdure


La division dun programme en plusieurs modules effectuant des tches prcises en amliore
la lisibilit et facilite les ventuels dbogages. Pour excuter 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 charge lexcution dautres tches. Elle
pourra elle-mme appeler dautres procdures, et ainsi de suite. Lorsquune procdure en
appelle une autre, cette dernire sexcute, 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.

eil
Cons

Une instruction contenant simplement le nom dune procdure suffit appeler


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

Chapitre 5

Dvelopper dans Visual Basic Editor 

163

Sub Procdure2()
MsgBox 1er message de la procdure 2
Call Procdure3
MsgBox 2e message de la procdure 2
End Sub
Sub Procdure3()
MsgBox 1er message de la procdure 3
MsgBox 2e message de la procdure 3
End Sub

Lexcution de la procdure AppelsDeProcdures entrane laffichage successif des


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 affiche un message. La procdure Procdure2 est ensuite appele laide de linstruction Call. Elle affiche un message,
puis appelle son tour la procdure Procdure3. Celle-ci sexcute et affiche conscutivement deux messages. Elle se termine alors, et la procdure appelante, Procdure2, reprend
la main. Elle se poursuit avec linstruction place immdiatement sous lappel et affiche
de nouveau un message. Elle se termine son tour et rend la main la procdure qui la
appele, AppelsDeProcdures, qui affiche un ultime message et se termine.
ntion
Atte

Pour appeler une procdure, celle-ci doit tre visible pour la procdure appelante. Pour plus dinformations, reportez-vous la section "La notion de porte",
plus haut dans ce chapitre.

Appels de procdures Function et Property


Les procdures Function et Property ont pour premire fonction de renvoyer une valeur
vous pouvez y placer des instructions effectuant des tches prcises dans un document,
mais il est prfrable de rserver ces oprations aux procdures Sub. Pour appeler une
procdure Function ou Property, il suffit de placer le nom de la procdure dans une

164

Excel et VBA

expression lemplacement o une valeur est attendue. La procdure Property ou Func


tion sexcute alors et se voit affecter une valeur 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.

Passage darguments
Lorsquune procdure est appele, il est souvent ncessaire de lui passer des valeurs issues
de la procdure appelante. La procdure appele exploite alors les valeurs qui lui sont transmises et peut son tour passer des valeurs une autre procdure. Les arguments que peut
recevoir une procdure dune procdure appelante doivent apparatre entre parenthses
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 valeur ou toute expression renvoyant
une valeur accepte par largument, cest--dire dun mme type de donnes les types de
donnes sont tudis au Chapitre6.
Pour une revue dtaille de la syntaxe de dclaration des arguments dune procdure,
reportez-vous au Tableau5.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 argument transmis
par une virgule et en respectant lordre dapparition des arguments dans la dclaration de la
procdure 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 sexcuter correctement sans que ces arguments lui soient passs par la procdure appelante. Pour ignorer un
argument lors dun appel de procdures, placez deux virgules conscutives dans linstruction dappel, correspondant lemplacement de largument dans linstruction de dclaration

Chapitre 5

Dvelopper dans Visual Basic Editor 

165

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

passe respectivement les valeurs ValArg1 et ValArg3 aux arguments Arg1 et Arg2 de la
procdure MaProcdure.

eil
Cons

Pour vrifier si des arguments facultatifs ont t omis lors de lappel de la procdure, utilisez la fonction IsMissing selon la syntaxe suivante:
IsMissing(NomArgument)

La valeur True est renvoye si aucune valeur correspondant largument na


t passe la procdure; False dans le cas contraire.

ntion
Atte

La fonction IsMissing fonctionne avec des valeurs de type Variant. Si vous


testez un argument dun autre type, IsMissing renverra toujours False, que
largument ait t pass ou non.

Arguments nomms
Le passage darguments 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 virgule
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 arguments nomms sont des
arguments dont le nom est reconnu par le programme. Lorsque vous dclarez une procdure, les arguments qui lui sont affects deviennent des arguments nomms. Au lieu de
passer les arguments selon leur ordre dapparition, vous pouvez affecter des valeurs aux
arguments nomms, dans lordre de votre choix, en mentionnant le nom de largument dans
linstruction dappel, selon la syntaxe suivante:
Call NomProcdure (ArgNomm:= valeur, AutreArgNomm:= valeur)

166

Excel et VBA

o NomProcdure est le nom de la procdure appele et valeur, les valeurs 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

La procdure MaProcdure accepte les arguments 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
darguments nomms. Largument Propritaire reoit pour valeur la chane renvoye par
lexpression ActiveWorkbook.BuiltinDocumentProperties(3). La proprit Builtin
DocumentProperties renvoie une collection DocumentProperties qui reprsente toutes
les proprits de document prdfinies. Lindex3 permet de ne renvoyer que le troisime
membre de la collection, en loccurrence le nom de lauteur. NomFichier se voit affecter
la chane retourne par lexpression ActiveWorkbook.Name qui renvoie le nom du classeur actif. Ces arguments sont exploits par la procdure appele pour afficher la bote de
dialogue reprsente la Figure5.17.
Figure5.17
Utilisez les noms des arguments
nomms pour passer des informations une procdure dans
un ordre alatoire.

Info

Les arguments nomms ne sont pas une spcificit des procdures. La plupart
des fonctions intgres de Visual Basic intgrent des arguments nomms.

Sortie dune procdure


Il peut tre utile de quitter une procdure avant la fin de son excution. Pour quitter une
procdure avant la fin de son excution, utilisez le mot cl Exit suivi du mot cl dterminant
le type de la procdure:

Chapitre 5

Dvelopper dans Visual Basic Editor 

167

Exit Sub. Cette procdure entrane la sortie dune procdure de type Sub.
Exit Property. Elle entrane la sortie dune procdure de type Property.
Exit Function. Elle entrane la sortie dune procdure de type Function.

Lorsquune sortie de procdure est provoque par le mot cl Exit, le programme se poursuit avec linstruction suivant immdiatement celle qui a appel la procdure quitte. Dans
lexemple suivant, une bote de dialogue saffiche laide de la fonction MsgBox, afin de
demander lutilisateur sil souhaite excuter de nouveau le programme.
Sub MonProgramme()
Instructions
Call AutreProcdure
Instructions
Recommencer = MsgBox "Recommencer lopration?", vbYesNo+vbQuestion
If Recommencer = vbYes Then
Call MonProgramme
Else
Exit Sub
End If
End Sub

La procdure MonProgramme excute des instructions, puis appelle une autre procdure.
Elle reprend ensuite la main et excute une autre srie dinstructions. Une bote de dialogue saffiche, proposant lutilisateur de ritrer lopration. Une structure de 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
sexcute de nouveau; sil choisit Non, une instruction Exit entrane la sortie de la procdure et le programme se termine.

Info

Les structures de contrle et les fonctions MsgBox et InputBox sont tudies au


Chapitre7.

Sortie dun programme


Deux instructions permettent dinterrompre lexcution dun programme: End et Stop.
Une instruction End met fin lexcution dun programme et libre lensemble des
ressources mmoire quil utilise. Les variables perdent leur valeur, les feuilles UserForm
sont dcharges, et les ventuels classeurs ouverts par le programme laide de la mthode
Open sont ferms.

168

Excel et VBA

Si vous votre programme utilise des variables objet ou charge des feuilles UserForm, linstruction End permet de rinitialiser lensemble des valeurs, vous prservant ainsi dventuels problmes de mmoire. Dautre part, si le programme est excut nouveau lors de
la session Excel en cours, toutes les valeurs seront rinitialises comme lors de la premire
excution. Si vous ne mettez pas fin au programme par une instruction End et si vous 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 charges en
mmoire. Si la feuille est nouveau affiche au cours de session Excel, elle le sera avec
ses valeurs.
Linstruction Stop est utilise dans le cadre du dbogage (voir Chapitre10) et de lanalyse
des programmes VBA afin de placer lexcution 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 variables conservent leurs valeurs. Vous
pouvez poursuivre lexcution pas pas, crire des instructions dans la fentre Excution afin dvaluer ou de tester votre programme ou encore poursuivre lexcution du
programme. Les outils et les techniques de dbogage des programmes VBA constituent le
sujet du Chapitre10.

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 Standard, ou choisissez la commande Excuter Sub/UserForm du menu Excution, ou, enfin,
appuyez sur la touche F5.
Seules les procdures Sub ne ncessitant pas darguments sont accessibles par la bote de
dialogue Macro dExcel. Pour excuter 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.

ition
Dfin

Macro or not macro ? Les macros sont des procdures de type Sub pouvant
tre excutes de faon autonome, et donc ne ncessitant pas darguments. Une
procdure 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 affecter 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 Chapitre11.

Chapitre 5

Info

Dvelopper dans Visual Basic Editor 

169

Si lexcution dun programme gnre une erreur, reportez-vous au Chapitre10.

Aide lcriture de code


Visual Basic Editor met votre disposition des outils daide lcriture de code dans
Visual Basic Editor. Pour activer ou dsactiver ces outils, choisissez la commande Options
du menu Outils et activez longlet diteur. Cochez ou dcochez ensuite les options de la
zone Paramtres du code (voir Figure5.18). Si vous dbutez dans la programmation en
VBA, activez les options daide lcriture de code. Ils vous accompagneront dans votre
apprentissage.
Figure5.18
Visual Basic Editor propose
des outils daide lcriture
de code.

Vrification automatique de la syntaxe


Loption de vrification automatique de la syntaxe entrane la vrification automatique de
la validit de chaque ligne de code saisie. Chaque fois que vous frappez la touche Entre
ou que vous changez de ligne, la ligne en cours est vrifie. Si une erreur est dtecte,
un message dcrivant lerreur de syntaxe saffiche, et linstruction non valide apparat en
rouge (voir Figure5.19).
Vous pouvez alors cliquer sur le bouton OK et corriger lerreur si elle vous apparat vidente,
ou choisir le bouton Aide afin dafficher la rubrique daide associe lerreur repre.
Celle-ci vous prsente les sources probables de lerreur et vous propose des solutions adaptes (voir Figure5.20). Ds que vous entrez une modification dans linstruction incrimine,

170

Excel et VBA

celle-ci retrouve sa couleur normale, que lerreur soit ou non corrige. Si lerreur de syntaxe
nest pas rsolue, le message saffichera de nouveau lorsque vous changerez de ligne.

Figure5.19
Vous tes prvenu chaque fois quune erreur est dtecte.
Figure5.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 mots
cls possibles chaque fois que lattente dun complment est reconnue lors de lcriture
de code. Cest par exemple le cas lorsque vous 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 (voir Figure5.21).

Chapitre 5

Dvelopper dans Visual Basic Editor 

171

Vous pouvez alors slectionner lun des lments de la liste laide de la souris ou des
touches flches puis valider ce choix par la touche Espace, ou continuer saisir votre code,
sans tenir compte de la liste affiche.

Figure5.21
Loption de complment automatique des instructions affiche la liste des mots cls possibles.

Info express automatique


Chaque fois quune fonction intgre de Visual Basic ou quune procdure Function du
module est reconnue, loption Info express automatique en affiche la syntaxe dtaille,
dans un cadre situ sous linstruction saisie (voir Figure5.22).

Figure5.22
Loption dinfo express automatique affiche la syntaxe des fonctions au cours de la saisie.

ce
Astu

Les options daide lcriture de code dans Visual Basic Editor peuvent aussi
tre actives par la barre doutils dition.

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

174

Excel et VBA

Les variables sont un lment essentiel de la programmation. Elles permettent de stocker


les informations de votre choix tout moment de lexcution dun programme et de les
rexploiter nimporte quel autre moment. Les variables sont un lieu de stockage que vous
dterminez. Vous pouvez, par exemple, stocker dans une variable une valeur reprsentant
le nombre de classeurs ouverts, le nom du fichier, la valeur ou ladresse dune cellule, les
informations entres par lutilisateur dans une feuille VBA,etc.

Dclarer une variable


Pour crer une variable, vous devez la dclarer, cest--dire lui affecter un nom quil suffira
par la suite de rutiliser pour exploiter la valeur qui y est stocke. La dclaration de variables
dans un programme VBA peut tre implicite ou explicite. Autrement dit, les programmes
VBA peuvent reconnatre lutilisation dune nouvelle variable sans que celle-ci soit pralablement cre dans une instruction de dclaration. Vous pouvez aussi paramtrer Visual
Basic Editor afin dexiger la dclaration explicite des variables avant leur utilisation.

Dclaration implicite
Si la dclaration explicite des variables nest pas requise, le simple fait de faire apparatre
un mot non reconnu par le programme dans une instruction daffectation suffira pour que
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 daffectation valide. La
variable MaVar est donc cre et affecte la valeur de la cellule D7. Elle est ensuite utilise pour afficher un message lattention de lutilisateur (voir Figure 6.1). Loprateur
de concatnation & est utilis pour faire apparatre la valeur de la variable au cur dune
chane de caractres dfinie.
Figure6.1
Les variables peuvent tre
utilises dans des chanes
laide de loprateur de
concatnation.

Chapitre 6

Variables et constantes

175

Vous pouvez attribuer le nom de votre choix une variable. Un nom de variable doit
cependant respecter les rgles suivantes:

Il doit commencer par une lettre.

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, dargument
nomm,etc.).

Il ne peut contenir plus de 255 caractres.


Le point, le point dexclamation, les espaces et les caractres @, &, $ et # ne sont pas
autoriss.

Dclaration explicite
Si les variables peuvent 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 variables avant leur utilisation,
grce linstruction Option Explicit. Lutilisation de cette option permet dviter les
risques derreurs lies une faute de frappe dans le nom dune variable. Considrez la
procdure suivante:
Sub MacroErreur()
MaVariable = Workbooks.Count
While MaVarable < 10
Workbooks.Add
MaVariable = MaVariable+1
Wend
End Sub

Cette procdure a pour but douvrir des classeurs en boucle, jusqu ce que dix classeurs
soient ouverts au total. Le nombre de classeurs ouverts (Workbooks.Count) est affect
la variable MaVariable. Une instruction While...Wend que vous dcouvrirez dans le
prochain chapitre est utilise pour crer un nouveau classeur (Workbooks.Add) et ajouter
1 MaVariable tant que la valeur 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 la
condition MaVarable < 10 ne soit jamais respecte.

176

Info

Excel et VBA

Pour interrompre une macro sexcutant linfini, tapez la combinaison clavier


Ctrl+Pause.

Pour viter ce type derreur, forcez la dclaration explicite des variables. Pour cela, placezvous dans la section Dclarations de la fentre Code du module et saisissez-y linstruction
Option Explicit (voir Figure6.2).
Figure6.2
Linstruction
Option Explicit doit
se trouver dans la section
Dclarations de la fentre
Code.

Dornavant, lapparition de noms de variables 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 Figure6.3
lexcution du programme.
Figure6.3
Loption Option Explicit
permet de dtecter immdiatement 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.

Chapitre 6

Variables et constantes

177

1. Slectionnez la commande Options du menu Outils et placez-vous sur longlet diteur.


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 variable, qui sera utilis par la suite pour y faire rfrence,
et Type le type de donnes quaccepte la variable prsents dans la section suivante. Largument Type est facultatif, mais la dclaration dun type de variable peut vous faire conomiser de lespace mmoire et amliorer ainsi les performances de votre programme. Lors
de la dclaration de variables, une variable 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 dafficher la bote de dialogue de la Figure6.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

Figure6.4
Des variables peuvent tre
utilises comme arguments
dune fonction.

Plusieurs variables peuvent tre dclares dans une mme instruction Dim, selon la syntaxe
suivante:
Dim NomVar1 As Type, NomVar2 As Type, ..., NomVarn As Type

178

Excel et VBA

o NomVar1 est le nom de la premire variable dclare, et ainsi de suite. Les trois instructions de dclaration de lexemple suivant peuvent ainsi tre ramenes une seule instruction
de dclaration:
Dim Message As String, Boutons As Single, Titre As String

Gardez lesprit que pour affecter un type aux variables dune telle instruction, celui-ci
doit tre mentionn pour chacune des variables dclares. Linstruction 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 variable
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 valeurs affectes aux variables dans des instructions daffectation
doivent tre compatibles avec le type de la variable. Par exemple, dclarer une variable de
type numrique et lui affecter 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 "variables de chane" permettent le
stockage de donnes reconnues comme une chane de caractres. Pour dclarer une variable
de type String, utilisez la syntaxe suivante:
Dim NomVariable As String

Une variable de chane peut tre affecte toute expression renvoyant une valeur de
type chane (chane, proprit, fonction, etc.). Pour affecter une chane de caractres
une variable de type String, placez celle-ci entre guillemets. Si vous 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.

Chapitre 6

Info

Variables et constantes

179

Loprateur+peut aussi tre utilis pour concatner des chanes de caractres.


Prfrez cependant loprateur &, afin de distinguer aisment la concatnation
de 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 affecte une chane dfinie la variable Prnom. La seconde instruction affecte la valeur de la proprit Name du classeur actif la variable NomFichier. La
troisime conjugue laffectation de chanes dfinies dans le texte, renvoyes par une fonction et renvoyes par une proprit, en concatnant ces diffrentes chanes laide de
loprateur &.
La macro suivante affiche la bote de dialogue reprsente la Figure6.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

Figure6.5
Le message affich 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 denviron deux milliards de caractres. Vous pouvez cependant dclarer des
variables de chane de longueur fixe, autorisant de 1 65400caractres, selon la syntaxe
suivante:
Dim NomVariable As String * longueur

180

Excel et VBA

o longueur est le nombre de caractres que peut recevoir la variable. La dclaration de


variables de chane de longueur fixe peut gnrer une conomie de mmoire et donc un
gain de performance pour votre programme, mais doit tre utilise prudemment. En effet,
si la chane affecte une variable de longueur fixe dpasse la capacit de cette dernire,
la chane sera purement et simplement rogne. Remplacez linstruction de dclaration 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 Figure6.6.


Figure6.6
Utilisez les variables de
chane de longueur fixe 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 variables numriques. Elles se distinguent par lchelle des valeurs
quelles acceptent et par la place quelles occupent en mmoire. Le Tableau6.1 prsente
les diffrents types de variables numriques:
Tableau6.1: Types de donnes numriques

Types de donnes

Valeurs acceptes

Mmoire occupe

Byte (octet)

Nombre entier, compris entre 0 et 255

1 octet

Integer (entier)

Nombre entier compris entre 32768 et 32767

2 octets

Long (entier long)

Nombre entier compris entre 2147483648 et


2147483647

4 octets

Single (simple prcision)

4 octets
Nombre virgule flottante compris entre
1,401298E-45 et 3,402823E38 pour les nombres
ngatifs, entre 1,401298E-45 et 3,402823E38 pour
les nombres positifs

Chapitre 6

Variables et constantes

181

Types de donnes

Valeurs acceptes

Mmoire occupe

Double (double prcision)

Nombre virgule flottante compris entre 1,79769373486232E308 et


4,94065645841247E-324 pour les nombres
ngatifs, entre 4,94065645841247E-324 et
1,79769373486232E308 pour les nombres positifs

8 octets

Currency (montaire)

8 octets
Nombre virgule fixe, avec quinze chiffres pour la
partie entire et quatre chiffres pour la partie dcimale, compris entre 922337203685477,5808 et
922337203685477,5807

Si votre programme exploite beaucoup de variables, laffectation du type appropri celui


qui exploite 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 couvertes par le type de donnes acceptes par la variable. Par exemple, si
une valeur suprieure 255 ou infrieure 0 est affecte une variable de type Byte, une
erreur sera gnre (voir Figure6.7).
Figure6.7
Le type de donnes acceptes
par une variable doit couvrir
lensemble des valeurs
possibles lors de lexcution
du programme.

ntion
Atte

Utilisez le point comme sparateur dcimal dans le code VBA. Lutilisation de


la virgule gnre une erreur.

Au mme titre que les variables de type String, une variable numrique peut tre concatne avec une chane de caractres laide de loprateur &. Une variable numrique peut
aussi tre affecte toute expression renvoyant une valeur numrique (chane, proprit,
fonction,etc.). Vous pouvez aussi effectuer des oprations arithmtiques sur les variables
numriques en utilisant les oprateurs arithmtiques prsents dans le Tableau6.2.

182

Excel et VBA

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

lvation la puissance (2 ^ 4 renvoie 16).

condition que le type de la variable numrique MaVar couvre les valeurs 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 affecte une valeur dfinie la variable MaValeur. La deuxime


instruction affecte la valeur de la proprit Count de lobjet (la collection) Workbooks (le
nombre de classeurs ouverts). La troisime utilise loprateur arithmtique+ pour additionner les valeurs des cellules D3 et D4, et loprateur arithmtique / pour diviser la valeur
obtenue par deux. La dernire instruction lve la variable varRayon prcdemment dfinie
au carr laide de loprateur ^, puis multiplie cette valeur par 2 laide de loprateur *.
Par contre, linstruction suivante affecte une valeur de type chane la variable numrique
Mavar et gnre une erreur (voir Figure6.8).
Sub ErreurAffectation()
Dim Mavar As Byte
MaVar = ActiveWorkbook.Name
End Sub

Rappelez-vous que les constantes sont en ralit des valeurs numriques. Une constante
peut donc tre affecte une variable numrique et utilise dans une expression 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"

Chapitre 6

Variables et constantes

183

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 valeurs
affectes aux constantes vbOKOnly et vbInformation.
Figure6.8
Une chane de caractres
ne peut tre affecte une
variable numrique.

VBA intgre de nombreuses fonctions permettant de manipuler les valeurs 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 pouvez galement y choisir la rubrique Liste et
index. Vous y dcouvrirez des rubriques thmatiques, telles que Rsum des mots cls
financiers, ou Rsum des mots cls mathmatiques.

Valeurs boolennes
Les variables de type Boolean servent stocker le rsultat dexpressions logiques. Une
variable de type Boolean peut renvoyer la valeur True ou False et occupe deux octets en
mmoire. Une variable boolenne peut recevoir la valeur retourne par une expression
renvoyant une valeur de type Boolean, mais peut aussi tre affecte une valeur numrique.
Dans ce cas, si la valeur numrique est gale zro, la variable prendra la valeur False,
True dans le cas contraire. Une variable boolenne utilise comme chane de caractres
renvoie le mot Vrai ou Faux.
Dans lexemple suivant, la variable boolenne ClasseurSauvegard prend la valeur False
si le classeur actif a subi des modifications depuis le dernier enregistrement; True dans le
cas contraire. Une bote de dialogue affiche ensuite le message Vrai ou Faux, en fonction
de la valeur de ClasseurSauvegard.

184

Excel et VBA

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 variables de type Date. Ces variables 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 valeurs ngatives 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 1er janvier 2000,
00:00:01.
Visual Basic intgre des fonctions permettant de manipuler les dates. Par exemple, 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 dialogue
de la Figure6.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

Figure6.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 Index/Listes
du Manuel de rfrence du langage. Vous pouvez galement vous reporter au Manuel de
rfrence pour Microsoft Excel, disponible dans le sommaire de laide.

Chapitre 6

ntion
Atte

Variables et constantes

185

Linstallation par dfaut dExcel ninstalle pas laide en ligne de VBA. Si vous
navez pas effectu une installation personnalise, vous devrez lancer de 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 valeur est compatible avec le
type vers lequel sopre la conversion. Autrement dit, une variable de type Variant peut
tre initialement une chane de caractres, et tre exploite par la suite en tant que valeur
numrique. Si les donnes qui lui sont affectes sont assimilables une valeur numrique,
la conversion 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 variables (16 octets pour les valeurs numriques et
22 octets pour les valeurs de chane) et peuvent donc ralentir lexcution du programme.
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 faciliter 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 permettant de stocker plusieurs valeurs. Contrairement une variable ordinaire ne pouvant recevoir quune seule valeur, vous pouvez dterminer plusieurs emplacements de stockage
pour une variable de matrice. Les variables de matrice permettent de stocker des listes
dlments de mme type dans une mme variable. Vous pouvez par exemple stocker dans
une variable de matrice les chiffres daffaires de tous les reprsentants. Pour dclarer 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 variable. Pour affecter des valeurs
une variable de matrice ou accder celles-ci, il suffit de spcifier la position de la valeur
stocke dans la variable. La premire valeur recevant lindex 0, la dernire valeur est
toujours gale au nombre dlments contenus dans la variable moins 1.

186

Excel et VBA

ce
Astu

Pour dmarrer lindex dun tableau 1 plutt qu 0, placez linstruction Option


Base 1 dans la section Dclarations du module.

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 valeurs 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 stocke sous forme de chanes les jours de la semaine. Une structure de
contrle For...Next est ensuite utilise pour afficher les valeurs contenues par la variable
dans une bote de dialogue.
Sub VarMatrice()
Dim JoursSemaine(7) As String
JoursSemaine(0) = "Lundi"
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 stocker des donnes de types diffrents. Elle doit
alors tre de type Variant. La procdure suivante stocke dans une seule variable le nom,
la date de naissance, ladresse, la fonction et le salaire dun employ. Ces donnes sont
ensuite affiches dans une bote de dialogue (voir Figure6.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

Chapitre 6

Variables et constantes

187

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

Figure6.10
Toutes les informations
relatives un mme sujet
peuvent tre stockes dans
une seule variable de
matrice.

ce
Astu

Utilisez la fonction IsArray pour vrifier si une variable est de type Array.

Variables de matrice multidimensionnelles


Les variables de matrice peuvent tre multidimensionnelles. Les donnes sont alors stockes
horizontalement et verticalement, la manire dun tableau. Les variables de matrice multidimensionnelles permettent de stocker de faon cohrente les valeurs dune feuille Excel.
Les variables multidimensionnelles se dclarent selon la mme syntaxe que les variables
de matrice une dimension, en ajoutant simplement les arguments 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 Figure6.11. Elle reprsente les ventes


mensuelles pour lanne 2003, de quatre types de produits, soit 12 lignes sur quatre
colonnes. Une variable de matrice multidimensionnelle permettra de stocker lensemble
des valeurs de cette feuille logiquement.
Figure6.11
Utilisez les variables
de matrice multidimensionnelles pour stocker
les valeurs dun tableau.

188

Excel et VBA

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


ensuite daffecter logiquement les valeurs de la feuille aux espaces de stockage de la
variable:
MonTableau(1,
MonTableau(1,
MonTableau(1,
MonTableau(1,
MonTableau(2,
MonTableau(2,
MonTableau(2,
MonTableau(2,
Etc.

1)
2)
3)
4)
1)
2)
3)
4)

=
=
=
=
=
=
=
=

Cells(3,
Cells(3,
Cells(3,
Cells(3,
Cells(4,
Cells(4,
Cells(4,
Cells(4,

2).Value
3).Value
4).Value
5).Value
2).Value
3).Value
4).Value
5).Value

Ainsi, pour accder aux ventes dun mois, il suffira de spcifier la valeur correspondante
comme premier index de la variable MonTableau (1 = janvier, 2 = fvrier,etc.). Pour accder
une catgorie de ventes, il suffira de spcifier la valeur correspondante comme second
index de la variable MonTableau (1 = Livres, 2 = Vido, 3 = Hi-Fi, 4 = Autres). Par exemple,
MonTableau(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.
Nhsitez pas utiliser les variables de matrice pour stocker les donnes dune feuille Excel
auxquelles un programme VBA doit accder de multiples reprises. La variable 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 daffecter lensemble des
valeurs de ce tableau une variable de matrice en quelques lignes de code. Vous apprendrez
utiliser cette structure au Chapitre7.

Info

eil
Cons

Une variable de matrice nest pas limite deux dimensions. Vous pouvez
p arfaitement crer une variable de matrice trois dimensions, ou plus.

Les fonctions LBound et UBound renvoient respectivement le plus petit indice et le


plus grand indice disponible pour une dimension spcifie dun tableau etsutilisent selon la syntaxe suivante:
LBound(NomVariable, Dimension) et UBound(NomVariable, Dimension)

Chapitre 6

Variables et constantes

189

O NomVariable est le nom de la variable de matrice et Dimension, la dimension dont vous souhaitez connatre le plus petit ou le plus grand 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 variables de matrice dynamiques sont des variables de matrice dont vous pouvez modifier la taille. Pour dclarer une variable de matrice dynamique, ne spcifiez pas de valeur
entre les parenthses qui suivent son nom. Linstruction suivante:
Dim NomVariable()

cre une variable de matrice dynamique. Avant daffecter des valeurs la variable 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 variables de matrice sont intressantes lorsque vous ne
connaissez pas la quantit de donnes stocker. 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 nouvelle ligne. Pour que votre programme
fonctionne tout au long de lanne, vous devrez crer une variable de matrice de longueur
variable. Cest ce que fait la procdure suivante:
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 ligne4 sert affecter le numro de la dernire ligne contenant des donnes la
variable DerniereLigne. La fonction End renvoie 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 variable NbreDeLignes est cre ligne5. On lui affecte ensuite
une valeur gale DerniereLigne - 2, soit le nombre de lignes contenant des donnes

190

Excel et VBA

stocker dans la variable (les deux premires lignes ne contenant pas de donnes stocker).
la ligne7, la variable de matrice MonTableau est redimensionne de faon accueillir
lensemble des chiffres de ventes de la feuille.
ntion
Atte

Lorsque vous redimensionnez une variable de matrice, celle-ci est rinitialise


et toutes les valeurs qui y taient stockes sont perdues. Pour conserver les
valeurs dune variable de matrice lors de son redimensionnement, placez le mot
cl Preserve devant linstruction ReDim. Lutilisation du mot cl Preserve est
cependant subordonne certaines conditions:

Vous ne pouvez redimensionner que la dernire dimension de la variable.

Vous ne pouvez pas modifier le nombre 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 deffectuer des calculs sur des donnes affiches sous
forme de tableaux, les variables de matrice sont trs utilises dans les programmes VBA
pour Excel. Elles permettent en effet de stocker les donnes de feuilles de calcul sous forme
de variables et de travailler directement sur la variable plutt que sur le tableau, amliorant
ainsi sensiblement les performances du programme.

Variables objet
Les variables objet sont utilises pour faire rfrence un objet et occupent 4 octets en
mmoire. Une fois une variable objet dfinie, vous pouvez interroger ou dfinir les proprits de lobjet, excuter lune de ses mthodes en faisant simplement rfrence la variable.
Pour dclarer une variable objet, utilisez la syntaxe suivante:
Dim NomVariable As Object

Vous pouvez dclarer prcisment le type dobjet affect la variable, en remplaant


Object par un nom dobjet reconnu par lapplication. Vous pouvez, par exemple, dclarer
une variable objet Workbook (classeur) selon la syntaxe suivante:
Dim MonObjetClasseur As Workbook

Une fois la variable 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 expression renvoyant un objet de lapplication. Dans lexemple


suivant, la variable objet Police est dclare en tant quobjet Font, puis affecte

Chapitre 6

Variables et constantes

191

lexpression Workbooks("Representant.xlsx").Sheets("Feuil1").Range("A1:D5").
Font, soit lobjet Font (police) de la plage de cellules A1:D5 de la feuille libelle "Feuil1"
du classeur Representant.xlsx. La variable 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.xlsx").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 ouvert. Vous
pouvez ainsi interroger les valeurs dun Tableau Excel sans que celui-ci soit ouvert.
Vouspouvez galement modifier lobjet auquel vous 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 respectivement au chemin daccs complet et au nom du fichier auquel vous souhaitez accder et
la classe de lobjet. Si largument pathname est spcifi, largument class peut tre omis.
La procdure suivante cre une variable objet de type Workbook et lui affecte le fichier
Representant.xlsx, situ sur le Bureau de Windows.
Sub AccederObjetFerme()
Dim ObjetClasseur As Workbook
Set ObjetClasseur = _
GetObject("C:\Windows\Bureau\Representant.xlsx")
End Sub

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 effectue, le classeur contenant les donnes de stock soit mis jour. Si ncessaire, un message pourra tre affich, afin
de prvenir lutilisateur quil est temps de renouveler le stock, et ce sans mme quil sache
quil existe un classeur des stocks.

192

Excel et VBA

Cest ce que fait la procdure suivante, en supposant que la valeur du stock pour le produit
command se trouve dans la cellule A13 du classeur stock.xlsx.
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.xlsx)
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

ntion
Atte

Veillez personnaliser le chemin prcis pour la fonction GetObject la


ligne18, sinon cette macro ne fonctionnera pas.

la ligne6, la procdure Commande appelle la procdure VerifierEtMettreAJourStock en


lui passant la valeur de la variable UnitsCommandes. La valeur 50 a t affecte cette
variable la ligne5 pour faire fonctionner le programme. Il va de soi que cette variable doit
tre affecte au nombre dunits rellement commandes.

Chapitre 6

Variables et constantes

193

La fonction VerifierEtMettreAJourStock dclare la variable objet ObjetStock de type


Workbook (ligne 16) et la variable StockDispo de type Integer (ligne 17). Ligne 18, la
variable ObjetStock est affecte au classeur Stock.xlsx situ sur le Bureau de Windows.
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, lignes21 24, une structure If...Then...
Else est utilise pour mettre jour la valeur du stock restant. Linstruction de la ligne21
vrifie que le stock restant aprs commande est suprieur zro. Si cest le cas, la valeur
de la cellule A13 est mise jour pour reflter le stock restant (ligne22) et le classeur est
ensuite sauvegard (ligne23).
La procdure Commande reprend alors la main. Lignes7 12, une structure conditionnelle
If...Then...Else affiche un message lattention de lutilisateur, afin de linformer sur
ltat du stock. Si le stock est insuffisant pour assurer la commande (StockRestant<0),
linstruction de la ligne8 est excute. Lutilisateur est alors averti que la commande na
pu tre valide, et inform du stock disponible (StockRestant+UnitsCommandes). Si le
stock permet dassurer la commande, linstruction de la ligne11 affiche un message 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 arguments nomms de type chane. class correspond la
classe de lobjet dont on cre une instance. servername est facultatif et correspond au nom
dun serveur distant sur lequel est cr lobjet. Si vous 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 nouveau classeur est
cr, configur puis enregistr 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")

194

Excel et VBA

8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:

affichage de lobjet Xl
Xl.Application.Visible = True
cration dun nouveau classeur dans lobjet Xl
Set NouvClasseur = Xl.Workbooks.Add
suppression de la troisime feuille de calcul
NouvClasseur.Sheets(3).Delete
affectation de noms aux feuilles 1 et 2
NouvClasseur.Sheets(1).Name = Quantites
NouvClasseur.Sheets(2).Name = Chiffres
dfinition du nom du classeur
Dim compteur As Byte
Dim Pos As Long
NomFichier = Ventes & Date & .xlsx
For compteur = 1 To 2
Pos = InStr(NomFichier, "/")
NomFichier = Left(NomFichier, Pos - 1) & "-" & _
Right(NomFichier, Len(NomFichier) - Pos)
Next compteur
enregistrement du classeur
NouvClasseur.SaveAs "C:\Documents and Settings\Administrateur\Bureau\
Ventes\" & NomFichier
28:
NouvClasseur.Close
29:
Xl.Quit
30: End Sub

ntion
Atte

Veillez personnaliser le chemin prcis pour la fonction GetObject la


ligne27, sinon cette macro ne fonctionnera pas.

Lignes 2 5, les variables sont dclares. Les variables Xl et NouvClasseur sont des
variables objet de type Excel et Workbook. La variable NomFichier servira stocker le
nom denregistrement du classeur. Ligne7, une instance de lobjet Application dExcel
est cre laide de linstruction CreateObject, et affecte la variable Xl. La proprit
Visible de lobjet Application est ensuite dfinie True afin de faire apparatre la session
Excel lcran.
Ligne 11, un nouveau classeur est ajout lobjet Application nouvellement cr, et
affect la variable objet NouvClasseur. Notez que, par dfaut, un nouveau classeur est
cr dans la session Excel partir de laquelle le programme est excut. Pour que le
nouveau classeur soit cr dans la nouvelle session Excel, il est indispensable de faire
rfrence lobjet Xl dans linstruction de la ligne11 (Xl.Workbooks.Add et pas simplement
orkbooks.Add). Lignes13 16, la troisime feuille du classeur est supprime et les deux
W
autres sont renommes.

Chapitre 6

Variables et constantes

195

Lignes17 25, le nom denregistrement du classeur est dfini. La variable NomFichier se


voit tout dabord affecter le nom Ventes suivi de la date du jour (Ventes 12/08/2007, par
exemple). Ce nom contient deux fois le caractre barre oblique (/), non valide dans les
noms de fichier. Lignes21 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 barres
obliques (les boucles sont tudies au prochain chapitre). On utilise pour cela les fonctions
de manipulation de chane InStr, Left, Right et Len. Instr est utilis pour renvoyer la
position du caractre / dans la chane NomFichier (ligne 22). Len renvoie le nombre de
caractres de la chane NomFichier (ligne24). 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.
Lignes27 et 28, le classeur est enregistr puis ferm. Ligne29, la mthode Quit est applique
lobjet Excel, afin de fermer la session Excel cre en dbut de programme.

Librer une variable objet


Pour annuler laffectation dun objet une variable objet, donnez-lui la valeur Nothing.
Linstruction suivante annule laffectation de la variable 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 ligne24. La variable 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 faon rcurrente diffrents types de donnes. Vous pouvez
alors crer un nouveau type de donnes auquel il suffira de faire rfrence chaque fois que
vous souhaiterez crer une nouvelle variable regroupant ces types de donnes.
linstar des variables de matrice, le mot cl Type permet donc de crer des variables
capables de stocker des informations multiples. Mais, contrairement aux variables de
matrice, Type permet dassocier des types de donnes diffrents. La dclaration dun
nouveau type de donnes doit tre place dans la section Dclarations du module, selon la
syntaxe suivante:

196

Excel et VBA

Type NomType
Donnes1 As Type
Donnes2 As Type
....
Donnesn As Type
End Type

o Donnes1, , Donnesn sont les donnes que contiendront les variables de type NomType.
Ces noms seront employs par la suite pour affecter des valeurs aux diffrents espaces de
stockage des variables 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 pouvoir 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 recevoir toutes les informations contenues dans ce type. Les informations contenues dans une
variable peuvent ensuite tre interroges ou dfinies 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 valeurs, puis affiche une bote de dialogue indiquant les donnes
Prnom et Nom de la variable (voir Figure6.12):
Sub NouveauMembre
Dim NouvMembre As Membre
With NouvMembre
.Prnom = "Hlne"
.Nom = "Bienvenue"
.Adresse = "4, rue des oiseaux"
.CodePostal = "56000"
.Ville = "Vannes"
.Tlphone = "0001020304"
.Age = 2
End With
MsgBox Le nouveau membre sappelle & NouvMembre.Prnom & & _
NouvMembre.Nom, vbOKOnly+vbInformation, Nouveau membre
End Sub

Chapitre 6

Variables et constantes

197

Figure6.12
Les variables de type personnalis peuvent contenir un
nombre indtermin dinformations.

Notez que, en phase de cration, un complment automatique saffiche lorsque vous faites
rfrence une variable de type personnalis (voir Figure6.13) condition que loption
correspondante soit valide.
Figure6.13
Le complment automatique
dinstruction saffiche pour
les types de donnes personnaliss.

Constantes
Les constantes permettent dattribuer un nom une valeur fixe. Il est ainsi plus ais dexploiter cette valeur dans le code en faisant rfrence au nom de la constante, plutt qu la
valeur elle-mme. Par ailleurs, si une valeur est susceptible dtre modifie (une valeur de
TVA, par exemple), laffectation de cette valeur une constante simplifiera les ventuelles
mises jour. Il vous suffira en effet de modifier la valeur de la constante, plutt que de
modifier chaque occurrence de la valeur dans le code de lensemble de vos projets.
ntion
Atte

Une fois quune valeur a t affecte une constante, celle-ci ne peut tre modifie
par la suite.

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

198

Excel et VBA

valeur qui lui est affecte. Linstruction suivante dclare la constante TVA, laquelle la
valeur 20.6 est affecte.
Const TVA As Single = 20.6

Validation et conversion des types de donnes


Il est souvent ncessaire de vrifier que le type de donnes entres par lutilisateur dans une
cellule ou dans une feuille UserForm est valide, 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 valeur correspond bien au type
attendu. Ces fonctions sont prsentes dans le Tableau6.3.
Tableau6.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 uniquement 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.

Chapitre 6

Variables et constantes

199

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 variable de type Integer, et NomVar le nom de la variable dont vous
souhaitez interroger le type.
La variable MaVar reoit pour valeur 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 syntaxe (MaVar = VarType(NomVar)), mais renvoie une

chane de caractres reprsentant le type de la variable (voir Tableau6.4).


Tableau6.4: Valeurs renvoyes par la fonction TypeName

Chane renvoye

Variable

Type objet

Objet dont le type est type_objet

Byte

Octet

Integer

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

200

Excel et VBA

La fonction EntrerUneDate suivante utilise la fonction InputBox pour demander lutilisateur dentrer une date. La fonction IsDate est employe pour vrifier si la valeur entre
par lutilisateur est bien une date. Si tel nest pas le cas, lutilisateur est de nouveau invit
entrer une date.
Function EntrerUneDate()
Do
EntrerUneDate = InputBox("Entrez une date", "Vrification du type de
donnes")
Loop Until IsDate(EntrerUneDate) = True
End Function

Info

La fonction InputBox et la structure de contrle Do...Loop sont prsentes en


dtail au chapitre suivant.

Modifier le type dune variable


VBA intgre des fonctions permettant de convertir une variable dun type dfini vers un
autre type de donnes. Le Tableau6.5 prsente sommairement ces fonctions. Pour plus de
prcisions, reportez-vous laide en ligne de VBA.
Tableau6.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.

Chapitre 6

Variables et constantes

201

Fonction

Description

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. Si MaVar 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.

Porte et dure de vie des variables


Outre leur type et leur valeur, les variables et les constantes sont caractrises par leur porte.
La porte dune variable 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 variables 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
conserver sa valeur tant quune procdure sexcute, et tre rinitialise lorsque la procdure est termine, ou conserver sa valeur entre les diffrents appels de procdures.

Porte de niveau procdure


Une variable-constante est dite de niveau procdure lorsquelle nest accessible qu la
procdure dans laquelle elle est dclare. Cest le cas de toute variable-constante dclare
lintrieur dune procdure. Les variables-constantes dclares lintrieur dune procdure ne sont accessibles qu la procdure laquelle elles appartiennent.

Porte de niveau module prive


Une variable-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.

202

Excel et VBA

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 votre
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 accessible toutes les procdures du module.
Option Explicit
Private Pi As Single
Pi = 3.14
Sub Procdure-1 ()
[....] Instructions
End Sub
[....]

Autres procdures du module

Sub Procdure-n ()
[....] Instructions
End Sub

Porte de niveau module publique


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

eil
Cons

Lorsque vous utilisez une valeur dfinie de faon rcurrente dans un projet (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 procdures. Si cette valeur est modifie, il vous suffira de redfinir linstruction daffectation de la constante pour mettre jour la totalit du projet.

Chapitre 6

Variables et constantes

203

Variables statiques
Une variable conserve sa valeur tant que le programme sexcute dans son champ de porte.
Cette valeur peut tre modifie, mais la variable conserve une valeur. Lorsque lexcution
du programme sort de la porte de la variable, celle-ci est rinitialise et perd sa valeur.
Autrement dit, une variable de niveau procdure conserve sa valeur tant que la procdure
dans laquelle elle est dclare est en cours dexcution mme lorsque la procdure appelle
dautres procdures. Lorsque celle-ci se termine, la variable est rinitialise. Une variable
de niveau module conserve sa valeur jusqu ce que le programme prenne fin.
Pour quune variable de niveau procdure conserve sa valeur entre diffrents appels, substituez le mot cl Static Dim dans linstruction de dclaration de la variable, selon la syntaxe
suivante:
Static NomVariable As Type

ce
Astu

Pour dclarer toutes les variables dune procdure Sub ou Function statiques,
placez le mot cl Static devant linstruction de dclaration de la procdure.

Traitement interapplications laide de variables


objet
Une variable objet peut tre affecte un objet appartenant une application autre que
lapplication hte du projet. Un programme VBA Excel peut ainsi exploiter des objets du
modle dobjets Word, Access ou toute autre application supportant Automation. Il vous
suffit pour cela daffecter les objets auxquels vous souhaitez accder une variable objet
laide des fonctions GetObject et/ou CreateObject.

ition
Dfin

Automation, ou OLE Automation, est une fonction du modle dobjets composant (COM, Component Object Model). Il sagit dun standard quutilisent
les applications pour exposer leurs objets, mthodes et proprits aux outils
de dveloppement. Les applications Office supportent Automation. Un classeur
Excel peut ainsi exposer une feuille de calcul, un graphique, une cellule ou
une plage de cellules,etc. Un fichier Word pourra exposer une page, un paragraphe, un mot, ou tout autre objet de son modle dobjets. Visual Basic pour
Applications permet daccder ces objets, dinterroger ou de redfinir leurs
proprits, den excuter les mthodes,etc.

204

Excel et VBA

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 saffiche, cochez les
cases des bibliothques que vous souhaitez rfrencer, puis cliquez sur OK.
Pour raliser lexemple suivant, rfrencez la bibliothque dobjets Microsoft Word Object
Library partir dun projet Excel. Puis crez un nouveau document Word et enregistrez-le
sur le Bureau de Windows, sous le nom MonDoc.docx.
Figure6.14
Activez la bibliothque
dobjets de lapplication que
vous souhaitez manipuler
partir de la bote de dialogue
Rfrences.

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\
MonDocx.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

Chapitre 6

ntion
Atte

Variables et constantes

205

Veillez personnaliser le chemin prcis pour la fonction GetObject la


ligne18, sinon cette macro ne fonctionnera pas.

Excutez la procdure, puis ouvrez le fichier Word. Un tableau de quatre colonnes sur trois
lignes a t plac en dbut de document.
La variable objet MonDoc est dclare ligne 2. Elle est ensuite affecte lobjet Word.
Application, reprsentant lapplication Word, laide de linstruction Set et de la fonction
GetObject (ligne4). Si lapplication Word nest pas ouverte, une erreur est gnre. Un
dtecteur derreurs est donc plac en ligne3, 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 (ligne5). Cette ventuelle erreur tant gre, MonDoc
peut tre affecte MonDoc.docx (ligne6).
La variable MaPosition de type Word.Range est ensuite dclare (ligne7) lobjet Range
de Word reprsente une position de curseur dans un document. Ligne8, la position reprsentant le dbut du document lui est affecte. Un tableau est ensuite insr cette position,
ligne 9. Le document est ensuite sauvegard. Ligne 11, la variable MonDoc est libre.
Enfin, linstruction de la ligne12 permet de quitter Excel. En effet, lorsque vous faites
appel une variable objet dune autre application, le moteur de lapplication est lanc.
Nomettez donc pas demployer la mthode Quit, afin de librer les ressources occupes
par lapplication.

Info

On distingue, dans laccs aux objets dautres applications laide dAutomation, la liaison tardive de la liaison prcoce. La liaison est dite tardive lorsquune
variable objet de type Object ou Variant est dclare (Dim MaVar As Object).
La variable est ensuite initialise et affecte un objet de lapplication trangre laide de la fonction GetObject. On parle de liaison prcoce lorsque la
variable est dclare dun type identifiant lapplication dont on souhaite exploiter les objets (Dim MaVar as Word.Application). Utilisez de prfrence une
liaison prcoce dans vos programmes. Les performances du programme en
seront amliores, et Visual Basic vrifiera la syntaxe spcifique aux objets de
lapplication trangre lors de lcriture de votre programme.

Notez quun programme Excel peut excuter une macro stocke dans une autre application
hte. Dans lexemple suivant, la macro MacroWord est excute sur un nouveau document
partir dExcel. Pour raliser cet exemple, commencez par crer la macro MacroWord:
1. Lancez Word. Dfinissez le niveau de scurit des macros de faon autoriser lexcution des macros (commande Scurit des macros de longlet Dveloppeur).

206

Excel et VBA

Le modle Normal.dotm de Word est lquivalent du classeur de macros personnel dExcel : les macros stockes dans ce modle sont accessibles tous
les documents Word. Dans les versions antrieures Word 2007, se modle se
nomme Normal.dot.

Info

2. Activez longlet Dveloppeur, puis cliquez sur la commande Macros. La bote de


dialogue Macros saffiche.

it
ibil
pat
m
Co

Avec une version de Word antrieure Word 2007, choisissez Outils > Macro
> Macros.

3. Dans la zone Nom de la macro, saisissez MacroWord et, dans la liste droulante
Macros disponibles dans, slectionnez Normal.dot (modle global).

Info

Le modle Normal.dot de Word est lquivalent du classeur de macros personnel dExcel : les macros 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
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

Chapitre 6

Variables et constantes

207

Excutez la procdure ExecuterMacroWord. La bote de dialogue reprsente la Figure6.15


saffiche.
Ligne 2, la variable MonWord est cre et reoit lobjet Word.Application la ligne
suivante. Ligne4, la proprit Visible de lobjet MonWord est dfinie True afin dafficher Word lcran. Un document est ensuite cr. Ligne 6, on applique la mthode Run
lobjet MonWord afin dexcuter la macro MacroWord. La bote de dialogue reprsente la
Figure6.15 saffiche alors. Ligne7, la variable objet est libre et le programme prend fin.
Figure6.15
Une macro Excel peut
contrler lexcution
de macros dans dautres
applications hte.

Info

Le programme complet prsent au Chapitre17 fournit un bon exemple de traitement interapplications, puisquil propose notamment dditer des documents
Word complexes partir de donnes traites dans le programme Excel.

7
Contrler les programmes
VBA
Au sommaire de ce chapitre

Rpter une srie dinstructions: les boucles


Utiliser des instructions conditionnelles
Dfinir linstruction suivante avec GoTo
Interagir avec lutilisateur via des botes de dialogue
Utiliser les oprateurs logiques
Trier des donnes

210

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

For...Next. Permet de rpter sur un document une srie dinstructions un nombre de

For Each...Next. Permet dexcuter une srie dinstructions sur tous les objets dune

culires lensemble dun document; dans ce cas, ce sont ltat du document et ltat
de lapplication qui dterminent le nombre de boucles ralises.
fois dtermin par lutilisateur.
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 pour
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

Chapitre 7

Contrler les programmes VBA

211

o Condition est une expression comparant deux valeurs laide dun oprateur relationnel. Lorsque la condition spcifie aprs While est ralise, le programme excute la
Srie dinstructions, place entre While et Wend. Lorsque linstruction Wend est atteinte,
le programme retourne linstruction While et interroge nouveau 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 lexcution du programme se
poursuit avec linstruction situe immdiatement aprs Wend.
Pour poser une condition, on conjugue gnralement une expression avec un oprateur
relationnel, ou oprateur de comparaison, et une valeur. Loprateur relationnel permet
dtablir un rapport entre la valeur renvoye par lexpression et la valeur qui lui est associe.
Si ce rapport est vrifi, la condition est respecte.
Le Tableau7.1 prsente les oprateurs relationnels de Visual Basic.
Tableau7.1: Les oprateurs relationnels de Visual Basic

Oprateur relationnel

Signification

gal

>

Suprieur

<

Infrieur

<>

Diffrent de

>=

Suprieur ou gal

<=

Infrieur ou gal

Like

Identique (pour comparer des chanes de caractres)

Is

gal (pour comparer des variables objet)

eil
Cons

Deux chanes de caractres peuvent tre compares laide des oprateurs


relationnels =, <, >,etc. La comparaison seffectue alors entre les codes ANSI
attachs aux caractres compars. Si vous devez effectuer des comparaisons
prcises, prfrez loprateur Like. Celui-ci permet en effet de prendre ou non
en compte la casse et permet lutilisation de caractres gnriques. Consultez
laide en ligne pour plus de prcisions.

La technique denregistrement dinstructions en boucle la plus courante consiste excuter


la srie dinstructions aprs avoir activ lEnregistreur de macro, puis ouvrir la fentre
Code de la macro et y insrer la structure While...Wend.

212

Excel et VBA

Nous utiliserons une structure While...Wend pour automatiser la saisie dinformations dans
une feuille de calcul. Considrez le classeur Representants par departements reprsent
la Figure7.1. La feuille de calcul active (libelle Representants) recense les dpartements
affects chaque reprsentant de la socit. Les noms des reprsentants apparaissent dans
les cellules de la ligne3. 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.
Figure7.1
La rpartition des reprsentants par dpartements.

Le classeur Representants par clients illustr la Figure7.2 contient la liste des clients de
la socit (colonneA). La colonneB nous renseigne sur la ville du client, et la colonneD
sur son numro de client. Les deux premiers chiffres de ce numro correspondent au dpartement dorigine du client. La colonneC contient les initiales du reprsentant en charge du
client. Nous profiterons de ce que ces deux classeurs ont en commun le numro du dpartement pour automatiser la mise jour de la colonneC.
Figure7.2
Le classeur avec la rpartition des reprsentants par
clients avant mise jour de
la colonne C.

Chapitre 7

Contrler les programmes VBA

213

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 le
reprsentant en charge du client. Les initiales du client sont alors insres dans la cellule
situe gauche 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 suivante est active. La procdure sexcute 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.xlsx")
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

Range("D4").Select
While ActiveCell.Value <>
NumDepartement = Left(ActiveCell.Value, 2)
Colonne = ClasseurRepresentants.Sheets(1).Range(A4:I50).
Find(What:=NumDepartement, LookIn:=xlFormulas, LookAt:=xlWhole).Address
Colonne = Range(Colonne).Column
Colonne = CInt(Colonne)
Initiales = ClasseurRepresentants.Sheets(1).Cells(3, Colonne).Comment.
Text
ActiveCell.Offset(0, -1).Range(A1).Select
ActiveCell.FormulaR1C1 = Initiales
ActiveCell.Offset(1, 1).Range(A1).Select
Wend
Set ClasseurRepresentants = Nothing
Workbooks(Representants par departements.xlsx).Close
End Sub

Lignes 2 6, les variables qui seront exploites par le programme sont dclares, et
la variable objet ClasseurReprsentant est affect le classeur Representants par departements.xlsx, situ sur le Bureau. Ligne7, la cellule D4 est slectionne.
La boucle While...Wend des lignes8 17 sexcute tant que la cellule slectionne contient
des informations. Ligne9, 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 valeur est ensuite recherche dans le classeur des reprsentants par dpartements (ligne 10). Lobjet Range renvoy par la mthode Find est affect la variable
Colonne notez que la variable Colonne a t dclare de type Variant de sorte quelle

214

Excel et VBA

puisse recevoir des valeurs de diffrents types. Ligne11, Colonne reoit la valeur correspondant au numro de la colonne de la cellule trouve. Ligne12, la fonction CInt convertit
la valeur de Colonne en valeur de type Integer. La variable Colonne peut ainsi tre utilise
comme argument de la proprit Cells. Ligne13, la variable Initiales reoit pour valeur
les initiales du reprsentant en charge du dpartement. On lui affecte pour cela le texte de
commentaires de la cellule situe dans la mme colonne que lobjet Range renvoy par la
fonction Find, mais sur la ligne3 la ligne des noms de reprsentants.
Lignes 14 et 16, un dplacement par rfrence relative aux cellules est effectu. Tout
dabord, la cellule situe gauche de la cellule active est slectionne et reoit la valeur de
la variable Initiales (ligne15). Un dplacement dune cellule vers la droite puis dune
cellule vers le bas est ensuite effectu. La cellule active est alors la cellule suivante de la
colonne D. Le mot cl Wend renvoie lexcution du programme linstruction While correspondante. Celle-ci vrifie que la cellule active 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 avec les instructions des lignes 18 et 19. Les
ressources systme occupes par la variable objet ClasseurRepresentants sont libres, et
le classeur des reprsentants par dpartements est ferm.

eil
Cons

Pour scuriser dfinitivement cette macro, commencez par lui faire activer la
feuille devant recevoir les informations. Elle devra logiquement tre stocke
dans ClasseurRepresentants.xlsx, puisquelle ne servira qu ce classeur. Ainsi,
elle ne sexcutera que si le classeur est ouvert.

Figure7.3
La macro a complt les
informations de la colonne C.

Chapitre 7

Contrler les programmes VBA

215

La boucle Do...Loop
La structure de contrle Do...Loop est semblable While...Wend, mais offre plus de
souplesse car elle peut se dcliner sur quatre modes diffrents:

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 sexcute, puis se rpte, tant que la condition est respecte.
Do
Srie dinstructions
Loop While Condition

Do...Loop Until. La boucle sexcute, 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 Figures7.4 et7.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. 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 suivante. 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

216

Excel et VBA

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

Lignes2 et 3 les variables objet de type Range CelluleCourante et CelluleSuivante sont


dclares. La variable CelluleCourante reoit ensuite un objet Range correspondant la
cellule A1 de la feuille active. Linstruction des lignes7 9 trie les donnes. On applique
pour cela la mthode Sort. Les arguments Key1 et Order1 dfinissent respectivement le
premier critre de tri et lordre de tri. Header indique sil existe des lignes de tri et reoit ici
la constante xlGuess (Excel dfinit sil y a ou non une ligne de titre et, dans laffirmative,
de quelle ligne il sagit). OrderCustom reoit la valeur 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).
Lignes11 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 sexcute tant que la cellule stocke dans CelluleCourante nest pas vide [Not
IsEmpty(CelluleCourante) = True].
Ligne12, la proprit Offset est utilise pour attribuer CelluleSuivante la cellule situe
une ligne en dessous, sur la mme colonne. Lignes13 15, une instruction conditionnelle
sert supprimer la ligne de CelluleCourante (CelluleCourante.EntireRow) si la cellule
contient les mmes donnes que la cellule suivante. CelluleCourante reoit ensuite la
cellule stocke dans CelluleSuivante (ligne16).
Ligne17, linstruction Loop renvoie le programme linstruction While correspondante.
Lexpression While est de nouveau value et le corps de la boucle sexcute si elle est vrifie. Lorsque lexpression de la ligne11 nest plus vrifie, le programme se poursuit avec
linstruction situe immdiatement sous linstruction Loop. En loccurrence, il prend fin.
Figure7.4
La feuille avant passage
de la macro.

Chapitre 7

Contrler les programmes VBA

217

Figure7.5
La macro a supprim
les doublons.

Le programme fonctionne correctement, mais ne prend en compte que le contenu des


cellules de la colonne A pour dterminer les doublons. La procdure suivante supprime une
ligne uniquement si les donnes sont galement identiques dans les colonnes B, C et D. Les
modifications apportes la premire version 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

218

Excel et VBA

23:
24:
25:
26:
27:
28:
29:
30:
31:
32:

If CellCourante.Offset(0, 1).Value <> CellSuivante.Offset(0, 1).Value


Then
LignesIdentiques = False
ElseIf CellCourante.Offset(0, 2).Value <> CellSuivante.Offset(0, 2).Value
Then
LignesIdentiques = False
ElseIf CellCourante.Offset(0, 3).Value <> CellSuivante.Offset(0, 3).Value
Then
LignesIdentiques = False
Else
LignesIdentiques = True
End If
End Function

Ligne15, linstruction conditionnelle dfinissant si la ligne est supprime appelle la fonction LignesIdentiques en lui passant les arguments CelluleCourante et CelluleSuivante.
La fonction Lignesidentiques est dclare comme recevant deux arguments de type Range
et renvoyant une valeur de type Boolean (ligne22).
Lignes 23 31, une structure conditionnelle sert dterminer la valeur renvoye par la
fonction. Le contenu des cellules dcales dune, de deux, puis de trois cellules droite de
CelluleCourante est successivement compar au contenu des cellules dcales de la mme
faon par rapport CelluleSuivante [Offset(0, 1), Offset(0, 2) et Offset(0,3)]. Si
ce contenu diffre, la valeur False est affecte la fonction (lignes24, 26 et 28). Dans le
cas contraire, la fonction renvoie True (ligne30). La procdure appelante reprend alors la
main et linstruction de la ligne15 est excute si la fonction a renvoy True. Dans le cas
contraire, la condition nest pas vrifie et la cellule suivante est teste.

pel
Rap

Pour interrompre une macro qui ne fonctionne pas correctement (qui excute
une boucle sans fin, par exemple), appuyez sur Ctrl+Pause, puis voyez le Chapitre10.

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

Chapitre 7

Contrler les programmes VBA

219

La macro excute en boucle la srie dinstructions spcifie entre For et Next, en incrmentant la variable compteur de la valeur de Pas chaque passage de la boucle. Si largument
Step est omis, le compteur est incrment de1. Tant que la valeur attache la variable
compteur est infrieure la valeur y, la boucle se rpte ; lorsque la valeur numrique
de compteur est suprieure y, la boucle prend fin, et la procdure se poursuit avec les
instructions situes derrire linstruction Next.
La procdure suivante permet dappliquer un ombrage de cellules une ligne sur deux
dune feuille de calcul Excel, afin dobtenir une mise en forme semblable celle reprsente
la Figure7.6.
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 (ligne4) ce qui revient appliquer la couleur de fond blanche lensemble
des cellules de la feuille.
Les instructions des lignes4 9 servent dterminer jusqu quelle ligne le formatage doit
seffectuer. Ladresse de la dernire cellule non vide sous la celluleA1 est affecte la
variable MaLigne (ligne5), qui reoit ensuite pour valeur le numro de ligne de cette cellule
(ligne6). Une instruction conditionnelle If...End If est utilise pour vrifier que MaLigne
est une valeur paire (lignes7 9). Si tel nest pas le cas (si MaLigne divis par 2 nest pas
un nombre entier), MaLigne est incrmente de1.
La boucle For...Next peut maintenant tre excute. Le compteur de la boucle commence
2 et est incrment de2 chaque passage de la boucle, jusqu atteindre la valeur MaLigne
(ligne10). chaque passage de la boucle, la ligne correspondant la valeur de la variable
compteur est slectionne (ligne11) et lombrage de cellule correspondant la valeur15
de la proprit ColorIndex lui est appliqu (ligne12).

220

Excel et VBA

Figure7.6
Une mise en forme
automatise.

Le programme suivant constitue une nouvelle version de la procdure Suppression


Doublons, 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 devant tre compares afin de dfinir si
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

Chapitre 7

Contrler les programmes VBA

221

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

Ligne14, la fonction LignesIdentiques est appele et reoit maintenant une valeur de type
Byte pour largument Num (ici, 3).
La fonction LignesIdentiques contrle ensuite Num cellules afin de dfinir si la ligne doit
ou non tre supprime. Elle reoit dabord la valeur True. La boucle For...Next (lignes26
31) sexcute ensuite Num fois. Les cellules testes chaque passage de la boucle correspondent un dplacement de Num Cellules vers la droite. Si, lors dun passage de la boucle,
deux valeurs diffrentes sont dceles (ligne27), la valeur False est affecte LignesIden
tiques 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.

Boucles 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

222

Excel et VBA

Lignes 2 et 3, les variables sont dclares. Ligne 4, on affecte la variable DerniereLigne


le numro de la dernire ligne employe. On se sert pour cela de la proprit UsedRange
qui renvoie la zone utilise sur la feuille active, cest--dire la zone rassemblant lensemble
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 valeur ainsi obtenue, on obtient le nombre de
lignes vides prcdant cette zone. Lexpression UsedRange.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 vrifier. 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 fonction Excel CountA qui renvoie 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 valeur suivante, en dcrmentant notre
compteur de 1.
Lutilisation dun pas ngatif nous assure ici que le programme teste toutes les lignes. En
effet, si nous avions employ 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 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 Figure7.7 dans une variable de matrice multidimensionnelle.
Figure7.7
Pour stocker les valeurs
dune feuille Excel dans
une variable de matrice,
utilisez des boucles
For...Next imbriques.

Chapitre 7

Contrler les programmes VBA

223

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 BouclesFor
NextImbriques la redimensionne de sorte quelle accueille lensemble des donnes de
la feuille Excel active. Pour un descriptif des instructions de cette procdure, reportezvous 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 variables numriques de
type Byte qui serviront de compteur chacune des boucles For...Next (lignes10 et11).
La premire boucle For...Next (lignes12 16) utilise le compteur CompteurLignes pour
rpter les instructions qui la composent un nombre de fois gal au nombre de lignes contenant des donnes stocker. 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 stocker. Linstruction qui la compose (ligne14) 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 compteur 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 valeur du compteur de la boucle For...Next imbrique.
La variable reoit les valeurs du tableau selon lordre suivant:

224

Excel et VBA

1. CompteurLigne = 1. La boucle For...Next imbrique sexcute quatre fois, et


affecte les valeurs 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 sexcute quatre fois et
affecte les valeurs 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 variable 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 1000.
Sub FortesValeursEnRouge()
Dim cellule As Range
For Each cellule In Selection.Cells
If cellule.Value > 1000 Then
cellule.Font.ColorIndex = 3
End If
Next cellule
End Sub

La procdure suivante enregistre tous les classeurs Excel ouverts lexception du classeur PERSONAL.XLSB au format Excel4.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 = PERSONAL.XLSB Then
7:
NomClasseur = Classeur.FullName

Chapitre 7

8:
9:
10:
11:
12:
13:
14:

Contrler les programmes VBA

225

position = InStr(NomClasseur, .xlsx)


NomClasseur = Left(NomClasseur, position - 1) & .xlw
Classeur.SaveAs FileName:=NomClasseur, _
FileFormat:=xlExcel4Workbook
Classeur.Close
End If
Next Classeur
End Sub

Les lignes 2 4 dclarent les variables ncessaires au programme. La condition de la


ligne 6 vrifie que le classeur Excel correspondant lobjet Classeur nest pas le classeur de macros personnel PERSONAL.XLSB. 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).
Ligne7, 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 lextension .xlw lextension .xlsx, afin de dfinir des noms
denregistrement corrects pour les fichiers. La fonction InStr sert comparer deux chanes
de caractres. Ici, elle renvoie une valeur numrique reprsentant la position de la chane
".xlsx" dans la chane stocke dans la variable NomClasseur. La fonction Left sert renvoyer
un nombre dtermin de caractres situs gauche dune chane. Ici, elle renvoie le nombre
de caractres gal (position1) dans la chane NomClasseur. On obtient ainsi le nom du
document sans lextension ".xlsx". Il suffit alors de concatner la valeur de NomClasseur et
la chane ".xlw" pour obtenir un nom de fichier possdant lextension ".xlw". La mthode
SaveAs est ensuite applique lobjet Classeur, en affectant largument nomm FileName
le nom ainsi dfini, et largument nomm FileFormat, la constante Excel xlExcel4Work
book. Enfin, la mthode Close ferme le document ainsi enregistr.

Info

Le traitement des chanes de caractres est un sujet incontournable de la programmation. Vous serez invitablement amen manipuler des chanes de
caractres (composes de lettres comme de chiffres) afin den extraire les donnes voulues ou de les modifier.
Les fonctions de traitement des chanes de caractres sont prsentes au Chapitre11.

Boucles For Each...Next imbriques


linstar des boucles For...Next et, plus largement, de lensemble des structures de
contrle, vous pouvez imbriquer des structures de contrle For Each...Next. Lexemple
suivant extrait lensemble des formules du classeur inscrit et les crit dans un document

226

Excel et VBA

Word qui est ensuite imprim. Nous utilisons pour cela deux structures For Each...Next.
La premire parcourt la collection des feuilles de travail (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).CurrentRegion.
Cells). Lorsque la boucle imbrique a fini de traiter les cellules de la zone courante de la
feuille de travail en cours de traitement, la premire structure For Each...Next reprend
lamain et traite donc lobjet Worksheet la feuille de travail suivant de la collection.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

Public Sub ExtraireMaFormulesWord()


Dim MaFormule As String
Dim MaCellule As Range
Dim MaFeuille As Worksheet
Dim MonWord As Object
On Error Resume Next
Set MonWord = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set MonWord = CreateObject("Word.Application")
Err.Clear
End If
MonWord.Visible = True
MonWord.Documents.Add
For Each MaFeuille In ActiveWorkbook.Worksheets
With MonWord.Selection
.Font.Name = Arial
.Font.Bold = True
.Font.Size = "13"
.TypeText "Formules de la feuille: " & MaFeuille.Name & Chr(13)
.Font.Size = 11
.Font.Bold = False
End With
For Each MaCellule In MaFeuille.Cells(1, 1).CurrentRegion.Cells
If MaCellule.HasFormula = True Then
MaFormule = "{" & MaCellule.Formula & "}"
MonWord.Selection.TypeText Cellule & _
MaCellule.Address(False, False, xlA1) & _
: & MaFormule & Chr(13)
End If
Next MaCellule
Next MaFeuille

32: End Sub

Chapitre 7

Contrler les programmes VBA

227

Lignes 2 5, les variables sont dclares. Lignes 6 13, la variable MonWord reoit lobjet Word.Application. Notez que la mthode GetObject est utilise avec un gestionnaire
derreur afin de capturer lerreur gnre si Word nest pas ouvert. Auquel cas, la mthode
CreateObject cre une nouvelle instance de lapplication Word (ligne9), et lobjet Err qui
reoit lerreur est rinitialis (ligne10). Lignes12 et 13, lapplication Word saffiche 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 texte format
(lignes 15 22). Nous utilisons pour cela une structure With...End With qui dfinit la
police employe (Arial, corps 13) avant 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 (lignes23 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 cellule
A1 (Cells(1, 1)) de la feuille. chaque occurrence de notre boucle, on vrifie si la cellule
contient une formule (ligne24), 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 de
la ligne31 appelle le passage suivant de la structure For Each...Next principale.
Figure7.8
Toutes les formules
du classeur ont t extraites.

228

Excel et VBA

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 lenvironnement 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 lapplication un moment prcis;

changer des informations avec lutilisateur lors de lexcution 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 diffrentes 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 excute; sinon,
ces instructions sont ignores et la procdure se poursuit avec linstruction situe immdiatement aprs linstruction End If.
La macro Auto_Open suivante utilise une structure If...End If pour contrler laffichage
de la bote de dialogue prsente la Figure7.9. Elle utilise pour cela la fonction Date qui
renvoie la date du jour.

pel
Rap

Une macro Auto_Open sexcute automatiquement louverture du classeur


Excel dans lequel elle est stocke.

Sub Auto_Open()
If Date > 30/11/07 and Date < 08/12/07 Then
MsgBox Attention! Remise des budgets & _

Chapitre 7

Contrler les programmes VBA

229

prvisionnels le 8 dcembre., _
vbOKOnly+vbCritical, Soyez prt!
End If
End Sub

Figure7.9
Ce message saffiche
chaque ouverture du classeur
effectue entre le 1er et le
7dcembre.

La valeur attache loprateur relationnel dans une condition varie selon lobjet de la
comparaison ; il peut sagir dune chane de caractres si lobjet de la condition est la
valeur renvoye par une variable de type String ou une expression renvoyant elle-mme
une chane de caractres. Il sagira dune valeur numrique si lobjet de la condition est une
variable numrique ou une expression renvoyant une valeur 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 ouvertes). Si ce nest pas le cas, un message saffiche lattention de 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 envisager les diffrents 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

230

Excel et VBA

Srie dinstructions 3
...
Else
Srie dinstructions n
End If

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 auparavant na t ralise. Par contre, si lune des conditions poses par une instruction If ou ElseIf est ralise, la macro excute 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 variables PrixAvantRemise


et PrixDefinitif de type Single. La variable PrixAvantRemise reoit la valeur de la

Chapitre 7

Contrler les programmes VBA

231

celluleC11 de la feuille active. Linstruction de la ligne4 appelle la fonction PrixAvecRe


mise en lui passant la valeur de PrixAvantRemise.
La structure conditionnelle If...Then...Else des lignes 9 19 affecte une valeur la
variable PourcentageRemise, fonction de la valeur de ValeurAchat. La valeur de la remise
est insre dans la celluleC12. Ligne21, la fonction reoit la valeur aprs remise, cest--dire
la valeur de ValeurAchat moins le prix de la remise (ValeurAchat * PourcentageRemise).
La procdure principale reprend ensuite la main. Linstruction de la ligne5 affecte alors
la celluleC13 la valeur de PrixDefinitif. La procdure prend fin.

Info

Une instruction conditionnelle peut aussi scrire sur une seule ligne, en utilisant deux points (:) comme sparateurs entre les instructions excuter si la
condition est vrifie. 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
End If

est aussi valide sous la forme:


If Selection.Font.Italic() = True Then Selection.Font.Italic() =
False

Pour prsenter plusieurs 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 de
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 que
deux fentres sont ouvertes avant de sexcuter. Nous y avons imbriqu une instruction
conditionnelle (en gras, dans le texte de la macro), afin que la bote de dialogue affiche si
la premire condition est ralise (Workbooks.Count <> 2) varie en fonction du nombre de
fentres ouvertes.

232

Excel et VBA

Lorganigramme de la Figure7.10 prsente la structure de cette macro.


Figure7.10
Les conditions imbriques
assurent aux macros souplesse et prcision.

Sub
Workbooks.Count

If = 2

If <> 2

If < 2

If > 2

Message 1

Message 2

Exit Sub
Instructions
de la macro

End Sub

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
MsgBox Message, vbOKOnly+vbInformation, Excution impossible
Exit Sub
End if
Instructions de la macro
End Sub

Figure7.11
Linstruction conditionnelle imbrique
dtermine le message
qui sera affich.

Chapitre 7

Contrler les programmes VBA

233

La structure de contrle Select Case


La structure de contrle Select Case permet denvisager diffrentes valeurs pour une
mme expression et de dterminer des instructions spcifiques pour chaque cas envisag.
Elle rpond la syntaxe suivante:
Select Case Expression
Case valeur1
Instructions
Case valeur2
Instructions
...
Case valeurn
Instructions
Case Else
Instructions
End Select

o Expression est une expression renvoyant une valeur dont le type peut varier. Lorsque
la valeur renvoye par Expression correspond lune des valeurs poses par les instructions Case, les Instructions correspondantes sexcutent, et la procdure se poursuit avec
linstruction qui suit End Select. Si aucune des valeurs poses par les instructions Case ne
correspond la valeur 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 valeur
de la cellule D7 de la feuille 1 du classeur commande.xlsx. Une bote de dialogue est
ensuite affiche, afin dinformer lutilisateur de la remise qui sera effectue.
1: Sub AffichageReduction()
2:
Dim Reduction As Variant
3:
Dim LongueurChane As Byte
4:
Reduction = CalculerValeurReduction _
(Workbooks("commande.xlsx").Sheets(1).Range("D7").Value)
5:
LongueurChane = Len(Reduction)
6:
If LongueurChane = 3 Then Reduction = Reduction & "0"
7:
MsgBox La remise effectue sera de & Reduction & %.
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

234

Excel et VBA

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 Reduction est tout dabord dclare de type Variant. Elle stockera en effet
une valeur numrique, qui sera ensuite manipule en tant que chane de caractres. Linstruction daffectation de la ligne4 appelle la fonction CalculerValeurReduction, en lui
passant la valeur de la celluleD7 de la premire feuille du classeur commande.xlsx.
La fonction CalculerValeurReduction utilise une structure Select Case pour renvoyer une
valeur fonction de la valeur de largument PrixCommande (ici la valeur de la cellule D7). Le
mot cl To est utilis pour dfinir des plages de valeurs (0 999.99, 1000 1999.99,etc.).
La procdure principale reprend ensuite la main.
Les instructions des lignes5 et6 servent formater la chane stocke dans la variable Reduc
tion. La fonction Len renvoie la longueur (le nombre de caractres) de la variable Reduction,
qui est stocke dans la variable LongueurChane. Si la chane comprend trois caractres,
un0 est ajout la fin de la chane Reduction (0,1 et0,4 deviennent respectivement0,10
et0,40). Enfin, linstruction de la ligne7 affiche une bote de dialogue informant lutilisateur
de la valeur de la remise qui sera effectue.

Info

Dans les instructions Visual Basic, le point est utilis comme sparateur dcimal des valeurs numriques. Cependant, lorsque vous affichez sous forme de
chane une valeur numrique comme linstruction de la ligne7 de lexemple
prcdent, la virgule est utilise comme sparateur de dcimales.

Dfinir linstruction suivante avec GoTo


Linstruction GoTo permet dorienter le droulement dune procdure vers lemplacement
spcifi par lutilisateur, et ce tout moment de lexcution. Cette instruction sutilise avec
une tiquette, cest--dire une balise place dans le texte. La syntaxe de GoTo est la suivante:
GoTo Etiquette

Ltiquette spcifie aprs GoTo doit tre place en dbut dune ligne indpendante, situe
avant linstruction sur laquelle on veut brancher la procdure et tre immdiatement suivie
des deux points ":". Une instruction GoTo ne peut renvoyer qu une tiquette se trouvant

Chapitre 7

Contrler les programmes VBA

235

dans la mme procdure que linstruction elle-mme. Les instructions GoTo rendent difficile 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 lexcution dun programme permet de
renseigner lutilisateur sur son droulement, ou de lui demander des informations qui en
modifieront le cours. Deux fonctions permettent laffichage de botes de dialogue:

InputBox. Entrane laffichage dune bote de dialogue prsentant une zone de texte

MsgBox. Permet dafficher un message lattention de lutilisateur dans une bote de

dans laquelle lutilisateur est invit entrer des informations.


dialogue et de lui proposer de choisir entre diffrentes possibilits en cliquant sur lun
des boutons de commande affichs.

La fonction InputBox
La fonction VBA InputBox permet dafficher une bote de dialogue contenant une zone de
texte lgende, afin dinviter lutilisateur y saisir linformation attendue; linformation
saisie est renvoye sous forme de chane de caractres et stocke dans une variable afin de
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 arguments nomms de type String. prompt est le
message affich dans la bote de dialogue afin de lgender la zone de texte. Largument
title correspond au titre de la bote de dialogue (affich dans la barre de titre) et est
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 Figure7.12.


Sub UtilisationDeInputBox()
Dim DateVal As String
DateVal = InputBox("Date de validit:", "Nouveau membre", Date)
End Sub

236

Excel et VBA

Figure7.12
La fonction InputBox
permet de stocker des informations entres par lutilisateur durant lexcution du
programme.

Pour stocker linformation fournie par lutilisateur dans une variable, il suffit daffecter une
variable la fonction, selon la syntaxe suivante:
Variable = InputBox(prompt, title, default)

o Variable est une variable de type String ou Variant.

eil
Cons

Si laffichage dune rponse par dfaut nest pas indispensable, il peut se rvler
fort pratique pour orienter lutilisateur lorsque linformation demande autorise plusieurs formats. Par exemple, si vous demandez lutilisateur dentrer
une date, et sil est ncessaire, pour le bon droulement de la macro, que celle-ci
soit saisie sous le format jj/mm/aa. Laffichage dune date hypothtique laide
de largument default permettra dindiquer lutilisateur le format attendu.

Vous pouvez afficher des variables 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 code ASCII (entre1
et32).

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

Chapitre 7

Contrler les programmes VBA

237

Figure7.13
Utilisez loprateur de
concatnation & 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
cellules 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
9:
10:
11:
12:

Demander lutilisateur la date dchance


Dim DateEcheance As Variant
DateEcheance = InputBox("Indiquez la date dchance.", _
"Echance des oprations en cours", Date+30)
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 le


classeur actif (lignes 2 8). Elle affecte pour cela ladresse de la slection en cours
la variable ZoneATester. Si aucune zone nest slectionne (ZoneATester = Null), un
message saffiche lattention de lutilisateur et linstruction de la ligne7 entrane la sortie
de la procdure.

238

Excel et VBA

La fonction InputBox sert ensuite demander lutilisateur dindiquer une date dchance
(ligne11). La fonction Date est utilise pour dterminer la valeur par dfaut de la zone de
texte. Elle renvoie la date du jour laquelle on ajoute 30jours. La chane renvoye par la
fonction InputBox est stocke dans la variable DateEcheancede type Variant. Ligne12, la
fonction CDate est utilise pour convertir la variable DateEcheance en une variable de type
Date.
ntion
Atte

Si vous dclarez la variable de DateEcheance de type String, le programme


fonctionnera correctement, mais linstruction de conversion de type de donnes
de la ligne12 ne modifiera pas le type de la variable DateEcheance. Linstruction conditionnelle de la ligne 17 effectuera alors une comparaison entre les
chanes de caractres et non entre les dates. Le programme se droulera correctement, mais produira des rsultats errons.

La procdure teste ensuite lensemble des cellules slectionnes. Une variable objet de type
Range est dclare ligne14. Lignes15 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 laligne16 vrifie que la cellule traite contient des donnes
de type Date. Si ce nest pas le cas, elle est ignore, et la boucle se poursuit avec la cellule
suivante. Si la cellule contient des donnes de type Date, la structure conditionnelle des
lignes17 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 Figure7.14 reprsente une feuille de calcul aprs passage de la macro Verifier
Echeances (lutilisateur a indiqu le01/04/98 pour date dchance).
Figure7.14
Lensemble des cellules
dont la date est suprieure
la date indique par lutilisateur est mis en vidence.

Chapitre 7

ntion
Atte

Contrler les programmes VBA

239

Si lutilisateur clique sur le bouton Annuler ou sur le bouton de fermeture dune


bote de dialogue affiche laide de la fonction InputBox, la fonction renvoie
une chane vide. Une erreur pourra alors tre gnre par le programme sil
tente dexploiter la valeur retourne. Placez une instruction If...Then...Else
pour vrifier que la valeur retourne par InputBox nest pas une chane vide.
Les instructions suivantes pourront tre places sous la ligne11 du programme
prcdent afin de mettre fin la procdure si lutilisateur annule la saisie dune
valeur.
If DateEcheance = Then
Exit Sub
End if

De la mme faon, si lutilisateur saisit une valeur ne correspondant 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
Chapitre6 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 dialogue, une erreur sera gnre. Vous crirez le code
permettant de grer ces ventuelles erreurs au Chapitre10.

La mthode InputBox
Lobjet Application dExcel possde une mthode InputBox, que vous pouvez substituer
la fonction InputBox de Visual Basic. Lintrt de la mthode InputBox dExcel est quelle
permet de spcifier le type de donnes qui sera renvoy. Utilisez cette mthode selon la
syntaxe suivante:
Application.InputBox(prompt, title, default, left, top, helpFile, helpContextID,
type)

Si vous ne spcifiez pas de valeur pour largument title, le titre par dfaut de la bote de
dialogue sera "Entre". Les arguments nomms left et top permettent de spcifier lemplacement de la bote de dialogue sur lcran au moment de son affichage, tandis que les
arguments helpFile et helpContextID servent associer des fichiers daide la bote de
dialogue. Ils existent aussi pour la fonction InputBox de Visual Basic.
Largument de type Variant type est facultatif. Il peut prendre lune des valeurs prsentes
dans le Tableau7.2, qui dterminera le type de donnes renvoy par la mthode InputBox.
La mthode InputBox peut renvoyer plusieurs types de donnes dfinis. Affectez largument type le rsultat de la somme des valeurs correspondantes. Par exemple, pour que

240

Excel et VBA

lutilisateur soit autoris indiquer une valeur numrique ou une rfrence de cellules, vous
affecterez la valeur9 largument type (1+8).
Tableau7.2: Valeurs admises par largument type de la mthode InputBox dExcel

Valeur de Type

Type de donnes renvoy par InputBox

Formule

Valeur numrique

Chane de caractres

Valeur boolenne (False ou True)

Rfrence de cellule (objet Range)

16

Valeur derreur

64

Tableau de valeurs

eil
Cons

Si linformation saisie par lutilisateur dans la zone de texte de la bote de dialogue ne correspond pas au type de donnes dclar pour la mthode InputBox,
une erreur sera gnre. Pensez crer un gestionnaire derreur (voir Chapitre10), afin de prvoir les erreurs de saisie de lutilisateur final.

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 de slectionner la plage voulue. Les coordonnes de celles-ci saffichent alors dans la zone de texte
de la bote de dialogue. Linstruction suivante affiche une bote de dialogue qui accepte
pour valeur une rfrence de cellule. Lutilisateur est invit slectionner une plage de
cellules dans la feuille active (voir Figure7.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

Entranez-vous! Modifiez la procdure VerifierEcheances, de faon inviter lutilisateur


slectionner la plage de cellules traiter, plutt que de traiter la plage slectionne au
moment de lexcution de la macro.

Chapitre 7

eil
Cons

Contrler les programmes VBA

241

Lorsque vous utilisez la fonction InputBox dExcel pour inviter lutilisateur


slectionner une plage de cellules, tirez profit des arguments Left et Top. Si la
bote de dialogue saffiche dans langle suprieur gauche de la fentre, lutilisateur naura pas besoin de la dplacer pour slectionner des cellules sur la
feuille.

Figure7.15
La zone de texte de la
bote de dialogue reflte
la slection effectue
sur la feuille Excel.

La fonction MsgBox
La fonction MsgBox permet dafficher une bote de dialogue prsentant un message et des
boutons de commande, afin dafficher une information lattention de lutilisateur ou dobtenir une rponse une question qui orientera lexcution du programme. Une valeur de
type Integer est renvoye en 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 variable de type Integer. prompt, buttons et title sont des arguments
nomms. prompt est un argument de type String, correspondant au message affich dans
la bote de dialogue. buttons est un argument de type numrique facultatif. Il dtermine
les boutons affichs dans la bote de dialogue, le symbole identifiant le type du message
(information, question, etc.) et le bouton par dfaut. Si cet argument est omis, un seul
bouton libell OK saffiche et aucune icne nidentifie le type du message. title est un
argument de type String facultatif, correspondant au titre de la bote de dialogue (affich
dans la barre de titre). Si cet argument est omis, le nom de lapplication apparat dans la
barre de titre.

242

Excel et VBA

Largument buttons est dfini par la somme des valeurs choisies pour chacun des groupes
prsents dans le Tableau7.3. Votre code gagnera cependant en lisibilit si vous utilisez les
constantes VBA intgres plutt que des valeurs numriques.
Tableau7.3: Dfinition de largument buttons

Constante

Valeur

Description

vbOKOnly

OK

vbOKCancel

OK et Annuler

vbAbortRetryIgnore

Abandonner, Ressayer et Ignorer

vbYesNoCancel

Oui, Non et Annuler

vbYesNo

Oui et Non

vbRetryCancel

Ressayer et Annuler

vbCritical

16

Message critique

vbQuestion

32

Question

vbExclamation

48

Stop

vbInformation

64

Information

vbDefaultButton1

Premier bouton

vbDefaultButton2

256

Deuxime bouton

vbDefaultButton3

512

Troisime bouton

vbDefaultButton4

768

Quatrime bouton

Bouton

Symbole

Bouton actif par dfaut

Si vous souhaitez, par exemple, afficher une bote de dialogue contenant le symbole "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 de dialogue
reprsente la Figure7.16. La troisime formule est cependant plus comprhensible.
rponse = MsgBox("Autre recherche?", 36, "Recherche")
rponse = MsgBox("Autre recherche?", 32+4, "Recherche")
rponse = MsgBox("Autre recherche?", vbYesNo+vbQuestion, "Recherche")

Chapitre 7

Contrler les programmes VBA

243

Figure7.16
Une bote de dialogue affiche laide de linstruction
MsgBox.

ce
Astu

Lorsque vous insrez la fonction MsgBox dans une procdure, placez le curseur
sur la fonction, puis tapez sur la toucheF1 afin den activer la rubrique daide.
Vous pourrez ainsi consulter le tableau rpertoriant les constantes attacher
largument buttons.

Si vous souhaitez afficher une bote de dialogue dans le seul objectif dafficher une information 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 daffectation. Vous devez alors utiliser linstruction MsgBox. Sa syntaxe
est la mme que celle de sa sur fonction, la diffrence prs que ses arguments ne sont
pas encadrs par des parenthses. Linstruction MsgBox suivante affiche la bote de dialogue
prsente la Figure7.17.
MsgBox "Les documents sont en cours dimpression.", vbInformation

Figure7.17
Pour afficher 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 par
dfaut. Linstruction suivante affiche la bote de dialogue prsente la Figure7.18:
rponse = MsgBox("Supprimer toutes les informations?", _
vbYesNoCancel+vbCritical+vbDefaultButton2)

244

Excel et VBA

Figure7.18
Si lutilisateur appuie sur
la touche Entre du clavier,
cest la rponse "Non" qui
sera valide.

La valeur renvoye par la fonction MsgBox varie en fonction du bouton cliqu par lutilisateur, selon la rgle suivante:
Bouton

Constante

Valeur

OK

vbOK

Annuler

vbCancel

Abandonner

vbAbort

Ressayer

vbRetry

Ignorer

vbIgnore

Oui

vbYes

Non

vbNo

Une instruction conditionnelle est utilise pour interroger la valeur de la variable recevant
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 numrique 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 la
constante vbNo sera retourne; enfin, sil choisit le bouton Annuler cest la valeur 2, assimilable la constante vbCancel, qui sera renvoye.
Le programme suivant reprend lexemple donn prcdemment pour InputBox. Une fonction MsgBox a t utilise afin de proposer lutilisateur de dfinir une autre date, en cas
de dpassement dchance. Sil ny a pas de dpassement dchance, une autre bote de
dialogue sera affiche pour en informer lutilisateur.
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

Chapitre 7

Contrler les programmes VBA

6:
7:

Exit Sub
End If

8:
9:
10:

Dim DateEcheance As Variant


DateEcheance = InputBox(Indiquez la date dchance., _
Echance des oprations en cours, Date+30)
DateEcheance = CDate(DateEcheance)

11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:

Dim CellTest As Range


Dim DatesHorsEcheance As Boolean
DatesHorsEcheance = False
For Each CellTest In Range(ZoneATester)
If IsDate(CellTest) = True Then
If CellTest.Value > DateEcheance Then
CellTest.Interior.ColorIndex = 6
DatesHorsEcheance = True
End If
End If
Next

22:
23:
24:

25:
26:
27:
28:
29:
29:
30:
31:

245

If DatesHorsEcheance = True Then


Dim RedfinirLaDate As Integer
RedfinirLaDate = MsgBox("Des problmes dchance ont t trouvs." & _
Chr(10) & "Souhaitez-vous spcifier une autre date?", _
vbYesNo+vbQuestion, "Redfinir la date dchance?")
If RedfinirLaDate = vbYes Then
Range(ZoneATester).Interior.ColorIndex = xlNone
Call VerifierEcheances
End If
Else
MsgBox "Pas de problme dchance.", _
vbOKOnly+vbInformation, "Echancier respect"
End If
End Sub

Lignes 12 et 13, la variable DatesHorsEcheance de type Boolean est dclare et se voit


affecter la valeur False. Ligne18, 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 valeur des ventuelles cellules hors chance termine, une instruction conditionnelle If...Then...Else est utilise pour afficher un message lattention de lutilisateur (lignes22 30). Si la variable DateHorsEcheance renvoie la valeur True (si des
cellules contenant des dates au-del de la date spcifie par lutilisateur sont trouves),

246

Excel et VBA

les instructions des lignes 23 28 sont excutes. La bote de dialogue reprsente


la Figure 7.19 est alors affiche. La valeur renvoye par la fonction MsgBox est stocke
dans la variable RedfinirLaDate. Une structure conditionnelle imbrique teste ensuite la
valeur de cette variable. Si la variable 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 (ligne27). Si DateHorsEcheance renvoie False, une bote
de dialogue saffiche (ligne29) afin dinformer lutilisateur quil ny a pas de problme
dchance.

ition
Dfin

Une procdure qui sappelle elle-mme est une procdure rcursive.

Figure7.19
Lutilisateur peut redfinir
une date dchance.

Affichage de botes de dialogue Excel


Il peut tre utile dafficher des botes de dialogue Excel un moment spcifique de lexcution dun programme. Vous pouvez, par exemple, afficher la bote de dialogue Enregistrer
sous, afin que lutilisateur indique le dossier denregistrement 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 syntaxe suivante:
Application.Dialogs(xlDialog).Show

Chapitre 7

Contrler les programmes VBA

247

Application.Dialogs(xlDialog).Display

xlDialog est une constante Excel qui indique la bote de dialogue devant tre affiche.

Linstruction suivante affiche la bote de dialogue Ouvrir:


Application.Dialogs(xlDialogOpen).Show

Lorsquune bote de dialogue Excel saffiche laide de la mthode Show, les commandes
quelle prend en charge sexcutent normalement si lutilisateur valide les paramtres quil
y a dfinis. La procdure se poursuit ensuite avec linstruction situe derrire celle qui a
appel la bote de dialogue.
Vous pouvez videmment affecter un objet Dialog une variable de type Object ou Variant,
et faire appel cet objet pour afficher la bote en question. Les instructions suivantes affichent la bote de dialogue Enregistrer 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. Rfrezvous la rubrique Rfrences pour Microsoft Excel/Objets/Dialogs.

Les mthodes GetOpenFilename et GetSaveAsFilename


Les mthodes GetOpenFilename et GetSaveAsFilename dExcel permettent dafficher les
botes de dialogue standard Ouvrir et Enregistrer sous afin de rcuprer le nom dun fichier.
Celles-ci sont plus souples et plus fonctionnelles que les objets Dialogs correspondants.
ntion
Atte

Contrairement ce qui se passe lorsque vous appliquez la mthode Show


un objet Dialog, quand une bote de dialogue saffiche laide de lune des
mthodes GetOpenFilename ou GetSaveAsFilename, aucune action nest excute lorsque lutilisateur clique sur le bouton de validation de la bote de
dialogue. Ces mthodes permettent simplement de rcuprer un nom de fichier.
Ce fichier 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)

248

Excel et VBA

Tableau7.4: Arguments des mthodes GetOpenFilename et GetSaveAsFilename

Argument

Description

InitialFilename

Argument facultatif de type Variant. Le nom de fichier par dfaut apparaissant 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.


Chaque 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 spares par un point-virgule. Par exemple la valeur suivante:
Classeur Microsoft Excel (*.xlsx),*.xlsx,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
dialogue 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, lutilisateur 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.

Utilisez linstruction ChDir pour modifier le dossier propos par dfaut dans la bote de
dialogue affiche.
Lexemple suivant affiche la bote de dialogue reprsente la Figure7.20, puis affiche une
bote de dialogue indiquant la liste des fichiers choisis par lutilisateur (voir Figure7.21).
1: Sub OuvertureDeFichiers()
2:
Dim OuvrirFichiers As Variant
3:
modification du chemin par dfaut
4:
ChDir ("c:\Documents and settings\Administrateur\bureau\")

Chapitre 7

5:
6:

7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

Contrler les programmes VBA

249

affichage de la bote de dialogue Ouvrir


OuvrirFichiers = Application.GetOpenFilename(filefilter:="Classeur Microsoft
Excel (*.xlsx),*.xlsx,PageWeb (*.htm; *.html),*.htm;*.html", filterindex:=2,
Title:="Ouverture des fichiers ventes", MultiSelect:=True)
si lutilisateur a slectionn plusieurs fichiers
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
affichage de lensemble de la liste des fichiers et proposition
douverture
rep = MsgBox("Lutilisateur a slectionn plusieurs fichiers. En voici
la liste." & _
Liste & vbCr & "Voulez-vous les ouvrir?", vbYesNo+vbQuestion, _
"Ouvrir les fichiers?")

17:
18:
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 variable OuvrirFichiers dclare ligne2 servira stocker le(s) fichier(s) slectionn(s)


par lutilisateur. Ligne4, le chemin par dfaut est modifi laide de linstruction ChDir,
de faon ce que le dossier propos par dfaut lors de laffichage de la bote de dialogue
soit le Bureau Windows.
Ligne6, la bote de dialogue Ouvrir saffiche. Le rsultat de la slection opre par lutilisateur est affect la variable OuvrirFichiers. Largument filefilter est dfini de faon
que les types de fichiers apparaissant dans la liste Type de fichier soient les fichiers portant
lextension .xlsx et .htm ou .html. Largument filterindex dfinit le deuxime type de
fichier (.htm et .html) comme type par dfaut. Enfin, le titre de la bote de dialogue est
dfini Ouverture des fichiers ventes et la slection multiple est autorise.

250

Excel et VBA

Figure7.20
La mthode GetOpenFileName permet
dafficher une bote
de dialogue Ouvrir
personnalise.

Figure7.21
Les fichiers slectionns sont
rcuprs dans une variable
de matrice.

Lignes8 29, une instruction conditionnelle If...Then...Else sert vrifier si plusieurs


fichiers ont t slectionns. Si tel est le cas (la condition pose ligne8 est vrifie), les
instructions des lignes8 26 sexcutent.
Lignes9 11, les variables rep, Liste et Compteur sont dclares. Lignes12 14, une
instruction For...Each...Next sert stocker la liste des fichiers slectionns dans
la variable Liste. La valeur initiale du compteur est 1, et elle est incrmente de 1
chaque passage de la boucle jusqu atteindre la valeur limite de la variable de matrice
[UBound(OuvrirFichiers)]. chaque passage, la variable Liste reoit sa valeur + un
retour chariot (& vbCr)+la valeur stocke dans la variable OuvrirFichiers, la position
correspondant la valeur de Compteur [OuvrirFichiers(compteur)]. Les lignes16 18,
une instruction MsgBox est utilise pour afficher la liste des fichiers slectionns par lutilisateur et lui proposer de les ouvrir (voir Figure7.21). Lignes21 25, une instruction conditionnelle imbrique sert valuer la rponse de lutilisateur. Une instruction For...Next
ouvre les fichiers en cas de rponse positive. Si un seul fichier a t slectionn (ligne27),
il est ouvert (ligne28).

Chapitre 7

Info

Contrler les programmes VBA

251

Si lun des classeurs slectionns ne saffiche pas, cest quil est masqu. Utilisez la commande Afficher pour en forcer laffichage. Si vous utilisez Excel 2007,
cette fonction est accessible via longlet Affichage du ruban; avec une version
ultrieure, utilisez la commande Afficher du menu Fentre.

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 instructions apparaissant en gras dans le programme suivant pour rsoudre ce problme. Si aucun
fichier nest slectionn, le message de la Figure7.22 saffiche et la procdure prend fin.
Sub OuvertureDeFichiers()
Dim OuvrirFichiers As Variant
ChDir ("c:\Documents and settings\Administrateur\bureau\")
OuvrirFichiers = Application.GetOpenFilename(filefilter:="Classeur Microsoft
Excel (*.xlsx),*.xlsx,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?)
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

252

Excel et VBA

Figure7.22
Lannulation de louverture
est maintenant gre par le
programme.

Utiliser les oprateurs logiques


Visual Basic propose des oprateurs logiques, qui permettront doptimiser les instructions
conditionnelles While...Wend et If...Then...Else. Ils permettent en effet de combiner
plusieurs conditions et, ainsi, de simplifier les instructions conditionnelles dans bien des
cas. Linstruction conditionnelle suivante utilise loprateur logique And pour vrifier que
la valeur de la celluleA3 est infrieure 1000 et suprieure 2000:
If Range(A3).Value < 1000 and Range(A3).Value > 2000 Then....

Les conditions tablies laide doprateurs logiques sont proches dune condition exprime
dans un langage courant, ce qui en facilite considrablement la comprhension.
Les instructions disponibles pour utiliser les oprateurs logiques sont prsentes dans le
Tableau7.5.
Tableau7.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.

ce
Astu

Vous pouvez employer les oprateurs Or et And un nombre de fois indtermin


dans une mme expression. Cependant, pour combiner ces oprateurs dans une

Chapitre 7

Contrler les programmes VBA

253

mme expression, vous devez utiliser des parenthses, afin de spcifier quels
sont les rapports entretenus 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 expression, la Srie dinstructions ne sera excute que
si lune des deux premires conditions (ou les deux) est vrifie, et si la Condition3 est aussi vrifie.

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 fondamentale
pour le dveloppeur 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 tableau
et les intervertir 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

254

Excel et VBA

12:
Next j
13:
Next i
14:
TriTableau = MaVar
15: End Function

Linstruction de dclaration de notre fonction indique quelle attend la variable 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 variable temp servira simplement stocker provisoirement des donnes.
Lignes 5 13 se trouvent les boucles For...Next imbriques qui assurent le tri de notre
variable. La boucle principale sexcute autant de fois que la variable contient despaces de
stockage 1. Elle permet ainsi deffectuer un tri de la variable indice par indice, du premier
au dernier.
La boucle imbrique (lignes6 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 (ligne7), les deux valeurs sont interverties (lignes8
10). On stocke pour cela la valeur de mavar(i) dans la variable temp, puis on lui substitue
la valeur de mavar(j). On remplace ensuite la valeur de mavar(j) par la valeur de mavar(i)
prcdemment mmorise dans la variable temp.
Une fois la boucle imbrique excute, la valeur stocke lindice i de notre variable est
plus petite que toutes celles qui la suivent. 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 variable, les valeurs sont stockes par ordre croissant. Notre
fonction reoit alors la valeur de MaVar (ligne14) et prend fin, retournant la variable maintenant trie.

ce
Astu

Pour un tri dcroissant, remplacez simplement le signe > de la ligne7 par le


signe <.

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

Chapitre 7

7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: End

Contrler les programmes VBA

255

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With ActiveWorkbook.Worksheets
For I = 1 To .Count - 1
Min = I
For J = I + 1 To .Count
If .Item(J).Name < .Item(Min).Name Then Min = J
Next J
If Min <> I Then .Item(Min).Move before:=Worksheets(I)
Next I
End With
Application.Calculation = ModeCalcul
Application.ScreenUpdating = True
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 lignes7 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 ventuel recalcul des valeurs des cellules chaque
dplacement dune feuille. Ligne 8, la valeur False est affecte la proprit ScreenUpda
ting de lobjet Application afin de ne pas mettre jour laffichage lcran lors de lexcution de la macro.
Lignes 9 17, une structure With...End With est utilise avec lobjet ActiveWorkbook.
Worksheets afin de simplifier lcriture du code. Lignes 10 16, deux boucles For...Next
imbriques assurent le tri des feuilles.
La premire boucle sexcute autant de fois quil y a de feuilles dans le classeur 1.
chaque passage, la variable Min reoit pour valeur lindex de la feuille en cours de traitement. La boucle imbrique (lignes12 14) compare alors le nom stock dans la variable
Min avec le nom de chaque feuille situe aprs elle. chaque comparaison, si un nom infrieur (alphabtiquement antrieur) est trouv, la variable Min reoit pour valeur lindex de
la feuille portant ce nom.
la fin de cette boucle, la variable 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 devant la feuille en cours de traitement (.Item(Min).Move
before:=Worksheets(I)).
La boucle principale reprend alors la main et la feuille suivante 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 (ligne18) et la mise jour de laffichage
cran est ractive (ligne19).

256

Excel et VBA

eil
Cons

Notez que, dans lexemple prcdent, on vite des oprations inutiles de dplacement de feuilles en mmorisant la donne la plus petite lors des comparaisons
(ligne13) et en neffectuant quune seule substitution de position si ncessaire
la fin du passage de la boucle imbrique (ligne15). Exercez-vous modifier la
fonction TriTableau prsente plus avant selon le mme principe.

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

258

Excel et VBA

Si les fonctions sont un lment cl du dveloppement dapplications, quels que soient le


langage et lenvironnement 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 sont
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 doprations.
La plupart de ces fonctions peuvent tre manipules via du code Visual Basic.
ntion
Atte

Ne confondez pas les fonctions spcifiques Excel et les fonctions Visual Basic.
Si de nombreuses fonctions mathmatiques Excel ont leur quivalent Visual
Basic, Excel propose des fonctions avances (statistiques, financires,etc.) qui
sont bel et bien des fonctions Excel et non Visual Basic. Un programme exploitant ces fonctions ne pourra donc pas tre excut dans une application hte
autre quExcel.

Pour utiliser une fonction Excel dans un programme VBA, vous ferez appel lobjet Appli
cation qui reprsente lapplication hte (en loccurrence Excel) qui contient ces fonctions.
Dans lexemple suivant, la fonction QuelEstLeMax exploite 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 charge.
Le dveloppement de procdures de type Function permet de remdier ce problme.

Chapitre 8

Fonctions Excel et VBA

259

Les fonctions personnalises que vous crez dans Visual Basic Editor peuvent tre utilises dans Excel comme nimporte quelle fonction intgre. Elles apparaissent alors dans la
liste des fonctions dExcel et peuvent tre employes dans un classeur Excel laide de la
commande Insrer une fonction du menu Formule. Crez la fonction suivante 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 Insrer une
fonction du menu Formule et slectionnez la catgorie Personnalises. La fonction apparat
dans la liste Slectionnez une fonction, prcde du nom du classeur dans lequel elle est
stocke. Les arguments sont aussi visibles (voir Figure8.1).
Figure8.1
Les fonctions cres dans
Visual Basic Editor peuvent tre exploites dans
Excel, comme des fonctions
intgres.

it
ibil
pat
Com

Si vous utilisez une version dExcel antrieure 2007, choisissez Insertion puis
Fonction pour afficher la bote de dialogue prsente la figure 8.1.

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 dialogue
Insrer une fonction, vous serez invit prciser les cellules correspondant aux arguments
de la fonction (voir Figure8.2). La fonction apparatra ensuite dans la barre de formule.

260

Excel et VBA

Figure8.2
Vous tes invit spcifier les
cellules correspondant aux
arguments de la fonction.

Figure8.3
La fonction personnalise
saffiche dans la barre de
formule.

eil
Cons

Affectez des noms reprsentatifs aux arguments des fonctions que vous crez,
afin quils soient comprhensibles pour les autres utilisateurs.

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 syntaxe et les arguments de lensemble de ces fonctions. LExplorateur dobjets est alors la solution. Il recense en effet 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, procdez
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.

Chapitre 8

Fonctions Excel et VBA

261

3. Dans la zone Classes, slectionnez la catgorie de fonctions voulue (Conversions,


DateTime, Financial, Math, Strings,etc.).
4. Dans la zone Membres de, slectionnez la fonction voulue.

Les dtails de la fonction apparaissent dans la zone infrieure de lExplorateur dobjets. Si vous souhaitez consulter laide en ligne pour la fonction choisie, cliquez sur le
bouton Aide.

Figure8.4
LExplorateur dobjets permet daccder lensemble des informations 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 saffiche.

Insrer une fonction Excel dans votre code


Pour insrer une fonction Excel dans votre code, procdez comme suit:
1. Lancez lExplorateur dobjets.

262

Excel et VBA

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.

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

ce
Astu

Plutt que de passer par lExplorateur dobjets, vous pouvez simplement saisir Application.WorksheetFunction. dans votre code pour faire apparatre la
liste 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 galement, mais VBA naffichera pas daide lcriture de code lors de la
saisie dans la fentre Code.

Chapitre 8

Fonctions Excel et VBA

263

Recommandations pour lcriture de fonctions Excel


Les limites de la cellule
Noubliez pas que vos 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 255caractres. Si ctait le cas, le rsultat retourn et insr dans la cellule serait tronqu au-del de
cette limite.

Prcisez le type du rsultat


Veillez toujours prciser le type de donnes renvoy par une fonction, afin que le rsultat
saffiche correctement dans la cellule. Ceci est particulirement vrai dans le cas dune 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 faon quil le fait 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 volatile, insrez simplement linstruction
suivante immdiatement aprs linstruction de dclaration de la fonction:
Application.Volatile

Considrez la fonction CalculTauxBenefice suivante. Elle retourne le taux de bnfice


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 arguments de type Currency CA (pour Chiffre dAffaires) et Couts.
La premire instruction de la fonction la dclare comme volatile. La fonction calcule
ensuite le taux de bnfice ralis en pourcentage.

264

Excel et VBA

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 dveloppe concernant lutilisation de ces fonctions, consultez
laide en ligne de VBA.

Info

Les fonctions de traitement des chanes de caractres constituant une question


cl de la programmation, le chapitre suivant leur est entirement consacr.

Info

Notez que les arguments des fonctions prsentes dans les tableaux suivants
sont pour la plupart des arguments nomms. Lorsquun argument nest pas un
argument nomm, il est traduit en franais.

Dans le Tableau8.1, largument nomm Number reprsente une valeur numrique passe
en argument.
Tableau8.1: Fonctions mathmatiques

Fonction

Description

Abs(Number)

Retourne la valeur absolue de Number.

Type de donnes
renvoy
Mme type que
Number

Atn(Number)

Retourne larctangente de Number, sous la forme dun


angle exprim en radians.

Double

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

Chapitre 8

Fonctions Excel et VBA

Fonction

Description

Exp(Number)

Retourne la valeur de la constante e leve


la puissance Number.

Type de donnes
renvoy
Double

La constante e est la base des logarithmes npriens, et


est peu prs gale 2,718282.
Fix(Number)

Renvoie la partie entire dun nombre.


Si Number est ngatif, Fix renvoie le premier entier
ngatif suprieur ou gal Number.

Int(Number)

Comme la fonction Fix, la fonction Int renvoie la partie


entire dun nombre.

Mme type que


Number

Mme type que


Number

Par contre, si Number est ngatif, Int renvoie 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 et dfinit le comportement de la
fonction Rnd.

Single

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 gnrateur de nombres alatoires partir dune valeur initiale
tire de lhorloge systme.
Round(Number,
Retourne la valeur arrondie de Number. Largument
NumDigitsAfterDe- facultatif NumDigitsAfterDecimal indique le nombre
cimal)
de chiffres conserver aprs la virgule dans le nombre
retourn. Si cet argument est omis, Round renvoie la

Mme type que


Number

valeur entire arrondie.

Sgn(Number)

Retourne une valeur reprsentant le signe


de Number:

265

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


exprime en radians.

Double

266

Excel et VBA

Le Tableau8.2 prsente les fonctions de conversion 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 Tableau8.3.
Tableau8.2: Fonctions de conversion des donnes

Type de donnes
renvoy

Fonction

Description

Asc(String)

Renvoie une valeur reprsentant le code de carac- Integer


tres du premier caractre de la chane
de caractres String.

Chr(CharCode)

Renvoie le caractre dont le code de caractres


est CharCode. CharCode est de type Long.

Integer

Format(Expression,
Format)

Renvoie Expression sous forme de chane formate selon le Format dfini.

String

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 de chane. Si Number nest pas un nombre
entier, il est arrondi lentier le plus proche.

String

Oct(Number)

Retourne la valeur octale de Number sous forme


de chane.

String

RGB(Red, Green, Blue)

Retourne un entier reprsentant la valeur RGB.


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.

Long

Str(Number)

Renvoie Number sous forme de chane de caractres. Number peut tre nimporte quelle valeur
numrique que lon souhaite traiter comme une
chane.

String

Val(String)

Retourne String sous forme de valeur numrique de type appropri. Si String ne peut tre
converti en valeur numrique, une erreur est
gnre.

Type appropri la
valeur retourne

Contrairement aux fonctions prsentes dans le tableau prcdent, les fonctions dcrites
dans le Tableau8.3 ne renvoient pas les donnes reues en argument sous une forme diffrente, mais en modifient le type. La conversion de donnes dans le type appropri est souvent

Chapitre 8

Fonctions Excel et VBA

267

ncessaire au bon droulement dun programme VBA. Par exemple, 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 largument pass la fonction soit reconnu comme une
valeur et non plus comme une suite de caractres.
Tableau8.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.

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.

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 Tableau8.4 prsente les fonctions de date et dheure. Largument nomm date dsigne
toute expression valide qui renvoie une valeur de type Date.
Tableau8.4: Fonctions de date et dheure

Fonction

Description

Date

Retourne la date en cours partir de lhorloge systme de


votre ordinateur. Vous pouvez galement utiliser linstruction Date pour dfinir la date de lhorloge systme.

Type de donnes
renvoy
Date

268

Excel et VBA

Tableau8.4: Fonctions de date et dheure (suite)

Fonction

Description

Type de donnes renvoy

Time

Retourne lheure en cours partir de lhorloge Date


systme. Utilisez 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 entier.

Integer

Month(Date)

Retourne le mois correspondant Date sous la Integer


forme dun entier compris entre 1 (janvier) et
12 (dcembre).

Day(Date)

Retourne le jour correspondant Date sous la


forme dun nombre entier compris entre 1 et
31.

Weekday(Date,
FirstDayOfWeek)

Integer
Retourne un entier compris entre 1 et 7, qui
reprsente le jour de la semaine correspondant
la date Date.

Integer

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 USA il
sagira du dimanche. Il est donc recommand
de prciser largument Firstdayofweek afin
dviter des diffrences de comportements du
programme dun ordinateur lautre.
WeekdayName(WeekDay,
Abbreviate,
FirstDayOfWeek)

Retourne une chane qui reprsente le nom du String


jour de la semaine WeekDay. WeekDay peut tre
une valeur numrique comprise entre 0 et 7, ou
lune des constantes vbDayOfWeek prsentes
ci-avant. La valeur retourne est renvoye dans
la langue du systme sur lequel est excute
la fonction. Sur un systme en franais, lundi,
mardi, dimanche.

Chapitre 8

Fonctions Excel et VBA

Fonction

Description

(suite)

Largument nomm Abbreviate est facultatif et String


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,
Abbreviate,
FirstDayOfWeek)

Type de donnes renvoy

... WeekDayName(WeekDay(Date))
Hour(Date)

Integer
Retourne un nombre entier compris entre 0
et 23 et qui reprsente les heures de lheure
fournie dans Date. Si Date ne fournit pas dinformation dheure, la fonction renvoie 0.

Minute(Date)

Integer
Retourne un entier compris entre 0 et 59 et
qui reprsente les minutes de lheure fournie
dans Date. Si Date ne fournit pas dinformation
de minutes, la fonction renvoie 0.

Second(Date)

Integer
Retourne un entier compris entre 0 et 59 et
qui reprsente les secondes de lheure fournie
dans Date. Si Date ne fournit pas dinformation
de secondes, la fonction renvoie 0.

DateSerial
(Year, Month, Day)

Retourne une date prcise (jour, mois et anne), Date


fonction des arguments Year, Month et Day
reus.

TimeSerial(Hour,
Minute, Second)

Retourne une heure prcise (heures, minutes et Date


secondes), en fonction des arguments reus.

DateValue(Date)

Renvoie la date reue en argument. Largument Date

Date peut tre une chane de caractres, un

nombre, une constante ou nimporte quelle


expression renvoyant une date.

TimeValue(Date)

Renvoie lheure reue en argument. Largument Date

Date peut tre une chane de caractres, un

nombre, une constante ou nimporte quelle


expression renvoyant une heure.

Timer

Renvoie le nombre de secondes coules


depuis minuit (daprs lhorloge systme de
votre ordinateur).

269

Single

270

Excel et VBA

Le Tableau8.5 prsente les fonctions financires de VBA.


Tableau8.5: Fonctions financires

Fonction

Description

Type de donnes
renvoy

Fonctions de calcul damortissement


DDB(Cost, Salvage, Life,
Period,)

Double
Retourne la valeur de lamortissement dun
bien au cours dune priode dfinie, en utilisant
la mthode damortissement 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, Salvage, Life)

Retourne lamortissement linaire dun bien sur Double


une priode dfinie.
Les arguments nomms sont les mmes que
pour la fonction DDB().

SYD(Cost, Salvage, Life,


Period)

Retourne la valeur de lamortissement global


dun bien sur une priode donne.
Les arguments nomms sont les mmes que
pour la fonction DDB().

Double

Retourne le futur montant dune annuit


base sur des versements constants et priodiques et sur un taux dintrt fixe. Les arguments nomms reus sont:

Double

Fonctions de calcul de valeur future


FV(Rate, NPer, Pmt, PV,
Type)

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.

Chapitre 8

Fonctions Excel et VBA

Type de donnes
renvoy

Fonction

Description

(suite)

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

FV(Rate, NPer, Pmt, PV,


Type)

Fonctions de calcul de taux dintrt


Rate(NPer, Pmt, PV, FV,
Type, Guess)

Double
Retourne le taux dintrt par chance pour
une annuit.
Les arguments nomms NPer, Pmt, PV et Type
sont les mmes 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 10000 ,
la valeur future est de 10000. 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 (10pourcent).

Fonctions de calcul de taux de rendement interne


IRR(Values(), Guess)

271

Retourne le taux de rendement interne dune Double


srie de mouvements 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
(10pourcent).

272

Excel et VBA

Tableau8.5: Fonctions financires (suite)

Type de donnes
renvoy

Fonction

Description

MIRR(Values(), Finance_
Rate, Reinvest_Rate)

Retourne le taux de rendement interne modifi Double


dune srie de mouvements de trsorerie priodiques (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, PV, FV,
Type)

Retourne le nombre dchances dune annuit Double


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.

Fonctions de calcul de montant de versements


IPmt(Rate, per, NPer, PV,
FV, Type)

Double
Renvoie une valeur de type Double indiquant
le montant, sur une priode donne, dune
annuit 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.

Pmt(Rate, NPer, PV, FV,


Type)

Double
Retourne le montant dune annuit 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.

PPmt(Rate, per, NPer, PV,


FV, Type)

Double
Retourne la valeur du remboursement du
capital, pour une chance donne, dune
annuit 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.

Chapitre 8

Fonction

Fonctions Excel et VBA

Description

273

Type de donnes
renvoy

Fonctions de calcul de montant de valeur actuelle


NPV(Rate, Values())

Double
Retourne la valeur nette actuelle dun investissement, 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, Pmt, FV,


Type)

Retourne le montant actuel dune annuit base Double


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

9
Manipulation des chanes
de caractres
Au sommaire de ce chapitre

Modifier des chanes de caractres


Comparer des chanes de caractres
Rechercher dans les chanes de caractres

276

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 dafficher 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 extraire les informations pertinentes. Par 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 peuvent tre modifies d peu prs toutes les faons. Vous pouvez
bien sr ajouter des lments une chane de caractres en la concatnant avec 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 faon 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 privilgier loprateur &, qui ne fonctionne quavec les chanes, et de conserver
loprateur+ pour les additions. Votre code sera ainsi sans ambigut.
Vous pouvez concatner toute expression qui renvoie une chane de caractres. Il peut sagir
dune variable de type String comme dune fonction renvoyant une chane, ou encore
dune chane de caractres entoure de guillemets.
ntion
Atte

Vous ne pouvez pas concatner une chane de caractres et une valeur numrique. Si vous souhaitez concatner une chane avec une valeur numrique,
utilisez la fonction Str() de faon convertir la valeur numrique en une chane
de caractres, dans linstruction de concatnation.

Chapitre 9

Manipulation des chanes de caractres

277

Considrez lexemple suivant:


1: Sub ConcatenerDesChanes()
2:
Dim MonNom As String
3:
Dim MonBenefice As Long
4:
Dim MonMessage As String
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 variables sont dclares. Notez que la variable MonBenefice est de type Long
et ne peut donc tre concatne telle quelle. Lignes 5 et 6, les variables MonNom et MonBene
fice reoivent respectivement pour valeur le contenu des cellules A2 et A3.
Ligne 7 a lieu la concatnation des diffrentes chanes de faon gnrer le message affich
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.

"est de". Est une simple chane de caractres. Notez que nous avons 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.

"euros". Est une simple chane de caractres.

MonNom. Est une variable de type String et peut donc tre concatne sans quil soit

ncessaire deffectuer une conversion de type de donnes.

Tout dabord, la valeur numrique MonBenefice est divise par20, 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 convertit le rsultat numrique ainsi obtenu
en une chane de caractres qui peut ainsi tre concatne avec les autres chanes.

On obtient ainsi le message affich dans la bote de dialogue de la Figure9.1.


Figure9.1
La concatnation de chanes
permet dafficher des
messages lattention de
lutilisateur.

278

Excel et VBA

Concatner les valeurs dune variable de matrice


Si vous souhaitez crer une seule chane de caractres partir des diffrentes valeurs dune
variable de matrice (ou variable tableau), utilisez la fonction Join selon la syntaxe suivante:
Join(SourceArray, Delimiter)

o largument nomm SourceArray est la variable 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 diffrentes donnes extraites de la variable. Si Delimiter est
omis, les lments du tableau sont concatns sans sparateur.
Dans lexemple suivant, les jours de la semaine sont stocks dans le tableau JoursSemaine.
La bote de dialogue reprsente la Figure9.2 est ensuite affiche. Notez quon utilise une
virgule suivie dun espace comme sparateur, et que lon ajoute un point la fin 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

Figure9.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 lexemple suivant, on utilise la fonction Chr() pour insrer un retour

Chapitre 9

Manipulation des chanes de caractres

279

chariot (Chr(13)) et une puce (Chr(149)) devant chaque jour de la semaine, afin de gnrer
le message ensuite affich dans une bote de dialogue (voir Figure9.3).
Sub UtiliserChr()
Dim n As Byte
Dim Message As String
Message = Les jours de la semaine sont:
For n = 1 To 7
Message = Message & Chr(13) & Chr(149) & " " & WeekdayName(Weekday:=n,
abbreviate:=False, firstdayofweek:=vbMonday)
Next n
MsgBox Message
End Sub

Figure9.3
Utilisez la fonction Chr()
pour insrer des caractres
non accessibles au clavier.

Afin damliorer la lisibilit de votre code, prfrez les constantes Visual Basic la fonction Chr() quand cela est possible. Le Tableau9.1 prsente les constantes Visual Basic les
plus communment employes pour crer des chanes de caractres.
Tableau9.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 plateforme: quivaut vbCrLf pour Windows et vbCr sur un Macintosh

Chr(13) & Chr(10) Windows


Chr(13) Macintosh

vbTab

Tabulation

Chr(9)

280

Excel et VBA

Rpter une srie de caractres


Utilisez la fonction String() pour renvoyer une chane compose dun caractre rpt un
nombre dfini de fois, selon la syntaxe 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
de la cellule A1 laquelle sont ajouts six zros. La valeur, exprime en millions dans la
cellule, est ainsi rcupre sous forme dunits:
MsgBox Str(ActiveWorkbook.ActiveSheet.Range(A1).Value) & String(6, 0)

ce
Astu

Vous pouvez utiliser la fonction Chr() pour largument Character. Ainsi


String(10, Chr(149)) renvoie une chane compose de dix puces.

Utilisez la fonction Space pour renvoyer une chane compose dun nombre dfini despaces,
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 souvent indispensable au bon fonctionnement 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
ou lautre des extrmits de la chane retourne avant de traiter ces donnes.
Visual Basic propose trois fonctions permettant de supprimer les espaces superflus dune
chane:

LTrim(String). Retourne une chane de caractres partir de la chane String reue en

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.

argument, dont les espaces situs gauche ont t supprims.

Largument nomm String est une chane de caractres.

Chapitre 9

Manipulation des chanes de caractres

281

Linstruction suivante stocke les donnes saisies par lutilisateur dans la variable 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
dans ce chapitre), elles permettent dextraire des informations prcises dune chane. La
fonction Len() qui renvoie la longueur dune chane, cest--dire le nombre de caractres
qui la composent est souvent employe comme argument de ces fonctions. Utilisez ces
fonctions selon la syntaxe suivante:

Len(String). Retourne une valeur de type Double qui reprsente le nombre de caractres prsents dans la chane String.

Left(String, Lenght). Retourne les Lenght premiers caractres situs gauche de la


chane String reue en argument. Si Lenght est suprieur ou gal la longueur de 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 argument. Si Lenght est suprieur ou gal 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 galement 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 variable MonTexte en supprimant le dernier caractre


( droite). On utilise pour cela la fonction Len() qui retourne la longueur de la chane
laquelle on retire1.
Ligne 2, on modifie la variable MonTexte en supprimant le premier caractre ( gauche).
Comme dans linstruction prcdente, on utilise la fonction Len() pour retourner la longueur
de la chane laquelle on enlve1.

282

Excel et VBA

Enfin, linstruction de la ligne3 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 ventuels espaces prsents aux extrmits de la chane retourne
par la fonction Mid().

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 arguments suivants sont
facultatifs:

Start. Prcise la position de caractres partir de laquelle doivent seffectuer les remplacements dans Expression. Si cet argument est omis, lensemble de la chane est trait.

Count. Indique le nombre de remplacements effectuer. Sil est omis, sa valeur 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
type de comparaison.

vbBinaryCompare ou 0. Effectue une comparaison binaire. La recherche se fait en


respectant la casse de Find.

vbTextCompare ou 1. Effectue une comparaison de texte. La recherche se fait 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, lignes7 9, les donnes de la feuille active 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

Chapitre 9

4:
5:
6:

Manipulation des chanes de caractres

283

Dim MesValeurs()
ReDim MesValeurs(1 To ActiveWorkbook.ActiveSheet.UsedRange.Cells.Count)
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

ce
Astu

Affectez une chane nulle largument Replace pour supprimer toutes les 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. quivaut utiliser la fonction StrConv() en affectant la valeur 1
ou vbUpperCase largument Conversion.

LCase(String). Retourne la chane String en convertissant toutes les lettres majuscules en minuscules. quivaut 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 souvent utilise dans des structures de contrle pour rpter une opration
jusqu ce quune condition soit remplie.

284

Excel et VBA

La mthode la plus simple pour comparer des chanes consiste employer 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

vbBinaryCompare ou 0. Effectue une comparaison binaire. La recherche se fait en


respectant la casse de Find.

vbTextCompare ou 1. Effectue une comparaison de texte. La recherche se fait sur le

len-tte du module dans lequel se trouve linstruction qui est utilise pour dfinir le
type de comparaison.

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 renvoie la valeur correspondante. Si les deux caractres compars sont identiques, les caractres suivants des deux
chanes sont leur tour compars,etc.
Le tableau suivant prsente quelques exemples de comparaisons de chanes en mode de
comparaison vbTextCompare:
String1

String2

Rsultat de la comparaison

Les deux chanes sont identiques.

abc

AbC

Les deux chanes sont identiques.

ab

ba

String1 est infrieur String2.

abc

String1 est suprieur String2.

Chapitre 9

Manipulation des chanes de caractres

285

La procdure suivante fait appel la fonction InputBox() pour afficher deux reprises une
bote de saisie dans laquelle lutilisateur est invit entrer une chane de caractres. Les
deux chanes sont ensuite compares et le rsultat de la comparaison saffiche dans 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 <> ""
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 nouveau une bote de saisie si lutilisateur a valid
avec une zone de saisie vide. On utilise ici loprateur <> pour comparer deux chanes (la
variable et une chane vide) afin de dfinir si la boucle doit tre excute.
Lignes 14 21, une structure Select Case...End Select est utilise pour dfinir la valeur
renvoye par linstruction StrComp(MaChane1, MaChane2, vbTextCompare) et afficher
le message adquat.

286

Excel et VBA

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

o string1 et string2 sont respectivement la chane dans laquelle seffectue la recherche


et la chane rechercher. Largument start est facultatif et indique la position du caractre
partir duquel la chane doit tre recherche. Sil est omis, la recherche commence ds le
premier caractre. Largument 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 trouve linstruction qui est utilise pour dfinir le
type de comparaison.

vbBinaryCompare ou 0. Effectue une comparaison binaire. La recherche se fait en


respectant la casse de Find.

vbTextCompare ou 1. Effectue une comparaison de texte. La recherche se fait 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 VerifierEnregistrement


pour sassurer que le document actif est enregistr avant de sexcuter. Si ce nest pas le
cas, la fonction renvoie False, et linstruction End met fin lexcution du programme
aprs avoir affich un message lattention de lutilisateur.
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

Chapitre 9

Manipulation des chanes de caractres

287

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 argument le document actif. Ligne 10, on recherche le sparateur propre au systme sur lequel sexcute le
programme (Application.PathSeparator) au sein du nom complet du document, chemin
inclus (proprit FullName). Si le fichier na pas t enregistr, 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 valeur 0 et notre fonction
reoit la valeur False. Dans le cas contraire, cest la valeur True qui est affecte la fonction VerifierEnregistrement.
Dans lexemple suivant, la fonction ScinderChaine est appele par MaMacro et reoit en
arguments deux chanes de caractres: la chane scinder en plusieurs parties et le sparateur utiliser pour effectuer cette opration. Elle renvoie ensuite une variable 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

288

Excel et VBA

15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26: End

Dim mavar
ReDim mavar(1)
pos = InStr(machane, separateur)
Do While pos <> 0
mavar(UBound(mavar)) = Left(machane, pos - 1)
machane = Mid(machane, pos + Len(separateur))
pos = InStr(machane, separateur)
ReDim Preserve mavar(UBound(mavar) + 1)
Loop
mavar(UBound(mavar)) = machane
ScinderChaine = mavar
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 la
recherche tant quelle aboutit, cest--dire tant que la fonction InStr() renvoie une valeur
diffrente de 0. chaque nouvelle recherche, on affecte au dernier espace de stockage de
mavar la chane prcdant la position du sparateur trouv (Left(machane, pos 1)). La
valeur de machane est ensuite redfinie de faon en supprimer la partie extraite, ainsi que
le sparateur recherch (ligne20). On utilise pour cela les fonctions Mid() et Len() afin de
dfinir la position de dpart de la nouvelle chane immdiatement aprs le sparateur (pos
+ Len(separateur)). La comparaison est alors de nouveau effectue sur la nouvelle chane
(ligne21) et la variable de mavar reoit un espace de stockage supplmentaire. Notez lutilisation du mot cl Preserve afin de prserver les valeurs dj stockes dans mavar.
Enfin, ligne24, 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 Figure9.4 saffiche.
Figure9.4
Utilisez la fonction InStr()
pour scinder une chane
fonction dun sparateur.

Chapitre 9

Manipulation des chanes de caractres

289

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 renvoie 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 dfaut), 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 diffrents espaces
de stockage dune variable de matrice. On effectue 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
6:
Dim MaRecherche3
7:
Dim MaRecherche4
8:
Dim Message As String
9:
For n = 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

290

Excel et VBA

18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:

For n = 0 To UBound(MaRecherche1)
Message = Message & " " & MaRecherche1(n) & " /"
Next n
Else
Message = "- Pas de rsultat pour la recherche avec include:=True et
Compare:=vbBinaryCompare."
End If
If Not UBound(MaRecherche2) = -1 Then
Message = Message & vbCr & "- Rsultat de la recherche avec
include:=False et Compare:=vbBinaryCompare " & vbCr
For n = 0 To UBound(MaRecherche2)
Message = Message & " " & MaRecherche2(n) & " / "
Next n
Else
Message = Message & vbCr & "- Pas de rsultat pour la recherche avec
include:=False et Compare:=vbBinaryCompare."
End If
If Not UBound(MaRecherche3) = -1 Then
Message = Message & vbCr & "- Rsultat de la recherche avec
include:=True et Compare:=vbTextCompare" & vbCr
For n = 0 To UBound(MaRecherche3)
Message = Message & " " & MaRecherche3(n) & " / "
Next n
Else
Message = Message & vbCr & "- Pas de rsultat pour la recherche avec
include:=True et Compare:=vbTextCompare."
End If
If Not UBound(MaRecherche4) = -1 Then
Message = Message & vbCr & "- Rsultat de la recherche avec
include:=False et Compare:=vbTextCompare: " & vbCr
For n = 0 To UBound(MaRecherche4)
Message = Message & " " & MaRecherche4(n) & " / "
Next n
Else
Message = Message & vbCr & "- Pas de rsultat pour la recherche avec
include:=False et Compare:=vbTextCompare."
End If
MsgBox Message
End Sub

Lignes 9 11, le nom des jours de la semaine est affect aux sept espaces de stockage de
la variable de matrice JoursSemaine. On fait pour cela appel la fonction WeekdayName()
prsente au chapitre prcdent. Lignes 12 15, on recherche quatre reprises la chane

Chapitre 9

Manipulation des chanes de caractres

291

"M" dans la variable avec, chaque fois, des valeurs diffrentes pour les arguments include
et compare.

Les mmes instructions sont ensuite appliques aux quatre variables ayant reu pour valeur
les rsultats des recherches, afin de crer le message qui sera affich (lignes16 23, 24
31, 32 39 et 40 47). On utilise pour cela une structure If...Then...Else afin de 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 affiche le message reprsent la Figure9.5.
Figure9.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 seffectue donc en respectant la casse (M majuscule et non
minuscule).

Largument Compare de la deuxime recherche est galement dfini vbBinaryCompare.


Par contre, la fonction renvoie toutes les valeurs de la variable JoursSemaine puisque
cette fois-ci largument include a t dfini False (tous les espaces de stockage o la
recherche na pas abouti sont renvoys).

Pour la troisime recherche, les arguments include et compare ont respectivement t


dfinis 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 effectue 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.

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

294

Excel et VBA

Il arrivera immanquablement que des erreurs surviennent lors de lexcution 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 dbogage
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 remdier.
Un programme peut avoir t test avec 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 lenvironnement dans lequel sexcute 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 exemple, lorsquun mot cl contient une faute dorthographe (voir Figure10.1).

Figure10.1
Les erreurs de compilation
sont les plus faciles reprer.

Erreurs dexcution. Une erreur dexcution survient aprs que la compilation du


programme a t ralise avec succs. Une erreur dexcution peut, par exemple, tre
lie lutilisation de donnes incompatibles. Ce sera le cas si le programme effectue une
opration arithmtique sur une variable de chane (voir Figure10.2).

Chapitre 10

Dbogage et gestion des erreurs 

Afficher la rubrique d'aide


associe l'erreur reconnue

Figure10.2
Une valeur et un message
dfinissent le type derreur
reconnue par Visual Basic.

Terminer l'excution
du programme

295

Tenter de
rsoudre l'erreur

Erreurs logiques. Les erreurs logiques sont les plus difficiles redresser. Contrairement aux erreurs de compilation et dexcution, elles laissent le programme sexcuter.
Le rsultat obtenu ne sera pas celui que vous escomptiez. Les sections suivantes prsentent les outils de dbogage qui permettront de dtecter lorigine de lerreur.

eil
Cons

eil
Cons

Lactivation de loption Vrification automatique de la syntaxe (voir Chapitre5)


de Visual Basic Editor permet de reprer les erreurs de syntaxe ds ltape de
la saisie du code.

Il est recommand de forcer la dclaration explicite des variables laide de


linstruction Option Explicit. Vous viterez ainsi tout risque derreur li une
faute de frappe lors de la saisie dun nom de variable. Pour plus dinformations
reportez-vous au Chapitre6.

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 ventuelles erreurs dexcution. Lors de la
compilation, Visual Basic Editor teste chaque instruction du projet. Pour compiler un projet,
choisissez la commande Compiler du menu Dbogage. Si une erreur est mise en vidence,
remdiez-y. Et recommencez jusqu ce que la compilation se droule normalement.
Lorsque la compilation seffectue correctement, testez le projet partir de Visual Basic
Editor: cliquez sur le bouton Excuter de la barre doutils Standard.

296

Excel et VBA

eil
Cons

Ne testez pas un programme dont vous ntes pas certain sur un document sensible. Il est prfrable deffectuer les tests sur une copie. Vous serez ainsi assur
de ne pas endommager des donnes prcieuses si le programme ne sexcute pas
correctement, ou sil produit des donnes errones.

Si une erreur dexcution est gnre, linstruction coupable est mise en vidence. Remdiez-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 dexcution disparat.
Excutez nouveau la procdure, et ce jusqu ce que le programme sexcute 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 excut partir de lapplication hte, la
bote de dialogue de la Figure10.2 apparat. Un clic sur le bouton Dbogage ouvre Visual
Basic Editor (si ncessaire) et affiche la procdure dans laquelle se trouve linstruction
ayant gnr lerreur. Par dfaut, celle-ci apparat en jaune et est signale par un indicateur
de marge (voir Figure10.3).
Figure10.3
Linstruction ayant gnr
lerreur est mise en vidence
dans Visual Basic Editor.

Il est cependant plus difficile de reprer les erreurs logiques. Les outils de dbobage de
Visual Basic Editor sont alors dun grand secours. Ils sont accessibles via le menu Dbogage et, pour les plus usits, via la barre doutils Dbogage.
Figure10.4
La barre doutils Dbogage.

Arrt

Mode
Cration

Basculer le
point d'arrt

Pas pas
principal

Fentre
Variables
locales Fentre
Espions
Pile des
appels

Espion
Excuter /
Pas pas Pas pas
sortant
Express
Continuer
dtaill
Fentre
Rinitialiser
Excution

Chapitre 10

Dbogage et gestion des erreurs 

297

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 examiner 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
la procdure tester.
2. Cliquez sur le bouton Pas pas dtaill de la barre doutils Dbogage; ou choisissez
la commande Pas pas dtaill du menu Dbogage, ou appuyez sur la toucheF8. 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 sexcute, tandis que linstruction suivante est mise en vidence
(voir Figure10.5).

Figure10.5
Excutez les procdures pas pas pour visualiser les consquences de chacune des instructions.

298

Excel et VBA

4. Rptez lopration de faon visualiser lincidence de chacune des instructions sur


le document.
5. Vous pouvez aussi "lcher" lexcution de la procdure en cliquant sur le bouton
Continuer de la barre doutils Standard. Lexcution du programme se poursuit alors
normalement partir de linstruction suivant la dernire instruction excute.

Info

Vous pouvez aussi excuter le code procdure par procdure, afin dtudier la
faon dont les procdures sappellent dans le programme. Utilisez pour cela la
commande Pas pas principal. La commande Pas pas sortant permet dexcuter tout le code restant dans la procdure en cours. Lexcution est alors
interrompue sur linstruction suivant linstruction dappel de la procdure
appelante.

La fentre Variables locales


Lorsque vous excutez une procdure pas pas, elle est en mode Arrt. Vous pouvez alors
visualiser la valeur des variables et des constantes aux diffrents stades de lexcution du
programme.

ition
Dfin

Le mode Arrt dsigne ltat dune procdure dont lexcution est interrompue.
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 apparatra dans une bulle daide (voir Figure10.6).

Figure10.6
Les info-bulles automatiques permettent de connatre la valeur des variables un moment prcis de
lexcution dun programme.

Chapitre 10

Dbogage et gestion des erreurs 

299

La fentre Variables locales permet dobtenir des informations prcises sur toutes les
variables visibles un moment donn de lexcution du programmenom, type et valeur
des variables. Choisissez pour cela Affichage > Variables locales, ou cliquez sur le bouton
Variables locales de la barre doutils Dbogage. La liste des variables visibles saffiche
(voir Figure10.7).
Figure10.7
La fentre Variables
locales fournit des
informations
compltes sur les
variables.

Dans le haut de la fentre, le nom de la procdure en cours dexcution saffiche ici, la


procdure Testdedeprocdure1, stocke dans le module Module1 du projet VBAProject.
Les variables de niveau module apparaissent sous le nom du module ici sous Module1,
tandis que les variables de niveau procdure sont affiches telles quelles ici TypePres et
CodePostal.
Si la procdure en cours a t appele, vous pouvez visualiser les variables des procdures
appelantes. Cliquez sur le bouton Pile des appels. La fentre Pile des appels souvre et
affiche les appels de procdure actifs. Cliquez sur la procdure dont vous souhaitez visualiser les valeurs, puis sur Afficher. 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.
Figure10.8
La pile des appels affiche les
appels de procdure actifs.

300

Excel et VBA

Vous pouvez modifier la valeur des variables dans la fentre Variables locales, afin de tester
le comportement du programme dans dautres circonstances. Double-cliquez sur la valeur
modifier, puis saisissez la valeur voulue. Si la valeur choisie est incompatible avec le type
de la variable, un message derreur saffiche et la valeur de la variable reste inchange.

Les points darrt


Les points darrt permettent dinterrompre lexcution dun programme sur une instruction prcise. Cette possibilit est particulirement intressante lorsque vous 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 vous ntes pas
sr. Une fois lexcution interrompue, vous pouvez la poursuivre pas pas, examiner la
valeur des variables,etc.
Pour placer un point darrt, placez le curseur sur linstruction voulue et choisissez la
commande Basculer le point darrt du menu Dbogage, 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 face de linstruction voulue. Par dfaut, linstruction sur
laquelle un point darrt a t dfini apparat sur un arrire-plan de couleur bordeaux et un
indicateur est plac en marge (voir Figure10.9).

Figure10.9
Les points darrt permettent de dfinir des interruptions dans lexcution du code.

Chapitre 10

Dbogage et gestion des erreurs 

301

Vous pouvez placer plusieurs points darrt dans le code, afin de vrifier ltat des variables
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.

eil
Cons

Lorsque vous quittez Visual Basic Editor, les points darrt ne sont pas enregistrs. Pour conserver des points dinterruption du programme lors de la fermeture
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 suivante excuter dans
une procdure. Il peut sagir dune instruction prcdant linstruction actuelle ou au
contraire dune instruction venir. Pour modifier linstruction suivante, placez le curseur
dans linstruction excuter et slectionnez la commande Dfinir linstruction suivante du
menu Dbogage, ou faites glisser lindicateur de marge vers 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 pouvez alors utiliser la
fentre Excution pour excuter des instructions napparaissant pas dans votre code, mais
que vous envisagez de substituer aux instructions ignores.

Info

Linstruction suivante ne peut tre dfinie qu lintrieur de la procdure en


cours.

La fentre Excution
En mode Arrt, la fentre Excution permet dexcuter tout type dinstruction qui ne se
trouve pas dans le code du programme. Il suffit dy crire linstruction excuter et dappuyer sur Entre. Linstruction sexcute alors comme si elle faisait partie intgrante du
code. Vous pouvez ainsi interroger ou modifier la valeur dune variable ou dune proprit,
excuter une instruction,etc.
Pour afficher la fentre Excution, choisissez la commande Fentre Excution, ou cliquez
sur le bouton Fentre Excution de la barre doutils Dbogage, ou encore saisissez le
raccourci clavier Ctrl+G. la Figure10.10, la valeur indique par lutilisateur et affecte la

302

Excel et VBA

variable DateEcheance a gnr une erreur. Nous avons plac un point darrt sur linstruction ayant gnr une erreur, afin dy revenir par la suite. Nous avons utilis la commande
Dfinir linstruction suivante du menu Dbogage pour passer linstruction suivante et
poursuivre lexcution du code. Enfin, nous avons redfini la valeur de DateEcheance
"01/04/98" et nous avons excut de nouveau linstruction ayant gnr lerreur dans la
fentre Excution.
Figure10.10
La fentre Excution permet
dexcuter une instruction
comme si elle faisait partie
intgrante du code.

Les espions
Les espions permettent despionner les valeurs de variables ou de toute expression renvoyant
une valeur dans un contexte dtermin. Pour crer un espion, procdez ainsi:
1. Choisissez la commande Ajouter un espion du menu Dbogage. La bote de dialogue
Ajouter un espion saffiche lcran (voir Figure10.11).
Figure10.11
La bote de dialogue Ajouter
un espion.

Chapitre 10

Dbogage et gestion des erreurs 

303

2. Dans la zone de texte Expression, saisissez lexpression dont vous souhaitez espionner la valeur.
3. Dans la zone Contexte, dterminez le contexte dans lequel lexpression sera espionne. Par dfaut les zones Procdure et Module affichent respectivement 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 saffiche


dans la fentre Espions.

Arrt si la valeur est vraie. La procdure passe en mode Arrt si la valeur de


lexpression est dfinie True.

Arrt si la valeur change. Lexcution du code sinterrompt si la valeur 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 menu
Affichage; ou cliquez sur le bouton Fentre Espions de la barre doutils Dbogage. Sept
espions ont t placs dans la fentre Espions reprsente la Figure10.12.
Figure10.12
Placez des espions
dans votre code...

La fentre Espions contient quatre champs:

Expression. Affiche lexpression espionne. Il peut sagir dun nom de variable ou de


toute expression renvoyant une valeur.

Valeur. Affiche la valeur actuelle de lexpression espionne en mode Arrt. Dans le


cas dune expression de niveau procdure, cette zone affiche <Hors du contexte> si la
procdure ne fait pas partie des appels de procdure actifs (elle napparat alors pas dans
la pile des appels).

304

Excel et VBA

Vous pouvez modifier la valeur dune expression dans la fentre Espions, afin de tester le
comportement du programme dans dautres circonstances. Double-cliquez sur la valeur
modifier, puis saisissez la valeur voulue. Si la valeur choisie est incompatible avec
lexpression, un message derreur saffiche et la valeur de lexpression reste inchange.

Type. Affiche le type de la variable ou de la valeur renvoye par lexpression. Si linstruction en cours est hors du contexte despionnage, cette zone affiche Empty ou Variant/
Empty.

Contexte. Affiche le contexte dfini pour lexpression espionne. la Figure10.12, vous


pouvez constater que la premire expression espionne est dfinie pour toutes les procdures du module Module1, tandis que les autres espions sont limits une procdure
spcifique du module.

Pour supprimer un espion, cliquez du bouton 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 valeur dune expression pour laquelle vous navez pas plac
despion, vous pouvez faire appel lEspion express. Slectionnez lexpression voulue,
puis choisissez la commande Expression express du menu Dbogage. Vous pouvez aussi
cliquer sur le bouton Espion express de la barre doutils Dbogage, ou encore utiliser
Maj+F9. La bote de dialogue Espion express vous renseigne alors sur le contexte de lexpression slectionne et sur sa valeur (voir Figure10.13). Pour intgrer cette expression
la fentre Espions, cliquez sur Ajouter.
Figure10.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.

Chapitre 10

Dbogage et gestion des erreurs 

305

Il peut tre intressant de visualiser la pile des appels lors du dbogage dun programme
VBA. Vous avez ainsi une ide prcise des procdures en cours dexcution et des appels
successifs. Pour afficher la pile des appels, choisissez la commande Pile des appels du
menu Affichage, ou cliquez sur le bouton Pile des appels de la barre doutils Dbogage, ou
encore tapez le raccourci clavier Ctrl+L.
Vous pouvez voir la Figure10.14 que la procdure en cours dexcution est Procdure3,
qui a t appele Procdure2, elle-mme appele par AppelsDeProcdures.
Figure10.14
La bote de dialogue Pile
des appels.

Exemple de dbogage
Nous allons crer ici un programme que nous dboguerons jusquau moment o nous
atteindrons une version fiable. Supposons que vous 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
Figure10.15 doivent tre supprimes.
Figure10.15
Le programme devra supprimer les lignes ne contenant
pas de donnes.

306

Excel et VBA

Une dmarche logique consiste commencer par dfinir la zone devant tre traite (de la
cellule A1 la dernire cellule de la colonne A ne contenant pas de donnes) par la macro et
affecter celle-ci une variable objet. Nous utiliserons ensuite une structure For Each...
Next pour vrifier la valeur de chacune des cellules de la zone pralablement dfinie, et
supprimer la ligne correspondante chaque fois quune cellule ne contient pas de 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

Lignes5 10, la plage de cellules devant tre testes est dfinie et affecte la variable
MaPlage de type Range. On commence par dclarer la variable MaPlage et par lui affecter la
cellule A1 (lignes5 et 6). Lignes7 9, une structure While...Wend sert dfinir la dernire
cellule de la colonne A contenant des donnes. MaPlage se voit affecter la cellule renvoye
par la proprit End (ligne8), tant que celle-ci nest pas vide (ligne7). Lorsque la proprit
End renvoie une cellule vide, cest que la cellule affecte MaPlage est la dernire cellule
contenant des donnes. La boucle While...Wend prend alors fin. Ligne10, MaPlage reoit
la plage de cellules allant de la cellule A1 la dernire cellule non vide de la colonne A,
prcdemment dfinie.
Lignes14 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. Si tel est le
cas, la ligne correspondante est supprime (ligne16).

Chapitre 10

Dbogage et gestion des erreurs 

307

Recherche du bogue
Excutez le programme sur un classeur Excel contenant des lignes vides. Vous constatez que, sil existe deux lignes vides conscutives, 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 devant
linstruction de la ligne14, afin dinterrompre lexcution du programme avant quil
ne commence supprimer les lignes.
2. Excutez ensuite la macro. Lorsque linstruction de la ligne14 est atteinte, la macro
sinterrompt et Visual Basic Editor passe au premier plan. Linstruction 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 faon voir le classeur Excel au second
plan. Poursuivez ensuite linstruction de la macro pas pas (touche F8). Utilisez
labarre de dfilement dExcel pour afficher les parties du classeur masques par la
fentre de Visual Basic Editor chaque fois que cela semble ncessaire. Faites ensuite
repasser la fentre de Visual Basic Editor au premier plan laide des touches Alt+Tab.
4. Observez attentivement leffet de chaque instruction sur le classeur, ainsi que les
valeurs que prennent les diffrentes variables et expressions du programme. Placez
pour cela le curseur au-dessus des expressions Cellule.Value et Cellule.Row de faon
afficher les info-bulles automatiques. Soyez particulirement attentif lorsquune
cellule vide est teste.
5. Vous devriez vous rendre compte que, lorsque la ligne10 est supprime, la ligne11
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 suivante 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 doivent 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.

308

Excel et VBA

Figure10.16
Excutez la macro
pas pas et observez
attentivement ses effets
sur les macros, ainsi
que les valeurs que
prennent les variables.

Rsolution du bogue
Plusieurs solutions permettent de rgler ce problme.
1. Vous pouvez intgrer une instruction contrlant de nouveau le contenu de la cellule
teste lorsquune ligne est supprime. Remplacez pour cela les instructions conditionnelles des lignes15 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 variable 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 conscutives sont vides. Mais le bogue
persiste ds quil existe plus de deux lignes conscutives vides.

Chapitre 10

Dbogage et gestion des erreurs 

309

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 droulement de la boucle commenant par la dernire cellule plutt que par la premire. Le
programme se prsente alors ainsi (les modifications apparaissent en gras):
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 devra 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

310

Excel et VBA

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
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 stocker les
numros des lignes supprimer. Lignes6 11, la zone traiter est dfinie et affecte la
MaPlage, de la mme faon que dans les versions prcdentes du programme.
Lignes15 29, les numros des lignes supprimer sont dfinis et stocks dans MonTableau.
La variable Cellule de type Range est tout dabord dclare. Une structure For Each...
Next sert ensuite tester lensemble des cellules de MaPlage (lignes16 29). chaque
passage de la boucle, une structure conditionnelle (lignes 17 28) value la valeur de
la cellule teste et stocke le numro de la ligne la variable de matrice MonTableau si la
cellule est vide. La variable est tout dabord redimensionne (ligne21). On se sert pour cela
de la fonction UBound qui renvoie la taille du tableau, laquelle on ajoute1. Ligne27, le
dernier espace de stockage de MonTableau MonTableau(UBound(MonTableau)) reoit le
numro de la ligne de la cellule teste.

Chapitre 10

pel
Rap

Dbogage et gestion des erreurs 

311

Notez lutilisation du mot cl Preserve lors du redimensionnement du tableau


(ligne21). Celui-ci est indispensable pour que le tableau ne soit pas rinitialis.

Lignes20 26, un gestionnaire derreur a t mis en place. En effet, la premire fois que la
fonction UBound est utilise (ligne21), une erreur est gnre. Linstruction Resume Next de
la ligne20 force le passage linstruction suivante en cas derreur. Ligne23, on interroge
la valeur de la proprit Number lobjet Err pour vrifier si une erreur a t gnre. Si tel
est le cas (si le tableau na pas encore t dimensionn), MonTableau est dimensionn avec
un espace de stockage et lobjet Err est rinitialis laide de la mthode Clear.

eil
Cons

Pour connatre le numro dune erreur (la valeur de la proprit Number de


lobjet Err), gnrez volontairement cette erreur et relevez le numro derreur
indique dans la bote de dialogue Visual Basic affiche au moment o lerreur
survient.

Lignes32 35, les lignes vides sont supprimes. On utilise pour cela une boucle For...
Next dont le compteur commence la valeur dindex la plus importante de MonTableau
pour atteindre la valeur la plus basse, et est dcrment de 1 chaque passage. chaque
passage de la boucle, linstruction de la ligne34 supprime la ligne dont le numro correspond la valeur stocke dans lespace de stockage dindex Compteur de MonTableau.

Info

Lintrt de cette version du programme est de permettre de stocker les lignes


supprimes dans une variable. Placez les instructions suivantes en fin de programme pour afficher 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

Figure10.17
Cette version du programme
permet de connatre les
lignes supprimes.

312

Excel et VBA

Une telle mthode se rvlera particulirement intressante si vous crez une procdure
destine supprimer des lignes contenant des informations, mais que vous souhaitiez rcuprer ces informations dans un autre classeur Excel. On utilisera alors une variable 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 classeur contenant
des donnes conserver) devra tre dfinie avant de stocker les donnes dans la variable
seule la dernire dimension pouvant tre redfinie en conservant les valeurs de la variable.

Gestion des erreurs et des exceptions


Un programme VBA peut sexcuter correctement dans la plupart des cas et gnrer des
erreurs dexcution dans des contextes spcifiques. Une erreur peut, par exemple, tre gnre si lutilisateur nentre pas le type dinformation attendue dans une bote de dialogue.
Une erreur sera galement gnre si le format dune cellule ne correspond pas au type de
donnes quun programme tente dexploiter, ou encore si un programme tente de modifier
un classeur Excel en cours dutilisation. Nombre derreurs de ce type, lies un code crit
pour un contexte particulier, sont susceptibles daffecter une macro. Il est important de
prvoir ce type derreur et de mettre en place un gestionnaire derreur, afin que la procdure contourne lerreur et sexcute normalement.

ition
Dfin

Un gestionnaire derreur est un ensemble dinstructions qui est cens permettre


la poursuite de lexcution dune procdure. En gnral, il est appel par un
dtecteur derreur, dont la fonction est de reprer lerreur lorsquelle survient.

Pour dtecter une ventuelle erreur, placez une instruction On Error devant linstruction
susceptible den gnrer une:

On Error Resume Next. Ignore linstruction ayant gnr une erreur et passe lins-

On Error GoTo tiquette. Permet dappeler un gestionnaire derreur repr par

truction suivante.
ltiquette.

Une technique courante consiste placer le gestionnaire derreur la fin de la procdure et


glisser une instruction Exit avant ltiquette le dlimitant:
Sub MaProcdure()
...
On Error GoTo GestionnaireErreur
Instruction susceptibles de gnrer une erreur

Chapitre 10

Dbogage et gestion des erreurs 

313

...
Exit Sub
GestionnaireErreur:
Instructions de gestion des erreurs
Resume
End Sub

Ainsi, ds quune erreur est dtecte, le gestionnaire derreur sera appel. Linstruction
Resume ne peut tre place que dans un gestionnaire derreur. Elle rend la main linstruction 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 voit affecter une valeur
identifiant le type derreur survenu. Aprs gestion de lerreur, il est important de redfinir
cette proprit 0 (pas derreur), afin que les ventuelles autres erreurs puissent tre dtectes.
Utilisez alors linstruction daffectation Err.Number = 0.

Exemple de gestion derreur


La procdure suivante tudie au Chapitre7 gnrera une erreur si lutilisateur nentre
pas une date dans un format valide dans la bote de dialogue affiche par la fonction Input
Box (voirFigure10.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)

314

Excel et VBA

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

Figure10.18
Cette erreur peut tre gre
par le programme.

La procdure suivante gre cette erreur en faisant appel un gestionnaire derreur qui
affiche une nouvelle bote de dialogue dans laquelle lutilisateur est invit entrer une date
dans un format valide. Linstruction ayant gnr lerreur est alors rpte et le programme
se droule normalement, jusqu linstruction Exit Sub qui entrane la sortie de la procdure. Si lutilisateur clique sur le bouton Annuler, la variable 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

Chapitre 10

Dbogage et gestion des erreurs 

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

Figure10.19
Lerreur est dtecte et
lutilisateur est invit entrer
une information valide ou
annuler lopration.

315

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
Modifier limage et/ou le nom dune commande
Affecter une macro un objet

318

Excel et VBA

Vous pouvez trs simplement amliorer laccessibilit dune macro en lui affectant 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-vous de lexcuter 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 regroupant quelques
commandes ne prsente quun intrt limit si elle ne peut tre excute 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 larges et dune utilisation
moins frquente.

Affecter une macro un raccourci clavier


Si vous navez pas affect de raccourci clavier une macro au moment de sa cration, vous
pouvez trs simplement le faire aprs coup:
1. Cliquez sur le bouton Macros de longlet Dveloppeur.
2. Dans la bote de dialogue Macro, slectionnez la macro voulue puis cliquez sur le
bouton Options.

La bote de dialogue Options de macro saffiche lcran (voir Figure11.1).

3. Indiquez le raccourci de votre choix en saisissant une lettre dans la zone conue cet
effet. Vous pouvez aussi ajouter une description la macro, si vous avez omis de le
faire lors de la cration.
4. Cliquez sur OK pour valider les modifications.
Figure11.1
Vous pouvez aisment
affecter un raccourci clavier
une macro.

Chapitre 11

Intgrer des applications VBA dans linterface dExcel 

319

Personnaliser le ruban et la barre doutils


Accs rapide
Avec Excel 2010, vous pouvez personnaliser tous les onglets du ruban ainsi que la barre
doutils Accs rapide (Excel 2007 ne permettait pas la personnalisation des onglets du
ruban, seule la barre doutils Accs rapide pouvait tre modifie). Pour ce faire, procdez
comme suit:
1. Affichez le fichier PERSONAL.XLSB et cliquez sur longlet Fichier, puis sur Options.
Dans la bote de dialogue Options, choisissez Personnaliser le ruban ou Barre doutils
Accs rapide.
2. Dans la zone de liste Choisir les commandes dans les catgories suivantes, choisissez
Macros (Figure11.2). Lensemble des macros accessibles saffiche.

Figure11.2
Avec Excel 2010, vous pouvez personnaliser la barre doutils Accs rapide, mais aussi le ruban.

320

Excel et VBA

3. Dans la zone Personnaliser le ruban, slectionnez lune des trois options disponibles :
Tous les onglets, Onglets principauxou Onglets doutils.
4. Choisissez llment que vous voulez personnaliser:

slectionnez un des onglets de la liste, puis choisissez Nouveau groupe pour


personnaliser un onglet existant;

cliquez sur le bouton Nouvel onglet pour crer un nouvel onglet (comme dans
notre exemple).

5. Cliquez droit sur le nouvel onglet cr, et choisissez Renommer. Dans la bote de
dialogue qui saffiche, saisissez un nom appropri, ici Macros (voir Figure 11.3), puis
validez. Procdez de mme pour le libell Nouveau groupe (Personnalis), situ sous
longlet que vous venez de crer.

Figure11.3
Si vous choisissez daffecter vos macros un nouvel onglet, donnez-lui un nom reprsentatif.

ce
Astu

Pour modifier lordre des onglets sur le ruban, slectionnez longlet voulu et
utilisez les flches haut et bas pour repositionner longlet slectionn.

Chapitre 11

Intgrer des applications VBA dans linterface dExcel 

321

6. Slectionnez la macro de votre choix dans le volet gauche, puis cliquez sur Ajouter.
Le nom de la macro apparat dans le groupe slectionn du nouvel onglet. Renommez
la macro comme vous lavez fait pour longlet et le groupe ltape 5. Validez.
7. Enfin, utilisez les flches situes sur la droite de la fentre pour dfinir la position de
votre commande sur la barre doutils, puis validez.
Figure11.4
La macro est maintenant accessible via le nouvel onglet.

Info

Pour supprimer une commande personnalise, cliquez dessus du bouton droit et


choisissez la commande Supprimer dans le menu contextuel qui saffiche.

Personnaliser les barres doutils dans les versions


antrieures Excel 2007
Cette section prsente la mthode de personnalisation de linterface dExcel avec une
version antrieure 2007:
1. Choisissez la commande Personnaliser du menu Outils et activez longlet Commandes
de la bote de dialogue Personnaliser.

322

Excel et VBA

2. Dans la liste Catgories, choisissez Macros. La liste Commandes de la bote de dialogue Personnaliser affiche deux options : lment 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
curseur ne permet pas de crer une commande (voir Figure11.5).
Figure11.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 Figure11.6).
Figure11.6
Une barre verticale indique
o sera place la commande.

5. Relchez le bouton de la souris. Une icne reprsentant un Smiley saffiche dans la


barre doutils.
6. Cliquez droit sur le nouveau bouton et choisissez la commande Affecter une macro.
Dans la bote de dialogue Affecter une macro qui saffiche, slectionnez la macro
voulue et cliquez sur le bouton OK (voir Figure11.7).

Chapitre 11

Intgrer des applications VBA dans linterface dExcel 

323

7. Reportez-vous la section Modifier limage et/ou le nom dune commande pour


dterminer licne affecter au raccourci ainsi cr, puis cliquez sur le bouton Fermer
de la bote de dialogue Personnaliser.

eil
Cons

Lorsque vous ajoutez un bouton une barre doutils Excel, ouvrez le menu
contextuel du bouton personnalis et affectez-lui un nom reprsentatif. Lorsque
le pointeur est plac au-dessus du bouton, son nom saffiche dans une info-bulle.

Figure11.7
Slectionnez la macro affecter au nouveau bouton.

Personnaliser les menus dans les versions antrieures Excel 2007


La procdure permettant daffecter une commande de menu une macro avec une version
dExcel antrieure 2007 sapparente lajout dun bouton sur une barre doutils. Procdez ainsi:
1. Rptez les tapes1 3 de la section prcdente, en choisissant lment de menu
personnalis ltape3.
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 vous souhaitez dposer la commande. Une barre horizontale vous indique prcisment lemplacement quelle prendra (voir Figure11.8).

324

Excel et VBA

Figure11.8
Une barre horizontale
symbolise lemplacement que
prendra la commande.

4. Relchez le bouton de la souris. Le libell lment de menu personnalis apparat


dans le menu (voir Figure11.9).
5. Reportez-vous la section Modifier limage et/ou le nom dune commande pour
modifier le nom de la commande et dterminer ventuellement licne affecter au
raccourci ainsi cr. Cliquez ensuite sur le bouton Fermer de la bote de dialogue
Personnaliser.
Figure11.9
Il ne vous reste qu affecter
un nom reprsentatif la
nouvelle commande.

Chapitre 11

ce
Astu

Intgrer des applications VBA dans linterface dExcel 

325

Il peut tre judicieux de regrouper vos macros dans des menus qui leur soient
propres. Pour crer un nouveau menu, slectionnez Nouveau menu dans la zone
Catgories de la bote de dialogue Personnaliser, puis faites glisser la commande Nouveau menu lemplacement voulu sur la barre de menus.

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, cliquez du bouton droit sur lobjet
voulu et choisissez la commande Affecter une macro du menu contextuel.
Lorsquune macro est affecte 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.

Info

Pour manipuler les commandes de menu et les barres doutils Excel par programmation par exemple, ajouter ou supprimer des commandes selon le
contexte, utilisez la proprit CommandBars. Pour plus de prcisions, consultez
laide en ligne.

III
Dvelopper
des interfaces
utilisateur
Chapitre 12. Crer des interfaces utilisateur
Chapitre 13. Exploiter les proprits des contrles ActiveX
Chapitre 14. Matriser le comportement des contrles

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 feuille

330

Excel et VBA

Les feuilles constituent un lment essentiel de la programmation Visual Basic. Les feuilles
sont des zones sur lesquelles vous placez des contrles ActiveX tels que des cases cocher,
des boutons doption, des zones de texte, des boutons de commande,etc. Ils forment une
interface graphique permettant une interaction simple et intuitive entre lutilisateur final et
le programme.
Les vnements utilisateur, tels quun clic de souris ou une modification de la valeur
dun contrle, qui touchent les contrles sont automatiquement reprs par le programme.
Il vous suffit dassocier du code un vnement donn pour que celui-ci sexcute
lorsque lvnement est repr. On parle alors de procdure vnementielle ou procdure
dvnement.
Les contrles prennent une valeur, dtermine par leur tat (case coche ou non coche,
texte dune zone de texte, etc.). Lexploitation des feuilles consiste gnralement
passer les informations entres par lutilisateur sur la feuille (les valeurs des diffrents
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.

Figure12.1
Les feuilles constituent
linterface graphique de
vos projets VBA.

Chapitre 12

Crer des interfaces utilisateur 

331

Les phases de dveloppement de feuilles


Les feuilles permettent de ramener des tches complexes 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, rflchissez aux fonctions que devra jouer linterface dveloppe. Quels doivent en tre les
diffrents contrles? Comment seront-ils organiss sur la feuille? Quel type dinteraction entre les contrles? quels vnements utilisateur devront-ils rpondre? Nous
vous conseillons de raliser sur papier un dessin approximatif de la feuille et de noter
les informations essentielles sur les diffrents 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 voulus (cases
cocher, boutons doption). Vous paramtrerez les proprits de la feuille et des contrles
qui la composent, afin den dterminer lapparence (couleur, taille, texte par dfaut) et
le comportement (accessibilit, nombre de caractres autoriss,etc.).

criture 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 vnements utilisateur pouvant laffecter et crirez le code permettant dexploiter les donnes
fournies par lutilisateur.

Ce chapitre prsente la cration de feuilles. Vous y dcouvrirez les diffrents contrles


votre disposition, apprendrez les placer sur une feuille et utiliser les outils de VBA
pour crer des interfaces lapparence professionnelle. Les outils de dveloppement visuel
de feuilles de Visual Basic permettent de crer simplement et rapidement des interfaces
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 vous souhaitez
crer une feuille.

332

Excel et VBA

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
Insertion ou cliquez du bouton droit sur nimporte quel lment du projet dans
lExplorateur de projet et, dans le menu contextuel qui saffiche, slectionnez Insertion > UserForm.
3. Une fentre UserForm souvre (voir Figure12.2). La feuille et la bote outils y sont
affiches. Par 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.

Figure12.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 faire rfrence cette
feuille. La proprit Caption correspond au libell de la feuille qui apparat dans sa
barre de titre. La Figure12.3 prsente une feuille dont la proprit Caption a t dfinie
"Exemple de feuille UserForm".

5. Vous pouvez tout moment utiliser les poignes de redimensionnement pour modifier
la taille de la feuille.
6. Cliquez sur le bouton Enregistrer de la barre doutils Standard pour enregistrer votre
projet.
Pour ouvrir la fentre UserForm dune feuille existante, ouvrez lExplorateur de projet
(Ctrl+R) et double-cliquez sur celle-ci.

Chapitre 12

Crer des interfaces utilisateur 

Figure12.3
Dfinissez les proprits
Name et Caption de la
feuille.

333

La proprit Caption correspond


au titre de la feuille

Utilisez les poignes de


redimensionnement
pour modifier la taille de
votre feuille

Les contrles de la bote outils


La bote outils contient les contrles que vous 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 faon dont les contrles fonctionnent. Il vous suffit 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 la barre
doutils Standard ou slectionnez la commande Bote outils du menu Affichage.
Figure12.4
La bote outils contient des
contrles Windows usuels.

Outil Slection

Contrle Label

Contrle TextBox

Contrle ComboBox

Contrle ListBox

Contrle CheckBox

Contrle OptionButton
Contrle Frame

Contrle ToggleButton
Contrle CommandButton

Contrle TabStrip

Contrle MultiPage

Contrle ScrollBar

Contrle SpinButton

Contrle Picture

334

Excel et VBA

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 gnralement placer un intitul ct dun contrle ne possdant pas cet attribut ( ct dune
zone de texte par exemple), afin de permettre lutilisateur den identifier la fonction.

Figure12.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 lutilisateur pourra saisir des informations. Les proprits dun contrle TextBox permettent de
contrler le nombre de caractres maximum que pourra entrer lutilisateur, laffichage sur
plusieurs lignes du texte ou encore le type dalignement du texte dans la zone de texte. Elles
sont tudies au chapitre suivant.

Chapitre 12

Crer des interfaces utilisateur 

335

Figure12.6
Le contrle TextBox est lun
des contrles les plus utiliss.

Contrle ComboBox
Le contrle ComboBox, ou zone de liste modifiable, est une zone de texte permettant lutilisateur de saisir une valeur manuellement ou de la slectionner dans la liste qui se droule
lorsquil clique sur le bouton prvu cet effet. Un contrle ComboBox peut permettre lutilisateur de saisir une valeur ne figurant pas dans la liste, ou nautoriser quune des valeurs
de la liste.
Figure12.7
Le contrle ComboBox
permet lutilisateur de slectionner une valeur dans la
liste ou de choisir 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
catgories de contrles dune feuille. Les cadres servent 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).

336

Excel et VBA

Figure12.8
Un contrle Frame (ici
intitul Insrer) permet de
lgender un ensemble de
contrles.

Contrle ListBox
Le contrle ListBox, ou zone de liste, est une zone affichant des options parmi lesquelles
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 afficher tous les lments, une barre de dfilement
verticale lui est associe.
Figure12.9
Une zone de texte peut tre
associe une zone de liste
afin den afficher la valeur
slectionne.

Zones de liste

Contrle CheckBox
Un contrle CheckBox, ou case cocher, peut tre activ (coch) ou dsactiv (non coch)
par lutilisateur, afin de valider ou non une option. Les proprits dun contrle CheckBox

Chapitre 12

Crer des interfaces utilisateur 

337

permettent aussi de lui faire accepter un troisime tat, Null (ni coch, ni dcoch). La case
cocher apparat alors grise.
Figure12.10
Les cases cocher permettent de valider ou non une
option.

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 activ. Lactivation dun bouton doption entrane la dsactivation
des autres boutons doption associs.
Figure12.11
Un seul bouton doption peut
tre slectionn.

338

Excel et VBA

Contrle ToggleButton
Le contrle ToggleButton, ou bouton bascule, permet lutilisateur dactiver ou de dsactiver une option, voire 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
Figure12.12 prsente les trois tats possibles pour un contrle ToggleButton.
Figure12.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)
afin de passer ltape suivante du programme, ou au contraire interrompre le programme
(bouton Annuler).
Figure12.13
Les boutons de commande
figurent parmi les contrles
les plus courants.

Contrle TabStrip
Le contrle TabStrip, ou onglet, permet de crer une feuille dont laffichage variera selon
longlet slectionn. Tout se passe comme si laccs plusieurs feuilles tait dirig partir

Chapitre 12

Crer des interfaces utilisateur 

339

dune seule feuille. Les onglets permettent de rsoudre des problmes despace en organisant les contrles dune feuille par types, classs sous diffrents onglets. Lorsque lutilisateur clique sur un onglet, les contrles de la feuille sont mis jour par le code associ au
contrle.
Notez que les contrles ne peuvent 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 effectue 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 diffrents affichages une mme feuille. 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 Multi
Page, ceux-ci ne safficheront que si la page en question est slectionne. Vous naurez
donc pas crire de code pour faire varier laffichage de la feuille, mais simplement
placer les contrles voulus sur les pages constituant le contrle.

Figure12.14
Plusieurs contrles MultiPage peuvent tre placs sur une feuille, chacun pouvant prsenter un nombre
variable donglets.

340

Excel et VBA

Contrle ScrollBar
Le contrle ScrollBar, ou barre de dfilement,offre lutilisateur une zone lui permettant de se dplacer dans un environnement. Une barre de dfilement peut tre horizontale
ou verticale. Pour dterminer la position dune barre de dfilement, redimensionnez-la en
utilisant ses poignes de slection. Le dplacement laide dune barre de dfilement peut
seffectuer par un clic sur lune des touches flches de la barre, un clic lintrieur de la
barre (entre le curseur de dfilement et lune des touches flches), ou encore par un glisserdplacer du curseur de dfilement sur la barre.
Un contrle ScrollBar est automatiquement affect un contrle ListBox lorsque la
hauteur de ce dernier ne permet pas laffichage de tous les lments de la liste.
Figure12.15
Un contrle ScrollBar permet
lutilisateur de se dplacer
dans une zone de texte trop
petite pour afficher la totalit
de son contenu.

Contrle ScrollBar

Contrle SpinButton
Un contrle SpinButton, ou bouton toupie, est compos de deux flches permettant lutilisateur de slectionner une valeur en cliquant sur lune ou lautre des flches. Les boutons
toupies sont gnralement associs une zone de texte dans laquelle saffiche la valeur
slectionne. Les proprits de la zone de texte peuvent tre dfinies pour que lutilisateur
puisse y entrer une valeur saisie au clavier ou pour que la valeur ne puisse tre dfinie qu
laide du bouton toupie.

Chapitre 12

Crer des interfaces utilisateur 

341

Figure12.16
Un contrle TextBox est
gnralement associ un
contrle SpinButton afin
dafficher 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 Figure12.17).
Figure12.17
Une image accole au
pointeur indique le type de
contrle slectionn.

342

Excel et VBA

3. Placez la croix lendroit o vous souhaitez voir apparatre langle suprieur gauche
du contrle et cliquez. Le contrle apparat sur la feuille (voir Figure12.18) et loutil
Slection est activ dans la bote outils.
Figure12.18
Le contrle OptionButton
dpos sur la feuille.

4. Pour dplacer le contrle, slectionnez-le si ncessaire. Placez le curseur sur la bande


grise reprsentant la slection, de faon quil prenne la mme forme qu la
Figure12.19, et effectuez un glisser-dplacer jusqu lemplacement voulu.
Figure12.19
Cette forme de pointeur
indique que vous pouvez
dplacer le contrle.

5. Pour redimensionner le contrle, slectionnez-le si ncessaire, puis utilisez les poignes


de redimensionnement situes autour du cadre de slection (voir Figure12.20).
eil
Cons

ce
Astu

Ds que vous avez plac un contrle sur une feuille, dfinissez sa proprit Name
dans la fentre Proprits. La proprit Name dun contrle correspond au nom
qui sera utilis dans le code pour faire rfrence ce contrle.
Pour accder la rubrique daide Visual Basic dun contrle, slectionnez ce
contrle sur la feuille et tapez sur la touche F1.

Chapitre 12

Crer des interfaces utilisateur 

343

Figure12.20
Utilisez les poignes de redimensionnement pour ajuster
la taille du contrle.

Ce chapitre traite du dveloppement de feuilles VBA. De la mme faon, 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 UserForm dveloppe dans Visual
Basic Editor. Lobjet correspondant la feuille UserForm 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 UserForm, affichez la barre doutils Visual Basic dans Excel et cliquez sur le bouton Cration.
Cliquez ensuite sur le bouton Bote outils Contrles, afin dafficher les contrles disponibles. Pour quitter le mode Cration, cliquez nouveau sur le bouton Cration.

Figure12.21
Vous pouvez aussi placer des contrles sur une feuille de calcul Excel.

344

Excel et VBA

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 vous viterez ainsi
davoir les redfinir.
Pour copier et coller un contrle:
1. Slectionnez le contrle sur la feuille, puis copiez-le afin de le placer dans le Pressepapiers. Vous pouvez pour cela utiliser le bouton Copier de la barre doutils, slectionner la commande Copier du menu dition ou du menu contextuel (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 dition 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 faisant un
clic droit sur le contrle et en choisissant la commande Proprits du menu contextuel.
Dfinissez sa proprit Name.
Figure12.22
La copie du contrle hrite
des proprits du contrle
source.

ce
Astu

ce
Astu

Pour copier-coller un contrle, vous pouvez aussi cliquer du bouton droit sur le
contrle et, tout en maintenant le bouton de la souris enfonc, le faire glisser
lendroit o vous souhaitez en placer une copie. Relchez ensuite le bouton de la
souris et, dans le menu contextuel qui saffiche, slectionnez Copier ici.
Pour dupliquer plusieurs contrles en une seule opration, slectionnez les
contrles voulus sur la feuille.

Chapitre 12

Crer des interfaces utilisateur 

345

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.

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.

Figure12.23
Pour slectionner plusieurs
contrles sur une feuille, utilisez les touches Maj et Ctrl.

Info

Lorsque vous slectionnez plusieurs contrles, les poignes de slection de lun


deux apparaissent en blanc (celles des autres contrles sont noires). Il sagit
du contrle actif. Cette notion est particulirement utile pour mettre en forme
vos feuilles. Vous pouvez ainsi appliquer certaines proprits du contrle actif
telles que sa taille ou sa position aux autres contrles slectionns.

Supprimer des contrles


Pour effacer des contrles dune feuille, slectionnez les contrles voulus 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 contrles supprims dans le Presse-papiers. Activez ensuite la feuille devant recevoir les contrles et tapez
Ctrl+V afin de coller ces derniers dans la feuille active.

346

Excel et VBA

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 parfaite des contrles. Un certain nombre doutils
sont votre disposition pour peaufiner la mise en forme des contrles sur une feuille. Vous
obtiendrez ainsi des contrles parfaitement aligns et de dimensions proportionnes. La
mise en forme des contrles sur la feuille peut se faire laide de la grille, des commandes
du menu Format ou de la barre doutils UserForm (voir Figure12.24).
Figure12.24
La barre doutils UserForm.

La grille
La grille dsigne les points quadrillant une feuille dans une fentre UserForm. 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 activ, langle suprieur gauche 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 acceptent alors autant de positions quil existe de points de quadrillage sur la feuille. Pour activer
lalignement des contrles sur la grille:
1. Slectionnez la commande Options du menu Outils de Visual Basic Editor, et activez la page Gnral de la bote de dialogue qui saffiche. La zone Paramtres de
grille de la feuille (voir Figure12.25) permet de dfinir les options dutilisation de
la grille.
2. Cochez les cases Afficher la grille afin de faire apparatre les points de quadrillage sur
la feuille, et dterminez la prcision de la grille en spcifiant des valeurs de largeur et
de hauteur.
3. Cochez la case Aligner les contrles sur la grille, puis cliquez sur OK.

Info

La commande Ajuster la grille du menu Format ajuste la hauteur et la largeur


des contrles slectionns aux lignes de grille les plus proches.

Chapitre 12

Crer des interfaces utilisateur 

347

Figure12.25
Paramtrez lutilisation
de la grille.

Figure12.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 faire du contrle qui servira
de rfrence pour lalignement le contrle actif (celui dont les poignes de slection
apparaissent en blanc).

ce
Astu

Pour modifier le contrle actif dune slection, maintenez la touche Ctrl enfonce et cliquez deux reprises sur le contrle que vous souhaitez rendre actif. Le
premier clic dslectionnera le contrle, le second le slectionnera nouveau
en le rendant actif.

348

Excel et VBA

2. Choisissez la commande Aligner du menu Format ou cliquez sur la flche de droulement


du bouton Aligner de la barre doutils UserForm (voir Figure12.27).
3. Choisissez lalignement voulu parmi les sept types dalignement proposs.

Les contrles slectionns salignent sur le contrle actif.

Figure12.27
Slectionnez un type
dalignement.

Info

Un mauvais choix peut entraner la juxtaposition des contrles. Cliquez alors


sur le bouton Annuler de la barre doutils Standard ou tapez le raccourci Ctrl+Z
pour ramener les contrles leur position prcdente.

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

Chapitre 12

Crer des interfaces utilisateur 

349

2. Choisissez la commande Uniformiser la taille du menu Format ou cliquez sur la flche


de droulement du bouton galiser 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.

Figure12.29
Une mme largeur et une mme
hauteur ont t affectes aux
contrles slectionns.

ce
Astu

Vous pouvez adapter la taille dun contrle son contenu. Slectionnez pour
cela le contrle et choisissez la commande Ajuster la taille du menu Format.

Uniformiser lespace entre les contrles


Pour uniformiser lespace sparant les contrles dune feuille:
1. Slectionnez les contrles dont vous 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 vertical du menu
Format, en fonction des positions rciproques des contrles.
3. Choisissez lune des commandes du menu qui saffiche:

galiser. Lespacement entre les contrles slectionns sera le mme.

Augmenter. Lespacement entre les contrles slectionns augmentera dune


unit de grille, soit dune distance gale 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.

350

Excel et VBA

Figure12.30
Un mme espacement
vertical a t appliqu aux
contrles slectionns.

ce
Astu

Vous pouvez adapter la taille dun contrle son contenu. Slectionnez pour
cela le contrle et choisissez la commande Ajuster la taille du menu Format.

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 Format ou cliquez sur la flche
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.

Les contrles slectionns sont centrs sur la feuille.

Figure12.31
Les contrles ont t centrs
horizontalement sur la
feuille.

Chapitre 12

Crer des interfaces utilisateur 

351

Rorganiser les boutons


Pour placer les boutons dans la partie infrieure ou droite dune feuille:
1. Slectionnez les contrles CommandButton dplacer.
2. Choisissez la commande Rorganiser les boutons du menu Format.
3. Choisissez lune des options de rorganisation:

En bas. Les boutons seront placs en bas et gauche de la feuille et spars par
un mme espace.

droite. Les boutons seront placs droite et en haut de la feuille et spars par
un mme espace.

Figure12.32
Les boutons ont t placs
droite de la feuille.

Info

Si des contrles autres que des boutons de commande sont slectionns, ils ne
seront pas affects par la commande Rorganiser les boutons. Si des contrles
occupent dj lespace vers lequel sont envoys les boutons, ces derniers les
recouvriront.

Grouper ou sparer des contrles


Lorsque des contrles sont groups, un clic sur lun des contrles du groupe slectionne le
groupe entier, un cadre permet de distinguer les contrles du groupe (voir Figure12.33).
Un second clic sur lun des contrles du groupe slectionne ce contrle. Vous pouvez ainsi
agir sur ce contrle sans affecter les autres contrles du groupe.
Grouper les contrles prsente plusieurs avantages:

Les contrles peuvent tre slectionns en un seul clic. Vous pouvez ainsi les dplacer
simultanment en dplaant le cadre de slection du groupe.

352

Excel et VBA

Vous pouvez redimensionner les contrles simultanment, en redimensionnant simplement le cadre de slection du groupe. Les modifications de taille du cadre seront
appliques lidentique chacun des contrles du groupe.

Lorsquun groupe de contrles est slectionn, la fentre Proprits affiche les proprits communes aux contrles du groupe. La redfinition de la valeur dune proprit
affecte alors tous les contrles.

Figure12.33
Un clic sur un contrle
appartenant un groupe
slectionne le groupe entier.

Info

On ne peut slectionner quun contrle la fois lintrieur dun groupe. Vous


ne pouvez donc pas accder lessentiel des commandes de mise en forme des
contrles. Dterminez donc la mise en forme des contrles avant de les grouper.

Pour grouper des contrles:


1. Slectionnez les contrles que vous souhaitez grouper.
2. Choisissez la commande Grouper du menu Format ou cliquez sur le bouton Grouper
de la barre doutils UserForm.
Pour dissocier les contrles dun groupe:
1. Slectionnez le groupe.
2. Choisissez la commande Sparer du menu Format ou cliquez sur le bouton Sparer de
la barre doutils UserForm.

Personnaliser la bote outils


Les contrles prsents prcdemment sont les contrles standard, disponibles par dfaut
dans la bote outils. Vous pouvez cependant personnaliser la bote outils, en y ajoutant
des contrles, que vous placerez au ct des contrles dj disponibles ou sur une nouvelle
page, ou en en supprimant.

Chapitre 12

Crer des interfaces utilisateur 

353

Ajouter/supprimer un contrle
Dans cet exemple, nous ajouterons le contrle Calendar aux contrles de la bote outils.
Ce contrle ActiveX ntant plus livr avec Office 2010, vous commencerez par linstaller
sur votre machine. Procdez comme suit :
1. Quittez les applications Office. Tlchargez larchive du contrle ladresse suivante :
www.edito.biz/docs/vba/MSCAL.OCX.
2. Placez ce fichier dans le dossier appropri, savoir C:/Windows/System32 pour
Windows XP, Windows Vista et Windowss7.
3. Enregistrez maintenant le contrle activeX dans la base de registres : lancez la
commande Excuter (Programmes > Accessoires > Excuter), puis saisissez le texte
suivant regsvr32 mscal.ocx. Cliquez sur le bouton OK.
4. Relancez Excel.
Pour ajouter le contrle Calendrier la bote outils, procdez ainsi:
1. Affichez la bote outils. Cliquez du bouton droit sur celle-ci et slectionnez la
commande Contrles supplmentaires du menu contextuel ou choisissez la commande
Contrles supplmentaires du menu Outils.

La bote de dialogue Contrles supplmentaires saffiche (voir Figure12.34). La zone


de liste Contrles disponibles recense les contrles pouvant tre exploits et placs sur
la bote outils.

Figure12.34
La bote de dialogue
Contrles supplmentaires.

2. Pour affecter un nouveau contrle la bote outils, cochez sa case. Pour supprimer
un contrle disponible sur la bote outils, dcochez sa case. Ici, cochez la case intitule Contrle Calendrier11.0.

354

Excel et VBA

3. Cliquez sur OK. Le contrle Calendar est maintenant disponible dans la bote outils
(voir Figure12.35).
Figure12.35
Le contrle Calendar a t
ajout la bote outils.

4. Pour personnaliser le contrle dans la bote outils, cliquez du bouton droit sur celui-ci
et slectionnez Personnaliser contrle. La bote de dialogue Personnaliser un contrle
saffiche (voir Figure12.36).
Figure12.36
La bote de dialogue Personnaliser un contrle.

5. Vous pouvez:

Modifier le texte de linfo-bulle du contrle en tapant le texte voulu dans la zone


de texte Texte de linfo-bulle.

Modifier limage reprsentant le contrle sur la bote outils, en chargeant un


fichier image (bouton Charger une image) ou en dessinant vous-mme limage qui
sera affiche dans la bote outils (diter une image). Cette dernire possibilit

Chapitre 12

Crer des interfaces utilisateur 

355

ouvrira la fentre diter une image. Lutilisation de lditeur dimage est prsente au Chapitre11.

ce
Astu

Pour supprimer des contrles partir de la bote de dialogues Contrles


supplmentaires, cochez la case Afficher lments slectionns seulement. Seuls
les contrles disponibles sur la bote outils seront affichs dans la zone de
liste Contrles disponibles. Dcochez alors les contrles que vous souhaitez
supprimer.
Vous pouvez aussi supprimer un contrle partir de la bote outils. Cliquez du
bouton droit sur le contrle supprimer et slectionnez la commande Supprimer
contrle.

La Figure12.37 prsente une feuille sur laquelle un contrle Calendar a t plac.


Figure12.37
Le contrle Calendar permet
lutilisateur de slectionner
une date sur un calendrier.

Ajouter/supprimer une page


Si vous exploitez de nombreux contrles, il sera judicieux de regrouper les contrles par
catgories que vous placerez sur des pages distinctes de la bote outils.
Pour ajouter une page la bote outils:

356

Excel et VBA

1. Cliquez sur longlet Contrles de la bote outils et slectionnez la commande


Nouvelle page. Une nouvelle page apparat sur la bote outils (voir Figure12.38). Par
dfaut, le libell de son onglet est Nouvelle page, et loutil Slection y est disponible.
Figure12.38
Une nouvelle page ajoute
la bote outils.

Info

Loutil Slection est toujours prsent sur les pages de la bote outils et ne peut
tre supprim.

2. Cliquez du bouton droit sur longlet de la nouvelle page et choisissez la commande


Renommer. La bote de dialogue Renommer saffiche (voir Figure12.39). Indiquez le
nom de la page qui apparatra sur son onglet et, ventuellement, le texte dinfo-bulle.
Cliquez sur OK.
Figure12.39
La bote de dialogue
Renommer.

3. Pour ajouter ou supprimer des contrles sur la nouvelle page, activez-la, puis procdez
comme indiqu dans la section prcdente.
4. Si vous souhaitez modifier lemplacement de longlet de la page sur la bote outils,
cliquez sur celui-ci et slectionnez la commande Dplacer. Utilisez les boutons Vers

Chapitre 12

Crer des interfaces utilisateur 

357

le haut et Vers le bas de la bote de dialogue Ordre des pages (voir Figure12.40) pour
modifier lordre des onglets sur la bote outils.
Figure12.40
Lemplacement
des onglets de la bote
outils se dtermine dans
cette bote de dialogue.

Pour supprimer une page, cliquez du bouton droit sur son onglet et choisissez la commande
Supprimer la page.

Afficher/masquer une feuille


Une feuille ne peut sexcuter delle-mme. Son affichage doit tre command partir
dune procdure dun module de code du projet. On utilise pour cela la mthode Show, selon
la syntaxe suivante:
NomFeuille.Show

o NomFeuille est le nom de la feuille afficher, tel quil apparat dans lExplorateur de
projet. La procdure suivante affiche une bote de dialogue invitant lutilisateur indiquer
sil souhaite que linterface soit affiche. Si celui-ci rpond positivement, la feuille nomme
MaFeuille saffiche. Dans le cas contraire, le programme se poursuit avec la procdure
SuiteDuProgramme.
Sub AffichageFeuille()
Dim RepAffichage As Integer
RepAffichage = MsgBox("Souhaitez-vous afficher le formulaire", _
vbYesNo+vbQuestion, "Affichage de feuille")
If RepAffichage = vbYes Then
MaFeuille.Show
Else
Call SuiteDuProgramme
End If
End Sub

358

Excel et VBA

Figure12.41
Si lutilisateur clique sur
Oui, la mthode Show sera
applique la feuille afin de
lafficher.

Pour masquer une feuille, on lui applique la mthode Hide, selon la syntaxe suivante:
NomFeuille.Hide

Cette instruction est gnralement place dans la procdure vnementielle affecte au


bouton de validation de la feuille. Les valeurs entres par lutilisateur dans la feuille sont
alors passes une autre procdure qui les exploitera, et la feuille est masque. Dans
lexemple suivant, lorsque lutilisateur clique sur le bouton cmdOK de la feuille nomme
MaFeuille, celle-ci est masque, et la procdure SuiteDuProgramme est appele.
Private Sub cmdOK_Click()
MaFeuille.Hide
Call SuiteDuProgramme(arg1, arg2, ..., argN)
End Sub

Ici, arg1, arg2, , argn reprsentent les arguments passs la procdure SuiteDuProgramme.

ce
Astu

Info

La proprit Me renvoie la feuille active. Elle peut tre utilise dans nimporte
quelle procdure vnementielle attache une feuille pour manipuler celle-ci.
Si la feuille que vous souhaitez masquer est la feuille active (lobjet conteneur du
contrle ayant reu lvnement), utilisez le mot cl Me la place de la proprit
Name de la feuille (Me.Hide).
Laffectation de procdures vnementielles aux contrles est traite aux
Chapitres13 et 14.

13
Exploiter les proprits
des contrles ActiveX
Au sommaire de ce chapitre

Proprit Name
Apparence
Comportement
Dfilement
Divers
Emplacement
Image
Police

360

Excel et VBA

Au cours des chapitres prcdents, vous avez dcouvert les diffrents contrles disponibles
et les outils destins leur mise en forme. Vous savez donc crer des formulaires lapparence professionnelle, mais ce ne sont pour linstant que des feuilles sans vie. Ce chapitre et
le suivant vous montrent comment tirer parti des feuilles VBA et des contrles ActiveX en
exploitant les proprits des contrles et en associant du code aux vnements les affectant.
En tant quobjet, les feuilles et les contrles possdent un certain nombre de proprits qui
en dterminent lapparence et le comportement. Il est fortement recommand de dterminer la valeur de la proprit Name des contrles au fur et mesure que vous les placez sur
la feuille.
Pour dterminer les proprits dune feuille ou dun contrle, slectionnez lobjet en question et tapez sur la touche F4 afin den ouvrir la fentre Proprits, ou cliquez du bouton
droit sur le contrle et slectionnez la commande Proprits du menu contextuel. Affectez
ensuite les valeurs voulues aux proprits de lobjet.
Pour un rappel sur lutilisation de la fentre Proprits, reportez-vous la section "La
fentre Proprits" du Chapitre4.

ce
Astu

Pour modifier simultanment la valeur dune proprit de plusieurs contrles,


slectionnez ces contrles sur la feuille. La fentre Proprits affiche alors les
proprits communes aux contrles slectionns. Les proprits dfinies le
seront pour tous les contrles slectionns.

Il existe videmment des proprits spcifiques pour chaque contrle et dautres communes
presque tous les contrles. Les sections qui suivent vous prsentent les proprits essentielles, classes par catgories.
Dans la ralit, vous nutiliserez que trs peu de ces proprits, car, pour nombre dentre
elles, la valeur par dfaut au moment o le bouton est plac sur la feuille est satisfaisante.
Les proprits que vous devez connatre et que vous serez amen utiliser prsentent une
icne en marge, identique celle qui se trouve en marge de ce paragraphe. La section
"Exploiter les proprits" prsente ensuite les contrles un un et en dcrit lutilisation et
les spcificits.

ce
Astu

Pour afficher la rubrique daide dune proprit, slectionnez le nom de la proprit dans la fentre Proprits et tapez sur la touche F1. Vous pouvez aussi
slectionner le contrle sur la feuille, puis tapez sur F1 pour ouvrir la rubrique
daide du contrle. Le lien Proprits situ dans le haut de la fentre ouvre
une bote de dialogue Rubriques trouves, listant les proprits du contrle
(voir Figure13.1). Slectionnez la proprit dont vous souhaitez consulter la
rubrique daide et cliquez sur Afficher.

Chapitre 13

Exploiter les proprits des contrles ActiveX

361

Figure13.1
Accdez en un clin dil
aux rubriques daide des
proprits dun contrle.

Proprit Name
La proprit Name est exploite par le programme, et reste invisible lutilisateur final.
Elle correspond au nom de lobjet et est de type String (chane de caractres). Ce nom est
utilis pour faire rfrence lobjet dans le code, par exemple pour interroger ou modifier
lune de ses proprits. Un mme nom ne peut tre utilis pour plusieurs objets dune
mme feuille.
Lorsque vous placez un contrle sur une feuille, sa proprit Name est dfinie par dfaut
en une chane compose du nom de la classe de lobjet suivi dun nombre entier. Par
exemple, lorsque vous placez un contrle OptionButton (bouton doption) sur une feuille,
sa proprit Name est dfinie OptionButton1, OptionButton2 sil existe dj un contrle
OptionButton1,etc.

eil
Cons

Affectez des noms reprsentatifs aux contrles de votre feuille. Il vous sera ainsi
facile de savoir quel contrle fait rfrence une instruction dans le code.

Linstruction If...End If suivante interroge la proprit Value dune zone de texte (le
texte saisi par lutilisateur) dont la proprit Name est dfinie txtMotDePasse. Si la zone de
texte ne contient aucune information, un message, affich laide de linstruction MsgBox,
demande lutilisateur dentrer un mot de passe.
If txtMotDePasse.Value = Then
MsgBox Vous devez indiquer un mot de passe., VBOKOnly, Mot de passe requis
End If

362

Excel et VBA

ce
Astu

Si une zone de texte est destine recevoir un mot de passe, affectez un caractre tel que lastrisque sa proprit PasswordChar, afin de masquer le mot
de passe saisi. Le caractre affect la proprit PasswordChar sera affich
la place des caractres saisis par lutilisateur. Vous devrez aussi protger votre
projet par un mot de passe, afin que lutilisateur ne puisse accder au code de la
procdure pour y lire le mot de passe. Pour protger par mot de passe un projet
VBA, cliquez du bouton droit sur le projet dans la fentre Proprits et choisissez la commande Proprits de NomProjet. Activez longlet Protection et cochez
la case Verrouiller le projet pour laffichage. Saisissez ensuite un mot de passe
dans la zone de texte approprie. La protection par mot de passe prendra effet
lors du prochain lancement dExcel.

Figure13.2
Pour faire rfrence un
contrle dans le code, utilisez
sa proprit Name.

Apparence
Alignment
Cette proprit dtermine la position dun contrle CheckBox ou OptionButton par rapport
sa lgende (proprit Caption). Elle prend pour valeur lune des constantes fmalignment:

fmalignmentright (par dfaut). Place le libell droite du contrle.


fmalignmentleft. Place le libell gauche du contrle.

Figure13.3
La lgende dun contrle
CheckBox ou RadioButton
peut tre aligne droite ou
gauche du contrle.

Chapitre 13

Exploiter les proprits des contrles ActiveX

363

BackColor
Cette proprit dtermine la couleur de fond du contrle. Elle prend pour valeur une
variable de type Long reprsentant une couleur. Lorsque vous modifiez la valeur de cette
proprit dans la fentre Proprits, une palette saffiche (voir Figure13.4). Vous pouvez
slectionner une couleur sur longlet Palette ou choisir dappliquer une couleur systme sur
longlet Systme.
Si la proprit BackStyle est dfinie sur fmBackStyleTransparent, cette proprit est sans
effet sur lapparence du contrle.
Figure13.4
Slectionnez une couleur de
fond pour le contrle dans
cette palette.

BackStyle
Cette proprit dtermine le style de fond du contrle. Elle prend pour valeur lune des
constantes fmBackStyle:

fmBackStyleOpaque (par dfaut). Dtermine un fond opaque. Les ventuels objets placs

larrire-plan de lobjet sont invisibles.


fmBackStyleTransparent. Dtermine un fond transparent. Les ventuels objets placs
larrire-plan de lobjet sont visibles.

BorderColor
Cette proprit dtermine la couleur du contour du contrle et peut prendre les mmes
valeurs que la proprit BackColor.
Si la proprit BorderStyle est dfinie sur fmBorderStyleNone, cette proprit est sans
effet sur lapparence du contrle.

364

Excel et VBA

BorderStyle
Cette proprit dtermine laffichage ou non dune bordure pour le contrle. Elle prend
pour valeur lune des constantes fmBorderStyle:

fmBorderStyleNone. Indique quaucune bordure ne saffiche pour le contrle.


fmBorderStyleSingle. Indique quune bordure safffiche.

Caption
La proprit Caption dtermine le texte descriptif dun contrle et accepte une valeur de
type String (chane de caractres). Lemplacement de ce libell varie selon le contrle. Par
exemple, le libell dun bouton de commande (CommandButton) est centr sur le bouton,
tandis que le libell dune case cocher (CheckBox) ou dun bouton doption (OptionButton)
peut tre align droite (par dfaut) ou gauche du contrle, selon la valeur de sa proprit
Alignment.
La Figure13.5 prsente deux boutons de commande dont les proprits Caption ont t
dfinies OK et Annuler.
Figure13.5
La proprit Caption sert
affecter une lgende un
contrle.

Il peut tre utile de faire varier la proprit Caption dun contrle en fonction des vnements utilisateur. Dans lexemple suivant, lorsque lutilisateur clique sur le bouton de
commande dont la proprit Name est dfinie "JoueurSuivant", la proprit Caption du
contrle MonLibell bascule entre "Joueur1" et "Joueur2".
Private Sub JoueurSuivant_Click()
Call AutreProcdure
If MonLibell.Caption = "Joueur 1" Then
MonLibell.Caption = Joueur 2
Else
MonLibell.Caption = Joueur 1
End If
End Sub
Sub AutreProcdure()
Instructions
End Sub

Chapitre 13

Exploiter les proprits des contrles ActiveX

365

La premire ligne est une instruction de procdure dvnement (traites au chapitre


suivant) qui se dclenche lorsque lutilisateur clique sur le bouton dont la proprit Name
est "JoueurSuivant". Linstruction Call appelle la procdure AutreProcdure dont les
Instructions sexcutent. La procdure appelante reprend ensuite la main. Enfin, linstruction If...End If modifie la proprit Caption du contrle MonLibell: si sa proprit
Caption est "Joueur 1", elle est redfinie "Joueur 2", et inversement.

ntion
Atte

Ne confondez pas le libell dun contrle (proprit Caption) et son nom (proprit Name). Le nom dun contrle sert faire rfrence ce contrle dans le
code du programme, et est invisible pour lutilisateur final.

ControlTipText
Cette proprit dtermine le texte de linfo-bulle qui saffiche lorsque lutilisateur place
le pointeur au-dessus du contrle sans cliquer. La proprit ControlTipText accepte une
valeur de type String (chane de caractres), et sa valeur par dfaut est une chane vide.
Nhsitez pas utiliser cette proprit pour affecter des info-bulles dcrivant brivement la
fonction des contrles dune feuille.
la Figure13.6, le pointeur a t plac au-dessus dun contrle dont la proprit Control
TipText a t dfinie afin de renseigner lutilisateur sur sa fonction.
Figure13.6
Les info-bulles permettent de
renseigner lutilisateur sur la
fonction dun contrle.

ForeColor
Cette proprit dtermine la couleur de premier plan du contrle. La couleur de premier
plan dun contrle correspond la couleur daffichage de sa proprit Caption.

366

Excel et VBA

SpecialEffect
Cette proprit dtermine lapparence du contrle sur la feuille. La valeur accepte par la
proprit SpecialEffect varie selon le contrle:

Les contrles CheckBox (case cocher), RadioButton (bouton radio) et ToggleButton


(bouton bascule) acceptent lune des constantes suivantes:

fmButtonEffectFalt;

fmButtonEffectSunken.

Les autres contrles acceptent lune des constantes suivantes:

fmSpecialEffectFlat;

fmSpecialEffectRaised;

fmSpecialEffectSunken;

fmSpecialEffectEtched.

La valeur attribue par dfaut la proprit SpecialEffect dun contrle correspond


lapparence habituelle pour ce type dobjets dans les applications Windows. Il est donc
prfrable, pour ne pas drouter lutilisateur final, de conserver les valeurs attribues par
dfaut. Pour plus dinformations sur les effets disponibles pour les contrles, consultez
laide Visual Basic (slectionnez le nom de la proprit dans la fentre Proprits et tapez
sur F1).

Style
Cette proprit dtermine la faon dont la slection seffectue dans un contrle Combo
Box. Lutilisateur peut ou non tre autoris saisir une valeur ne figurant pas dans la liste
affecte au contrle. La proprit Style accepte pour valeur lune des deux constantes
fmStyle:

fmStyleDropDownCombo (par dfaut). Lutilisateur peut slectionner une valeur dans la

fmStyleDropDownList. Lutilisateur ne peut saisir de valeur dans la zone ddition


du contrle. Les seules valeurs autorises sont celles figurant dans la liste attache au
contrle. Cest le cas des zones de listes droulantes dalignement de la bote de dialogue Cellules dExcel. Lorsque lutilisateur saisit un caractre au clavier, le premier

zone de liste droulante ou saisir manuellement une valeur de son choix. Cest, par
exemple, le cas de la zone de liste Zoom de la barre doutils Standard dExcel.

Chapitre 13

Exploiter les proprits des contrles ActiveX

367

lment de la liste commenant par ce caractre est slectionn. Si aucun lment de la


liste ne commence par le caractre saisi, la valeur du contrle reste inchange.
Utilisez un contrle ComboBox dont la proprit Style est dfinie fmStyleDropDownList,
plutt quun contrle ListBox, pour rduire lespace occup par le contrle sur la feuille.
ntion
Atte

Lorsque vous autorisez la saisie manuelle de valeurs dans la zone ddition dun
contrle ComboBox, assurez-vous que lutilisateur ne pourra y saisir une valeur
non valide, qui gnrerait une erreur ou aboutirait un mauvais fonctionnement du programme. Affectez pour cela une procdure lvnement Change du
contrle, qui sassurera de la validit de la valeur saisie (voir lexemple donn
pour le contrle TextBox, au chapitre suivant).

Value
Cette proprit dtermine la valeur dun contrle. La proprit Value accepte des valeurs
qui varient dun contrle lautre. La valeur dun contrle peut en effet correspondre un
tat (le fait quune case soit ou non coche) ou un contenu (le texte saisi dans la zone
ddition dune zone de texte), et peut donc accepter une valeur numrique ou de type
String.
Le tableau suivant prsente les valeurs acceptes par la proprit Value des contrles
standard:
Contrle

Valeur accepte par la proprit Value

CheckBox, OptionButton
ou ToggleButton

Valeur de type Boolean, indiquant ltat du contrle: True sil est


activ et False sil est dsactiv. Les contrles CheckBox (case
cocher) et OptionButton (bouton doption) sont activs lorsquils
sont cochs; un contrle ToggleButton (bouton bascule) est activ
lorsquil est en surbrillance et enfonc.
Si leur proprit TripleState est dfinie True, ces contrles acceptent un troisime tat: ni activ ni inactiv. Leur proprit Value
prend alors la valeur Null.
Une case cocher ou un bouton doption dont la proprit Value est
nulle apparat estomp et contient une marque dactivation. Lorsquun
bouton bascule est ltat Null, son libell apparat estomp.
Voir aussi la proprit TripleState.

TextBox

Valeur de type String reprsentant le texte apparaissant dans la


zone ddition du contrle.

368

Excel et VBA

Contrle

Valeur accepte par la proprit Value

ComboBox et ListBox

Valeur reprsentant llment slectionn dans la liste des lments


du contrle. La proprit BoundColumn du contrle dtermine son
type de valeur. Il peut sagir de la valeur dindex de llment
slectionn (sa position dans la liste) ou dune chane correspondant
au texte slectionn. Dans le cas dun contrle colonne multiple, il
peut sagir du texte de nimporte laquelle des colonnes. La proprit
Value ne peut tre utilise pour une zone de liste slection multiple (proprit MultiSelect). Pour plus de prcisions, reportez-vous
aux sections traitant de ces contrles, plus loin dans ce chapitre.
Voir aussi la proprit BoundColumn.

ScrollBar et SpinButton

Valeur de type Integer comprise entre les valeurs des proprits Min
et Max du contrle.
La proprit Value dun contrle ScrollBar indique la position du
curseur sur la barre de dfilement. Elle vaut Min lorsque le curseur
est tout en haut (barre de dfilement horizontale) ou tout gauche
(barre de dfilement verticale) de la barre, et Max lorsque le curseur
est tout en bas ou droite du contrle.
La proprit Value dun contrle SpinButton reprsente la valeur
slectionne par lutilisateur par un clic sur les boutons du contrle.
Lorsque lutilisateur clique sur la flche de dfilement Haut ou
Gauche du contrle, sa proprit Value se rapproche de la valeur
de Min. Lorsquil clique sur la flche de dfilement Bas ou Droite, la
proprit Value se rapproche de la valeur de Max.
Voir aussi les proprits Min et Max.

MultiPage

Valeur de type Integer reprsentant la page slectionne. La premire page dun contrle MultiPage correspond la valeur 0. La
valeur de la proprit Value de ce type de contrle doit donc tre
comprise entre0 et le nombre de pages moins1.

La procdure suivante se dclenche lorsque lutilisateur clique sur le bouton de commande


btnOK. Elle teste la valeur de la proprit Value du contrle txtMotdePasse, une zone de
texte dans laquelle lutilisateur est invit saisir son mot de passe. Si aucun mot de passe
na t saisi (la proprit Value du contrle est gale une chane vide), la bote de dialogue
de la Figure13.7 saffiche.
If txtMotDePasse.Value = Then
MsgBox Vous devez indiquer un mot de passe., VBOKOnly, Mot de passe requis
Else
Instructions
End If

Chapitre 13

Exploiter les proprits des contrles ActiveX

369

Figure13.7
Value est lune des proprits
les plus utilises.

Visible
Cette proprit dtermine la visibilit dun contrle pour lutilisateur. Un contrle peut
ainsi tre rendu invisible lutilisateur tout moment de lexcution du programme. La
proprit Visible accepte une valeur de type Boolean:

True (par dfaut). Indique que le contrle est visible.

False. Indique que le contrle est masqu et napparat pas sur la feuille.

Info

La proprit Value dun contrle ninflue pas sur son apparence durant la phase
de conception. Le contrle est toujours visible dans Visual Basic Editor.

La proprit Visible permet dlaborer des feuilles dont lapparence et les fonctionnalits
varieront selon le contexte. Vous pouvez ainsi nafficher les contrles dune feuille que sils
doivent tre renseigns par lutilisateur. La Figure13.8 prsente la feuille Nouveau salari,
en phase de conception dans Visual Basic Editor.
Figure13.8
La feuille Nouveau salari en
phase de conception.

370

Excel et VBA

Outre le sexe et la situation, lutilisateur est invit entrer un prnom et un nom pour le
nouveau salari. Une zone de texte et un libell Nom de jeune fille permettent aussi dindiquer
un ventuel nom de jeune fille.
Les proprits des contrles OptionButton (bouton doption), CheckBox (case cocher) et
Label (intitul) de la feuille ont t dfinies ainsi:
Proprit Name

Proprit Caption

Contrles OptionButton
optMasculin

Masculin

OptFminin

Fminin

optMari

Mari(e)

optClibataire

Clibataire

optMaritale

Vie maritale

Contrles Label
lbPrnom

Prnom(s):

lbNom

Nom:

lbNomJF

Nom de jeune fille

Contrles TextBox1
txtPrnom
txtNom
txtNomJF

1. Les contrles TextBox nont pas de proprit Caption.

Il est videmment inutile dafficher le libell Nom de jeune fille et la zone de texte correspondante si les boutons doption Fminin et Mari(e) ne sont pas tous deux cochs. La
proprit Visible de ces contrles a donc t dfinie False afin quils soient masqus
laffichage de la feuille la proprit Value du contrle optMasculin tant dfinie True
afin que ce bouton soit coch par dfaut. Le code suivant affiche les contrles txtNomJF et
lbJF lorsque cela est ncessaire et les masque, dans le cas contraire.
Private Sub optFminin_Click()
If optMari.Value = True Then
txtNomJF.Visible = True
lbJF.Visible = True
Else

Chapitre 13

Exploiter les proprits des contrles ActiveX

371

txtNomJF.Visible = False
lbJF.Visible = False
End If
End Sub
Private Sub optMari_Click()
If optFminin.Value = True Then
txtNomJF.Visible = True
lbJF.Visible = True
Else
txtNomJF.Visible = False
lbJF.Visible = False
End If
End Sub
Private Sub optMasculin_Click()
txtNomJF.Visible = False
lbJF.Visible = False
End Sub
Private Sub optClibataire_Click()
txtNomJF.Visible = False
lbJF.Visible = False
End Sub
Private Sub optMaritale_Click()
txtNomJF.Visible = False
lbJF.Visible = False
End Sub

La procdure optFminin_Click se dclenche lorsque lutilisateur clique sur le contrle


nomm optFminin (le bouton doption libell Fminin). Si la proprit Value du contrle
optMari est dfinie True le bouton Mari tant activ , la proprit Visible des
contrles txtNomJF et lbJF est dfinie True, et les contrles apparaissent sur la feuille.
La procdure optMari_Click se dclenche lorsque lutilisateur clique sur le contrle
nomm optMari, et opre de faon semblable en interrogeant la proprit Value du
contrle optFminin. Si la valeur renvoye est True, alors la proprit Visible des contrles
txtNomJF et lbJF est dfinie True.
Les trois procdures suivantes se dclenchent lorsque lutilisateur clique sur les contrles
optMasculin, optClibataire et optMaritale. La proprit Visible des contrles
txtNomJF et lbJF est alors dfinie False, et les contrles apparaissent sur la feuille.

372

Excel et VBA

Figure13.9
La proprit Visible permet
de dterminer les conditions
de visibilit des contrles
pour lutilisateur.

Comportement
AutoSize
Cette proprit spcifie si un contrle se redimensionne automatiquement pour afficher
son contenu. Le contenu dun contrle dsigne la valeur de sa proprit Caption ou, dans
le cas dun contrle TextBox ou ComboBox, le texte qui apparat dans sa zone ddition. La
proprit AutoSize accepte une valeur de type Boolean:

True. Le contrle se redimensionne automatiquement.


False (par dfaut). La taille du contrle est fixe.

Info

Lorsque vous dfinissez la proprit AutoSize dun contrle durant la phase de


conception, il se redimensionne automatiquement, en fonction de son contenu.
Vous pouvez si vous le souhaitez dfinir une taille suprieure pour le contrle.
En phase dexcution, le contrle conservera la taille ainsi dfinie, tant que
celle-ci suffira en afficher tout le contenu.

La Figure13.10 prsente deux contrles TextBox dont les proprits AutoSize sont respectivement dfinies sur True et False. Lun sest redimensionn automatiquement pour faire
apparatre le texte saisi par lutilisateur, tandis que le texte saisi dans le contrle dont la
taille est fixe est rogn.
Figure13.10
La proprit AutoSize
permet dviter que le texte
ne soit rogn.

Chapitre 13

eil
Cons

Exploiter les proprits des contrles ActiveX

373

Ne dfinissez la proprit AutoSize dun contrle TextBox sur True, que si le


nombre de caractres autoriss dans ce contrle (proprit MaxLenght) est limit.
Dans le cas contraire, lutilisateur peut saisir un nombre illimit de caractres,
et le contrle peut tre dimensionn jusqu atteindre les limites de la feuille.

AutoTab
Disponible pour les contrles TextBox et ComboBox dont la proprit MaxLenght a t dfinie, la proprit AutoTab spcifie si une tabulation automatique se dclenche lorsque le
nombre de caractres maximal autoris dans le contrle est atteint. Si tel est le cas, le focus
est pass au contrle suivant dans lordre de tabulation.

Info

ition
Dfin

Le contrle qui a le focus est le contrle rceptif aux vnements utilisateur


(souris ou clavier). Un seul contrle peut avoir le focus un moment donn, et
le type dvnements utilisateur reconnus varie dun contrle lautre.
Par exemple, taper sur la touche Entre alors quun bouton de commande a
le focus revient cliquer sur ce bouton. La frappe de la touche Entre naura
aucun effet si le focus correspond une case cocher, alors que chaque frappe
de la touche Tab le fera passer dun tat lautre.

Lordre de tabulation dsigne lordre dans lequel le focus est transmis aux diffrents contrles dune feuille et est dtermin par la proprit TabIndex des
contrles.

La proprit AutoTab accepte une valeur de type Boolean:

True. Le focus est pass au contrle suivant dans lordre de tabulation lorsque le nombre
de caractres maximal est atteint.

False (par dfaut). Lorsque le nombre de caractres maximal est atteint, les vnements

clavier demeurent sans effet, mais le contrle TextBox garde le focus.

La proprit AutoTab sera utilise judicieusement avec une zone de texte devant toujours
recevoir un nombre de caractres fixe, comme un mot de passe ou un code produit. Le
contrle suivant sera ainsi slectionn automatiquement sans que lutilisateur ait quitter
le clavier.

374

Excel et VBA

AutoWordSelect
Cette proprit dtermine la faon dont le texte est slectionn dans la zone ddition dun
contrle TextBox, ou ComboBox. Lunit de slection peut tre le mot ou le caractre. La
proprit AutoWordSelect accepte une valeur de type Boolean:

True (par dfaut). Lorsque lutilisateur tend la slection au-del dun mot, le mot entier

False. La slection se fait caractre par caractre, quelle que soit son tendue.

est slectionn et la slection se fait ensuite mot par mot.

Cancel
Cette proprit spcifie si un contrle CommandButton est ou non le bouton Annuler de la
feuille. Lorsquun bouton de commande est le bouton Annuler de la feuille, la frappe de la
touche chap dclenche lvnement Click du bouton, quil ait ou non le focus. Outre cet
accs, le bouton peut toujours tre activ par les mthodes classiques touche de raccourci,
clic de souris ou frappe de la touche Entre lorsque le contrle a le focus. La proprit
Cancel accepte une valeur de type Boolean:

True. Le bouton de commande est le bouton Annuler de la feuille.


False (par dfaut). Le bouton de commande nest pas le bouton Annuler.

Dans le cas dune procdure complexe, ou ncessitant un grand nombre doprations de la


part de lutilisateur, protgez lactivation du bouton dannulation en affichant une bote de
dialogue demandant la confirmation de labandon. La procdure suivante affiche la bote
de dialogue prsente la Figure13.11 lorsque lutilisateur active le bouton de commande
cmdAnnuler.
Private Sub cmdAnnuler_Click()
Dim Confirm As Single
Confirm = MsgBox(Si vous annulez la procdure, vous perdrez toutes les donnes
entres. _
& Etes-vous sr de vouloir annuler?, vbYesNo+vbCritical, Abandon de la
procdure)
If Confirm = vbYes Then
Exit Sub
End If
End Sub

Chapitre 13

Exploiter les proprits des contrles ActiveX

375

Figure13.11
Protgez lutilisateur
dun abandon involontaire
de la procdure par
laffichage dun message
de confirmation.

Info

Sur une mme feuille, un seul bouton de commande peut tre le bouton Annuler.
Lorsque vous dfinissez la proprit Cancel dun bouton de commande sur True,
cette proprit est automatiquement dfinie False pour tous les autres boutons
de commande de la feuille.

Default
Cette proprit spcifie si un contrle CommandButton est ou non le bouton par dfaut de
la feuille. Lorsquun bouton de commande est le bouton par dfaut, la frappe de la touche
Entre dclenche lvnement Click du bouton, condition quaucun autre bouton de
commande de la feuille nait le focus. Outre cet accs, le bouton peut toujours tre activ par
les mthodes classiques touche de raccourci, clic de souris ou frappe de la touche Entre
lorsque le contrle a le focus. La proprit Default accepte une valeur de type Boolean:

True. Le bouton de commande est le bouton par dfaut.

False (par dfaut). Le bouton de commande nest pas le bouton par dfaut.

Info

Sur une mme feuille, un seul bouton de commande peut tre le bouton par
dfaut. Lorsque vous dfinissez la proprit Default dun bouton de commande
sur True, cette proprit est automatiquement dfinie False pour tous les
autres boutons de commande de la feuille.

Enabled
Cette proprit dtermine laccessibilit dun contrle. Un contrle est dit accessible
lorsquil peut avoir le focus, et inaccessible, dans le cas contraire. Lorsquun contrle est
inaccessible, lutilisateur ne peut le slectionner ni laide de la souris ni laide de la
touche Tab et il apparat estomp. La proprit Enabled accepte une valeur de type Boolean:

True(par dfaut). Le contrle est accessible.


False. Le contrle nest pas accessible.

376

Excel et VBA

Utilisez la proprit Enabled pour dterminer laccessibilit dun contrle en fonction du


contexte. Dans lexemple suivant, nous avons ajout un contrle CheckBox (case cocher)
sur la feuille Nouveau salari, afin dindiquer si le nouveau salari est dgag ou non des
obligations militaires sa proprit Name a t dfinie chkMilitaire. Il est videmment
inutile que lutilisateur puisse accder ce contrle si le nouveau salari est une femme.
Nous avons ajout deux instructions (en gras, dans le listing) afin de dsactiver laccs au
contrle lorsque le nouveau salari est une femme et de lactiver sil sagit dun homme.
Private Sub optFminin_Click()
If optMari.Value = True Then
txtNomJF.Visible = True
lbJF.Visible = True
Else
txtNomJF.Visible = False
lbJF.Visible = False
End If
chkMilitaire.Enabled = False
End Sub
Private Sub optMari_Click()
If optFminin.Value = True Then
txtNomJF.Visible = True
lbJF.Visible = True
Else
txtNomJF.Visible = False
lbJF.Visible = False
End If
End Sub
Private Sub optMasculin_Click()
txtNomJF.Visible = False
lbJF.Visible = False
chkMilitaire.Enabled = True
End Sub
Private Sub optClibataire_Click()
txtNomJF.Visible = False
lbJF.Visible = False
End Sub
Private Sub optMaritale_Click()
txtNomJF.Visible = False
lbJF.Visible = False
End Sub

Chapitre 13

Info

Exploiter les proprits des contrles ActiveX

377

Notez quun contrle peut tre accessible et non modifiable. Pour plus de prcisions, voyez la proprit Locked.

Figure13.12
La proprit Enabled permet
de dterminer laccessibilit
dun contrle en fonction du
contexte.

EnterKeyBehavior
Cette proprit dtermine le comportement dun contrle CheckBox lorsque lutilisateur
appuie sur la touche Entre. La proprit EnterKeyBehavior accepte une valeur de type
Boolean:

True. Une pression sur la touche Entre cre une nouvelle ligne.
False (par dfaut). Une pression sur la touche Entre passe le focus au contrle suivant
dans lordre de tabulation.

Info

Si la proprit MultiLine dun contrle CheckBox est dfinie sur False, le


contrle nautorise quune ligne, et une pression sur la touche Entre entranera toujours le passage du focus au contrle suivant dans lordre de tabulation.

HideSelection
Cette proprit dtermine si la slection dans un contrle TextBox ou ComboBox demeure ou
non visible lorsque le contrle na pas le focus. La proprit HideSelection accepte une
valeur de type Boolean:

True (par dfaut). La slection nest visible que lorsque le contrle a le focus.
False. La slection demeure visible, que le contrle ait le focus ou non.

378

Excel et VBA

Maintenir la slection visible dans un contrle TextBox ou ComboBox lorsque celui-ci na


pas le focus est droutant pour lutilisateur, car cette proprit est gnralement spcifique
du contrle ayant le focus.

Locked
Cette proprit dtermine si un contrle peut ou non tre modifi ou activ par lutilisateur.
La proprit Locked accepte une valeur de type Boolean:

True. Le contrle peut tre modifi.


False (par dfaut). Le contrle ne peut pas tre modifi.

eil
Cons

Utilisez la proprit Locked conjointement avec la proprit Enabled afin, par


exemple, de permettre lutilisateur de copier le texte dune zone de texte sans
lautoriser en modifier le contenu.

La proprit Locked doit tre dfinie sur True pour un contrle ayant une fonction de consultation; par exemple, un contrle TextBox affichant le texte slectionn dans le document ou
le rsultat dun calcul.

Info

Lorsque la proprit Locked dun contrle est dfinie True, le contenu de ce


contrle ne peut tre modifi directement sur la feuille durant la phase Conception. Si vous souhaitez modifier sa proprit Caption ou Value, vous devez le
faire dans la fentre Proprits.

MaxLenght
Cette proprit spcifie le nombre maximal de caractres que lutilisateur est autoris
saisir dans un contrle TextBox ou ComboBox. La proprit MaxLenght accepte une valeur
de type Integer, correspondant au nombre de caractres autoriss. Par dfaut, la proprit
MaxLenght est dfinie sur0, lutilisateur tant alors autoris entrer un nombre de caractres indtermin.
Lorsque le nombre de caractres maximal est atteint, les frappes de clavier restent sans
effet. Vous pouvez aussi choisir que le focus soit pass au contrle suivant dans lordre de
tabulation en dfinissant la proprit AutoTab sur True.

Chapitre 13

eil
Cons

Exploiter les proprits des contrles ActiveX

379

Affectez une valeur MaxLenght aux contrles TextBox destins recevoir un


nombre de caractres constant (saisie dun mot de passe ou dun code produit,
par exemple), ou lorsque la limitation du nombre de caractres est une ncessit
du programme.

Voir aussi AutoTab.

MultiLine
Cette proprit dtermine si le texte saisi dans un contrle TextBox saffiche sur la ligne
suivante lorsquil arrive en bout de ligne. Si tel est le cas, le texte saffiche sur la ligne suivante
tant que les dimensions du contrle le permettent. La proprit MultiLine accepte une
valeur de type Boolean:

True (par dfaut). Le texte saffiche sur plusieurs lignes lorsque cela est ncessaire.
False. Le texte saffiche sur une seule ligne.

SelectionMargin
Cette proprit dtermine si lutilisateur peut ou non slectionner une ligne de texte dans
un contrle TextBox ou ComboBox en plaant le curseur gauche de cette ligne. Si tel est
le cas, le curseur se transforme en flche oriente vers le haut et droite lorsquil est
plac gauche de la ligne slectionner (voir Figure13.13). La proprit SelectionMargin
accepte une valeur de type Boolean:

True (par dfaut). Ce type de slection est possible.


False. Ce type de slection est impossible.

Figure13.13
Le curseur prend la forme
dune flche indiquant quun
clic entranera la slection de
la ligne entire.

380

Excel et VBA

Style
Cette proprit dtermine si un contrle ComboBox autorise ou non la saisie dune valeur ne
figurant pas dans les options de la liste droulante qui lui est attache. La proprit Style
accepte pour valeur une constante fmStyle:

fmStyleDropDownCombo (par dfaut). Le contrle se comporte comme une zone de texte.

fmStyleDropDownList. Le contrle se comporte comme une zone de liste. Lutilisateur


ne peut slectionner quune des options de la liste. Il est impossible de saisir une valeur
diffrente dans la zone ddition du contrle. Si lutilisateur saisit une lettre au clavier
alors que le contrle a le focus, loption de la liste la plus proche de la lettre saisie est
slectionne.

Lutilisateur peut saisir une valeur de son choix dans la zone ddition ou slectionner
lune des options de la liste droulante. Si les premires lettres saisies sont rapproches
de lune des options de la liste, le complment automatique est propos. Lutilisateur
peut alors accepter le complment propos ou saisir une valeur diffrente.

Info

La faon dont le rapprochement est effectu entre la valeur saisie par lutilisateur dans la zone ddition et les options de la liste est dtermine par les
proprits MatchEntry et MatchRequired du contrle.

TabKeyBehavior
Cette proprit dtermine si lutilisateur peut ou non saisir une tabulation dans la zone
ddition dun contrle TextBox. La proprit TabKeyBehavior accepte une valeur de type
Boolean:

True. Lutilisateur peut saisir une tabulation dans la zone ddition. La touche Tab

ne peutdonc pas tre utilise pour passer le focus au contrle suivant dans lordre de
tabulation.
False (par dfaut). La touche Tab entrane le passage du focus au contrle suivant dans

lordre de tabulation.

eil
Cons

Ne dfinissez cette proprit sur True que si lexploitation des donnes du


contrle par le programme prvoit la gestion des tabulations.

Chapitre 13

Exploiter les proprits des contrles ActiveX

381

TextAlign
Cette proprit dtermine la faon dont le libell dun contrle Label, ou le texte de la zone
ddition des contrles TextBox et ComboBox, est align. La proprit TextAlign accepte
lune des trois constantes fmTextAlign:

fmTextAlignLeft (par dfaut). Aligne gauche.


fmTextAlignCenter. Aligne au centre.
fmTextAlignRight. Aligne droite.

Info

Dans le cas dun contrle ComboBox, la proprit TextAlign ne dtermine que


lalignement du texte saisi dans la zone ddition, et non les entres de la liste
qui sont toujours alignes gauche.

TripleState
Cette proprit dtermine si un contrle OptionButton, CheckBox ou ToggleButton autorise
ou non ltat null (ni activ ni dsactiv). Une case cocher ou un bouton doption ltat
null apparat estomp et contient une marque dactivation (voir Figure13.14). Sa proprit
Value renvoie alors la valeur Null. Lorsquun bouton bascule ltat null, son libell apparat estomp. La proprit TripleState accepte une valeur de type Boolean:

True. Le contrle accepte ltat null.

False (par dfaut). Le contrle naccepte que deux tats, activ ou dsactiv.

Figure13.14
Un contrle CheckBox peut
accepter trois tats.

Voir aussi Value.

382

Excel et VBA

WordWrap
Cette proprit dtermine si un contrle autorise un changement de ligne afin dafficher
la totalit de son contenu. La proprit WordWrap est gre par les contrles possdant une
proprit Caption et par le contrle TextBox. Les contrles ListBox et ComboBox ne grent
pas cette proprit. La proprit WordWrap accepte une valeur de type Boolean:

True (par dfaut, sauf pour les contrles CommandButton). Le contrle autorise les chan-

gements de ligne.
False. Le contrle nautorise pas les changements de ligne.

Lorsquun contrle autorise un changement de ligne, celui-ci sopre lorsque le contenu


atteint la limite daffichage de ligne et si la hauteur autorise la cration dune ligne supplmentaire. Si tel nest pas le cas, aucun changement de ligne ne seffectue et le texte se
poursuit sur la mme ligne. La Figure13.15 prsente deux contrles TextBox dans lesquels
un mme texte a t saisi. La proprit WordWrap du premier est dfinie True et celle du
second, False.
Figure13.15
La proprit WordWrap
permet de visualiser la totalit du contenu du contrle,
en autorisant laffichage sur
plusieurs lignes.

Info

Si la proprit MultiLine dun contrle TextBox est dfinie sur False, une seule
ligne est autorise dans la zone ddition, et la proprit WordWrap est sans effet.

Dfilement
ScrollBars
Cette proprit dtermine laffichage dune ou de plusieurs barres de dfilement pour les
feuilles, les contrles TextBox et Frame. Ces contrles peuvent possder une barre de dfilement horizontale, une barre de dfilement verticale, ou les deux. Les barres de dfilement

Chapitre 13

Exploiter les proprits des contrles ActiveX

383

saffichent lorsque les dimensions du contrle ne permettent pas dafficher la totalit de


leur contenu. La proprit ScrollBars accepte lune des constantes fmScrollBars:

fmScrollBarsNone. Aucune barre de dfilement ne saffiche pour le contrle.


fmScrollBarsHorizontal. Le contrle possde une barre de dfilement horizontale.
fmScrollBarsVertical. Le contrle possde une barre de dfilement verticale.
fmScrollBarsBoth. Le contrle possde des barres de dfilement horizontale et

verticale.

Info

Les contrles ListBox ne grent pas la proprit ScrollBars. Ils affichent toujours une barre de dfilement verticale lorsque cela est ncessaire, afin que
lutilisateur puisse slectionner les lments de son choix dans la liste.

Un contrle TextBox dont la proprit MultiLine est dfinie False ne peut afficher de
barre de dfilement verticale, puisque son contenu est toujours affich sur une seule ligne.
Un contrle TextBox dont la proprit WordWrap est dfinie True ne peut afficher de barre
de dfilement horizontale, puisque, chaque fois que la limite daffichage lie aux dimensions du contrle est atteinte, le contenu saffiche sur la ligne suivante.
Une barre de dfilement place sur une feuille ou sur un contrle MultiPage permet laffichage dune zone suprieure la taille relle de la feuille ou du contrle. Lorsque vous
placez une barre de dfilement sur un contrle MultiPage ou sur une feuille, vous devez
donc spcifier la taille totale de la zone pouvant tre affiche laide des barres de dfilement (proprits ScrollHeight et ScrollWidth). Elle doit videmment tre suprieure la
taille relle du contrle (proprit Height). La proprit ScrollHeight est, par consquent,
gnralement dfinie dans une procdure, relativement la valeur de la proprit Height
(par exemple, MonContrle.ScrollHeight = MonContrle.Height * 1.5).
Pour plus de prcisions sur lutilisation des barres de dfilement sur les feuilles et les
contrles MultiPage, reportez-vous lAide Visual Basic.

eil
Cons

eil
Cons

Lorsque vous dfinissez True les proprits MultiLine et WordWrap dun


contrle TextBox, affectez la valeur fmScrollBarsVertical sa proprit
ScrollBars. Une barre de dfilement sera ainsi affiche lorsque les capacits
daffichage du contrle seront dpasses.
Lorsque vous affectez une barre de dfilement un contrle, assurez-vous que le
contrle dispose dassez despace pour afficher ces barres.

384

Excel et VBA

KeepScrollsVisible
Cette proprit dtermine si les barres de dfilement dun contrle sont ou non visibles
lorsquelles nont aucune utilit, cest--dire lorsque la totalit du contenu du contrle
saffiche. La proprit ScrollBars accepte lune des constantes fmScrollBars:
fmScrollBarsNone. Les barres de dfilement ne sont affiches que lorsque les dimensions
du contrle ne permettent pas den visualiser le contenu.
fmScrollBarsHorizontal. La barre de dfilement horizontale est toujours affiche,
quel que soit le contenu du contrle.
fmScrollBarsVertical. La barre de dfilement verticale est toujours affiche, quel que
soit le contenu du contrle.
fmScrollBarsBoth. Les barres de dfilement horizontale et verticale sont toujours
affiches, quel que soit le contenu du contrle.

Delay
Cette proprit dtermine la priodicit avec laquelle les vnements SpinUp, SpinDown
et Change sont reconnus sur un contrle SpinButton ou ScrollBar, lorsque lutilisateur
clique sur les flches de dfilement ou dans la barre de dfilement du contrle et maintient
le bouton enfonc.
La proprit Delay accepte une valeur numrique de type Long, qui reprsente la priodicit
de dclenchement de lvnement en millisecondes. Sa valeur par dfaut est50.
Pour vous dplacer laide dune barre de dfilement ou modifier une valeur laide
dun bouton toupie, vous pouvez cliquer une fois sur le contrle pour vous dplacer dune
unit ou maintenir le bouton de la souris enfonc. Dans ce cas, un premier vnement
se dclenche. Un court laps de temps scoule. Puis, lvnement sexcute en boucle
intervalle rgulier jusqu ce que vous relchiez le bouton de la souris. La proprit Delay
correspond lintervalle de temps sparant chaque vnement excut en srie. Le laps de
temps entre le premier vnement et la srie dvnements qui sexcute lorsque lutilisateur maintient le bouton de la souris enfonc permet lutilisateur de gnrer un vnement
par un simple clic de souris, sans quune srie dvnements ne se dclenche. Ce laps de
temps est gal cinq fois la valeur de la proprit Delay.
eil
Cons

Ne modifiez pas la valeur par dfaut de la proprit Delay. Elle correspond au


comportement habituel des barres de dfilement et des boutons toupies en environnement Windows.
Une valeur trop importante diminue lefficacit du contrle en augmentant le
dlai entre chaque vnement dclench en srie. Une valeur trop petite risque
de dclencher une srie dvnements au moindre clic, alors que lutilisateur ne
souhaite dclencher quun simple vnement.

Chapitre 13

Exploiter les proprits des contrles ActiveX

385

Max et Min
Les proprits Max et Min dun contrle ScrollBar ou SpinButton dterminent les valeurs
maximale et minimale que peut prendre le contrle et acceptent une valeur de type Integer.
Lorsque vous dplacez le curseur de dfilement dun contrle ScrollBar ou lorsque vous
cliquez sur lune des flches de dfilement dun contrle SpinButton, la proprit Value se
dplace entre les valeurs de Max et de Min. La proprit Value dun contrle ScrollBar vaut
Min lorsque le curseur est tout en haut (barre de dfilement horizontale) ou tout gauche
(barre de dfilement verticale) de la barre, et Max lorsque le curseur est tout en bas ou
droite du contrle.
La proprit Value dun contrle SpinButton reprsente la valeur qua slectionne lutilisateur en cliquant sur les flches de dfilement du contrle. Lorsque lutilisateur clique sur
la flche de dfilement Haut ou Gauche du contrle, sa proprit Value se rapproche de la
valeur de Min. Lorsquil clique sur la flche de dfilement Bas ou Droite, la proprit Value
se rapproche de la valeur de Max.
Lunit dincrmentation de la proprit Value du contrle est dtermine par sa proprit
SmallChange, ainsi que par sa proprit LargeChange dans le cas dun contrle ScrollBar.
Cest donc la conjugaison de ces trois proprits qui dtermine le nombre de valeurs que
peut prendre le contrle (reprsent par le nombre de positions possibles pour le curseur
sur la barre de dfilement, dans le cas dun contrle ScrollBar). Ce nombre est gal
[(MaxMin)/SmallChange]plus1.
Si les proprits Min et Max du contrle sont respectivement dfinies 0 et 100, et la
proprit SmallChange, 10, le contrle peut prendre onze valeurs (0, 10,, 100). Chaque
clic sur la flche de dfilement Bas ou Droit du contrle incrmentera sa valeur de 10,
jusqu atteindre la valeur de Max. Les clics resteront alors sans effet. De la mme faon,
chaque clic sur la flche de dfilement Haut ou Gauche du contrle tera 10 sa valeur,
jusqu atteindre la valeur de Min. Les clics resteront alors sans effet.

Info

Les valeurs par dfaut des proprits Min et Max dun contrle ScrollBar sont
respectivement0 et32767. La valeur de ses proprits SmallChange et LargeChange tant dfinie par dfaut 1, le contrle ainsi dtermin accepte32768
positions.
Les valeurs par dfaut des proprits Min et Max dun contrle SpinButton sont
respectivement0 et100. La valeur de sa proprit SmallChange tant dfinie par
dfaut 1, le contrle ainsi dfini accepte 101positions.

386

Excel et VBA

SmallChange
Cette proprit spcifie la valeur dincrmentation de la proprit Value dun contrle
ScrollBar ou SpinButton lors des vnements SpinDown ou SpinUp. La proprit Small
Change accepte une valeur de type Integer.
Chaque fois que lutilisateur clique sur la flche de dfilement Bas (contrle vertical) ou
Droite (contrle horizontal) du contrle, sa valeur est incrmente de la valeur de Small
Change, jusqu atteindre la valeur de la proprit Max. Les clics restent alors sans effet.
Chaque fois que lutilisateur clique sur la flche de dfilement Haut ou Gauche du contrle,
sa valeur est dcrmente de la valeur de SmallChange, jusqu atteindre la valeur de la
proprit Min. Les clics restent alors sans effet.
Conjugue aux proprits Min et Max du contrle, la proprit SmallChange dtermine le
nombre de valeurs possible pour le contrle, correspondant au nombre de positions que
peut prendre le curseur sur la barre de dfilement dans le cas dun contrle ScrollBar.
Pour un exemple dexploitation de ces proprits, reportez-vous la section consacre
lexploitation des objets SpinButton dcrite au chapitre suivant.

LargeChange
Cette proprit spcifie la valeur dincrmentation de la proprit Value dun contrle
ScrollBar lorsque lutilisateur clique dans la barre de dfilement, entre le curseur et lune
des flches de dfilement. La proprit LargeChange accepte une valeur de type Integer.
Sa valeur par dfaut est1.
Chaque fois que lutilisateur clique dans la barre de dfilement, entre le curseur et la flche
de dfilement Bas (contrle vertical) ou Droite (contrle horizontal) du contrle, sa valeur
est incrmente de la valeur de LargeChange, jusqu atteindre la valeur de la proprit Max.
Les clics restent alors sans effet.
Chaque fois que lutilisateur clique dans la barre de dfilement, entre le curseur et la flche
Haut ou Gauche du contrle, sa valeur est dcrmente de la valeur de LargeChange, jusqu
atteindre la valeur de la proprit Min. Les clics restent alors sans effet.
Dans lenvironnement Windows, un clic dans une barre de dfilement entrane gnralement un dplacement suprieur un clic sur la flche de dfilement. Par exemple, un clic
sur la flche de dfilement verticale dune fentre Excel gnre un dfilement dune ligne,
tandis quun clic dans la barre de dfilement gnre un dfilement dun cran.
Pour un exemple dutilisation de la proprit LargeChange, voyez la section consacre
lexploitation des objets ScrollBar, au chapitre suivant.

Chapitre 13

Exploiter les proprits des contrles ActiveX

387

Divers
Accelerator
Cette proprit permet de dfinir un raccourci clavier pour un contrle. Elle accepte une
valeur de type String correspondant au raccourci clavier du contrle. Pour attribuer un
raccourci clavier un contrle, affectez un des caractres formant le texte de sa proprit
Caption sa proprit Accelerator.
La touche de raccourci du contrle apparat souligne sur la feuille. Si la touche de raccourci
apparat plusieurs fois dans le libell du contrle, la premire occurrence est souligne. La
casse de la lettre de raccourci affecte un contrle ne sera considre que si le libell du
contrle contient la fois la lettre majuscule et la lettre minuscule.
Combine la touche Alt, la saisie de la touche de raccourci dun contrle dclenche le
passage du focus ce contrle. Si lvnement par dfaut du contrle est lvnement
Clik (pour un bouton de commande ou une case cocher, par exemple), alors celui-ci est
excut.
La Figure13.16 prsente une feuille dont tous les contrles ont t affects un raccourci
clavier.
Figure13.16
Nhsitez pas affecter des
touches de raccourci aux
contrles dune feuille afin
den optimiser lutilisation.

Lorsquune touche de raccourci est affecte un contrle Label, elle entrane le passage
du focus au contrle suivant dans lordre de tabulation. Cette fonction est particulirement
intressante pour affecter un raccourci clavier permettant dactiver un contrle TextBox.
Ilsuffit en effet dattribuer une touche de raccourci au contrle Label le lgendant et de
sassurer que ce dernier prcde le contrle TextBox dans lordre de tabulation.

388

Excel et VBA

ntion
Atte

Veillez ne pas attribuer un mme raccourci clavier des contrles diffrents


sur une feuille. Lorsquune mme touche de raccourci est affecte plusieurs
contrles, la saisie de ce raccourci entrane le passage du focus au premier des
contrles suivant le contrle actif, dans lordre de tabulation.

GroupName
Cette proprit permet dassocier des contrles OptionButton, afin que lutilisateur ne
puisse valider que lun deux. La proprit GroupName accepte une valeur de type String.
Pour associer des contrles OptionButton, affectez la mme chane de caractres leurs
proprits GroupName respectives.
Notez quil existe deux moyens dassocier des boutons doption sur une feuille: les placer
sur un mme cadre (contrle Frame) ou affecter une mme valeur leurs proprits Group
Name respectives. Cette seconde possibilit permet de gagner de la place sur la feuille, en y
plaant un contrle de moins, et offre plus de libert puisque les boutons doption peuvent
tre placs nimporte o sur la feuille. Lutilisation dun cadre est cependant souvent visuellement plus efficace, surtout lorsque la feuille propose plusieurs groupes de boutons doption. La distinction des diffrents groupes est ainsi rendue vidente par la dlimitation
quoffre le cadre.
ce
Astu

Pour dfinir lidentique la proprit GroupName dun ensemble de boutons


doptions, slectionnez dabord les contrles concerns sur la feuille. Ouvrez
ensuite la fentre Proprits (touche F4) et affectez la valeur de votre choix
la proprit GroupName. Tous les contrles slectionns sont affects par cette
modification.

HelpContextID
Cette proprit sert spcifier une rubrique daide pour le contrle. Elle accepte une valeur
de type Long correspondant lidentificateur de contexte de lune des rubriques daide du
fichier daide. Cet ouvrage naborde pas ce sujet.

MouseIcon
Cette proprit permet de spcifier une icne souris personnalise pour le contrle. Licne
souris dun contrle est lapparence que prend le pointeur lorsquil est plac au-dessus du
contrle. Pour que cette proprit ait un effet, la proprit MousePointer doit tre dfinie
fmMousePointerCustom. Pour affecter une icne personnalise un contrle partir de la
fentre Proprits:

Chapitre 13

Exploiter les proprits des contrles ActiveX

389

1. Cliquez sur le bouton Parcourir de la proprit MouseIcon, dans la fentre Proprits.


La fentre Charger une image saffiche.
2. Slectionnez un fichier de format valide qui sera utilis comme icne souris pour le
contrle (lextension de fichier la plus courante est .ico), puis cliquez sur Ouvrir.
Vous pouvez aussi crire du code permettant daffecter une icne personnalise un
contrle en cours dexcution dun programme. Faites pour cela appel la fonction Load
Picture, selon la syntaxe suivante:
Contrle.MouseIcon = LoadPicture(NomIcne)

o Contrle est le contrle et NomIcne, le chemin et le nom de licne personnalise.


Figure13.17
La proprit MouseIcon
permet daffecter des icnes
personnalises aux contrles.

ntion
Atte

Pour affecter un curseur personnalis un contrle, vous devez galement


affecter la valeur fmMousePointerCustom sa proprit MousePointer que le
curseur soit affect au contrle lors de la phase de conception de la feuille ou
lors de lexcution du code laide de la fonction LoadPicture.

MousePointer
Cette proprit permet de dterminer lapparence du pointeur de souris du contrle. La
proprit MousePointer accepte pour valeur lune des dix-sept constantes fmMousePointer.
Les seize premires correspondent un type de pointeur particulier, et la dix-septime,
fmMousePointerCustom, permet daffecter un pointeur personnalis au contrle (voir
section prcdente).
Pour visualiser les diffrents types de pointeurs de souris disponibles, placez sur une feuille
un contrle ComboBox et un contrle CommandButton et dfinissez leurs proprits comme
indiqu dans le tableau suivant:

390

Excel et VBA

Proprit

Valeur

Feuille
Name

fmTestPointeur

Contrle ComboBox
Name

cboConstantes

Locked

True

Contrle CommandButton
Name

cmdQuitter

Value

Quitter

Placez ensuite le code suivant dans la section Dclarations de la feuille:


Private Sub UserForm_Initialize()
Dim ValConstante
For ValConstante = 1 To 16
cboConstantes.AddItem (ValConstante & e constante)
Next ValConstante
End Sub
Private Sub cboConstantes_Click()
cmdQuitter.MousePointer = cboConstantes.ListIndex
End Sub
Private Sub cmdQuitter_Click()
fmTestPointeur.Hide
End Sub

Slectionnez ensuite la feuille dans Visual Basic Editor, puis cliquez sur le bouton Excuter
de la barre doutils Standard. La feuille saffiche. Slectionnez une une les diffrentes
options de la zone de liste droulante et placez le pointeur sur le bouton pour chaque slection, afin de visualiser les diffrents types de pointeurs disponibles. Cliquez sur le bouton
Quitter pour fermer le programme et retourner Visual Basic Editor.

Info

Lorsque vous modifiez la proprit MousePointer dun objet UserForm (feuille),


le pointeur de souris dtermin affecte toutes les feuilles, quel que soit le contrle
au-dessus duquel se trouve le pointeur. Pour le vrifier, remplacez linstruction
cmdQuitter.MousePointer = cboConstantes.ListIndex

par
fmTestPointeur.MousePointer = cboConstantes.ListIndex

Chapitre 13

Exploiter les proprits des contrles ActiveX

391

Figure13.18
Vous pouvez modifier
lapparence dun pointeur
tout moment de lexcution
du programme.

TabIndex
Cette proprit dtermine la position du contrle dans lordre de tabulation de la feuille.
Elle accepte une valeur de type Integer, comprise entre 0 et le nombre de contrles de la
feuille moins 1. (La valeur de la proprit TabIndex du premier contrle dans lordre de
tabulation est gale 0.)

Info

Pour un rappel des notions de focus et dordre de tabulation, reportez-vous la


section dcrivant la proprit AutoTab, plus haut dans ce chapitre.

Lorsque lutilisateur tape sur la touche Tab, le focus est pass au contrle dont la valeur de
la proprit TabIndex est gale celle du contrle actifplus1. Sil utilise la combinaison
Maj+Tab, le focus est pass au contrle dont la valeur de la proprit TabIndex est gale
celle du contrle actif moins1.
Si la proprit Enabled du contrle devant recevoir le focus est dfinie False, il est ignor,
et le focus est pass au contrle suivant, dans lordre de tabulation de la feuille. Si vous
souhaitez quun contrle soit ignor dans lordre de tabulation tout en restant accessible
lutilisateur, dfinissez sa proprit TabStop False.
Pour dfinir lordre de tabulation dune feuille en phase de conception, il est plus simple
dutiliser la bote de dialogue Ordre de tabulation que de dfinir une une les proprits
TabIndex des contrles:
1. Cliquez du bouton droit sur la feuille (pas sur un contrle) et, dans le menu contextuel
qui saffiche, choisissez la commande Ordre de tabulation.

La bote de dialogue Ordre de tabulation saffiche (voir Figure13.19). Les contrles


de la feuille y sont rpertoris par leur nom (proprit Name) et classs selon leur position dans lordre de tabulation de la feuille (le contrle dont la proprit TabIndex est
gale 0 se trouve tout en haut de la liste).

392

Excel et VBA

Figure13.19
La bote de dialogue Ordre
de tabulation.

2. Pour dplacer un contrle dans lordre de tabulation de la feuille, slectionnez-le et


cliquez sur le bouton Vers le haut, pour le faire remonter dans lordre de tabulation, ou
sur le bouton Vers le bas, pour le faire descendre dans lordre de tabulation.

Chaque fois que vous dplacez un contrle dans la bote de dialogue Ordre de tabulation, sa proprit TabIndex et celle du contrle dont il prend la place sont interverties.

3. Vous pouvez dplacer simultanment plusieurs contrles dans la bote de dialogue


Ordre de tabulation, afin de modifier leur emplacement dans lordre de tabulation de
la feuille, tout en conservant leurs positions relatives.

Pour slectionner des contrles contigus, cliquez sur le premier contrle puis, tout en
maintenant la touche Maj enfonce, cliquez sur le dernier contrle. Pour slectionner
des contrles non contigus, cliquez sur les contrles voulus tout en maintenant la
touche Ctrl enfonce.

Figure13.20
Dplacez simultanment les
contrles dont vous souhaitez
modifier la position dans
lordre de tabulation, tout en
leur conservant leurs positions relatives.

TabStop
Cette proprit dtermine si un contrle peut ou non recevoir le focus lorsque lutilisateur
tape sur la touche Tab ou sur la combinaison Maj+Tab. La proprit TabStop accepte une
valeur de type Boolean:

Chapitre 13

Exploiter les proprits des contrles ActiveX

393

True (par dfaut). Si sa position dans lordre de tabulation le justifie, le contrle reoit
le focus lorsque la touche Tab ou la combinaison Maj+Tab est active.

False. Le focus ne peut tre pass au contrle par la touche Tab. Bien quil conserve

sa proprit TabIndex, le contrle est ignor sil est le suivant (touche Tab seule) ou le
prcdent (Maj+Tab) dans lordre de tabulation, et le focus est pass au contrle suivant.

Tag
Cette proprit permet de stocker des informations supplmentaires sur le contrle sous la
forme dune chane de caractres. Il peut sagir dune description du contrle, qui pourra
tre affiche lintention de lutilisateur si ncessaire.

Emplacement
Height et Width
Ces proprits dterminent respectivement la hauteur et la largeur dun contrle. Les
proprits Height et Width acceptent une valeur de type Single reprsentant la hauteur et
la largeur du contrle en points.
Vous navez a priori pas vous proccuper de ces proprits, puisquelles sont automatiquement mises jour lorsque vous redimensionnez le contrle dans Visual Basic Editor.
Pour dterminer la taille de vos contrles, prfrez donc les mthodes de dimensionnement
prsentes au chapitre prcdent.

Left et Top
Ces proprits dterminent respectivement la position du contrle par rapport au bord
gauche et au bord suprieur de lobjet qui le contient. Les proprits Left et Top acceptent
une valeur de type Single reprsentant la distance sparant le contrle des bords gauche et
suprieur de lobjet conteneur en points.
Vous navez a priori pas vous proccuper de ces proprits, puisquelles sont automatiquement mises jour lorsque vous dplacez le contrle dans Visual Basic Editor. Pour
dterminer la position de vos contrles sur la feuille, prfrez donc les mthodes de mise
en forme prsentes au chapitre prcdent.
Dans le cas dune feuille, les proprits Left et Top reprsentent la distance en points de
la feuille par rapport aux bords gauche et suprieur de lcran lors de son affichage. Ces
proprits ne sont considres que si la proprit StartUpPosition de la feuille est dfinie
0 (manuel).

394

Excel et VBA

StartUpPosition
Cette proprit dtermine la position de la feuille sur lcran lors de laffichage de la feuille.
La proprit StartUpPosition accepte lune des valeurs suivantes:
0 Manual. La position de la feuille sur lcran est dtermine par ses proprits Left
et Top.
1 CenterOwner (par dfaut). La feuille est centre sur la fentre de lapplication hte.
2 CenterScreen. La feuille est centre sur lcran, quelles que soient la position et la
taille de la fentre de lapplication hte.
3 Windows Default. La feuille saffiche dans langle suprieur gauche de lcran.
Utilisez cette valeur lorsque vous souhaitez que la feuille affiche masque le moins
possible le document actif.

Figure13.21
Vous pouvez choisir de toujours afficher la feuille au centre de la fentre de lapplication hte, quelles
que soient la taille et la position de cette dernire.

Chapitre 13

Exploiter les proprits des contrles ActiveX

395

Figure13.22
Laffichage de la
feuille dans langle
suprieur gauche
de lcran permet
dviter que des
donnes importantes du document
ne soient masques.

Image
Picture
Cette proprit permet daffecter une image un contrle ou une feuille. Pour affecter
une image un objet:
1. Affichez sa fentre Proprits et cliquez sur le bouton Parcourir () de la proprit
Picture. La bote de dialogue Charger une image saffiche (voir Figure13.23).
Figure13.23
Slectionnez le fichier image
que vous souhaitez affecter
au contrle.

396

Excel et VBA

2. Slectionnez un fichier de format valide qui sera utilis comme image pour le contrle
ou la feuille (.bmp et .ico sont des formats valides), puis cliquez sur Ouvrir.
Vous pouvez aussi crire du code permettant daffecter une image un objet en cours
dexcution dun programme. Faites pour cela appel la fonction LoadPicture, selon la
syntaxe suivante:
Objet.Picture = LoadPicture(NomImage)

o Objet est la feuille ou le contrle et NomImage, le chemin et le nom de limage.


Figure13.24
Vous pouvez donner un peu
de fantaisie vos feuilles en
leur affectant des images.

Pour supprimer une image dun contrle, slectionnez la valeur de la proprit Picture
dans la fentre Proprits et appuyez sur la touche Suppr.

PictureAlignment
Cette proprit dtermine lemplacement dune image (proprit Picture) sur un contrle
ou sur une feuille. La proprit PictureAlignment accepte pour valeur lune des constantes
fmPictureAlignment:

fmPictureAlignmentTopLeft. Limage est place dans langle suprieur gauche de

lobjet.
fmPictureAlignmentTopRight. Limage est place dans langle suprieur droit de

lobjet.

fmPictureAlignmentCenter (par dfaut). Limage est centre sur lobjet.

fmPictureAlignmentBottomRight. Limage est place dans langle infrieur droit de

fmPictureAlignmentBottomLeft. Limage est place dans langle infrieur gauche de

lobjet.
lobjet.

Chapitre 13

Exploiter les proprits des contrles ActiveX

397

Pour les contrles CommandButton, la proprit PictureAlignment est remplace par la


proprit PicturePosition. Utilisez cette proprit pour affecter une image un bouton
de commande sans en masquer le libell. Une image a t affecte la proprit Picture
des trois contrles CommandButton de la Figure13.25. Leur proprit PicturePosition a
t dfinie sur fmPicturePositionLeftCenter afin de ne pas masquer leur libell. Notez le
contrle (et non la proprit) Picture reprsentant une imprimante.
Figure13.25
Laffectation dune image
la proprit Picture des
boutons de commande de vos
feuilles leur donnera un peu
de gaiet.

ce
Astu

Ralisez une capture dcran dune fentre dont vous souhaitez exploiter les
icnes. Dtourez ensuite ces dernires dans un logiciel de dessin tel que Paint
Shop Pro et enregistrez-les au format BMP. Vous pourrez ensuite les exploiter
dans vos feuilles VBA comme contrle Picture ou comme proprit Picture
dun contrle CommandButton.

PictureSizeMode
Cette proprit dtermine de quelle faon limage dun contrle ou dune feuille saffiche si sa taille diffre de celle de lobjet conteneur. Elle nest pas gre par le contrle
CommandButton. La proprit PictureSizeMode accepte pour valeur lune des mthodes
PictureSizeMode:

fmPictureSizeModeClip (par dfaut). Si la taille de limage est suprieure celle du

contrle, seule la partie tenant dans le contrle saffiche. La partie rogne variera en
fonction de lalignement de limage, dtermin par la proprit PictureAlignment.

398

Excel et VBA

fmPictureSizeModeStretch. Limage est redimensionne afin quelle soit prcisment


de la mme taille que lobjet conteneur. Si le rapport homothtique de la taille de limage
et de celle de lobjet conteneur nest pas quilibr, limage sera dforme.

fmPictureSizeModeZoom. Limage est redimensionne proportionnellement, de faon

occuper toute la largeur ou toute la hauteur de lobjet conteneur. Si le rapport homothtique de la taille de limage et de celle de lobjet conteneur nest pas quilibr, limage
occupera toute la largeur, mais pas toute la hauteur, ou inversement.

PicturePosition
Cette proprit dtermine la position de limage dun contrle CommandButton par rapport
sa lgende. Elle accepte pour valeur lune des treize constantes fmPicturePosition. Pour
plus dinformations, reportez-vous lAide Visual Basic.

PictureTiling
Cette proprit dtermine si une image est ou non affiche en mosaque sur une feuille ou
un contrle. La proprit PictureTiling accepte une valeur de type Boolean:

True. Si limage est plus petite que lobjet conteneur, elle saffiche en mosaque sur la
page (voir Figure13.26). Pour que laffichage en mosaque seffectue correctement, la
proprit PictureSizeMode doit tre dfinie fmPictureSizeModeClip.

False (par dfaut). Limage nest pas affiche en mosaque.

Figure13.26
Une image affiche
en mosaque sur une feuille.

Chapitre 13

Info

Exploiter les proprits des contrles ActiveX

399

Une image affiche en mosaque sur une feuille ou un contrle risque dtre
rogne sur le bord suprieur ou infrieur de lobjet, ainsi que sur son bord
gauche ou droit. Il est en effet peu probable que la hauteur et la largeur de lobjet conteneur soient des multiples de la hauteur et de la largeur de limage. Les
bords de lobjet prsentant des images rognes dpendront de lalignement de
limage sur lobjet (proprit PictureAlignment).

Police
Font
Cette proprit dtermine la police de caractres affecte laffichage du contenu dun
contrle. La police par dfaut est la police Tahoma Regular, corps 9. Pour modifier la
proprit Font dun contrle, cliquez sur le bouton du volet droit de la fentre Proprits.
Dans la bote de dialogue qui saffiche, dterminez la police de caractres et les attributs
voulus, puis cliquez sur OK.

14
Matriser
le comportement
des contrles
Au sommaire de ce chapitre

Crer des procdures vnementielles


Exemple dexploitation des contrles

402

Excel et VBA

Ce chapitre vous propose de dcouvrir comment tirer vraiment parti des interfaces utilisateur en leur ajoutant de linteractivit grce aux procdures vnementielles. Il vous
prsente galement, contrle par contrle, les techniques les plus courantes pour tirer parti
des proprits dun contrle.

Crer des procdures vnementielles


Les contrles placs sur une feuille sont rceptifs aux vnements utilisateur qui les affectent. Vous pouvez ainsi crer des procdures dites vnementielles, qui se dclencheront
lorsque lvnement correspondant (un clic de souris, par exemple) sera repr. Une procdure vnementielle peut avoir des fonctions trs variables, telles que vrifier la validit
dune information, modifier lapparence de la feuille, ouvrir une autre feuille, fermer la
feuille et passer les valeurs quelle contient une procdure du module de code,etc.

Crer une procdure


Une procdure vnementielle peut tre gnre de diffrentes faons. Quelle que soit
la mthode choisie, les procdures vnementielles dune feuille ou des contrles qui la
composent rpondent toujours une mme syntaxe:
Private Sub Contrle_Evnement ()
Instructions
End Sub

Linstruction de dclaration de la procdure est toujours prcde de Private, car une


procdure vnementielle est par dfinition prive. Elle ne sexcute que lorsque lvnement est repr, et ne peut tre appel par une instruction situe dans une procdure du
projet.
Contrle est le nom du contrle auquel est attache la procdure. Il sagit de la valeur de sa
proprit Name. Evnement est lvnement qui dclenchera la procdure lorsquil affectera

le contrle. Il peut sagir dun clic de souris, dune frappe de la touche Entre ou encore
dune modification de la valeur du contrle. Le nom du contrle et celui de lvnement
sont toujours spars par un trait de soulignement.

Info

Dans le cas de procdures vnementielles affectes des feuilles, le nom de


lobjet napparat pas dans linstruction de dclaration de la procdure. Le mot
cl UserForm est dans ce cas employ pour identifier la feuille comme tant
lobjet concern par la procdure. Linstruction de dclaration dune procdure
vnementielle de feuille rpond la syntaxe suivante:
Private Sub UserForm_Evnement()

Chapitre 14

Matriser le comportement des contrles 

403

Vous pouvez crire une procdure vnementielle directement dans la fentre de Code de
la feuille, en adoptant lune des mthodes prsentes plus loin dans ce chapitre. Pour ouvrir
la fentre Code de la feuille, cliquez du bouton droit nimporte o sur celle-ci et choisissez
la commande Code.
Les instructions de dclaration de la procdure peuvent cependant tre gnres automatiquement partir de la feuille. Pour affecter une procdure vnementielle un contrle,
partir de lobjet conteneur:
1. Double-cliquez sur le contrle voulu,

ou cliquez du bouton droit et choisissez la commande Code (voir Figure14.1),

ou slectionnez le contrle sur la feuille, puis choisissez la commande Code du menu


Affichage.

Figure14.1
Ouvrez la fentre Code
partir du contrle auquel
vous souhaitez affecter une
procdure vnementielle.

2. La fentre Code de la feuille souvre. Les instructions de dclaration de la procdure


vnementielle du contrle sont automatiquement gnres et le curseur est plac
entre celles-ci (voir Figure14.2).

Lvnement affect la procdure est lvnement par dfaut du contrle. Celuici varie dun contrle lautre. Il sagit par exemple de lvnement Click (clic de
souris) pour un contrle CommandButton et de lvnement Change (modification de la
valeur) pour un contrle TextBox.

404

Excel et VBA

Figure14.2
Les instructions de dclaration de la procdure sont
automatiquement gnres.

3. Si lvnement nest pas celui pour lequel vous souhaitez crer une procdure, vous
pouvez modifier au clavier le nom de lvnement gnr, ou drouler la zone de
liste droulante Procdure et y choisir lvnement voulu (voir Figure14.3). Tous les
vnements pouvant tre dtects sur le contrle y sont lists.

Cette dernire solution gnre les instructions de dclaration de la procdure vnementielle slectionne. Supprimez alors les dclarations de procdure initialement
gnres.

Figure14.3
La zone de liste droulante
Procdure liste lensemble
des vnements pouvant
tre dtects sur le contrle
affich dans la zone Objet.

Chapitre 14

Matriser le comportement des contrles 

405

4. Saisissez le code de la procdure entre les instructions de dclaration.

Info

Si la procdure vnementielle gnre existe dj, le curseur est plac sous son
instruction de dclaration.

Pour raliser lexemple suivant, crez une feuille et placez-y un contrle Label, un contrle
TextBox, quatre contrles OptionButton et trois contrles CommandButton, en dfinissant
leurs proprits dcrites dans le tableau suivant.
Proprit

Valeur

Feuille
Name

fmTestEvnements

Caption

Test des procdures vnementielles

Contrle Label
Name

lbTexte

Value

Entrez le texte de votre choix

Contrle TextBox
Name

txtTexte

Value

Contrle OptionButton
Name

De optOption1 optOption4

Value

True pour lun des boutons; False pour les autres

Caption

De Bouton doption 1 Bouton doption 4

Contrle CommandButton
Name

Respectivement cmdBouton, cmdTexte et cmdQuitter

Caption

Respectivement Bouton actif, Zone de texte et Quitter

406

Excel et VBA

Figure14.4
La feuille Test des procdures
vnementielles ralise.

Enfin, affectez les procdures vnementielles suivantes au contrle TextBox et aux trois
contrles CommandButton.
Private Sub txtTexte_AfterUpdate()
MsgBox Vous avez modifi la valeur de la zone de texte., _
vbOKOnly+vbInformation, Evnement AfterUpdate() dtect
End Sub
Private Sub cmdBouton_Click()
Dim BoutonActif As String
If optOption1.Value = True Then
BoutonActif = optOption1.Caption
ElseIf optOption2.Value = True Then
BoutonActif = optOption2.Caption
ElseIf optOption3.Value = True Then
BoutonActif = optOption3.Caption
Else
BoutonActif = optOption4.Caption
End If
MsgBox Le bouton doption slectionn est le bouton libell _
& BoutonActif, vbOKOnly+vbInformation, Evnement Click() dtect
End Sub
Private Sub cmdTexte_Click()
MsgBox La valeur de la zone de texte est: & txtTexte.Value, _
vbOKOnly+vbInformation, Evnement Click() dtect
End Sub
Private Sub cmdQuitter_Click()
fmTestEvnements.Hide
End Sub

Slectionnez la feuille dans la fentre UserForm et cliquez sur le bouton Excuter de la


barre doutils Standard. La feuille saffiche lcran. Testez le comportement de la feuille.

Chapitre 14

Matriser le comportement des contrles 

407

Lorsque les vnements affects une procdure vnementielle sont dtects, cette
dernire sexcute:

La modification de la valeur de la zone de texte est interprte comme lvnement


AfterUpdate affectant le contrle txtTexte lors du passage du focus un autre contrle.
La procdure correspondante est excute et la bote de dialogue de la Figure 14.5
saffiche.

Un clic sur le bouton libell Bouton actif est dtect comme lvnement Click affectant le contrle cmdBouton. La procdure correspondante est excute et la bote de
dialogue de la Figure14.6 saffiche.

Un clic sur le bouton libell Zone de texte est dtect comme lvnement Click affectant le contrle cmdTexte. La procdure correspondante est excute et la bote de
dialogue de la Figure14.7 saffiche.

Un clic sur le bouton libell Quitter est dtect comme lvnement Click affectant le
contrle cmdQuitter. La procdure correspondante est excute et la fentre se ferme.

Figure14.5
Dclenchement de la procdure txtTexte_AfterUpdate.

Figure14.6
Dclenchement de la procdure cmdBouton_Click.

408

Excel et VBA

Figure14.7
Dclenchement de la procdure cmdTexte_Click.

Les vnements
Les vnements sont nombreux et varient dun contrle lautre. Les vnements grs par
un contrle sont intimement lis sa nature, cest--dire ses proprits. Par exemple, les
vnements Change, AfterUpdate et BeforeUpdate sont grs uniquement par les contrles
possdant une proprit Value (TextBox, par exemple), puisquils se dclenchent lors de
la modification de cette proprit. Ces vnements ne sont pas grs par les contrles
Command
Button, qui ne possdent pas de proprit Value.

ce
Astu

Pour accder la liste des vnements grs par un type de contrle, slectionnez le contrle en question sur une feuille et tapez sur F1 pour ouvrir la
rubrique daide qui lui est associe. Cliquez ensuite sur le lien vnements situ
dans le haut de la rubrique daide. Une fentre listant les vnements grs par
le contrle saffiche, permettant dafficher la rubrique daide de lvnement de
votre choix.

Cette section prsente les vnements grs par les contrles VBA. Certains, tels que les
vnements Click, Change ou Initialize, sont essentiels, et vous serez amen les utiliser presque toujours lorsque vous dvelopperez des feuilles VBA. Ils apparaissent en gras
dans la liste. Il en est dautres que vous nutiliserez que trs rarement, voire jamais.

vnement AfterUpdate. Dtect lorsque la valeur du contrle est modifie, au moment


du passage du focus un autre contrle. Cet vnement survient aprs lvnement
BeforeUpdate.

vnement BeforeDragOver. Dtect lorsquun glisser-dplacer est effectu.

vnement BeforeDropOrPaste. Dtect lorsque des donnes sont dposes ou colles


sur un objet. Lvnement survient avant que laction ne soit valide.
vnement BeforeUpdate. Dtect lorsque la valeur du contrle est modifie, au
moment du passage du focus un autre contrle. Lvnement BeforeUpdate survient

Chapitre 14

Matriser le comportement des contrles 

409

avant que la modification des donnes ne soit valide et donc avant lvnement After
Update. Cela permet de refuser la mise jour effectue. Lvnement BeforeUpdate
rpond la syntaxe suivante:
Private Sub Contrle_BeforeUpdate(ByVal Annulation As MSForms.ReturnBoolean)

o Annulation est une variable de type Boolean.


Pour refuser la mise jour, placez linstruction Annulation = True dans la procdure.
Lutilisateur ne pourra alors pas passer le focus un autre contrle tant quune valeur
valide naura pas t affecte au contrle.
Dans lexemple suivant, si lutilisateur nentre pas une valeur comprise entre 50 et 250
dans la zone de texte txtTaille, un message lavertit que la valeur nest pas valide, et le
focus ne peut tre pass un autre contrle tant quune valeur valide na pas t entre.
1: Private Sub txtValeur_BeforeUpdate(ByVal Annulation _
As MSForms.ReturnBoolean)
2:
If IsNumeric(txtValeur.Value) = False Then
3:
MsgBox Vous devez indiquer une valeur numrique
4:
Annulation = True
5:
Else
6:
If Not (txtValeur.Value >= 50 And txtValeur.Value <= 250) Then
7:
MsgBox Valeur non valide
8:
Annulation = True
9:
End If
10:
End If
11: End Sub

Linstruction If...End If principale (des lignes2 10) vrifie si la valeur entre est une
valeur numrique. Si tel nest pas le cas (ligne2), un message saffiche (ligne3), et la
modification est refuse (ligne4), interdisant lutilisateur de passer le focus un autre
contrle. Si la valeur entre est de type numrique (ligne5), une instruction If...End
If imbrique (des lignes6 9) vrifie que la valeur est comprise entre50 et250. Si tel
nest pas le cas, un message saffiche (ligne7), et la modification est refuse (ligne8),
interdisant lutilisateur de passer le focus un autre contrle.

vnement Change. Dtect lors de la modification de la valeur (proprit Value) dun


contrle. La modification peut tre effectue par lutilisateur, comme gnre par une
instruction du code. Contrairement aux vnements AfterUpdate et BeforeUpdate qui
sont dtects lors du passage du focus un autre objet, lvnement Change est dtect
chaque modification de la valeur. Ainsi, si vous affectez une procdure dvnement
Change un contrle TextBox, celle-ci sexcutera chaque fois que lutilisateur entrera
ou supprimera un caractre dans la zone de texte (sil saisit le mot "Bonjour" dans la
zone de texte, la procdure se dclenchera sept fois).

410

Excel et VBA

Il est frquent dutiliser une zone de texte pour afficher llment slectionn par lutilisateur dans une zone de liste. La procdure vnementielle suivante met jour la zone
de texte txtSlListe chaque fois que lutilisateur modifie la slection dans la zone de
liste ZoneDeListe:
Private Sub ZoneDeListe_Change()
txtSlListe.Value = ZoneDeListe.Value
End Sub

vnement Click. Dtect lorsque lutilisateur clique sur un contrle. Notez que lvnement Click est aussi dtect si lquivalent clavier dun clic de souris est effectu.
Cest le cas si lutilisateur frappe la touche Entre alors quun bouton de commande a
le focus, ou encore sil frappe la barre despace alors quune case cocher a le focus.
Lvnement Click survient aprs les vnements MouseDown et MouseUp. Ainsi, lorsque
vous cliquez sur un contrle, trois vnements sont successivement dtects:

MouseDown;

MouseUp;

MouseClick.
vnement dblClick. Dtect lorsque lutilisateur double-clique sur un contrle. Lvnement dblClick survient aprs lvnement Click. Lorsque vous double-cliquez sur
un contrle, quatre vnements sont donc successivement dtects:

MouseDown;

MouseUp;

MouseClick;

dblClick.
vnement DropButtonClick. Dtect chaque fois que lutilisateur droule ou ferme la
liste droulante dune zone de liste modifiable.
vnement Enter. Dtect juste avant quun contrle reoive le focus. Lvnement
Enter est toujours li un vnement Exit quivalent, qui affecte le contrle qui avait
le focus prcdemment.
vnement Exit. Dtect juste avant quun contrle ne perde le focus. Lvnement
Exit rpond la syntaxe suivante:
Private Sub Contrle_Exit(ByVal Annulation As MSForms.ReturnBoolean)

o Annulation est une variable de type Boolean.

Pour annuler le passage du focus, affectez la valeur True largument Annulation dans
une instruction de la procdure vnementielle (voir lexemple donn pour lvnement
BeforeUpdate).

Chapitre 14

Matriser le comportement des contrles 

411

vnement Initialize. Dtect lorsquune feuille est charge. La procdure affecte


cet vnement sexcute avant laffichage de la feuille et sutilise selon la syntaxe
suivante:
Private Sub UserForm_Initialize()
Instructions
End Sub

Notez que, dans le cas de la procdure Initialize dune feuille, le nom de la feuille
nest pas utilis pour spcifier lobjet auquel est affecte la procdure. On utilise toujours
le mot cl UserForm.
Cest une procdure essentielle de la programmation VBA. Elle permet en effet deffectuer des rglages de la feuille, impossibles dans une fentre UserForm. Vous utiliserez,
par exemple, une procdure vnementielle Initialize pour affecter une liste dlments un contrle ListBox ou ComboBox de la feuille. Pour un exemple dutilisation
de la mthode Initialize, reportez-vous la section "Contrle ComboBox", plus loin
dans ce chapitre.
ntion
Atte

Lorsque vous utilisez la mthode Hide pour masquer une feuille affiche laide
de la mthode Show, les ressources mmoire quelle occupe ne sont pas libres.
Si, par la suite, vous appelez de nouveau laffichage de la feuille, lvnement
Initialize ne sera pas reconnu, car la feuille ne sera pas charge une nouvelle fois. Par consquent, les diffrents contrles de la feuille auront les mmes
valeurs que lorsquelle a t masque. Pour librer les ressources mmoire
dune feuille Userform, vous devez lui appliquer la mthode Unload, selon la
syntaxe suivante:
Unload NomFeuille

La mthode Load, elle, charge une feuille, dclenchant la procdure vnementielle


Initialize sans pour autant lafficher. Notez que pour pouvoir manipuler une feuille
par programmation, il faut que celle-ci soit charge ( laide de la mthode Show ou de
la mthode Load).

vnement KeyDown. Dtect lorsquune touche du clavier est enfonce. Lvnement


KeyDown rpond la syntaxe suivante:
Private Sub Contrle_KeyUp(ByVal CodeTouche As MSForms.ReturnInteger, ByVal
EtatMaj As Integer)

o CodeTouche est une variable de type Integer renvoyant le code de touche de la touche
frappe, et EtatMaj, une variable de type Integer renvoyant ltat des touches Maj, Ctrl
et Alt. Lorsque aucune touche nest enfonce, EtatMaj prend la valeur0. Si la touche

412

Excel et VBA

Maj est enfonce, EtatMaj prend la valeur1; sil sagit de la touche Ctrl, la valeur2 est
affecte EtatMaj; si la touche Alt est enfonce, EtatMaj prend la valeur4. Ces valeurs
sadditionnent si plusieurs de ces touches sont enfonces.
Lvnement KeyDown alterne avec llment KeyPress. Lorsque lutilisateur enfonce une
touche, les vnements KeyDown et KeyPress sont successivement dtects. Sil maintient la touche enfonce, ces vnements sont nouveau dtects en srie, le processus
refltant la priodicit dinsertion du caractre lorsque sa touche est maintenue enfonce.

vnement KeyPress. Cet vnement est dtect lorsque lutilisateur appuie sur une
touche ANSI et intervient immdiatement aprs lvnement KeyDown. Si la touche
ANSI est enfonce, lvnement KeyPress est dtect en srie, chaque insertion dun
caractre. Lvnement KeyPress rpond la syntaxe suivante:

Private Sub Contrle_Keypress(ByVal codeANSI As MSForms.ReturnInteger)

o codeANSI est le code ANSI de la touche enfonce.


vnement KeyUp. Dtect lorsquune touche est relche. Lvnement KeyUp rpond
la syntaxe suivante:
Private Sub Contrle_KeyUp(ByVal CodeTouche As MSForms.ReturnInteger, ByVal
EtatMaj As Integer)

Les valeurs affectes aux variables CodeTouche et EtatMaj sont les mmes que pour
lvnement KeyDown.
Pour visualiser le droulement des vnements KeyDown, KeyUp et KeyPress, placez un
contrle TextBox sur une feuille. Dfinissez sa proprit Name txtTexte, puis placez le
code suivant dans la section Dclarations de la fentre Code de la feuille:
1: Private Sub TxtTexte_Keydown(ByVal CodeTouche As MSForms.ReturnInteger, _
ByVal EtatMaj As Integer)
2:
Dim EtatTouches As String
Dclare la variable EtatTouches.
3:
Select Case EtatMaj
Interroge la valeur de la variable
4:
Case 0
EtatMaj et affecte une valeur
5:
EtatTouches = Aucune
en consquence la variable
6:
Case 1
EtatTouches
7:
EtatTouches = Maj
8:
Case 2
9:
EtatTouches = "Ctrl"
10:
Case 3
11:
EtatTouches = "Maj et Ctrl"
12:
Case 4
13:
EtatTouches = Alt
14:
Case 5
15:
EtatTouches = "Maj et Alt"
16:
Case 6
17:
EtatTouches = "Ctrl et Alt"

Chapitre 14

Matriser le comportement des contrles 

413

18:
19:
20:
21:

Case 7
EtatTouches = "Maj, Ctrl et Alt"
End Select
Debug.Print ("Evnement KeyDown dtect. Code touche = " & _
CodeTouche & ". Touches enfonces: " & EtatTouches)
22: End Sub
23: Private Sub txtTexte_KeyUp(ByVal CodeTouche As MSForms.ReturnInteger, _
ByVal EtatMaj As Integer)
24:
Debug.Print (Evnement KeyUp dtect)
25: End Sub
26: Private Sub TxtTexte_Keypress(ByVal codeANSI As MSForms.ReturnInteger)
27:
Debug.Print ("Evnement KeyPress dtect. Code Ansi = " & _
codeANSI & " = " & Chr(codeANSI))
28: End Sub

Slectionnez la feuille prcdemment dveloppe et cliquez sur le bouton Excuter de


la barre doutils Standard. La feuille saffiche. Testez diffrentes combinaisons clavier
dans la zone de texte du contrle, puis cliquez sur la case de fermeture de la feuille.
Affichez la fentre Excution (Ctrl+G). Le dtail des vnements dtects y est inscrit.
Vous obtenez une fentre semblable celle de la Figure14.8.

Figure14.8
Les vnements
clavier peuvent
tre prcisment
dtects par un
programme VBA.

414

Excel et VBA

La premire procdure est dclenche lorsque lvnement KeyDown est dtect sur le
contrle txtTexte. La variable EtatTouches est dclare de type String en ligne2.
Une instruction Select Case...End Case teste ensuite la valeur de la variable Etat
Maj (lignes3 20) renvoye par lvnement KeyDown. Une chane de caractres est
affecte EtatTouches en fonction du rsultat. Linstruction de la ligne21 inscrit dans
la fentre Excution de la feuille les informations ainsi rcoltes.

La deuxime procdure est dclenche lorsque lvnement KeyUp est dtect sur le
contrle txtTexte. Une chane est alors insre dans la fentre Excution de la feuille
(ligne24).

La troisime procdure est dclenche lorsque lvnement KeyPress est dtect sur
le contrle txtTexte. Linstruction de la ligne27 insre dans la fentre Excution une
chane suivie de la valeur de la variable codeANSI renvoye par KeyPress. Le caractre
correspondant est ensuite insr laide de la fonction Chr.

vnement MouseDown. Dtect lorsque lutilisateur enfonce un bouton de souris. Lvnement MouseDown rpond la syntaxe suivante:
Private Sub Contrle_MouseDown(ByVal Bouton As fmButton, ByVal EtatMaj
As fmShiftState, ByVal X As Single, ByVal Y As Single)

o Bouton reprsente une valeur indiquant le bouton de souris qui a t enfonc et Maj,
une valeur refltant ltat des touches Maj, Ctrl et Alt. X et Y indiquent respectivement
les distances horizontale et verticale du curseur par rapport langle suprieur gauche
de la feuille, au moment du clic de souris.
La valeur affecte EtatMaj est la mme que pour les vnements KeyDown et KeyUp. Si
le bouton gauche est enfonc, Bouton prend la valeur1. La valeur2 est affecte Bouton
si le bouton droit est enfonc et la valeur4, sil sagit du bouton central. Dans le cas o
plusieurs boutons sont enfoncs, ces valeurs sadditionnent.

vnement MouseMove. Dtect lorsque lutilisateur dplace la souris. La syntaxe de


lvnement MouseMove est la mme que pour MouseDown.

vnement MouseUp. Dtect lorsque lutilisateur relche un bouton de souris. La syntaxe de cet vnement est la mme que pour MouseDown.

vnement SpinDown. Dtect lorsquun clic est effectu sur le bouton infrieur ou gauche
dun contrle SpinButton. Lorsquun vnement SpinDown est dtect, la proprit
Value du contrle est dcrmente de la valeur de la proprit SmallChange, condition
que la nouvelle valeur du contrle soit suprieure la valeur minimale du contrle,

Chapitre 14

Matriser le comportement des contrles 

415

dtermine par sa proprit Min. Dans le cas contraire, le contrle prend la valeur de la
proprit Min.

vnement SpinUp. Dtect quand on clique sur le bouton suprieur ou le bouton droit
dun contrle SpinButton. Lorsquun vnement SpinUp est dtect, la proprit Value
du contrle est incrmente de la valeur de la proprit SmallChange, condition que la
nouvelle valeur du contrle soit infrieure la valeur maximale du contrle, dtermine
par sa proprit Max. Dans le cas contraire, le contrle prend la valeur de la proprit
Max.

Exemples dexploitation des contrles


Cette section prsente les spcificits des contrles qui sont votre disposition dans la bote
outils et les mthodes permettant de les exploiter pleinement.

Contrle Label
Le texte dun contrle Label ne peut tre modifi par lutilisateur. Il peut cependant tre utile
de modifier la valeur dun contrle Label afin de crer une interface utilisateur dynamique.
Il suffit pour cela de placer des instructions redfinissant la valeur Caption du contrle
lorsquun vnement spcifique survient. Vous pouvez ainsi placer un seul contrle sur une
feuille, destin remplir une fonction variable selon les informations entres par lutilisateur. Cest alors le contrle Label identifiant ce contrle qui permettra lutilisateur den
distinguer la fonction.
Dans lexemple suivant, un contrle Label est affect une zone de texte, destine recevoir
le nom dun nouveau membre. Deux boutons doption, respectivement libells "Masculin"
et "Fminin", permettent lutilisateur de spcifier le sexe du membre. Linformation attendue de lutilisateur varie selon le sexe du nouveau membre. Le bouton doption actif par
dfaut est le bouton libell "Masculin". Des procdures vnementielles sont attaches
chacun des contrles, afin que lactivation de lun ou lautre des boutons doption modifie
la proprit Caption du contrle Label.
Pour raliser cet exemple, crez une nouvelle feuille et placez-y un contrle Frame contenant deux contrles OptionButton, deux contrles TextBox, associs tous deux un contrle
Label, et deux contrles CommandButton. Dfinissez ainsi leurs proprits:

416

Excel et VBA

Proprit

Valeur

Feuille
Name

fmLabel

Caption

Modification dun contrle Label

Contrle Frame
Name

frSexe

Caption

Sexe du nouveau membre

Contrle OptionButton
Name

optMasculin

Caption

Masculin

Value

True

Contrle OptionButton
Name

optFminin

Caption

Fminin

Value

False

Contrle Label
Name

lbPrnom

Caption

Prnom

Contrle TextBox
Name

txtPrnom

Value

Contrle Label
Name

lbNom

Caption

Nom

Contrle TextBox
Name

txtNom

Value

Contrle CommandButton
Name

cmdOK

Caption

OK

Chapitre 14

Proprit

Matriser le comportement des contrles 

417

Valeur

Contrle CommandButton
Name

cmdAnnuler

Caption

Annuler

Placez ensuite le code suivant dans la section Dclarations de la fentre Code de la feuille:
Sub optFminin_Click()
lbNom.Caption = "Nom de jeune fille"
End Sub
Sub optMasculin_Click()
lbNom.Caption = Nom
End Sub
Sub cmdOK_Click()
fmLabel.Hide
End Sub

Slectionnez ensuite la feuille, puis cliquez sur le bouton Excuter de la barre doutils
Standard. La feuille saffiche lcran. Lorsque vous cliquez sur lun des boutons doption, le libell du contrle Label, lbNom, varie en fonction de loption slectionne (voir
Figure14.9).
Figure14.9
Faites varier le libell
dun contrle Label de faon
reflter linformation
attendue.

418

Excel et VBA

ntion
Atte

Lorsque vous crivez du code modifiant la valeur Caption dun contrle Label,
veillez ce que la taille du contrle permette laffichage complet du nouveau
libell.

Contrle TextBox
Lorsque vous utilisez un contrle TextBox destin recevoir une information bien spcifique, vrifiez que lutilisateur entre une valeur valide, afin dviter que le programme ne
gnre une erreur. Par exemple, si vous crez une zone de texte dont la fonction est de recevoir une valeur reprsentant une somme payer, assurez-vous que linformation entre par
lutilisateur est bien une valeur numrique. Si les valeurs autorises sont bien dlimites,
vrifiez aussi que la valeur affecte au contrle entre dans celles-ci.
Pour vrifier la valeur dun contrle TextBox au moment o lutilisateur entre une information dans la zone ddition du contrle, attachez du code lvnement Change de ce
contrle. Il est parfois aussi ncessaire de vrifier quune valeur a bien t entre au moment
de la validation des informations entres par lutilisateur.
Utilisez les fonctions Visual Basic permettant de dterminer les types de donnes pour vous
assurer que les informations saisies par lutilisateur sont valides.

pel
Rap

Pour un rappel des fonctions Visual Basic de contrle de types de donnes,


reportez-vous au Tableau6.3.

ce
Astu

Pour vrifier quune valeur est une chane de caractres, utilisez la fonction
IsNumeric qui doit alors renvoyer la valeur False.

Pour raliser lexemple suivant, crez une feuille prsentant un contrle Label, un contrle
TextBox et un contrle CommandButton (voir Figure14.10). Dfinissez ainsi leurs proprits:
Proprit

Valeur

Feuille
Name

fmMaFeuille

Caption

Vrification des donnes

Contrle Label
Name

lbValeur

Caption

Entrez la somme traiter:

Chapitre 14

Proprit

Matriser le comportement des contrles 

419

Valeur

Contrle TextBox
Name

txtValeur

Value

Contrle CommandButton
Name

cmdOK

Caption

OK

Figure14.10
Votre feuille termine.

Placez ensuite le code suivant dans la zone Dclarations de la fentre Code de la feuille:
Private Sub txtValeur_AfterUpdate()
If IsNumeric(txtValeur.Value) = False Then
MsgBox txtValeur.Value & nest pas une valeur valide. Entrez une valeur
valide, _
vbExclamation, Valeur non valide
txtValeur.Value = ""
End If
End Sub
Private Sub cmdOK_Click()
If txtValeur.Value = "" Then
MsgBox txtValeur.Value & Vous devez entrer une valeur dans la zone de
texte., _
vbExclamation, Valeur requise
Else
fmMaFeuille.Hide
End If
End Sub

420

Excel et VBA

La premire procdure utilise la fonction IsNumeric dans une instruction conditionnelle


If...End If pour sassurer que la valeur entre dans la zone de texte est une valeur numrique ou une chane vide. Si tel nest pas le cas, une bote de dialogue saffiche lattention
de lutilisateur (voir Figure 14.11), et la proprit Value du contrle est affecte une
chane vide.

Figure14.11
Une valeur non valide
a t saisie dans la
zone de texte.

La procdure cmdOK_Clik vrifie quune valeur a bien t entre dans la zone de texte.
Si tel nest pas le cas, une bote de dialogue saffiche lattention de lutilisateur (voir
Figure14.12). Si, au contraire, la zone de texte contient une valeur, alors la mthode Hide
est applique la feuille afin de la masquer.

Figure14.12
Une valeur doit tre
saisie dans la zone de
texte.

Info

Notez que la procdure Cmd_Clik ne vrifie pas que la valeur de la zone de texte
est valide (de type numrique), mais uniquement quelle est diffrente dune
chane vide. En effet, la procdure txtValeur_Change nautorise pas la saisie
dune valeur autre que de type numrique dans la zone de texte.

Chapitre 14

Matriser le comportement des contrles 

421

Contrle ComboBox
Les contrles ComboBox sont parmi les plus utilises dans les interfaces utilisateur de la
plupart des logiciels. Ils prsentent en effet lavantage de permettre laffichage dun grand
nombre doptions en noccupant quun espace trs limit sur la feuille.
Par dfaut, un contrle ComboBox se comporte la manire dun contrle TextBox, cest-dire que lutilisateur est autoris saisir une valeur ne figurant pas parmi les options de la
liste droulante. Vous pouvez cependant dterminer un comportement analogue celui dun
contrle ListBox, cest--dire nautoriser que la slection dune valeur parmi les options
de la liste droulante, et interdire la saisie de nouvelles valeurs dans la zone ddition du
contrle. Dfinissez pour cela la proprit Style du contrle fmStyleDropDownList. (voir
la section ddie cette proprit, au chapitre prcdent).

Ajout dlments la liste dun contrle ComboBox


La mthode AddItem
La liste affecte un contrle ComboBox est gnralement dtermine dans le code du
programme, laide de la mthode AddItem. Cette mthode sutilise selon la syntaxe suivante:
Contrle.AddItem(ElementAjoutALaListe, Index)

o Contrle est le nom (proprit Name) du contrle ComboBox. ElementAjoutALaListe est


une chane de caractres reprsentant llment ajouter et Index, la position de llment
ajout dans la liste. Le premier lment correspond la valeur dindex0, le second a la
valeur dindex1,etc. Ce dernier argument est gnralement omis, llment ajout est alors
plac en dernire position dans la liste.

Info

Lorsque largument Index est omis, largument ElementAjoutALaListe peut


tre plac directement derrire AddItem, en ignorant les parenthses.

Les instructions dfinissant les lments de la liste dun contrle ComboBox sont gnralement places dans une procdure vnementielle attache lvnement Initalize de la
feuille. La liste est ainsi mise jour au moment de laffichage de la feuille.
Pour raliser lexemple suivant, placez un contrle Label, un contrle ComboBox et un
contrle CommandButton sur une feuille et dfinissez ainsi leurs proprits:

422

Excel et VBA

Proprit

Valeur

Feuille
Name

fmComboBox

Caption

Utilisation dun contrle ComboBox

Contrle Label
Name

lbComboBox

Caption

Slection dune valeur:

Contrle ComboBox
Name

cbComboBox

Value

Contrle CommandButton
Name

cmdQuitter

Value

Quitter

Placez ensuite le code suivant dans la section Dclarations de la fentre Code de la feuille:
Private Sub UserForm_Initialize()
Dim mavar
For mavar = 1 To 10
cbComboBox.AddItem Element de liste & mavar
Next mavar
End Sub
Private Sub cmdQuitter_Click()
fmComboBox.Hide
End Sub

Slectionnez ensuite la feuille dans la fentre UserForm, puis cliquez sur le bouton Excuter de la barre doutils Standard. La feuille saffiche. Droulez la liste de la zone de texte
modifiable pour visualiser les options disponibles (voir Figure 14.13). Pour fermer la
feuille, cliquez sur le bouton Quitter.
La procdure fmComboBox_Initialize est excute avant laffichage de la feuille. La
boucle For...Next sexcute alors, ajoutant dixlments la liste du contrle cbComboBox.

Info

Utilisez la mthode RemoveItem pour supprimer des lments dune liste.

Chapitre 14

Matriser le comportement des contrles 

423

Figure14.13
La liste est affecte au
contrle laffichage
de la feuille.

La proprit RowSource
Les lments de la liste peuvent aussi tre affects au contrle grce la proprit RowSource.
Cette proprit accepte pour valeur une chane reprsentant une cellule ou une plage de
cellules. Cette possibilit est trs pratique lorsquun projet est affect un document contenant des donnes variables. La liste reflte ainsi toujours les donnes de la feuille lorsque
celles-ci sont modifies.
Dans lexemple suivant, une feuille VBA est cre afin de permettre lutilisateur dentrer
des informations sur les chiffres des diffrents vendeurs dune socit. Un contrle Combo
Box est plac sur la feuille afin de permettre lutilisateur de slectionner le vendeur de son
choix. Pour raliser cet exemple, crez une feuille de calcul Excel et saisissez-y les donnes
apparaissant la Figure14.14.
Figure14.14
Les vendeurs sont rpertoris
dans la colonneA.

Accdez ensuite Visual Basic Editor (Alt+F11) et slectionnez le projet attach au


nouveau document dans lExplorateur de projet. Crez une feuille VBA et placez-y un
contrle Label, un contrle ComboBox et un contrle CommandButton. Dfinissez ainsi leurs
proprits:

424

Excel et VBA

Proprit

Valeur

Feuille
Name

fmRowSource

Caption

Utilisation de la proprit RowSource

Contrle Label
Name

lbComboBox

Caption

Slectionnez un vendeur

Contrle ComboBox
Name

cbComboBox

Value
RowSource

A2:A6

Contrle CommandButton
Name

cmdQuitter

Value

Quitter

La dfinition de la proprit RowSource A2:A6, affecte le contenu des cellules A2 A6 de


la feuille Excel la liste du contrle.
Placez ensuite le code suivant dans la section Dclarations de la fentre Code de la feuille:
Private Sub cmdQuitter_Click()
fmRowSource.Hide
End Sub

Slectionnez la feuille dans la fentre UserForm et cliquez sur le bouton Excuter de la


barre doutils Standard. Droulez la liste pour en visualiser le contenu (voir Figure14.15),
puis cliquez sur la case de fermeture de la fentre.
Figure14.15
La liste droulante
reflte le contenu des
cellules A2 A6.

Chapitre 14

Matriser le comportement des contrles 

425

Le contrle ComboBox reflte ainsi le contenu des cellules A2 A6. Si vous ajoutez des
vendeurs la liste (en A7, puis A8,etc.), ceux-ci napparatront pas dans la liste droulante
du contrle. Pour remdier ce problme, il faut dfinir une procdure qui affecte la
proprit RowSource une plage de cellules variable, reflet des cellules contenant des informations. Redfinissez la proprit RowSource du contrle ComboBox une chane vide, puis
ajoutez la procdure suivante dans la section Dclarations de la fentre Code de la feuille:
Private Sub UserForm_Initialize()
Dim DerCell As String
DerCell = Range(A1).End(xlDown).Address
cbComboBox.RowSource = A2: & DerCell
End Sub

Cette procdure se dclenche laffichage de la feuille. La premire instruction dclare


la variable DerCell de type String. Lexpression Range("A1").End(xlDown).Address
renvoie ladresse de la dernire cellule non vide sous la cellule A1. Cette adresse est affecte la variable DerCell prcdemment dclare. Enfin, la proprit RowSource du contrle
cbComboBox est affecte A2:DerCell, cest--dire une plage de cellules allant de la cellule
A2 la dernire cellule de la colonneA contenant des informations.
Ajoutez de nouveaux noms la liste des vendeurs, puis excutez nouveau la feuille. La
liste droulante affiche la totalit des vendeurs (voir Figure14.16).
Figure14.16
La liste affiche toujours la
liste de tous les vendeurs.

Valeur renvoye par un contrle ComboBox


La valeur slectionne par lutilisateur dans un contrle ComboBox est dfinie par sa proprit
Text ou sa proprit Value. La proprit Text renvoie une chane correspondant au libell
apparaissant dans la zone ddition du contrle. La valeur renvoye par la proprit Value
dpend de la proprit BoundColumn du contrle. Si la proprit BoundColumn est dfinie
0, la valeur de ListIndex est affecte la proprit Value du contrle. Autrement dit, la

426

Excel et VBA

proprit Value prendra la valeur0 si le premier lment de la liste est slectionn, 1si le
deuxime lment est slectionn,etc., n1 si llment n est slectionn.
Dans le cas dun contrle ComboBox plusieurs colonnes, la valeur de la proprit Bound
Column dtermine la colonne dont le contenu sera affect la proprit Value. Par exemple,
si la proprit BoundColumn est dfinie 3, la proprit Value du contrle renverra une
chane correspondant au libell apparaissant dans la troisime colonne de la ligne slectionne. Pour plus dinformations sur la cration de contrles ComboBox plusieurs colonnes,
consultez lAide VBA.

Info

Utilisez la proprit ControlSource pour affecter la valeur slectionne par


lutilisateur dans un contrle ComboBox une cellule dune feuille de classeur.
Par exemple, dfinir la proprit ControlSource dun contrle ComboBox D4
insrera la valeur slectionne par lutilisateur dans la liste dans la cellule D4,
lors du passage du focus un autre contrle.

Contrle ListBox
Les contrles ListBox et ComboBox partagent nombre de proprits (RowSource, Control
Source, BoundColumn, etc.) et de mthodes communes (AddItem et RemoveItem, par
exemple). Pour affecter une liste un contrle ListBox, utilisez lune des mthodes prsentes ci-dessus pour le contrle ComboBox.
Un contrle ListBox peut nautoriser que la slection dun lment de la liste, ou autoriser
des slections multiples. En outre, un contrle ListBox autorisant des slections multiples
peut autoriser diffrentes mthodes de slection.
Le type de slection dun contrle ListBox est dtermin par sa proprit MultiSelect, qui
accepte pour valeur lune des constantes fmMultiSelect:

fmMultiSelectSingle (par dfaut). Un seul lment peut tre slectionn.


fmMultiSelectExtended. Plusieurs lments peuvent tre slectionns avec les touches

Maj ou Ctrl. Un clic sur un lment de la liste, sans quaucune de ces touches ne soit
enfonce, dslectionne tous les lments pour slectionner llment cliqu.
fmMultiSelectMulti. Plusieurs lments peuvent tre slectionns ou dslectionns

par de simples clics. Un clic sur un lment de la liste slectionne cet lment (ou le
dslectionne sil est dj slectionn) sans modifier ltat des autres lments de la
liste.

Chapitre 14

Matriser le comportement des contrles 

427

Figure14.17
Une zone de liste nautorisant quune slection unique.

Figure14.18
Une zone de liste autorisant
des slections multiples.

Valeur renvoye par un contrle ListBox


linstar des contrles ComboBox, la valeur dun contrle ListBox slection unique peut
tre renvoye par sa proprit Value ou Text. Dans le cas dun contrle autorisant des
slections multiples, ces proprits renvoient une chane vide. Pour dterminer les lments
slectionns dune zone de liste autorisant de multiples slections, vous devez interroger
ltat de chacune des options de la liste. Utilisez pour cela la proprit Selected du contrle
ListBox selon la syntaxe suivante:
ContrleListBox.Selected(IndexElement) = ValeurBoolenne

o ContrleListBox est le nom (proprit Name) du contrle et IndexElement, sa position


dans la liste (proprit ListIndex). La ValeurBoolenne renvoye est True si llment est
slectionn et False, dans le cas contraire.
Lexemple suivant inscrit les lments slectionns dans une zone de liste dans la fentre
Excution. Pour raliser cet exemple, placez un contrle Label, un contrle ListBox et un
contrle CommandButton sur une feuille et dfinissez ainsi leurs proprits:
Proprit

Valeur

Feuille
Name

fmListBox

Caption

Valeurs slectionnes dans la liste

428

Excel et VBA

Proprit

Valeur

Contrle Label
Name

lbMembres

Caption

Membres prsents

Contrle ListBox
Name

cbMembres

Value
MultiSelect

fmMultiSelectMulti

Contrle CommandButton
Name

cmdValider

Caption

Valider

Placez ensuite le code suivant dans la section Dclarations de la fentre Code de la feuille:
Private Sub UserForm_Initialize()
cbMembres.AddItem Bidault
cbMembres.AddItem Deschamps
cbMembres.AddItem Kervarrec
cbMembres.AddItem "Goraguer"
cbMembres.AddItem "Lemaire"
cbMembres.AddItem "Leroux"
cbMembres.AddItem "Martin"
cbMembres.AddItem "Opra"
cbMembres.AddItem Otello
End Sub
Private Sub cmdValider_Click()
Dim compteur As Single
For compteur = 0 To (cbMembres.ListCount - 1)
If cbMembres.Selected(compteur) = True Then
Debug.Print cbMembres.List(compteur)
End If
Next compteur
fmListBox.Hide
End Sub

La premire procdure affecte une liste au contrle ListBox, laffichage de la feuille. La


procdure cmdValider_Click se dclenche lorsque lutilisateur clique sur le bouton Valider
de la feuille. Elle utilise les proprits du contrle ListBox suivantes:

Chapitre 14

Matriser le comportement des contrles 

429

ListCount. Renvoie le nombre dlments de la liste.


Selected(index). Renvoie une valeur boolenne indiquant si llment dindex index

est slectionn.
List(index). Renvoie la chane de caractres correspondant llment dindex index.

Une boucle For...Next est utilise pour interroger la valeur de chacun des lments de la
liste. Le premier lment de la liste ayant pour index0, lindex du dernier lment est gal
au nombre total dlments de la liste, moins1. La boucle sexcute donc sur un compteur
allant de0 au nombre dlments, moins1. chaque passage de la boucle, ltat de llment dindex compteur est interrog. Si llment interrog est slectionn, linstruction
Debug.Print affiche le nom de llment dans la fentre Excution de Visual Basic Editor.
Enfin, la mthode Hide est applique la feuille afin de le fermer.
Slectionnez la feuille dans la fentre UserForm et cliquez sur le bouton Excuter de la
barre doutils Standard. Slectionnez les lments de votre choix dans la liste, puis cliquez
sur le bouton Valider. La feuille se ferme. Affichez la fentre Excution de Visual Basic
Editor (Ctrl+G). Les lments slectionns dans la liste y sont inscrits (voir Figure14.19).
Figure14.19
Interrogez un un les lments dune liste slection
multiple, afin de dterminer
les lments slectionns par
lutilisateur.

Contrles CheckBox et OptionButton


Le contrle CheckBox est dune utilisation simple. Pensez utiliser les proprits Enabled
et Visible pour modifier laccessibilit du contrle, en fonction des informations entres
par lutilisateur. Vous pouvez aussi modifier la proprit Caption dun contrle CheckBox,
afin den faire varier la fonction. Pour un exemple dutilisation de ce contrle, reportezvous la section consacre la proprit Enabled, plus haut au chapitre prcdent.
Pour associer des contrles OptionButton, vous pouvez les placer sur un mme contrle
Frame ou leur affecter une mme proprit GroupName. Reportez-vous la section ddie
la proprit GroupName. Pour un exemple dexploitation de contrles OptionButton, reportezvous la section consacre la proprit Visible.

430

Excel et VBA

Contrle ScrollBar
Lexemple suivant utilise un contrle TextBox et un contrle ScrollBar pour permettre
lutilisateur de rechercher les annes bissextiles comprises entre lan0 et lan3000. Afin
dacclrer la recherche dune anne bissextile, lutilisateur pourra se dplacer par cent
annes en cliquant dans la barre de dfilement. Pour raliser cet exemple, placez un contrle
TextBox et un contrle ScrollBar sur une feuille et dfinissez leurs proprits ainsi:
Proprit

Valeur

Feuille
Name

fmAnnesBissextiles

Caption

Les annes bissextiles

Contrle TextBox
Name

txtAnne

Value

Lan 2000 est une anne bissextile

Locked

True

Contrle ScrollBar
Name

scrAnne

Value

2000

Min

Max

3000

SmallChange

LargeChange

100

Ajoutez ensuite le code suivant dans la section Dclarations de la fentre Code de la feuille:
Private Sub scrAnne_Change()
Dim varAnne As Single
varAnne = scrAnne.Value
txtAnne.Value = "Lan " & varAnne & " est une anne bissextile."
End Sub

La procdure scrAnne_Change sera dclenche chaque fois que lutilisateur modifiera


lemplacement du curseur sur le contrle ScrollBar nomm "scrAnne". Cette procdure
dclare la variable varAnne et lui affecte la valeur de la proprit Value de scrAnne.
La proprit Value du contrle TextBox txtAnne est ensuite dfinie, et la zone ddition

Chapitre 14

Matriser le comportement des contrles 

431

affiche la chane "Lan varAnne est une anne bissextile.", o varAnne est la valeur de la
variable varAnne.
Slectionnez la feuille et cliquez sur le bouton Excuter de la barre doutils Standard afin
dexcuter la feuille. La feuille prsente la Figure14.20 saffiche. La barre de dfilement
permet de modifier lanne affiche dans la zone de texte. Lorsque vous cliquez sur lune
des flches de dfilement, la valeur du contrle est incrmente ou dcrmente de4 (la
valeur de SmallChange). Lorsque vous cliquez dans la barre, entre le curseur et une des
flches de dfilement, la valeur du contrle est incrmente ou dcrmente de 100 (la
valeur de LargeChange).
Figure14.20
Pour atteindre une anne
loigne de la valeur actuelle,
dplacez-vous 100ans par
100ans, en cliquant lintrieur de la barre plutt que sur
les flches de dfilement.

Ce programme fonctionne bien tant que lutilisateur dplace le curseur en cliquant sur
lune des flches de la barre de dfilement, ou lintrieur de celle-ci. Mais si lutilisateur dplace le curseur en faisant glisser le curseur sur la barre de dfilement, la valeur du
contrle scrAnne nest plus matrise par le programme. Une valeur ne reprsentant pas
une anne bissextile peut alors tre slectionne et affiche dans la barre de dfilement.
Partant du constat que toute anne bissextile divise par 4 est gale un nombre entier, et
que tout nombre multiple de4 correspond une anne bissextile, vous pouvez exploiter
cette condition pour vrifier que la valeur du contrle correspond une anne bissextile. La
condition ncessaire et suffisante pour que la valeur du contrle scrAnne corresponde
une anne bissextile est donc:
Int(scrAnne.Value / 4) = scrAnne.Value / 4

La fonction Visual Basic Int renvoie la valeur entire du nombre spcifi entre parenthses.
La condition pose ici est que la valeur renvoye par la division de scrAnne par4 est gale
la valeur entire de cette division.
Modifiez la procdure scrAnne_Change de la faon suivante:
Private Sub scrAnne_Change()
While Not Int(scrAnne.Value / 4) = scrAnne.Value / 4
scrAnne.Value = scrAnne.Value - 1
Wend

432

Excel et VBA

Dim varAnne As Single


varAnne = scrAnne.Value
txtAnne.Value = "Lan " & varAnne & " est une anne bissextile."
End Sub

La boucle While...Wend dcrmente la valeur de scrAnne tant que la condition pose


nest pas respecte (While Not) la boucle sexcute donc au maximum trois fois. Ainsi,
si lutilisateur opre un glisser-dplacer du curseur de dfilement, nous sommes assurs
que la valeur de scrAnne sera modifie si ncessaire, afin de correspondre une anne
bissextile.

Contrle SpinButton
Dans lexemple suivant, un contrle SpinButton est plac ct dun contrle TextBox,
et permet de slectionner sept valeurs. Un jour de la semaine est affect chacune des
sept valeurs possibles et affich dans la zone de texte. Pour raliser cet exemple, placez
un contrle TextBox et un contrle SpinButton, une feuille et attribuez-leur les proprits
suivantes:
Proprit

Valeur

Feuille
Name

fmJour

Caption

Choix du jour

Contrle TextBox
Name

txtJour

Value

Lundi

Locked

True

Contrle SpinButton
Name

spbJour

Value

Min

Max

SmallChange

Ouvrez ensuite la fentre de code de la feuille et placez le code suivant (sans la numrotation des lignes) dans la section Dclarations de la fentre Code de la feuille:

Chapitre 14

Matriser le comportement des contrles 

433

1: Private Sub spbJour_Change()


2:
Dim varBoutonToupie As Single
3:
varBoutonToupie = spbJour.Value
4:
txtJour.Value = QuelJour(varBoutonToupie)
5: End Sub
6: Private Function QuelJour(varBoutonToupie)
7:
Select Case varBoutonToupie
8:
Case 1
9:
QuelJour = "Dimanche"
10:
Case 2
11:
QuelJour = "Samedi"
12:
Case 3
13:
QuelJour = "Vendredi"
14:
Case 4
15:
QuelJour = "Jeudi"
16:
Case 5
17:
QuelJour = Mercredi
18:
Case 6
19:
QuelJour = "Mardi"
20:
Case 7
21:
QuelJour = "Lundi"
22:
End Select
23: End Function

Slectionnez la feuille et cliquez sur le bouton Excuter de la barre doutils Standard afin
dexcuter la feuille. La feuille prsente la Figure 14.21 saffiche. Le bouton toupie
permet de modifier le jour affich dans la zone de texte. Lorsque Dimanche saffiche dans
la zone de texte, la flche de dfilement Bas du bouton toupie est sans effet. Lorsque Lundi
saffiche dans la zone de texte, la flche de dfilement Haut est sans effet.
Figure14.21
Un clic sur une flche de dfilement du contrle augmente
ou diminue sa valeur de1 et
affiche le jour correspondant.

La procdure spnJour_Change se dclenche chaque fois que la valeur du contrle spnJour


est modifie, cest--dire chaque fois que lutilisateur clique sur lune des flches de dfilement du bouton toupie. La variable varBoutonToupie est alors dclare (ligne2) et la valeur

434

Excel et VBA

du contrle SpinButton spbJour lui est affecte. la ligne4, la proprit Value du contrle
TextBox txtJour est affecte lexpression QuelJour(VarBoutonToupie), qui appelle la
fonction QuelJour en lui passant largument varBoutonToupie.
La fonction QuelJour dtermine le texte afficher dans la zone ddition du contrle. Des
lignes 7 22, une instruction de contrle Select Case...End Select est utilise pour
interroger la valeur de varBoutonToupie. Pour chacune des valeurs possibles pour varBou
tonToupie, une chane de caractres est affecte la fonction.
La fonction QuelJour termine, la procdure appelante reprend la main, et linstruction de
la ligne4 peut sexcuter. La valeur de la fonction QuelJour est alors affiche dans la zone
de texte.
Nous allons maintenant modifier ce programme afin que les flches de dfilement Haut
et Bas du bouton toupie permettent de passer de Lundi Dimanche, et inversement. Une
technique courante pour quun bouton toupie gnre des valeurs en boucle consiste autoriser une valeur minimale et une valeur maximale de plus pour le contrle, qui ne seront
pas visibles pour lutilisateur, mais exploites par une instruction conditionnelle pour crer
la boucle.
Dfinissez la proprit Min du contrle SpinButton 0 et sa proprit Max, 8. Modifiez la
procdure spbJour_Change de la faon suivante:
1: Private Sub spbJour_Change()
2:
If spbJour.Value = 0 Then
3:
spbJour.Value = 7
4:
ElseIf spbJour.Value = 8 Then
5:
spbJour.Value = 1
6:
End If
7:
Dim varBoutonToupie As Single
8:
varBoutonToupie = spbJour.Value
9:
txtJour.Value = QuelJour(varBoutonToupie)
10: End Sub

ntion
Atte

Lorsque la proprit Value dun contrle ScrollBar ou SpinButton est gale


sa proprit Max ou Min, la redfinition de la valeur de lune de ces proprits
dans la fentre Proprits entrane aussi la redfinition de la proprit Value.
Dans le cas prsent, laffectation de la valeur8 la proprit Max redfinira
aussi la proprit Value du contrle 8. Vous devez par consquent redfinir 7
la proprit Value, aprs avoir modifi la valeur de la proprit Max.

La structure conditionnelle ajoute interroge la valeur du contrle spbJour. Si lutilisateur


clique sur la flche de dfilement Haut du bouton toupie alors que sa valeur est1 (la zone

Chapitre 14

Matriser le comportement des contrles 

435

de texte affiche Lundi), sa valeur passe 0 (Min) et la structure conditionnelle (lignes2 et


3) la redfinit 7 (Max moins1). Si lutilisateur clique sur la flche de dfilement Bas du
bouton toupie alors que sa valeur est7 (la zone de texte affiche Dimanche), sa valeur passe
8 (Max) et la structure conditionnelle (lignes4 et 5) la redfinit 1 (Min plus1).

Info

La procdure conditionnelle grant les valeurs en boucle du bouton toupie peut


tout aussi bien scrire ainsi:
If spbJour.Value = spbJour.Min Then
spbJour.Value = spbJour.Max - 1
ElseIf spbJour.Value = spbJour.Max Then
spbJour.Value = spbJour.Min+1
End If

Exploiter les informations dune feuille VBA


Pour exploiter les informations dune feuille VBA, vous devez passer les informations que
contient cette feuille une procdure dun module de code. Il vous suffit dappeler la
procdure qui rcuprera et traitera ces informations en spcifiant les valeurs des contrles
comme arguments passs.

pel
Rap

Les appels de procdure et le passage darguments la procdure appele ont


t traits au Chapitre5.

Lorsque vous souhaitez dvelopper une interface utilisateur pour simplifier une tche,
procdez selon les tapes suivantes:
1. Dveloppez votre feuille. Dterminez les proprits des diffrents contrles et crivez
les procdures vnementielles spcifiques aux contrles.
2. Dans un module de code, crivez une procdure qui affichera la feuille (NomFeuille.
Show). Vous pourrez ventuellement affecter par la suite cette procdure un bouton
de barre doutils ou une commande de menu (voir Chapitre11), de faon simplifier
lexcution du programme.
3. Votre feuille contiendra probablement un bouton de validation (OK). Crez une procdure vnementielle pour lvnement Clik de ce bouton. Cette procdure devra:

vrifier que les informations entres par lutilisateur sont valides;

masquer la feuille (Me.Hide);

appeler la procdure qui traitera les informations.

436

Excel et VBA

La procdure vnementielle suivante appelle la procdure ValidationConditions,


en lui passant pour arguments les valeurs des contrles TxtVolume, TxtPrixTrad,
TxtPrixAudio, chkDefinitif et chkImprimer.
Private Sub CmdOK_Click()
Instructions vrifiant la validit des donnes
Me.Hide
Call ValidationConditions(TxtVolume.Value, TxtPrixTrad.Value, _
TxtPrixAudio.Value, ChkDefinitif.Value, ChkImprimer.Value)
End Sub

La procdure ValidationConditions devra se trouver dans un module de code standard.


Son instruction de dclaration comprendra les arguments correspondant aux valeurs
passes par la procdure appelante. Elle pourra par exemple se prsenter comme suit:
Sub ValidationConditions(Volume, PrixTrad, Prix, DefinitifOuNon, ImprimerOuNon)
Instructions
End Sub

eil
Cons

Si vous devez recueillir de nombreuses informations, crez plusieurs feuilles


VBA et structurez-les de la faon suivante:
1. Affichage de la premire feuille.

2. Stockage des donnes de la feuille dans des variables dun module de code.

3. Masquage de la feuille

4. Affichage de la seconde feuille et retour au point 2.

Etc.

N. Appel de la procdure en charge de traiter les donnes entres dans les


diffrentes feuilles.

IV
Notions avances
de la programmation
Excel
Chapitre 15. Programmer des vnements Excel
Chapitre 16. Protger et authentifier des projets VBA
Chapitre 17. Exemple complet dapplication Excel

15
Programmer
des vnements Excel
Au sommaire de ce chapitre

Lobjet Application
Lobjet ThisWorkbook
Lobjet Worksheet

440

Excel 2010 et VBA

Vous avez dcouvert, au cours de cet ouvrage, lenvironnement de Visual Basic Editor,
les techniques de programmation en VBA et les outils daide au dveloppement de projet.
Ce chapitre vous apprendra grer prcisment les vnements utilisateur susceptibles
daffecter les objets Excel au cours dune utilisation classique du logiciel. Vous verrez quil
est possible de dtecter les actions de lutilisateur sur un classeur et de crer des procdures
affectes ces vnements.
Au mme titre que les procdures vnementielles cres pour les contrles ActiveX que
vous placez sur une feuille UserForm ou sur une feuille de calcul Excel, les classeurs et
les feuilles sont des objets auxquels vous pouvez affecter des procdures vnementielles.
Vous pouvez ainsi grer des vnements tels que la cration dun nouveau classeur, la
modification dune cellule, lactivation dune feuille,etc.

Lobjet Application
Au sommet du modle dobjets dExcelse trouve lobjet Application. Il reprsente lensemble de lapplication et est donc lobjet conteneur de tous les objets qui la composent.
Lobjet Application dExcel est particulirement intressant pour le dveloppeur. Il intgre
en effet la gestion dvnements de niveau application, susceptibles dintervenir lors dune
utilisation courante dExcel: cration dun nouveau classeur, ouverture ou fermeture dun
classeur, etc. Vous pouvez ainsi crer des procdures vnementielles destines grer
lesdits vnements.
Les sections suivantes vous indiquent la procdure suivre pour crer des procdures
vnementielles pour lobjet Application.

Dclaration et instanciation de lobjet Application


Les procdures destines grer les vnements utilisateur de niveau application ne peuvent
tre crites que dans un module de classe. Pour crire des procdures VBA destines grer
des vnements de niveau application, vous devez crer un module de classe et y dclarer
une variable objet de type Application laide du mot cl WithEvents. Ce dernier indique
que lobjet ainsi cr grera les vnements.
1. Affichez lExplorateur de projet. Cliquez du bouton droit sur lun des lments du projet
et, dans le menu contextuel qui saffiche, choisissez Insertion > Module de classe.
2. Par dfaut, le nouveau module est nomm Class1 (Class2 si le module Class1 existe
dj,etc.). Slectionnez-le puis appuyez sur la touche F4. Dans la fentre Proprits,
affectez un nom reprsentatif au module (ici, ModuleGestionEvt).
3. Ouvrez la fentre Code du module et saisissez-y linstruction suivante:

Public WithEvents MaVarApplication As Application

Chapitre 15

Info

Programmer des vnements Excel 

441

Le mot cl WithEvents nest valide que dans un module de classe.

Notre projet intgre maintenant un module de classe dans lequel nous avons dfini un objet
MaVarApplication de type Application, capable de grer les vnements. Pour pouvoir
lutiliser, nous devons maintenant crer une instance de cet objet et laffecter lobjet
Application dExcel. Cette procdure peut se trouver dans nimporte quel module de code.
Supposons ici que vous souhaitez que la gestion des vnements de niveau application
soit active ds louverture dExcel. Il vous suffit dcrire linstruction dinstanciation de
la variable dans une procdure vnementielle, affecte louverture du classeur PERSONAL.XLSB.
Procdez comme suit:
1. Dans lExplorateur de projet, double-cliquez sur lobjet ThisWorkbook du dossier
Microsoft Excel Objets. Sa fentre Code saffiche. Dans la section Dclaration de la
fentre Code, placez linstruction de dclaration suivante:
Dim MonInstance As New ModuleGestionEvt

o ModuleGestionEvt est le nom affect au module de classe cr dans la section


prcdente. Nous avons ainsi cr une instance de la classe ModuleGestionEvt.

2. Dans la zone Objet de la fentre Code, slectionnez Workbook. Les instructions dencadrement dune procdure vnementielle de type Open sont automatiquement cres.
Placez entre celles-ci linstruction daffectation de la variable MonInstance. La procdure doit se prsenter comme suit:
Private Sub Workbook_Open()
Set MonInstance.MaVarApplication = Application
End Sub

Linstruction daffectation de cette procdure affecte lobjet Application la proprit


MaVarApplication de lobjet MonInstance.

Vous pouvez maintenant crer des procdures vnementielles de niveau application.

Cration de procdures vnementielles de niveau application


Les procdures vnementielles de niveau application se trouveront dans le module de
classe cr dans la section prcdente. La cration de procdures vnementielles de niveau
application seffectue de la mme faon que les procdures vnementielles de contrles
ActiveX.

442

Excel 2010 et VBA

1. Ouvrez la fentre Code du module de classe ModuleGestionEvt.


2. Dans la zone Objet, choisissez la variable MaVarApplication. Les instructions dencadrement dune procdure vnementielle de type NewWorkbook (vnement nouveau
classeur) sont automatiquement insres. Placez une instruction daffichage de bote
de dialogue laide de la fonction MsgBox:
Private Sub MaVarApplication_NewWorkbook(ByVal Wb As Excel.Workbook)
MsgBox Lutilisateur a cr un nouveau classeur, vbOKOnly+vbInformation
End Sub

Largument Wb de linstruction de dclaration de la procdure vnementielle correspond lobjet Workbook cr. Vous pouvez utiliser cette variable dans votre procdure
pour interroger et manipuler le classeur cr. Linstruction suivante affiche une bote
de dialogue dans laquelle est mentionn le nombre de feuilles du classeur:
MsgBox Le classeur contient & Wb.Sheets.Count & feuilles.

3. Enregistrez le projet et quittez Excel.


4. Relancez Excel et crez un nouveau classeur. La bote de dialogue prsente la
Figure15.1 saffiche.
La reconnaissance de lvnement NewWorkbook permet de crer des procdures destines
aider lutilisateur dans ses tches courantes. Vous pouvez par exemple afficher une feuille
UserForm contenant une liste doptions de classeurs. Lutilisateur sera alors invit indiquer le type de classeur quil souhaite raliser (Ventes du mois, Reprsentants, (Autre),etc.).
La procdure appele pourra insrer les donnes essentielles, crer le nombre de feuilles
voulues, enregistrer le classeur dans le bon dossier,etc.
Figure15.1
Une procdure peut tre
affecte la cration
dun nouveau classeur.

La zone de liste Procdure recense les vnements grs par lobjet Application. Vous
y trouverez notamment lvnement WindowActivate, correspondant lactivation dune
fentre par lutilisateur, ou encore WorkbookBeforePrint, qui survient avant lexcution
dune impression. Plus gnralement, les vnements dont le nom contient la chane
Before surviennent avant lexcution dune tche. Ces vnements intgrent gnralement
un argument Cancel permettant dannuler la tche. Vous pouvez ainsi crer une procdure

Chapitre 15

Programmer des vnements Excel 

443

qui sassurera que les conditions requises par une tche sont remplies avant dexcuter cette
tche. Les vnements dont le nom contient la chane After surviennent aprs lexcution
dune tche. Pour des informations supplmentaires sur les vnements de lobjet Appli
cation, choisissez lvnement voulu dans la liste Procdure. Slectionnez ensuite le nom
de lvnement dans la fentre Code et appuyez sur la touche F1.

Proprits de lobjet Application


Les proprits de lobjet Application peuvent tre lues ou modifies comme les proprits
de nimporte quel objet. Le Tableau15.1 prsente sommairement les proprits essentielles
de lobjet Application. Pour plus dinformations, saisissez le nom de la proprit dans une
fentre Code, slectionnez-le et tapez sur la touche F1. Vous accderez ainsi la rubrique
daide de la proprit.
Tableau15.1: Les proprits essentielles de lobjet Application

Proprit

Description

ActiveWorkbook

Renvoie lobjet Workbook correspondant au classeur actif (en lecture


seule).

ActiveSheet

Renvoie lobjet Worksheet correspondant la feuille active du classeur


spcifi (en lecture seule).

ActiveCell

Renvoie lobjet Range correspondant la cellule active de la feuille de


classeur spcifie (en lecture seule).

Caption

Renvoie le nom de lapplication, qui apparat dans la barre de titre. La


valeur par dfaut est "Microsoft Excel". La Figure15.2 reprsente une
session Excel dans laquelle nous avons redfini la valeur de la proprit
Caption de lobjet Application (Application.Caption = ChaneTitre).

Cursor

Permet de paramtrer lapparence du curseur au cours des diffrentes


phases dune macro. Quatre constantes correspondent aux quatre curseurs disponibles. Si vous modifiez lapparence du curseur au cours dune
macro, noubliez pas de redfinir la proprit Cursor xlDefault la
fin de lexcution de la macro. Sinon, le curseur conservera lapparence
qui lui a t affecte.

DisplayAlerts

Permet dviter laffichage de messages Excel au cours de lexcution


dune macro. Paramtrez cette proprit sur False pour viter laffichage
de messages Excel. Nomettez pas de redfinir la proprit DisplayA
lerts sur True en fin de macro.

DisplayFormulaBar,
DisplayScrollBars
et DisplayStatusBar

Dterminent respectivement si la barre de formule, les barres de dfilement et la barre dtat sont affiches (True) ou non (False).

444

Excel 2010 et VBA

Tableau15.1: Les proprits essentielles de lobjet Application (suite)

Proprit

Description

EnableCancelKey

Dtermine si lutilisateur peut ou non interrompre une macro en cours


dexcution laide de la combinaison Ctrl+Pause. Par dfaut, sa valeur
est xlInterrupt et lutilisateur peut interrompre la macro. Pour interdire linterruption dune macro par lutilisateur, dfinissez cette proprit sur xlDisabled ou sur xlErrorHandler.

PathSeparator

Renvoie le caractre utilis comme sparateur dans les chemins un


antislash (\) sous Windows et deux-points (:) sous Macintosh. Cette
proprit est utile si vous dveloppez des projets VBA tournant sous Windows et sur Macintosh (en lecture seule).

ScreenUpdating

Dtermine si laffichage cran est mis jour (True) ou non (False) lors
de lexcution dune macro. Ne pas mettre jour laffichage cran lors de
lexcution dune macro en amliore considrablement les performances.
De plus, les tches effectues sont invisibles pour lutilisateur tant que la
macro nest pas termine. La proprit ScreenUpdating est automatiquement redfinie True lorsque la macro sachve.

ThisWorkbook

Renvoie le classeur contenant le code de la macro qui sexcute. Il ne


sagit pas forcment du classeur actif (ActiveWorkbook).

UserName

Dtermine le nom dutilisateur. Il sagit par dfaut du nom apparaissant


dans longlet Gnral de la bote de dialogue Options.

ntion
Atte

Lorsque vous modifiez les proprits de lobjet Application au cours dune


macro, pensez les redfinir la fin de la macro.
Si vous dfinissez la proprit EnableCancelKey False, vous devez tre certain
que votre macro nest pas bogue et gre les exceptions. Si, par exemple, elle
excute une boucle linfini, vous naurez aucun moyen de linterrompre.

Figure15.2
Vous pouvez modifier le titre
de la session Excel.

Chapitre 15

Programmer des vnements Excel 

445

Mthodes de lobjet Application


Le Tableau15.2 prsente les mthodes les plus intressantes de lobjet Application.
Tableau15.2: Les mthodes essentielles de lobjet Application

Mthode

Description

Calculate

Effectue un calcul forc sur tous les classeurs ouverts. Utilisez cette mthode pour
mettre jour les classeurs ouverts lorsque Excel est paramtr pour effectuer des
calculs manuels (onglet Calcul de la bote de dialogue Options).

OnKey

Excute une procdure lorsquune combinaison de touches est active. Pour plus
dinformations, consultez laide en ligne de VBA.

OnTime

Programme lexcution dune procdure un moment prcis (ce soir 20h30 par
exemple). Pour plus dinformations, consultez laide en ligne de VBA.

OnUndo

Dfinit le texte plac derrire la commande Annuler du menu dition et la procdure


excute lorsque lutilisateur slectionne cette commande. Pour plus dinformations,
consultez laide en ligne de VBA.

Lobjet ThisWorkbook
Disponible dans le dossier Microsoft Excel Objets de lExplorateur de projet, lobjet
ThisWorkbook reprsente le classeur correspondant au projet affich dans lExplorateur de
projet (voir Figure15.3). Au mme titre que lobjet Application, il intgre des proprits
et des mthodes permettant de le manipuler et de se renseigner sur son tat. Il prend aussi
en charge des vnements qui permettront daffecter des procdures vnementielles grant
les vnements utilisateur susceptibles daffecter le classeur.
Pour crer une procdure vnementielle pour lobjet ThisWorkbook, double-cliquez sur
ThisWorkbook dans lExplorateur de projet. Dans la zone Objet de la fentre Code, slectionnez Workbook. Les instructions dencadrement dune procdure vnementielle Open
(ouverture du classeur) sont automatiquement insres.
Lobjet ThisWorkbook est un objet Workbook (classeur). Il possde donc les mmes proprits, et les mmes mthodes que tous les objets de ce type. Il prend en charge un nombre
important dvnements, tels que lvnement Open correspondant louverture du classeur
ou lvnement SheetActivate correspondant lactivation dune autre feuille de calcul
du classeur. Certains de ces vnements prennent des arguments permettant de connatre
prcisment laction effectue par lutilisateur. Par exemple, lvnement SheetActivate
prend pour argument un objet Worksheet qui correspond la feuille active.

446

Excel 2010 et VBA

Figure15.3
Les objets du dossier
Microsoft Excel Objets
correspondent au
classeur et ses feuilles
de calcul.

Les Feuilles
de calcul
Le classeur

Pour une liste dtaille des proprits, mthodes et vnements des objets Workbook, saisissez Workbook dans une fentre Code. Slectionnez ensuite ce mot et appuyez sur la touche
F1. Vous accdez la rubrique daide de lobjet Workbook. Les liens Proprits, Mthodes
et vnements affichent une liste des membres correspondants de lobjet Workbook.
Ouvrez nimporte quel classeur Excel. Ouvrez la fentre Code de lobjet ThisWorkbook du
projet de ce classeur et placez-y le code suivant:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox La feuille & Sh.Name & a t active., _
vbOKOnly+vbInformation, Evnement SheetActivate dtect
End Sub

Retournez dans Excel et activez les diffrentes feuilles. Une bote de dialogue indiquant
le nom de la feuille slectionne saffiche chaque fois que vous activez une feuille. Cette
fonction est intressante si vous souhaitez limiter laccs une feuille de calcul certains
utilisateurs. La procdure suivante affiche une bote de dialogue dans laquelle lutilisateur
est invit entrer un mot de passe sil tente daccder la feuille "Clients".
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.EnableCancelKey = xlDisabled
If Sh.Name = Clients Then
ActiveWindow.Visible = False
Dim MotDePasse As String
MotDePasse = InputBox(Entrez votre mot de passe., _

Chapitre 15

Programmer des vnements Excel 

447

Mot de passe requis)


If Not MotDePasse = jk85m Then
MsgBox Le mot de passe saisi est incorrect., _
vbOKOnly+vbInformation, Mot de passe incorrect
ThisWorkbook.Sheets(Feuil2).Activate
End If
Windows(Representants par clients.xlsx).Visible = True
End If
End Sub

Notez que nous avons dfini la proprit EnableCancelKey de lobjet Application xlDi
sabled, de faon que lutilisateur ne puisse pas interrompre la macro. La proprit Visible
de lobjet ActiveWindow (la fentre active) est dfinie False de manire masquer la
feuille de classeur tant que lutilisateur na pas entr le mot de passe. Si lutilisateur saisit un
mauvais mot de passe, la feuille Feuil2 du classeur est active. Enfin, la proprit Visible
de la fentre correspondant au classeur est dfinie True de faon afficher de nouveau le
classeur.
Figure15.4
Vous pouvez protger
laccs aux donnes dune
feuille de calcul Excel.

pel
Rap

Pour empcher lutilisateur de lire le mot de passe dans Visual Basic Editor,
protgez aussi votre projet par mot de passe.

Pour des informations supplmentaires sur les vnements de lobjet Application, choisissez lvnement voulu dans la liste Procdure. Slectionnez ensuite le nom de lvnement
dans la fentre Code et appuyez sur la touche F1.

448

Excel 2010 et VBA

Lobjet Worksheet
Le dossier Microsoft Excel Objets contient aussi des objets correspondant aux feuilles
du classeur (voir Figure15.3). Ces objets sont des objets Worksheet (feuille de calcul) et
possdent donc les mmes proprits et mthodes que les objets de ce type. Utilisez ces
objets pour crer des procdures vnementielles spcifiques aux feuilles.
Les feuilles grent les vnements prsents dans le Tableau 15.3. Pour accder aux
rubriques daide des vnements de lobjet Worksheet, ouvrez la fentre Code dun objet
Feuille. Choisissez lvnement voulu dans la liste Procdure, puis slectionnez le nom de
lvnement dans la fentre Code et appuyez sur la touche F1.
Tableau15.3: vnements grs par les objets Worksheet

vnement

Description

Activate

Survient lorsque la feuille de calcul est active.

BeforeDoubleClick

Survient avant le double-clic sur une feuille de calcul ou un graphique.


La procdure reoit lobjet Range correspondant la cellule sur laquelle
lutilisateur a double-cliqu. Utilisez largument Cancel pour annuler le
double-clic si ncessaire.

BeforeRightClick

Survient avant que le clic droit ne soit valid. La procdure reoit lobjet Range correspondant la cellule sur laquelle lutilisateur a cliqu du
bouton droit. Utilisez largument Cancel pour annuler le double-clic si
ncessaire.

Calculate

Survient lorsquun calcul est effectu. Cest le cas si Excel est paramtr
pour un calcul automatique et si la valeur dune cellule utilise comme
argument dans des fonctions de la feuille est modifie. Si Excel est paramtr pour un calcul manuel, lvnement survient lorsque lutilisateur
force le calcul.

Change

Survient lorsque la valeur dune cellule est modifie. La valeur dune


cellule est considre comme modifie aprs que lutilisateur a slectionn
une autre cellule. La procdure reoit lobjet Range correspondant la
cellule dont la valeur a t change.

Deactivate

Survient lorsque la feuille de calcul est dsactive, cest--dire lorsque


lutilisateur slectionne une autre feuille de calcul.

SelectionChange

Survient lorsque lutilisateur modifie la cellule ou la plage de cellules


slectionne. La procdure reoit lobjet Range correspondant la plage
slectionne.

La procdure suivante affiche une bote de dialogue invitant lutilisateur mettre jour les
classeurs lis sil modifie la valeur de la cellule B5 de la feuille de classeur. Sil clique sur

Chapitre 15

Programmer des vnements Excel 

449

le bouton Oui, la procdure ProcdureMiseAJour est appele et la valeur de la cellule B5


lui est passe comme argument.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = $B$5 Then
Dim MiseAJour As Integer
MiseAJour = MsgBox(Mettre jour les classeurs lis?, _
vbYesNo+vbQuestion, Donnes communes modifies)
If MiseAJour = vbYes Then
Call ProcdureMiseAJour(Target.Value)
End If
End If
End Sub

Figure15.5
Sil modifie la valeur de la
cellule B5, lutilisateur est
invit mettre jour les
classeurs lis.

ntion
Atte

Notez que les fentres Code des objets Workbook et Worksheet ne peuvent contenir que des procdures vnementielles. Les procdures appeles doivent se
trouver dans des modules de code.

Pour une liste dtaille des proprits, mthodes et vnements des objets Worksheet,
saisissez Worksheet dans une fentre Code.
Slectionnez ensuite ce mot et appuyez sur la touche F1. Vous accdez la rubrique daide
de lobjet Worksheet. Les liens Proprits, Mthodes et vnements affichent une liste des
membres correspondants de lobjet Sheet.

16
Protger et authentifier
des projets VBA
Au sommaire de ce chapitre

Les virus macros


Se protger des virus macros
Protger laccs aux macros
Authentifier ses macros

452

Excel 2010 et VBA

Les virus macro


Les virus macros font partie des virus les plus frquents. Il sagit en gnral de macros
conues pour sexcuter louverture dun document ou pour se substituer certaines
commandes de lapplication hte. Ces virus macros sont attachs un document et sont
susceptibles daffecter les documents du mme type sur une machine infecte.
Du fait de leur grande souplesse de personnalisation et de leur popularit, Word et Excel
sont les applications les plus touches par les virus macros. Les virus macros sont cependant
susceptibles de toucher tout type de document capable de stocker des macros.
Les virus macros peuvent tre plus ou moins nuisibles. Les virus les plus nfastes peuvent
supprimer des fichiers prsents sur le disque dur ou sur le rseau, ou endommager des
fichiers indispensables au bon fonctionnement dune application, voire du systme. Plus
pernicieux, un virus macro peut supprimer des donnes dans un document ou au contraire
ajouter des mots, et en modifier ainsi le sens.

Se protger des virus macros


Dans la version97 dOffice, la seule option de protection contre les virus macros consistait
prvenir lutilisateur de la prsence de macros dans un document au moment de son ouverture, et lui proposer dactiver ou de dsactiver les macros contenues dans le document.
Cependant, si lon dsactivait les macros, le document tait ouvert en lecture seule, et il
tait alors impossible dy apporter des modifications.
Depuis la version2000 dOffice, Microsoft a introduit deux nouveauts ddies la scurit
et la protection contre les virus macros: la possibilit de dfinir des niveaux de scurit,
comparables ceux qui existaient dj dans Internet Explorer, et la signature lectronique
des macros VBA.

Dfinir un niveau de scurit dans Excel 2010 et Excel 2007


Les options de scurit ont sensiblement t modifies dans les versions 2010 et 2007
dExcel. Pour dfinir les options de scurit, procdez comme suit:
1. Cliquez sur longlet Fichier (le bouton Office avec Excel 2007) puis, dans le volet qui
saffiche, sur le bouton Options Excel.
2. Dans le volet gauche de la fentre Options Excel, slectionnez Centre de gestion de la
confidentialit. La fentre correspondante saffiche (voir Figure16.1).

Chapitre 16

Protger et authentifier des projets VBA

453

Figure16.1
Dfinissez les options
de scurit dExcel
dans cette fentre.

3. Cliquez sur le bouton Paramtres de gestion du centre de confidentialit.


La fentre Centre de gestion de la confidentialit est compose donglets. Nous


prsentons sommairement ceux qui nous intressent ci-aprs (pour plus dinformations, consultez laide dExcel):

diteurs approuvs. Il sagit des diteurs dont vous reconnaissez les signatures numriques dignes de confiance. Les macros des documents signs par ces
diteurs seront actives.

Emplacements approuvs. Vous trouverez ici la liste des dossiers approuvs.


Les macros des documents placs dans ces dossiers seront actives. Vous pouvez
ajouter des dossiers la liste par dfaut.

Documents approuvs. linstar des emplacements approuvs, les macros des


documents approuvs sont actives.

Complments. Vous pouvez dfinir dans cette fentre les options dactivation des
complments Excel des modules qui ajoutent des fonctions aux programmes
Office. Excel est livr avec un certain nombre de complments, tels que le Solveur
ou lAssistant Somme conditionnelle. Pour connatre les complments installs,
en ajouter ou en supprimer, retournez la fentre Options Excel et activez le volet
Complments.

454

Excel 2010 et VBA

Paramtres ActiveX. Il sagit des options dactivation des contrles ActiveX.

Paramtres des macros. Dfinissez ici les rgles dactivation des macros:
Dsactiver toutes les macros sans notification: les macros attaches aux documents qui ne se trouvent pas un emplacement approuv seront dsactives sans
que lutilisateur en soit averti.
Dsactiver toutes les macros avec notification (valeur par dfaut): les macros
des documents situs hors dun emplacement approuv seront dsactives, et
lutilisateur en sera averti par un message affich dans la barre de message (voir
Figure16.2). Le bouton Activer le contenu (Options dans Excel 2007) permet
dactiver les macros du document pour la session en cours.

Figure16.2
Par dfaut, les macros sont
dsactives et lutilisateur
en est averti via la barre de
messages.

Dsactiver toutes les macros lexception des macros signes numriquement:


les macros situes un emplacement autoris ou signes numriquement par
un diteur que vous avez approuv (voir ci-dessus) seront automatiquement
actives. Dans le cas contraire, lutilisateur pourra choisir dactiver ou non les
macros.
Activer toutes les macros: les macros seront actives sans aucun contrle du
Centre de confidentialit. Pratique lorsque vous dveloppez des projets VBA
et ne souhaitez pas avoir activer les macros manuellement, cette option est
dconseille avec les documents provenant de sources extrieures.

Mode protg. Il permet douvrir les fichiers potentiellement dangereux en en


dsactivant les macros.

Barre de message. Permet de dfinir si un message saffiche ou non lorsque le


contenu actif dun document ouvert est dsactiv.

Contenu externe. On dfinit ici le comportement dExcel lorsque les macros


tablissent des connexions avec des sources externes, cest--dire avec dautres
fichiers. Il peut sagir de fichiers Excel ou dautres types de donnes.

ce
Astu

Pour accder directement aux options de scurit des macros, cliquez sur le
bouton Scurit des macros de longlet Dveloppeur.

Chapitre 16

Protger et authentifier des projets VBA

455

Dfinir un niveau de scurit avec Excel 2000, XP et 2003


Les niveaux de scurit permettent de dfinir les conditions dans lesquelles les macros
contenues dans un document seront actives ou dsactives. Vous pouvez ainsi dfinir des
niveaux de scurit adapts aux diffrents utilisateurs, en leur laissant ou non dcider de la
fiabilit des macros contenues dans un document.
Excel2003 permet de choisir parmi quatre niveaux de scurit tandis que les versions antrieures proposent trois options. Pour dfinir un niveau de scurit, procdez comme suit:
1. Choisissez Outils > Macro > Scurit afin dafficher la bote de dialogue Scurit
(voir Figure16.3).
Figure16.3
Dfinissez un niveau de scurit dans la bote de dialogue
Scurit.

2. Activez longlet Niveau de scurit si ncessaire et cochez lune des options de scurit disponibles:
Niveau de scurit trs lev (Office2003 seulement). Cest le lieu de stockage
des macros qui en dfinit la fiabilit. Seules les macros de documents stock dans
des emplacements dfinis comme fiables seront excutes.
Niveau de scurit lev. Seules les macros signes numriquement, cest--dire
authentifies par leur dveloppeur, et dont la signature a t ajoute la liste des
sites dignes de confiance seront actives. Lutilisateur choisira dactiver ou de
dsactiver les macros signes mais dont la signature ne fait pas partie de la liste
des sources fiables. Toutes les autres macros non signes seront dsactives sans
que lutilisateur en soit prvenu.
Niveau de scurit moyen. Les macros signes seront traites de la mme faon
que dans le cas dun niveau de scurit haut. Par contre, lutilisateur sera averti de
la prsence de macros non signes et invit activer ou dsactiver ces macros
(voir Figure16.4).

456

Excel 2010 et VBA

Niveau de scurit bas. Toutes les macros seront actives, quelles soient signes
ou non.

3. Validez en cliquant sur OK.


Figure16.4
Le niveau de scurit moyen
laisse lutilisateur le soin
dactiver ou de dsactiver
les macros non identifies
comme provenant dune
source fiable.

Lorsque des macros sont dsactives (de faon automatique dans le cas dun niveau de
scurit haut, ou par choix de lutilisateur dans le cas dun niveau de scurit moyen),
celles-ci restent tout de mme accessibles dans la bote de dialogue Macros. Si vous tentez
dexcuter une macro dsactive, un message vous informe que vous ne pouvez pas excuter
les macros stockes dans ce document. Pour pouvoir excuter les macros, vous devez alors
fermer le document, redfinir un niveau de scurit moyen ou bas si ncessaire, puis rouvrir
le document.

Les signatures numriques


Les signatures numriques permettent leurs auteurs de certifier la provenance des macros
quils distribuent. Pour ajouter une signature numrique la liste des sources fiables, slectionnez longlet diteurs approuvs du Centre de gestion de la confidentialit. Les macros
portant les signatures listes ici sont considres comme fiables. Elles sont donc actives
sans que vous soyez prvenu de leur existence, et ce quel que soit le niveau de scurit
choisi (Figure 16.5).
Figure16.5
Les signatures numriques
considres comme sources
fiables apparaissent ici.

Chapitre 16

it
ibil
pat
m
Co

eil
Cons

Protger et authentifier des projets VBA

457

Pour consulter la liste des sources fiables avec une version dExcel antrieure
2007, choisissez Outils > Macro > Scurit, puis activez longlet Sources fiables
de la bote de dialogue Scurit.

Choisissez un niveau de scurit adapt vos utilisateurs et votre utilisation


des macros. Si vous travaillez dans une entreprise qui dveloppe ses propres
macros et nutilise a priori pas de macros issues de sources extrieures, la
signature des macros de la socit associe un niveau de scurit haut constituera un choix adapt. Le niveau de scurit lev constitue galement le bon
choix pour des utilisateurs qui ne sont pas conscients des dangers lis aux virus
macros.
Par contre, si vous utilisez des macros provenant de sources extrieures
variables, le niveau de scurit lev entranera la dsactivation de toutes les
macros non signes, et ce sans que lutilisateur ne soit prvenu de lexistence de
ces macros. Un niveau de scurit moyen se rvlera alors plus adapt, condition de sensibiliser les utilisateurs aux dangers des virus macros et de fixer des
rgles pour lactivation ou la dsactivation des macros.
Le niveau de scurit bas ne devrait tre appliqu que dans des conditions exceptionnelles. Par exemple, si vous dveloppez un nombre important de macros, que
vous ne disposiez pas dune signature numrique, et que vous souhaitiez que les
macros des documents que vous ouvrez soient toujours actives, vous pourrez
activer le niveau de scurit le plus bas. Il est alors recommand de travailler
sur une machine communiquant le moins possible avec lextrieur, quipe dun
antivirus rcent, et deffectuer des sauvegardes quotidiennes de vos donnes.
Si la dfinition dun niveau de scurit adapt constitue une barrire de scurit importante, il est fortement recommand de complter cette protection par
lutilisation dun antivirus. Depuis la version2000, Office intgre une nouvelle
technologie qui permet aux antivirus de fonctionner depuis Office. Les antivirus
compatibles Officepeuvent ainsi vrifier si un document contient des virus avant
son ouverture.

Effectuer des sauvegardes des macros


Vous pouvez prendre toutes les prcautions imaginables, dfinir le niveau de scurit le
plus lev et installer le tout dernier antivirus compatible Office, vous ne serez jamais
labri dun virus qui contourne les barrires mises en place, ou dun simple "crash" de votre
disque dur! Si vous avez pass des jours, voire des mois dvelopper des programmes
VBA et si vous vous retrouvez du jour au lendemain sans la moindre ligne de code, vous
risquez fortement de dtruire votre ordinateur.

458

Excel 2010 et VBA

Ne prenez pas de risques inutiles et respectez cette rgle incontournable : effectuez des
sauvegardes rgulires de vos donnes sensibles. En sauvegardant les classeurs et les
modles auxquels sont attaches vos macros, vous sauvegarderez galement le projet VBA
correspondant. Le classeur PERSONAL.XLSB contiendra probablement lessentiel de vos
macros Excel. Une autre solution consiste exporter les modules et les feuilles et sauvegarder les fichiers ainsi gnrs en lieu sr.
Pour exporter un module ou une feuille:
1. Slectionnez le module ou la feuille voulu dans lExplorateur de projet.
2. Cliquez du bouton droit et, dans le menu contextuel qui saffiche, slectionnez Exporter un fichier.
3. La bote de dialogue Exporter un fichier saffiche (voir Figure16.6). Le type du fichier
export varie selon llment supprim:

Les modules standard ou modules de code sont exports sous la forme de fichiers
Basic portant lextension .bas. Les fichiers .bas sont des fichiers texte, et peuvent
donc tre consults et modifis dans un diteur de texte tel que le Bloc-notes de
Windows.

Les feuilles sont exportes sous la forme de deux fichiers Feuille portant les
extensions .frm et .frx. Le premier est un fichier texte contenant quelques donnes
propres la feuille (telles que son nom, sa taille, sa position lors de laffichage),
ainsi que le code qui lui est attach. Le second ne peut tre lu dans un diteur
de texte et contient toutes les autres informations (essentiellement les donnes
propres aux diffrents contrles de la feuille).

Les modules de classe sont exports sous la forme de fichiers Classe portant
lextension .cls.

4. Indiquez le rpertoire et le nom denregistrement, puis cliquez sur le bouton Enregistrer.


Figure16.6
Indiquez le nom du fichier
export et son dossier denregistrement.

Chapitre 16

Protger et authentifier des projets VBA

459

Une fois un fichier export, vous pouvez limporter dans nimporte quel projet. Pour importer les modules et les feuilles dans un projet, affichez la fentre de lExplorateur de projet,
cliquez droit sur lun des lments du projet et choisissez la commande Importer un fichier.
Slectionnez ensuite le fichier importer (.bas, .frm ou .cls).

Protger laccs aux macros


Il est parfois ncessaire de protger ou de limiter laccs aux macros. La protection des
macros peut consister interdire laccs au code dun projet pour en prserver lintgrit,
ou limiter le droit dexcution des macros.

Verrouiller un projet
Si dautres utilisateurs accdent vos macros, ou si vous installez des macros sur dautres
postes et que vous ne souhaitez pas que le code puisse tre modifi, vous pouvez simplement protger laccs au code du projet par mot de passe. Pour verrouiller un projet, procdez comme suit:
1. Affichez lExplorateur de projet de faon y visualiser le projet.
2. Cliquez droit sur le nom du projet et slectionnez la commande Proprits de projet.
3. Activez longlet Protection et cochez la case Verrouiller le projet pour laffichage (voir
Figure16.7).
4. Dans les zones dfinies cet effet, saisissez deux reprises le mot de passe qui sera
ensuite demand pour accder au projet, puis validez.
Figure16.7
Protgez votre projet
par un mot de passe.

460

Excel 2010 et VBA

Le verrouillage du projet prendra effet ds la prochaine ouverture du document. Lorsquun


projet est verrouill par un mot de passe, ce mot de passe est ncessaire pour accder au
code du projet ou pour supprimer une macro (voir Figure16.8).
Figure16.8
Le mot de passe est
maintenant requis pour
accder au code du
projet.

Lorsque lutilisateur tente daccder au projet...

... le mot de passe lui est demand

ntion
Atte

Si vous oubliez le mot de passe dfini au moment du verrouillage du projet, vous


naurez aucun moyen daccder au code de ce projet. Il est fortement recommand deffectuer une sauvegarde du projet ou den exporter les modules et les
feuilles avant de le protger par mot de passe.

Limiter les droits dexcution dune macro


Il est parfois ncessaire de dfinir des autorisations pour lexcution dune macro. Une
macro Excel peut par exemple permettre daccder des informations financires confidentielles. Une macro peut galement causer des dgts si elle nest pas utilise correctement;
son utilisation doit alors tre limite aux utilisateurs initis.
La solution consiste alors rclamer un mot de passe au moment de lexcution de la macro.
On cre pour cela une feuille intgrant une zone de texte dans laquelle lutilisateur est invit
entrer le mot de passe. Une procdure vrifie que le mot de passe fourni est correct avant
dexcuter le code. Le projet devra videmment tre protg contre laffichage, afin que
lutilisateur ne puisse pas consulter le mot de passe dans le code de la feuille.
Voici une faon dcrire le code de vrification du mot de passe. Crez une feuille UserForm
et placez sur celle-ci un contrle Label, un contrle TextBox et deux contrles Command
Button (votre feuille doit ressembler celle qui est prsente la Figure16.9). Dfinissez-en
les proprits comme indiqu ci-aprs.

Chapitre 16

Proprit

Protger et authentifier des projets VBA

461

Valeur

Feuille
Name

fmMotDePasse

Caption

Entrez le mot de passe

Contrle Label
Name

LbMotdePasse

Caption

Entrez ci-aprs le mot de passe requis pour lexcution de cette


commande

Contrle TextBox
Name

TxtMotDePasse

PasswordChar

Contrle CommandButton 1
Name

CmdOK

Caption

OK

Default

True

Contrle CommandButton 2
Name

CmdAnnuler

Caption

Annuler

Cancel

True

Figure16.9
La feuille fmMotDePasse en
mode Excution.

Insrez ensuite le code suivant dans la fentre Code de la feuille.


1: Private Sub UserForm_Initialize()
2:
txtMotDePasse.Value =
3:
txtMotDePasse.SetFocus
4: End Sub
5:
6: Private Sub cmdAnnuler_Click()
7:
Unload Me

462

Excel 2010 et VBA

8:
MsgBox Cette commande ne peut tre excute sans le mot de passe., _
9:
vbOKOnly + vbExclamation, Fin de la commande
10:
End
11: End Sub
12:
13: Private Sub cmdOK_Click()
14:
On vrifie si le mot de passe entr est bon.
15:
If txtMotDePasse.Text = ftg87 Then
16:
Unload Me
17:
Else
18:
MsgBox Le mot de passe fourni nest pas correct., _
19:
vbOKOnly + vbExclamation, Mot de passe incorrect
20:
txtMotDePasse.Value =
21:
txtMotDePasse.SetFocus
22:
End If
23: End Sub

Pour tester ce programme, insrez la procdure suivante dans nimporte quel module de
code et excutez-la.
Sub TestMotDePasse()
fmMotDePasse.Show
MsgBox Si ce message saffiche, cest que le programme se poursuit.
End Sub

Cette procdure appelle la feuille de vrification du mot de passe (fmMotDePasse). Elle ne


reprendra la main si le mot de passe entr dans la feuille est correct, et affichera alors un
message indiquant que le code se poursuit.
La premire procdure (lignes1 4) sexcute chaque affichage de la feuille. Elle affecte
une chane vide la zone de texte et lui passe le focus.
La procdure suivante (lignes6 11) sexcute lorsque lutilisateur clique sur le bouton
libell Annuler ou tape sur la touche chap. La feuille est alors dcharge et un message
informe lutilisateur que la commande prend fin. Linstruction End met fin lexcution du
programme.
La procdure cmdOK_Click se dclenche lorsque lutilisateur clique sur le bouton OK ou
tape sur la touche Entre ( condition que le focus ne soit pas sur le bouton Annuler).
Lignes15 22, une structure conditionnelle If...Then...Else vrifie que le mot de passe
entr est correct, cest--dire que lutilisateur a saisi ftg87 (ligne15) dans la zone de texte.
Si tel est le cas, la feuille est dcharge et la procdure ayant appel laffichage de la feuille
reprend la main. Dans le cas contraire, un message indique lutilisateur que le mot de
passe entr est incorrect. La zone de texte est alors vide de la valeur prcdemment entre
et reprend le focus.

Chapitre 16

ntion
Atte

Protger et authentifier des projets VBA

463

Lignes7 et 16, nous avons utilis le mot cl Unload et non Hide pour faire disparatre la feuille. Rappelez-vous que Hide masque la feuille mais ne libre pas
les ressources mmoire quelle exploite. Si vous remplacez linstruction Unload
Me de la ligne16 par linstruction Me.Hide, la prochaine fois que la feuille sera
affiche au cours de la session, le mot de passe sera dj affich dans la zone de
texte. Il suffira alors lutilisateur de cliquer sur le bouton OK pour excuter
la macro.

Le programme prsente ici un bogue grave: si lutilisateur clique sur la croix de fermeture
de la fentre, aucun vnement nest dtect. La feuille se ferme et le programme se poursuit, comme si le mot de passe avait t fourni. Pour remdier ce problme, ajoutez au
code de la feuille la procdure suivante:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Me.Hide
MsgBox Cette commande ne peut tre excute sans le mot de passe., _
vbOKOnly + vbExclamation, Fin de la commande
End
End If
End Sub

Lvnement QueryClose est dtect lorsquune tentative de fermeture de la fentre se


produit. Largument Cancel permet dannuler la fermeture. Largument CloseMode indique
la cause de lvnement. Ici, la procdure est excute si lvnement correspond un clic
sur le bouton de fermeture de la fentre (CloseMode = vbFormControlMenu). Si vous ne
prcisez pas largument CloseMode pour lequel vous souhaitez que la procdure sexcute,
elle sexcutera dans nimporte quel contexte, y compris lorsque la mthode Unload sera
utilise dans le code. Dans ce cas, si lutilisateur clique sur le bouton Annuler, le message
linformant que le programme prend fin sera affich deux reprises dans le cadre des
procdures vnementielles cmdAnnuler_Click et UserForm_QueryClose.
Dans ce premier exemple, la feuille reste affiche jusqu ce que lutilisateur entre le mot
de passe correct ou quil clique sur le bouton Annuler. Vous pouvez galement choisir de
limiter le nombre dessais de saisie du mot de passe. La procdure cmdOK_Click reproduite
ci-aprs a t modifie de sorte que le programme prenne fin aprs trois tentatives infructueuses de saisie du mot de passe (les modifications apparaissent en gras dans le code).
Nous avons galement redfini la proprit Caption de la feuille "Entrez le mot de passe.
Tentative 1 sur 3" et modifi le code de manire que cette information soit mise jour dans
la barre de titre de la fentre chaque nouvelle tentative.
1: Private Sub cmdOK_Click()
2: La variable compteur servira compter le nbre de tentatives.

464

Excel 2010 et VBA

3: Static compteur As Byte


4: compteur = compteur + 1
5:
6:
If txtMotDePasse.Text = ftg87 Then
7:
Unload Me
8:
Else
9:
10:
Si cest la 3e fois que lutilisateur entre un mot
11:
de passe incorrect, le programme prend fin
12:
If compteur = 3 Then
13:
MsgBox Echec dans la saisiedu mot de passe. & _
14:
vbCr & La commande ne peut tre excute, _
15:
vbOKOnly + vbExclamation, Mot de passe incorrect
16:
End
17:
End If
18:
19:
MsgBox Le mot de passe fourni nest pas correct., _
20:
vbOKOnly + vbExclamation, Mot de passe incorrect
21:
txtMotDePasse.Value =
22:
txtMotDePasse.SetFocus
23:
Me.Caption = Entrez le mot de passe. Tentative & _
24:
compteur + 1 & sur 3
25:
26:
27:
End If
28:
29: End Sub

Excutez la feuille. Lorsque vous saisissez un mot de passe incorrect, un message vous en
informe et le titre de la fentre est mis jour de faon reflter le nombre de tentatives
(voir Figure 16.10). Si lutilisateur saisit trois fois de suite un mot de passe erron, un
message linforme que le programme ne peut tre excut et le programme prend fin (voir
Figure16.11).
Figure16.10
Le nombre de tentatives
saffiche dans la barre de
titre de la fentre.

La barre de titre indique le nombre de tentatives effectues

Chapitre 16

Protger et authentifier des projets VBA

465

Figure16.11
Aprs trois tentatives infructueuses, le programme prend fin.

La variable Compteur est dclare laide du mot cl Static en dbut de procdure. Notre
variable est ainsi incrmente de 1 chaque excution de la procdure, cest--dire chaque
fois que lutilisateur valide un mot de passe. Notez que nous navons pas intgr dinstruction affectant la valeur 0 la variable Compteur; une telle instruction aurait en effet rinitialis la variable 0 chaque excution de la procdure qui naurait alors jamais pris fin.

pel
Rap

Une variable statique est une variable qui conserve sa valeur entre les diffrents
appels dune procdure. Une variable statique au sein dun module de feuille
conserve sa valeur tant que la feuille saffiche.

Lignes 11 17, une structure If...Then...Else a t imbrique la structure conditionnelle initiale. Elle vrifie si compteur est gal 3, cest--dire si cest la troisime fois que
lutilisateur propose un mot de passe erron. Si tel est le cas, un message saffiche et linstruction End de la ligne16 interrompt le programme.
Enfin, lignes23 et 24, nous avons ajout une instruction qui met jour le texte affich dans
la barre de titre de la fentre. Pour dfinir quel sera le numro de la prochaine tentative, on
incrmente la valeur de Compteur (le nombre de tentatives effectues, y compris celle en
cours) de 1.
Telle quelle se prsente dans les deux versions du programme que nous avons donnes ici,
la feuille fmMotDePasse permet dexiger de lutilisateur un mot de passe tout moment de
lexcution dun programme. Il suffit pour cela de placer linstruction:
fmMotDePasse.Show

lendroit o lon souhaite que le mot de passe soit demand.


Ce programme peut cependant tre rendu plus souple et plus performant en contournant les
limitations un mot de passe (ici ftg87) et trois tentatives, toutes deux dfinies dans le
code de la feuille. Vous souhaiterez en effet probablement dfinir des mots de passe diffrents pour diffrents programmes, dont lutilisation sera limite diffrents utilisateurs.
La solution consiste appeler une procdure de validation en lui passant les valeurs "mot
de passe" et "nombre de tentatives" comme arguments. Celle-ci stockera ces valeurs dans

466

Excel 2010 et VBA

des variables publiques de niveau module (donc accessibles lensemble des modules du
projet) auxquelles les procdures de la feuille pourront accder.
Crez un nouveau module de code et affectez-lui un nom reprsentatif, par exemple
MotDePasse. Placez dans la fentre de code de celui-ci, le code suivant:
1:
2:
3:
4:
5:
6:
7:
8:

Public varMotDePasse As String


Public varNumTentatives As Byte
Sub ControleMotDePasse(MotDePasse As String, NumTentatives As Byte)
varMotDePasse = MotDePasse
varNumTentatives = NumTentatives
fmMotDePasse.Show
End Sub

Lignes 1 et 2 les variables de niveau module varMotDePasse et varNumTentatives sont


dclares publiques. La procdure ControleMotDePasse (lignes4 8) pourra tre appele
par nimporte quelle procdure en lui passant les arguments requis (le mot de passe et
le nombre de tentatives), afin de subordonner la poursuite de lexcution du programme
en cours la prsentation de ce mot de passe par lutilisateur. Cette procdure affecte
les valeurs quelle reoit comme arguments aux variables varMotDePasse et varNumTenta
tives, et appelle ensuite la feuille fmMotDePasse.
Modifiez ensuite le code de la feuille de la faon suivante (les modifications apparaissent
en gras):
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

Private Sub UserForm_Initialize()


txtMotDePasse.Value =
txtMotDePasse.SetFocus
Me.Caption = Entrez le mot de passe. Tentative 1 & _
sur & varNumTentatives
End Sub
Private Sub cmdAnnuler_Click()
Me.Hide
MsgBox Cette commande ne peut tre excute sans le mot de passe., _
vbOKOnly + vbExclamation, Fin de la commande
End
End Sub
Private Sub cmdOK_Click()
La variable compteur servira compter le nbre de tentatives.
Static compteur As Byte
compteur = compteur + 1

Chapitre 16

Protger et authentifier des projets VBA

467

20:
If txtMotDePasse.Text = varMotDePasse Then
21:
Unload Me
22:
Else
23:
24:
Si cest la Ne fois que lutilisateur entre un mot
25:
de passe incorrect, le programme prend fin
26:
If compteur = varNumTentatives Then
27:
MsgBox Echec dans la saise du mot de passe. & _
28:
vbCr & La commande ne peut tre excute, _
29:
vbOKOnly + vbExclamation, Mot de passe incorrect
30:
End
31:
End If
32:
33:
MsgBox Le mot de passe fourni nest pas correct., _
34:
vbOKOnly + vbExclamation, Mot de passe incorrect
35:
txtMotDePasse.Value =
36:
txtMotDePasse.SetFocus
37:
Me.Caption = Entrez le mot de passe. Tentative & _
38:
compteur + 1 & sur & varNumTentatives
39:
40:
41:
End If
42:
43: End Sub
44:
45: Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
46:
If CloseMode = vbFormControlMenu Then
47:
Me.Hide
48:
MsgBox Cette commande ne peut tre excute sans le mot de passe., _
49:
vbOKOnly + vbExclamation, Fin de la commande
50:
End
51:
End If
52: End Sub

Partout dans le code o il tait fait rfrence au nombre de tentatives ou au mot de passe,
nous avons remplac les valeurs fixes par des rfrences aux variables varMotDePasse et
varNumTentatives. Nous avons ajout une instruction dfinissant le titre de la fentre dans
la procdure Initialize de la feuille (lignes4 et 5), afin que le texte affich dans la barre
de titre reflte le nombre de tentatives autorises ds laffichage de la feuille. Ce titre est
ensuite mis jour chaque passage de la fentre (ligne38).
Ligne 20 la valeur de la zone de texte est maintenant compare la valeur stocke dans la
variable varMotDePasse, tandis que dans linstruction de la ligne26, la variable Compteur
est maintenant compare la valeur de varNumTentatives, afin de dfinir si toutes les tentatives autorises ont chou.

468

Excel 2010 et VBA

Pour appeler le programme mot de passe, il suffit maintenant de placer linstruction suivante
lendroit voulu:
Call ControleMotDePasse(MotDePasse, NumTentatives)

o MotDePasse est le mot de passe attendu, et NumTentatives le nombre de tentatives autorises. Pour tester ce programme, placez la procdure suivante dans nimporte quel module
du projet et excutez-la (voir Figure16.12).
1: Sub TestControleMotDePasse()
2: Dim maVar As String
3:
Call ControleMotDePasse(Bonjour, 1)
4:
maVar = Application.UserName
5:
MsgBox Mot de passe correct. & vbCr & Poursuite de lexcution., _
6:
vbOKOnly + vbInformation
7:
Call ControleMotDePasse(maVar, 5)
8:
maVar = Application.UserInitials & -vba
9:
MsgBox Mot de passe correct. & vbCr & Poursuite de lexcution., _
10:
vbOKOnly + vbInformation
11:
Call ControleMotDePasse(maVar, 6)
12:
MsgBox Mot de passe correct. & vbCr & Poursuite de lexcution., _
13:
vbOKOnly + vbInformation
14: End Sub

Linstruction de la ligne3 appelle le programme de contrle et attend que le mot de passe


Bonjour soit fourni ds la premire tentative. Linstruction de la ligne 7 attend que le
nom dutilisateur enregistr pour lapplication soit fourni et autorise 5 tentatives. Enfin,
ligne11, le mot de passe pass correspond aux initiales enregistres pour lutilisateur en
cours, suivies de -vba, et autorise six tentatives. Chaque fois que le bon mot de passe
est fourni par lutilisateur, la procdure TestControleMotDePasse reprend la main et un
message saffiche (lignes5, 9 et 12).
Figure16.12
Le titre de la fentre reflte le
nombre dessais autoriss.
Le nombre de tentatives
autoris est dfini lors de
l'appel de la procdure de
contrle

Chapitre 16

ce
Astu

Protger et authentifier des projets VBA

469

Vous pouvez galement limiter le nombre de caractres autoriss dans la zone


de texte de la feuille fmMotDePasse au nombre de caractres composant le mot
de passe. Insrez pour cela linstruction suivante dans la procdure UserForm_
Initialize de la feuille fmMotDePasse:
txtMotDePasse.MaxLength = Len(varMotDePasse).

pel
Rap

Pour un rappel sur la proprit MaxLength, reportez-vous au Chapitre 14.

Une ultime amlioration peut tre amene au programme : autoriser plusieurs mots de
passe pour excuter une macro. Cela peut se rvler ncessaire si vous dfinissez un mot
de passe par "groupe dutilisateurs". Vous pouvez par exemple limiter laccs certaines
macros aux utilisateurs du groupe "Financier", et dautres au groupe "Production". Si le
nombre de macros limites par mots de passe est important, dfinir un mot de passe par
macro deviendra rapidement ingrable, pour vous comme pour les utilisateurs finaux. Il est
alors conseill de dfinir un mot de passe par groupe. Si une macro est accessible aux deux
groupes, le mot de passe de chacun des groupes devra alors tre reconnu comme valide.
Voici les modifications apporter au programme pour autoriser jusqu trois mots de passe.
Modifiez le code du module MotDePasse de la faon suivante:
1: Public varMotDePasse1 As String, varMotDePasse2 As Variant, varMotDePasse3
As Variant
2: Public varNumTentatives As Byte
3:
4: Sub ControleMotDePasse(NumTentatives As Byte, MotDePasse1 As String, Optional
MotDePasse2 As String, Optional MotDePasse3 As String)
5:
varNumTentatives = NumTentatives
6:
varMotDePasse1 = MotDePasse1
7:
8:
On vrifie si plusieurs mots de passe ont t passs,
9:
et on affecte une valeur aux variables en consquence.
10:
If IsMissing(MotDePasse2) = True Then
11:
varMotDePasse2 = MotDePasse1
12:
Else
13:
varMotDePasse2 = MotDePasse2
14:
End If
15:
If IsMissing(MotDePasse3) = True Then

470

Excel 2010 et VBA

16:
17:
18:
19:
20:
21: End

varMotDePasse3 = MotDePasse1
Else
varMotDePasse3 = MotDePasse3
End If
fmMotDePasse.Show
Sub

Ligne 1, nous avons cr trois variables destines recevoir les 3 mots de passe autoriss.
Nous avons ensuite modifi la dclaration de la procdure ControleMotDePasse (ligne4) en
y ajoutant les arguments optionnels MotDePasse2 et MotDePasse3 (dclars avec le mot cl
Optional). Notez que nous avons d dplacer largument Numtentatives en dbut de liste
car un argument optionnel ne peut tre suivi dun argument obligatoire.
Deux structures conditionnelles (lignes10 14 et lignes15 19) vrifient ensuite si les
mots de passe optionnels ont t passs. Si largument correspondant au deuxime mot de
passe valide a t pass, la variable varMotDePasse2 se voit affecter la valeur de cet argument. Si largument na pas t pass, la variable varMotDePasse2 reoit la valeur de largument MotDePasse1 qui, lui, est obligatoire. Le mme traitement est appliqu la variable
varMotDePasse3, fonction du passage ou non de largument MotDePasse3.

pel
Rap

ntion
Atte

Le mot cl Optional indique quun argument nest pas obligatoire. La fonction


IsMissing peut tre utilise pour vrifier si largument a t pass ou non.

La fonction IsMissing ne fonctionne correctement quavec des arguments de


type Variant. Si vous dclarez les arguments MotDePasse2 et MotDePasse3 de
type String, la fonction IsMissing renverra toujours False, que les arguments
soient passs ou non. En consquence, les variables varMotDePasse2 et varMotDePasse3 se verront affecter une chane vide, qui sera reconnue comme mot
de passe valide.

Modifiez ensuite linstruction:


If txtMotDePasse.Text = varMotDePasse Then

de la procdure cmdOK_Click de faon que chacun des trois mots de passe autoriss soit
reconnu comme valide:
If txtMotDePasse.Text = varMotDePasse1 Or txtMotDePasse.Text = varMotDePasse2 Or
txtMotDePasse.Text = varMotDePasse3 Then

Chapitre 16

Protger et authentifier des projets VBA

471

Les instructions des lignes 10 19 permettent que les variables varMotDePasse2 et varMotDePasse3 ne soient jamais vides, et ce mme si les arguments
MotDePasse2 et/ou MotDePasse3 nont pas t passs la procdure ControleMotDePasse. Ce traitement est ncessaire pour quune erreur ne soit pas gnre
lors de la vrification de la comparaison du texte saisi par lutilisateur dans la
feuille aux valeurs contenues dans les variables varMotDePasse2 et varMotDePasse3.

Info

Pour appeler le programme mot de passe, il suffit maintenant de placer linstruction suivante
lendroit voulu:
Call ControleMotDePasse(NumTentatives, MotDePasse1, MotDePasse2, MotDePasse3)

o NumTentatives est le nombre de tentatives autorises et MotDePasse1, MotDePasse2 et


MotDePasse3 sont les mots de passe valides. MotDePasse2 et MotDePasse3 sont optionnels.
Pour tester ce programme, placez la procdure suivante dans nimporte quel module du
projet et excutez-la.
1: Sub TestControlePlusieursMotsDePasse()
2:

Call ControleMotDePasse(5, Bonjour)

3:

MsgBox Mot de passe correct. & vbCr & Poursuite de lexcution., _

4:

vbOKOnly + vbInformation

5:

Call ControleMotDePasse(5, Bonjour, Salut)

6:

MsgBox Mot de passe correct. & vbCr & Poursuite de lexcution., _

7:

vbOKOnly + vbInformation

8:

Call ControleMotDePasse(5, Bonjour, Salut, Coucou)

9:

MsgBox Mot de passe correct. & vbCr & Poursuite de lexcution., _

10:

vbOKOnly + vbInformation

11: End Sub

Chacune des instructions appelant la procdure de vrification du mot de passe (lignes2,


5 et 8) autorise 5tentatives. Lors du premier appel, seul le mot de passe Bonjour est pass
comme argument. Le deuxime appel passe galement la valeur Bonjour la procdure,
mais fournit aussi la valeur Salut pour largument optionnel MotDePasse2. Lun ou lautre
des mots de passe sera donc accept. Enfin, lors du troisime appel, tous les arguments sont
passs la procdure ControleMotDePasse, et les mots de passe Bonjour, Salut et Coucou
seront tous trois accepts. Chaque fois que le bon mot de passe est fourni par lutilisateur,
la procdure TestControlePlusieursMotsDePasse reprend la main et un message saffiche
(lignes3 et 9).

472

Excel 2010 et VBA

Authentifier ses macros


Dans les versions antrieures dOffice, le dveloppement des virus macros associ limpossibilit dauthentifier lorigine des macros posait un vrai problme pour les utilisateurs
amens dvelopper des macros ncessaires lutilisation de documents quils distribuaient. En effet, lorsquun utilisateur ouvrait un document qui lui avait t communiqu et
voyait safficher un message lui conseillant de dsactiver les "dangereuses" macros contenues dans ce document, il choisissait avec raison de suivre les recommandations qui lui
taient donnes.
La rponse de Microsoft ce problme a t lintgration de signatures numriques, et
ce depuis la version2000 dOffice. Les signatures numriques identifient la source dune
macro (le nom de la personne ou de la socit ayant dvelopp les macros). Lorsque vous
ouvrez un document contenant des macros signes numriquement, le dtail de la signature
de ces macros saffiche lcran.

eil
Cons

Le fait que des macros soient numriquement signes ne vous garantit pas de
leur fiabilit. Un dveloppeur malhonnte peut se procurer une signature lectronique pour signer des virus macros. Ne vous fiez aux signatures lectroniques
que si elles authentifient une personne ou une socit de votre connaissance.

Obtenir une authentification


Afin de pouvoir authentifier vos macros, vous devez vous procurer une signature lectronique auprs du service appropri. Un certificat authentifi peut tre achet auprs de
socits reconnues, telles VeriSign (http://www.verisign.com) ou Thawte (http://www.
thawte.com).
Vous pouvez galement crer vos propres certificats numriques (non authentifis) en utilisant lutilitaire de certification fourni avec Microsoft Office. Ouvrez le menu Dmarrer
puis, dans la liste des programmes, choisissez Microsoft Office > Certificat numrique pour
les projets VBA (voir Figure16.13).

Info

Si la commande Certificat numrique napparat pas dans le groupe Microsoft


Office, recherchez le fichier Selfcert.exe sur les CD-ROM dOffice.

Pour une liste exhaustive des organismes de certification, consultez laide en ligne dOffice
ou, dans la bote de dialogue reprsente la Figure16.13, cliquez sur le lien.

Chapitre 16

Protger et authentifier des projets VBA

473

Figure16.13
Vous pouvez crer
vos propres certificats
numriques.

Authentifier une macro


Lorsque vous avez obtenu une signature lectronique, il ne vous reste qu "signer" vos
macros. Pour signer une macro, procdez comme suit:
1. Slectionnez le projet que vous souhaitez authentifier dans lExplorateur de projet.
2. Choisissez Outils > Signature lectronique (voir Figure16.14).
3. Cliquez sur le bouton Choisir et, dans la fentre qui saffiche, choisissez la signature
lectronique que vous souhaitez affecter votre projet.
Figure16.14
La bote de dialogue Signature numrique permet de
grer les signatures affectes
vos projets.

17
Exemple complet
dapplication Excel
Au sommaire de ce chapitre

Prsenter un projet dapplication Excel


Crer un modle Excel
Dfinir et crer des interfaces utilisateur
crire des procdures ddition de documents

476

Excel 2010 et VBA

Ce chapitre constitue un rcapitulatif de lensemble des connaissances acquises au long de


votre lecture. Nous vous proposons dy crer un programme complet, tape par tape, de
sa dfinition son intgration linterface dExcel, qui mette en pratique lensemble des
connaissances acquises au cours de cet ouvrage.

Prsenter un projet dapplication Excel


Le programme que nous allons crire ici aura pour fonction de gnrer des factures de
droits dauteur et de mettre jour un tableau Word. La Figure17.1 prsente une facture
type.
Afin de simplifier et de scuriser cette tche, nous crerons des interfaces utilisateur adaptes, dans lesquelles il suffira dentrer les donnes ncessaires au programme. Le programme
aura pour fonction de gnrer les feuilles de paie, de les enregistrer et den imprimer un
nombre dexemplaires dfini par lutilisateur. Il mettra galement jour un tableau dans un
document Word rpertoriant les informations essentielles concernant le contrat.
Figure17.1
Une facture
droits dauteur type.

Chapitre 17

Exemple complet dapplication Excel 

477

Avant de commencer
Pour les besoins du programme, crez un fichier Word semblable celui reprsent la
Figure 17.2 et enregistrez-le sous le nom Contrats Auteurs.doc dans le dossier C:\Mes
documents\.

Figure17.2
Chaque fois quun contrat est dit, les donnes sont intgres dans un fichier Word.

Le programme VBA que vous dvelopperez dans ce chapitre utilise le contrle Calendrier pour inviter lutilisateur slectionner des dates. Celui-ci nest pas activ par dfaut,
commencer par le rfrencer dans la bote outils de Visual Basic. La prodcure est dcrite
la section "Personnaliser la bote outils" du Chapitre 12.

Info

Le contrle calendrier nest pas fourni avec la version 2010 dOffice. Il est
cependant trs simple de linstaller et de le rfrencer. Reportez-vous pour cela
la procdure susnomme.

Identification des informations recueillir


Les informations ncessaires ltablissement dune feuille de paie de droits dauteur sont
les suivantes:

Auteur. Nom et prnom (ou socit), adresse, code postal, ville, pays (facultatif).

Les adresses des auteurs sont stockes dans un fichier Excel (voir Figure 17.3). Une
interface permettra de slectionner lauteur dans la liste et mettra jour son adresse sans
quil soit ncessaire pour lutilisateur de la connatre. Si lauteur ne fait pas partie de
la liste, lutilisateur pourra saisir lensemble des coordonnes et les ajouter au fichier
Excel.

478

Excel 2010 et VBA

Le contrat pourra tre tabli au nom dune personne physique ou celui dune socit.
Dans le premier cas, un prnom devra tre fourni.
Figure17.3
La liste des auteurs
est stocke dans un
fichier Excel.

Info

Pour les besoins du programme, crez un fichier Excel semblable celui de la


Figure17.3 et enregistrez-le sous le nom Classeur Auteurs.xlsx dans le dossier
C:\Mes documents.

Ouvrage. Titre de louvrage et ISBN (International Standard Book Number, numro


identifiant louvrage de faon unique).

LISBN sera toujours format de la faon suivante: xxxx-y, o chaque x correspond


un chiffre, et chaque y une cl pouvant tre un chiffre ou une lettre.

Conditions de rmunration. Droits dauteur et avance sur droits dauteur.

Les droits dauteur sont un pourcentage du prix de vente de louvrage. Ce pourcentage


peut tre fixe ou variable (par exemple, 6% sur les 3000 premiers livres, puis 8%).
Lavance sur droits dauteur est facultative. Dans le cas dune avance, celle-ci pourra
tre verse en une fois ( la remise du manuscrit) ou en deux fois (une moiti la remise
et une moiti la parution).

Taxes. Les taxes retenues sur lavance sur droits dauteur sont la TVA, les AGESSA, la
CSG et le RDS. Le programme naura cependant pas les traiter, puisque nous crerons
un classeur modle dans lequel nous intgrerons les formules ncessaires.

Dates. Date de remise et date de parution.

La date de parution devra toujours tre postrieure la date de remise. Par ailleurs, si
moins de 40jours sparent la date de remise de la date de parution, une confirmation
sera demande lutilisateur.

Chapitre 17

Exemple complet dapplication Excel 

479

Options dimpression. Lutilisateur pourra choisir dimprimer ou non les documents


dits. Il pourra galement dfinir le nombre dexemplaires imprims pour le courrier et
pour les feuilles de paie.

Dfinition de la structure du programme


Afin dassurer une bonne lisibilit au programme et de pouvoir rutiliser les procdures
dans dautres conditions (par exemple, pour un programme quivalent concernant un travail
de traduction), les procdures seront aussi autonomes quil se peut. Nous devons ici dfinir
le squelette du programme (son flux), les modules de stockage des procdures et la faon
dont seront stockes les informations fournies par lutilisateur.

Le squelette du programme
Le programme sera structur de la faon suivante:
1. Dclaration des variables objet et liaison avec les fichiers lire ou manipuler.

Il sagit de crer les liaisons avec le rpertoire des auteurs et le document Word
complter.

2. Affichage des interfaces utilisateur.


On commence par se procurer lensemble des informations requises. Pour chaque


interface:

a. Chargement des feuilles (procdures Initialize).

b. Vrification des informations fournies par lutilisateur.

Les procdures vnementielles des feuilles vrifient la validit des donnes.

c. Stockage des donnes dans des variables.

Les interfaces sont appeles partir de la procdure principale.

Lorsque les donnes sont valides, les valeurs entres par lutilisateur sont affectes aux variables appropries, afin de pouvoir tre ensuite exploites par le
programme.

d. Masquage de linterface.

3. dition, impression ventuelle et enregistrement des feuilles de paie.


Un nouveau classeur fond sur un modle est cr. Les informations ncessaires sont
entres dans les cellules appropries.

480

Excel 2010 et VBA

4. Mise jour du tableau Word.


Une ligne est ajoute au tableau Word et les donnes du contrat y sont intgres.

5. Fin du programme et libration des ressources mmoire.


Crez un nouveau module de code et appelez-le ContratAuteur. Placez-y tout de suite
le corps de la procdure principale, en plaant sous forme de commentaires les phases
principales:
Sub EditionContratAuteur()
1. Liaisons des var. objet
2. Affichage des feuilles
3. Edition des feuilles de paie
4. Mise jour du tableau Word
5. libration des ressources mmoire
End Sub

Les modules
Les procdures seront regroupes par modules. Crez les modules suivants:

ContratAuteur. On y retrouvera les dclarations de variables, la procdure principale et


les procdures spcifiques au contrat dauteur. Les variables devront tre publiques afin
de pouvoir tre manipules partir de nimporte quel module, et notamment partir des
interfaces, afin de leur affecter les valeurs donnes entres par lutilisateur.

ContratsDivers. Ce module regroupera les procdures susceptibles dtre rutilises


par dautres programmes (par exemple un programme de contrat de traduction), telles
que limpression, lenregistrement,etc.

RepertoireAuteurs. Ce module regroupera les procdures destines manipuler le

rpertoire des auteurs. Les procdures devront tre publiques pour pouvoir tre appeles
partir du module ContratAuteur et manipules partir des interfaces utilisateur.

Le dossier Modules de lExplorateur de projet doit tre semblable celui de la Figure17.4.

Chapitre 17

Exemple complet dapplication Excel 

481

Figure17.4
LExplorateur de projet
ce stade de la cration du
programme.

Le stockage des informations fournies par lutilisateur


Les informations fournies par lutilisateur au travers des interfaces quil sera invit
complter seront stockes dans des types de donnes personnaliss afin de permettre un
regroupement des informations de mme type:

Le type Auteur contiendra les donnes relatives lauteur (nom et adresse) : nom,
prnom, adresse, code postal, ville, pays, socit.

Le prnom, le nom, ladresse, le code postal, la ville et le pays seront des valeurs de type
String (chane de caractres). La socit sera une valeur boolenne (contrat au nom
dune socit = True, contrat au nom dune personne physique = False).

Le type ConditionsAuteur rassemblera les donnes relatives louvrage et aux droits


dauteur (titre, ISBN, taux variable ou non, taux initial des droits dauteur sous forme
numrique et sous forme de chane, nombre dexemplaires affects par le taux initial,
taux au-del de x exemplaires sous forme numrique et sous forme de chane, avance
ou non, valeur de lavance, nombre de paiements, date de remise et date de parution).

Le titre, lISBN et les taux sous forme de chanes seront des valeurs de type String. Le
taux initial et le taux suivre, ainsi que le nombre de paiements sur lequel sera effectue
lavance seront des valeurs numriques de type Byte (suprieures 0 et infrieures
256). Le nombre dexemplaires sur lequel portera le taux initial et la valeur de lavance
ventuelle seront des valeurs numriques de type Integer. Le taux variable sera une
valeur boolenne (taux variable = True, taux fixe = False). Avance ou non correspond
galement une valeur boolenne (avance = True, pas davance = False). La date de
remise et la date de parution seront des valeurs de type Date.

482

Excel 2010 et VBA

Le type OptionsImpression rassemblera les informations concernant limpression du


document (imprimer ou non, imprimer ou non le courrier, imprimer ou non les feuilles
de paie, nombre dexemplaires du courrier imprimer et nombre dexemplaires des
feuilles de paie imprimer).

Limpression, limpression du courrier et limpression des feuilles de paie seront des


valeurs numriques (Imprimer = True, Ne pas imprimer = False). Le nombre de copies
du courrier et le nombre de copies des feuilles de paie seront des valeurs de type Variant.
Placez dores et dj les dclarations de ces types en tte du module ContratAuteur:
Types de donnes personnalises
Type Auteur
Prenom As String
Nom As String
Adresse As String
CodePostal As String
Ville As String
Pays As String
societe As Boolean
End Type
Type ConditionsAuteur
Titre As String
ISBN As String
TauxVariable As Boolean
TauxDroitsNum1 As Byte
TauxDroitsNum2 As Byte
TauxDroitsStr1 As String
TauxDroitsStr2 As String
PourCent1Str As String
PourCent2Str As String
NumExemplairesTaux1 As Integer
AvanceOuNon As Boolean
AvanceSurDroits As Integer
NumPaiements As Byte
remise As Date
Parution As Date
End Type
Type OptionsImpression
Imprimer As Boolean
ImprimerCourrier As Boolean

Chapitre 17

Exemple complet dapplication Excel 

483

ImprimerPaie As Boolean
nbreCourrier As Variant
nbrePaie As Variant
End Type

La Figure17.5 prsente le module ContratAuteur tel quil doit se prsenter ce stade.


Figure17.5
Le module ContratAuteur
contient les dclarations de
types et le corps de la procdure principale.

Ajoutez sous les dclarations de type, la dclaration des variables publiques dans lesquelles
seront stockes les donnes. Ces dclarations doivent se trouver dans la zone de dclarations du module (hors de toute procdure) pour tre accessible partir de nimporte quel
module du projet.
Public
Public
Public
Public
Public

MonAuteur As Auteur
MesConditionsAuteur As ConditionsAuteur
MonImpression As OptionsImpression
ClasseurAuteurs As Workbook
MonTableauWord

Les trois premires instructions dclarent les variables dans lesquelles seront stockes les
informations fournies par lutilisateur. Les variables ClasseurAuteurs et MonTableauWord
se verront respectivement affecter le classeur des auteurs et le document Word contenant le
tableau rcapitulatif des contrats.

484

Excel 2010 et VBA

ntion
Atte

Pour pouvoir manipuler des fichiers Word, vous devez crer une rfrence la
bibliothque dobjets de Word. Choisissez la commande Rfrences du menu
Outils de Visual Basic Editor et cochez la case Microsoft Word Object Library
(voir Figure17.6). Si vous omettez de le faire, linstruction de dclaration de la
variable MonTableauWord gnrera une erreur.

Figure17.6
Crez une rfrence vers
la bibliothque dobjets de
Word.

Ajoutez les liaisons des variables objet dans la procdure EditionContratAuteur.


Sub EditionContratAuteur()
1. Liaisons des var. objet
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)
If Err.Number <> 0 Then Err.Clear
2. Affichage des feuilles
3. Edition des feuilles de paie et du courrier
4. Mise jour du tableau Word
5. libration des ressources mmoire
End Sub

ntion
Atte

Veillez personnaliser les chemins permettant laccs aux fichiers utiliss dans
cet exemple.

Chapitre 17

Exemple complet dapplication Excel 

485

Crer un modle Excel


Nous allons maintenant crer le modle Excel quutilisera le programme pour gnrer les
feuilles de paie.
Crez un nouveau classeur Excel. Supprimez les feuilles 2 et 3, et renommez la feuille 1 en
"Auteur". Entrez ensuite les donnes fixes, puis les formules comme indiqu la Figure17.7.
Formatez les cellules (bordures, polices, formats,etc.). Dfinissez un format numrique
deux dcimales pour les cellules devant recevoir une valeur montaire, et un format de date
pour les cellules devant recevoir des donnes de type date. Enregistrez ensuite le classeur
en tant que modle (extension .xlt), sous le nom FeuillePaieAuteur, puis fermez-le.
Figure17.7
Le modle
FeuillePaieAuteur
complt.

eil
Cons

=F20*0,5%

=F18*7,5%

=F15+F16 F17 F19 F21

=F15*4,7%

=F15*0,85%

=F15*0,8%

=F15*95%

=F15*1%

=F18

Testez votre feuille de calcul. Entrez une valeur dans la cellule F15 et voyez si la
valeur des cellules lies est mise jour avec les valeurs appropries.

486

Excel 2010 et VBA

Nous nentrerons pas ici dans le dtail des formules et la faon de calculer les droits dauteur. Notez simplement que la CSG et le RDS sont calculs sur une base de 95 % du
montant brut, et que le montant net se calcule de la faon suivante:
Net = Brut+TVA AGESSA CSG RDS
La "Contribution verser" et la TVA (lignes26 et 27) sont des taxes dues par lditeur.
Le Tableau17.1 prsente les informations qui devront tre compltes par le programme
dans la feuille de paie.
Tableau17.1: Dfinition des cellules qui devront tre renseignes par le programme

Cellule

Contenu

C2

Auteur (Prnom+Nom) ou Socit

C3

Titre de louvrage

C4

ISBN

C6

Date de remise

C7

Date de parution

C9

Adresse

C10

Code postal

C11

Ville

C12

Pays

F15

Montant de lavance sur droits payer

F30

Date de rglement

B32

Nombre dexemplaires touchs par le taux 1

F32

Taux 1 sous forme de valeur numrique

F33

Taux 2 sous forme de valeur numrique

G32

Taux 1 sous forme de chane

G33

Taux 2 sous forme de chane

Dfinir et crer des interfaces


Le programme proposera 5 interfaces qui permettront de rassembler les diffrentes informations requises pour diter le contrat:

Chapitre 17

Exemple complet dapplication Excel 

487

fmContratAuteur. Cette feuille permettra de choisir un auteur dans la liste des auteurs

fmContratConditions. Cette feuille permettra de fournir les informations concernant

fmContratDates. Cette feuille permettra de prciser la date de remise et la date de

(extraite du fichier Excel).


louvrage (titre et ISBN) et les conditions du contrat (taux des droits dauteur et avance).
parution.
fmContratImpression. Cette feuille permettra de dfinir les documents imprimer et le

nombre dexemplaires.
fmContratFin. Cette feuille indiquera lutilisateur que les informations ncessaires

ldition du contrat ont t recueillies.

Toutes les feuilles, lexception de la premire, proposeront un bouton de commande


permettant de rafficher la feuille prcdente. Toutes les feuilles contiendront un bouton de
validation et un bouton dAnnulation.

Feuille fmContratAuteur
La feuille fmContratAuteur contiendra une zone de liste modifiable permettant de slectionner le nom de lauteur dans la liste des auteurs (stocke dans le classeur Excel Rpertoire Auteurs.xlsx) qui sera charge laffichage de la feuille. Elle contiendra galement
cinq zones de texte qui permettront respectivement dindiquer le prnom, ladresse, le nom,
le code postal, la ville et le pays. Une case cocher permettra de prciser sil sagit dune
socit. Outre les boutons Suite et Annuler, un bouton Ajouter Auteur permettra dajouter
les coordonnes dune personne au fichier Excel des auteurs. La Figure17.8 prsente la
feuille fmContratAuteur en mode Conception.

Info

Afin de mettre en valeur les diffrentes phases dcriture des procdures vnementielles dune feuille, nous dtaillerons les procdures de la feuille
fmContratAuteur pour chaque contrle. Pour les feuilles suivantes, nous prsenterons lensemble des procdures en un seul listing que nous commenterons.

Crez la feuille fmContratAuteur en vous fondant sur la Figure17.8. Placez un contrle


Frame sur la feuille et, lintrieur de celui-ci, un contrle ComboBox, cinq contrles TextBox
et un contrle CheckBox. Placez un contrle Label au-dessus de chaque contrle TextBox
et au-dessus du contrle ComboBox afin den libeller la fonction (Nom, Prnom, Adresse,
Code postal, Ville, Pays).

488

Excel 2010 et VBA

Figure17.8
La feuille fmContratAuteur en mode Conception.

Placez trois contrles CommandButton hors du contrle Frame. Affectez les proprits
suivantes aux contrles:
Proprit

Valeur

Feuille
Name

fmContratAuteur

Caption

Contrat auteur

Contrle Frame
Caption

Auteur:

Contrle ComboBox
Name

cboNom

Style

0- fmStyleDropDownCombo

MatchEntry

1 - fmMatchEntryComplete

Contrle TextBox 1
Name

txtPrenom

Chapitre 17

Exemple complet dapplication Excel 

Proprit

489

Valeur

Contrle TextBox 2
Name

txtAdresse

Contrle TextBox 3
Name

txtCodePostal

Contrle TextBox 4
Name

txtVille

Contrle TextBox 5
Name

txtPays

Contrle Label 1
Name

lbNom

Caption

Contrle Label

Nom
21

Name

lbPrenom

Caption

Prnom

Contrle CheckBox
Name

chkSociete

Caption

Contrat au nom dune socit

Contrle CommandButton 1
Name

cmdAnnuler

Caption

Annuler

Cancel

True

Contrle CommandButton 2
Name

CmdAjouterAuteur

Caption

Ajouter auteur

Contrle CommandButton 3
Name

CmdSuite

Caption

Suite

Default

True

1. Il nest pas ncessaire de dfinir les proprits Name des autres contrles Label, car ils ne seront pas manipuls.

490

Excel 2010 et VBA

Ouvrez ensuite la fentre Code de la feuille et placez-y les procdures suivantes:

1. Code dinitialisation de la feuille


1: Private Sub UserForm_Initialize()
2:
Application.StatusBar = Chargement des auteurs en cours.
Veuillez patienter...
3:
Application.Cursor = xlWait
4:
Call MiseAjourListeDeroulante
5:
Application.StatusBar =
6:
Application.Cursor = xlDefault
7:
cboNom.SetFocus
8: End Sub
9:
10: Private Sub MiseAjourListeDeroulante()
11:
Suppression des entres de la liste si celle-ci en contient
12:
If cboNom.ListCount >= 1 Then
13:
Dim ElementListe As Integer
14:
Dim NbreElt As Integer
15:
NbreElt = cboNom.ListCount - 1
16:
For ElementListe = NbreElt To 0 Step -1
17:
cboNom.RemoveItem (ElementListe)
18:
Next ElementListe
19:
End If
20:
Ajout de tous les noms du repertoire des auteurs
21:
Dim compteur As Long
22:
Dim AjoutAuteur As String
23:
For compteur = 2 To ClasseurAuteurs.Sheets(1).Range(A1).End(xlDown).Row
24:
AjoutAuteur = ClasseurAuteurs.Sheets(1).Range(A & compteur).Value
25:
cboNom.AddItem (AjoutAuteur)
26:
Next compteur
27: End Sub

La procdure dinitialisation commence par afficher un message dans la barre dtat de


lapplication afin dinformer lutilisateur de la procdure en cours. Ligne3, le curseur est
transform en sablier. Ligne4, la procdure MiseAjourListeDeroulante est appele. Aprs
que celle-ci sest excute, la procdure appelante reprend la main, et le message de la barre
dtat est effac tandis que le curseur reprend sa forme normale. Enfin, ligne7, la zone de
liste modifiable reoit le focus.

Chapitre 17

ntion
Atte

Exemple complet dapplication Excel 

491

La variable ClasseurAuteurs doit avoir t dclare et un classeur doit lui tre


affect avant que la feuille ne soit affiche. Si tel nest pas le cas, linstruction de
la ligne23 gnrera une erreur au moment de laffichage de la feuille.

La procdure MiseAjourListeDeroulante a pour fonction dajouter les noms des auteurs


la zone de liste modifiable. Les instructions des lignes11 19 suppriment les lments de
la liste si celle-ci nest pas vide. Nous y reviendrons plus tard. Lignes20 26, les auteurs
sont ajouts la liste. On utilise pour cela une structure For...Next qui ajoute un un
le contenu des cellules de la colonne A contenant des donnes la liste droulante: un
compteur dmarre 2 (la cellule A2 tant la premire contenir un nom dauteur) pour
atteindre le numro de ligne correspondant la dernire cellule non vide de la colonne A
[(Range(A1).End(xlDown).Row].

eil
Cons

ce stade, vrifiez que la mise jour de la zone de liste modifiable seffectue


correctement. Excutez pour cela la procdure EditionContratAuteur, aprs
avoir pris soin dy ajouter linstruction daffichage de la feuille. Celle-ci doit se
prsenter comme suit:
Sub EditionContratAuteur()
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur
Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)
If Err.Number <> 0 Then Err.Clear
FmContratAuteur.Show

End Sub

2. Code de mise jour des zones de texte


1: Private Sub cboNom_Change()
2:
Dim LigneSel As Long
3:
LigneSel = cboNom.ListIndex+2
4:
txtPrenom = ClasseurAuteurs.Sheets(1).Range(B & LigneSel).Value
5:
txtAdresse = ClasseurAuteurs.Sheets(1).Range(C & LigneSel).Value
6:
TxtVille = ClasseurAuteurs.Sheets(1).Range(D & LigneSel).Value
7:
TxtCodePostal = ClasseurAuteurs.Sheets(1).Range(E & LigneSel).Value
8:
TxtPays = ClasseurAuteurs.Sheets(1).Range(F & LigneSel).Value
9: End Sub

Cette procdure vnementielle met automatiquement jour le contenu des zones de texte
lorsque lutilisateur modifie le contenu de la zone de liste modifiable Nom (par la slection dun nom dans la liste ou par la saisie dun nouveau nom). La variable LigneSel sert

492

Excel 2010 et VBA

stocker le numro de ligne du classeur des auteurs correspondant au nom slectionn.


La proprit ListIndex du contrle cboNom renvoie lindex de llment slectionn. On
y ajoute 2 afin dobtenir le numro de la ligne correspondante dans le classeur Excel le
premier nom de la liste correspond la ligne2 et la premire valeur dindex dun contrle
ComboBox est 0.
Lignes4 8, la valeur de chacun des contrles TextBox est mise jour et reoit pour valeur
le contenu de la cellule situe sur la mme ligne que le nom slectionn et dans la colonne
correspondant au contrle. Par exemple, si lutilisateur slectionne un nom provenant de
la cellule A10, la zone txtPrenom reoit le contenu de la cellule B10, la zone txtAdresse
reoit le contenu de la valeur C10,etc.
Notez que si lutilisateur saisit une valeur dans le contrle ComboBox (ce qui est possible,
car la proprit Style du contrle a t dfinie 0 - fmStyleDropDownCombo), le complment automatique apparat si un nom correspondant aux premires lettres saisies existe
dans la liste (car la proprit MatchEntry a t dfinie 1- fmMatchEntryComplete) et que
les zones de texte sont automatiquement mises jour avec les valeurs correspondant ce
nom. Si lutilisateur saisit un nom qui ne fait pas partie de la liste, la proprit ListIndex
du contrle renvoie la valeur 1. LigneSel reoit alors la valeur 1 (1+2) et les zones
de texte affichent donc le contenu des cellules de la ligne1, soit le titre des colonnes (voir
Figure17.9).
Figure17.9
Lorsque lutilisateur slectionne un nom dans la liste
ou saisit un nouveau nom, le
complment automatique est
propos et les zones de texte
sont mises jour.

Chapitre 17

Exemple complet dapplication Excel 

493

3. Code de la case cocher Socit


1: Private Sub ChkSociete_Click()
2:
If ChkSociete.Value = True Then
3:
LbNom.Caption = Socit
4:
LbPrenom.Visible = False
5:
txtPrenom.Visible = False
6:
Else
7:
LbNom.Caption = Nom
8:
LbPrenom.Visible = True
9:
txtPrenom.Visible = True
10:
End If
11: End Sub

La case cocher Socit est coche si le contrat est tabli au nom dune socit. Cette
procdure gre lvnement Click du contrle. Si la case est coche (ligne2), le contrle
Label lbNom voit sa proprit Caption redfinie Socit et les contrles lbPrenom et lbNom
sont masqus (Visible = False). Si la case est dcoche, la proprit Caption du contrle
lbNom est redfinie Nom et les proprits Visible des contrles lbPrenom et txtPrenom
sont dfinies True de faon les afficher (voir Figure17.10).
Figure17.10
Les libells Nom et Prnom,
ainsi que la zone de texte
Prnom sont affects par
ltat de la case cocher
Socit.

494

Excel 2010 et VBA

4. Code dannulation
1: Private Sub cmdAnnuler_Click()
2:
Dim rep As Byte
3:
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours, _
4:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
5:
6:
If rep = vbYes Then
7:
Me.Hide
8:
Call ContratFin
9:
End
10:
End If
11: End Sub
12:
13: Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
14:
Dim rep As Byte
15:
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _
16:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
17:
18:
If rep = vbYes Then
19:
Me.Hide
20:
Call ContratFin
21:
End
22:
End If
23: End Sub
24:
25: Public Sub ContratFin()
26: Librer les ressources mmoire occupes par la var. objet
27: Set ClasseurAuteurs = Nothing
28: Curseur classique
29: Application.Cursor = xlDefault
30: End Sub

La procdure cmdAnnuler_Click gre lannulation via le bouton Annuler qui peut tre lie
un clic sur le bouton ou la frappe de la touche chap (la proprit Cancel du contrle est
dfinie True), tandis que la procdure UserForm_QueryClose gre un clic sur la case de
fermeture de la fentre. Elles sont toutes deux semblables: la bote de dialogue reprsente
la Figure17.11 saffiche. Si lutilisateur clique sur le bouton Oui, la procdure Contrat
Fin est appele et linstruction End met fin au programme.

Chapitre 17

Exemple complet dapplication Excel 

495

Placez la procdure ContratFin dans le module ContratsDivers. Elle est dclare publique
de faon pouvoir tre appele partir de nimporte quel module du projet. Elle a pour
fonction de librer la variable objet ClasseurAuteurs et de redfinir le curseur.
Figure17.11
Demandez toujours une
confirmation afin dviter une
annulation du programme
par erreur.

5. Code du bouton Ajouter Auteur


1: Private Sub CmdAjouterAuteur_Click()
2:
3: Contrle de la liste des auteurs
4:
Dim Ligne As Integer
5:
Application.StatusBar = Contrle de la liste des auteurs en cours.
Veuillez patienter...
6:
Application.Cursor = xlWait
7:
For Ligne = 2 To ClasseurAuteurs.Sheets(1).Range(A1).End(xlDown).Row
8:
If cboNom.Value = ClasseurAuteurs.Sheets(1).Range(A & Ligne).Value
And txtPrenom = ClasseurAuteurs.Sheets(1).Range(B & Ligne).Value Then
9:
Application.StatusBar =
10:
Application.Cursor = xlDefault
11:
Dim remplacer As Integer
12:
remplacer = MsgBox(Ce prnom et ce nom existent dj pour un
auteur. Remplacer par les coordonnes actuelles?,
vbOKCancel+vbCritical, Remplacer les coordonnes de lauteur?)
13:
If remplacer = vbCancel Then
14:
Exit Sub
15:
Else
16:
Application.StatusBar = Remplacement des coordonnes et mise
jour en cours. Patientez...
17:
Application.Cursor = xlWait
18:
Call RemplacerEntreeAuteur(Ligne, cboNom.Value, txtPrenom.
Value, txtAdresse.Value, TxtVille.Value, TxtCodePostal.Value,
TxtPays.Value)
19:
Application.StatusBar =
20:
Application.Cursor = xlDefault
21:
Exit Sub
22:
End If

496

Excel 2010 et VBA

23:
End If
24: Next Ligne
25:
Application.StatusBar =
26:
Application.Cursor = xlDefault
27:
28: Ajout du nouvel auteur
29:
Application.StatusBar = Ajout de lauteur en cours. Veuillez patienter...
30:
Application.Cursor = xlWait
31:
Call CreerEntreeAuteur(cboNom.Value, txtPrenom.Value, txtAdresse.Value,
TxtVille.Value, TxtCodePostal.Value, TxtPays.Value)
32:
33: tri et enregistrement du repertoire
34:
ClasseurAuteurs.Sheets(1).Range(A2:H & ClasseurAuteurs.Sheets(1).
Range(A1).End(xlDown).Row+1).Sort Key1:=ClasseurAuteurs.Sheets(1).
Range(A2), Key2:=ClasseurAuteurs.Sheets(1).Range(B2),
Key3:=ClasseurAuteurs.Sheets(1).Range(C2)
35:
ClasseurAuteurs.Save
36:
37: Mise jour de la liste droulante
38:
StatusBar = Mise jour de la liste en cours. Veuillez patienter...
39:
Call MiseAjourListeDeroulante
40:
Application.StatusBar =
41:
Application.Cursor = xlDefault
42: End Sub
43:
44:
45: Public Sub CreerEntreeAuteur(Nom As String, Prenom As String, Adresse As
String, _
46: Ville As String, CodePostal As String, Optional Pays As String = )
47: Dim LigneAjout As Integer
48: LigneAjout = ClasseurAuteurs.Sheets(1).Range(A1).End(xlDown).Row+1
49:
50: ClasseurAuteurs.Sheets(1).Range(A & LigneAjout).Value = Nom
51: ClasseurAuteurs.Sheets(1).Range(B & LigneAjout).Value = Prenom
52: ClasseurAuteurs.Sheets(1).Range(C & LigneAjout).Value = Adresse
53: ClasseurAuteurs.Sheets(1).Range(D & LigneAjout).Value = Ville
54: ClasseurAuteurs.Sheets(1).Range(E & LigneAjout).Value = CodePostal
55: ClasseurAuteurs.Sheets(1).Range(F & LigneAjout).Value = Pays
56: End Sub
57:
58: Public Sub RemplacerEntreeAuteur(Ligne As Integer, Nom As String, Prenom As
String, Adresse As String, _
59: Ville As String, CodePostal As String, Optional Pays As String = )

Chapitre 17

60:
61:
62:
63:
64:
65:
66:
67:
68:

ClasseurAuteurs.Sheets(1).Range(A
ClasseurAuteurs.Sheets(1).Range(B
ClasseurAuteurs.Sheets(1).Range(C
ClasseurAuteurs.Sheets(1).Range(D
ClasseurAuteurs.Sheets(1).Range(E
ClasseurAuteurs.Sheets(1).Range(F

Exemple complet dapplication Excel 

&
&
&
&
&
&

Ligne).Value
Ligne).Value
Ligne).Value
Ligne).Value
Ligne).Value
Ligne).Value

=
=
=
=
=
=

497

Nom
Prenom
Adresse
Ville
CodePostal
Pays

ClasseurAuteurs.Sheets(1).Range(A2:H & ClasseurAuteurs.Sheets(1).


Range(A1).End(xlDown).Row).Sort Key1:=ClasseurAuteurs.Sheets(1).
Range(A2), _
69:
Key2:=ClasseurAuteurs.Sheets(1).Range(B2), _
70:
Key3:=ClasseurAuteurs.Sheets(1).Range(C2)
71:
72: ClasseurAuteurs.Save
73: End Sub

La procdure CmdAjouterAuteur_Click (lignes 1 42) fait appel deux procdures


publiques: CreerEntreeAuteur (lignes45 56) et RemplacerEntreeAuteur (lignes58
73). Celles-ci seront stockes dans le module RepertoireAuteurs puisque leur fonction est
de manipuler le fichier Excel des auteurs.
La procdure CmdAjouterAuteur_Click commence par vrifier sil existe dj une entre
dans le classeur avec le mme nom et la mme adresse (lignes3 24). En fonction du rsultat du contrle lune des deux procdures CreerEntreeAuteur ou RemplacerEntreeAuteur
est appele.
Le contrle seffectue laide dune boucle For...Next (lignes7 24) qui contrle les
entres du classeur de la ligne2 la dernire ligne contenant des donnes. Le curseur est
pralablement transform en sablier et un message saffiche dans la barre dtat (lignes5
et 6). chaque passage de la boucle, le programme contrle si les colonnes A et B de la
ligne teste nont pas les mmes valeurs que les noms et prnoms fournis dans les contrles
cboNom et txtPrenom de linterface (ligne8). Si tel est le cas, la barre dtat et le curseur
retrouvent leurs valeurs par dfaut et lutilisateur se voit proposer le remplacement des
coordonnes de lauteur par celles entres dans la feuille (ligne12), comme prsent la
Figure17.12. Si lutilisateur choisit le bouton Annuler, linstruction Exit de la ligne14
entrane la sortie de la procdure. Sil rpond Oui, un message est nouveau affich dans
la barre dtat et le curseur prend la forme dun sablier (lignes 16 et 17). La procdure
RemplacerEntreeAuteur est alors appele. Lorsque la procdure appelante reprend la main,
la barre dtat et le curseur reprennent leurs valeurs par dfaut, puis une instruction Exit
entrane la sortie de la procdure.
Si aucune entre semblable na t trouve, le programme atteint la ligne25 sans que rien
ne se soit pass. Le nouvel auteur est alors ajout sans quune intervention de lutilisateur

498

Excel 2010 et VBA

ne soit requise. La procdure CreerEntreeAuteur est appele ligne31. Une fois lauteur
ajout, la procdure appelante reprend la main et le classeur est tri et sauvegard (lignes34
et 35). La zone de liste modifiable est ensuite mise jour (ligne39). La procdure MiseA
jourListeDeroulante qui prend en charge la mise jour de liste droulante a t prsente
plus haut (voir la section 1. Code dinitialisation de la feuille). Notez que cette procdure
commence par supprimer les entres de la liste pour les ajouter nouveau. Enfin, lignes40
et 41, la barre dtat et le curseur retrouvent leur aspect par dfaut.
Figure17.12
Le programme vrifie quil
nexiste pas dj une entre
pour lauteur.

Les procdures CreerEntreeAuteur et RemplacerEntreeAuteur reoivent toutes les deux


les nom, prnom, adresse, code postal, ville et pays entrs par lutilisateur dans linterface.
La procdure RemplacerEntreeAuteur reoit en plus le numro de la ligne remplacer
(notez les appels, lignes18 et 31, et les dclarations, lignes45 et 58). Tandis que la procdure CreerEntreeAuteur ajoute le nouvel auteur sur une ligne vide, la procdure Rempla
cerEntreeAuteur remplace les donnes de la ligne dont le numro lui a t pass par celles
fournies par lutilisateur.

6. Code du bouton Suite


1: Private Sub CmdSuite_Click()
2:
3: Vrifier que les champs ont t correctement informs
4:
If cboNom.Value = Then
5:
MsgBox Vous devez indiquer un nom dauteur., _
6:
vbOKOnly+vbInformation, Informations incompltes
7:
cboNom.SetFocus
8:
Exit Sub
9:
ElseIf txtPrenom.Value = And ChkSociete.Value = False Then

Chapitre 17

10:
11:

Exemple complet dapplication Excel 

499

MsgBox Vous devez indiquer un prnom pour lauteur. & Chr(13) & _
Sil sagit dun contrat au nom dune socit, cochez la case
correspondante, _
vbOKOnly+vbInformation, Informations incompltes
txtPrenom.SetFocus
Exit Sub
ElseIf txtAdresse.Value = Then
MsgBox Vous devez indiquer une adresse., _
vbOKOnly+vbInformation, Informations incompltes
txtAdresse.SetFocus
Exit Sub
ElseIf TxtCodePostal.Value = Then
MsgBox Vous devez indiquer code postal., _
vbOKOnly+vbInformation, Informations incompltes
TxtCodePostal.SetFocus
Exit Sub
ElseIf TxtVille.Value = Then
MsgBox Vous devez indiquer une ville., _
vbOKOnly+vbInformation, Informations incompltes
TxtVille.SetFocus
Exit Sub
End If

12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32: stockage des donnes dans des variables
33:
With MonAuteur
34:
.Nom = cboNom.Value
35:
.Prenom = txtPrenom.Value
36:
.Adresse = txtAdresse.Value
37:
.CodePostal = TxtCodePostal.Value
38:
.Ville = TxtVille.Value
39:
If TxtPays.Value <> Then
40:
.Pays = Chr(13)+TxtPays.Value
41:
End If
42:
.societe = ChkSociete.Value
43:
End With
44:
Me.Hide
45: End Sub

La procdure CmdSuite_Click vrifie la validit des informations fournies par lutilisateur


et affecte ces valeurs aux variables appropries. Lignes3 30, une instruction conditionnelle est utilise pour vrifier que chaque zone de texte a t complte. Si tel nest pas le
cas, un message saffiche lattention de lutilisateur (voir Figure17.13), le focus est pass
au contrle non renseign, et une instruction Exit entrane la sortie de la procdure. Notez
lexpression conditionnelle de la ligne9 qui vrifie si le prnom nest pas fourni ET si la
case Socit nest pas coche.

500

Excel 2010 et VBA

Figure17.13
Les donnes sont vrifies
avant dtre affectes aux
variables.

Si les donnes fournies sont valides, la structure With...End With des lignes33 43 affecte
les valeurs fournies aux espaces de stockage appropris de la variable publique MonAu
teur. Notez que si le champ pays nest pas renseign (sil sagit de la France), lespace
Mon
Auteur.Pays ne reoit pas de valeur. Sil est renseign, il reoit la valeur fournie prcde dun retour chariot. Vous verrez plus tard pourquoi. Ligne44, la feuille est masque.

Feuille fmContratConditions
La feuille fmContratConditions contiendra un contrle Frame libell Ouvrage et un autre
libell Conditions de rmunration. Le cadre ouvrage contiendra deux zones de texte
permettant dentrer le nom de louvrage et son ISBN. Un contrle label libellera chacune
de ces zones de texte. Le cadre Conditions de rmunration contiendra deux autres cadres,
lun libell Droits dauteur et lautre libell Avance. Le cadre Droits dauteur contiendra
les contrles permettant de prciser si le taux est variable et quels sont le taux initial et
lventuel deuxime taux, et au-del de combien dexemplaires celui-ci sapplique. Le
cadre Avance devra permettre de prciser sil y a ou non une avance sur droits dauteur et,
dans laffirmative, quelle est la valeur de cette avance. Enfin, lutilisateur devra prciser si
lavance sera opre en un ou en deux versements. Outre les boutons Annuler et Suite, un
bouton Retour permettra de revenir la feuille prcdente.
La Figure17.14 prsente la feuille fmContratConditions en mode Conception.
Crez la feuille fmContratConditions en vous fondant sur la Figure17.14. Commencez
par placer les deux contrles Frame principaux. lintrieur du premier (Ouvrage), placez
deux contrles TextBox et un contrle Label au-dessus de chacun de ceux-ci afin den libeller
la fonction (Titre de louvrage, ISBN).
Placez deux autres contrles Frame lintrieur du second cadre. Libellez le premier Droit
dauteur et placez lintrieur de celui-ci un contrle CheckBox. Placez deux contrles
TextBox pour indiquer les taux des droits dauteur et accolez-leur deux contrles SpinBut
ton qui permettront den modifier les valeurs.

Chapitre 17

Exemple complet dapplication Excel 

501

Figure17.14
La feuille fmContratConditions en mode Conception

droite du premier contrle TextBox, placez deux contrles Label suivis dun autre
contrle TextBox et dun dernier contrle Label. Enfin, placez un contrle Label droite
de la seconde zone de texte destine recevoir le taux des droits dauteur. Appuyez-vous
sur la Figure17.15 et sur le tableau suivant pour dfinir les proprits Name de ces contrles.
Notez que nous avons spar le libell "% du prix HT" et "sur" de faon pouvoir rendre
inaccessible le libell "sur", ainsi que tous les contrles qui ne devront tre renseigns que
si le taux est variable.
Figure17.15
Le cadre Droits dauteur de
la feuille fmContratAuteur.

spinTaux1

lbVar1

lbLabel
chkTauxVariable
txtTaux1

txtNumEx

txtTaux2
lbVar3
spinTaux2

lbVar2

502

Excel 2010 et VBA

Dans le cadre Avance, placez un contrle CheckBox suivi dun contrle Label, dun contrle
TextBox et dun autre contrle Label. Placez ensuite deux boutons doption. Enfin, placez
trois boutons de commande en dehors des cadres.
Affectez les proprits suivantes aux contrles:
Proprit

Valeur

Feuille
Name

fmContratConditions

Caption

Contrat dauteur

Contrle Frame 1
Caption

Ouvrage

Contrle Frame 2
Caption

Conditions de rmunration

Contrle Frame 2.1


Caption

Droits dauteur

Contrle Frame 2.2


Caption

Avance

Contrles du Frame 1
Contrle TextBox 1
Name

txtTitre

Contrle TextBox 2
Name

txtISBN

Contrle Label 1
Caption

Titre de louvrage

Contrle Label 2
Caption

ISBN

Contrles du Frame 2.1


Contrle CheckBox
Name

chkTauxVariable

Caption

Taux variable

Value

False

Chapitre 17

Proprit

Exemple complet dapplication Excel 

Valeur

Contrle TextBox 1
Name

txtTaux1

Value

Contrle TextBox 2
Name

txtTaux2

Value

Contrle TextBox 3
Name

txtNumEx

Value

4000

Enabled

False

Contrle SpinButton 1
Name

spinTaux1

Value

Min

Max

20

Contrle SpinButton 2
Name

spinTaux2

Value

Min

Max

20

Enabled

False

Contrle Label 1
Name

Label1

Caption

% du prix public HT

Enabled

True

Contrle Label 2
Name

lbVar1

Caption

sur

Enabled

False

503

504

Excel 2010 et VBA

Proprit

Valeur

Contrle Label 3
Name

lbVar2

Caption

sur

Enabled

False

Contrle Label 4
Name

lbVar3

Caption

% du prix HT sur les ex. suivants

Enabled

False

Contrles du Frame 2.2


Contrle CheckBox
Name

chkAvance

Caption

Avances sur droit dauteur

Value

True

Contrle TextBox 1
Name

txtAvance

Value

10000

Contrle Label 1
Name

lbAvance1

Caption

de

Contrle Label 2
Name

lbAvance2

Caption

F.

Contrle OptionButton 1
Name

optUnVersement

Caption

Un versement (parution)

Value

False

Contrle OptionButton 2
Name

optDeuxVersements

Caption

Deux versements (parution et remise)

Value

True

Chapitre 17

Exemple complet dapplication Excel 

Proprit

Valeur

Boutons de commande
Contrle CommandButton 1
Name

cmdAnnuler

Caption

Annuler

Cancel

True

Contrle CommandButton 2
Name

cmdRetour

Caption

Retour

Contrle CommandButton 3
Name

CmdSuite

Caption

Suite

Default

True

Placez ensuite le code suivant dans la fentre Code de la feuille:


1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

Private Sub UserForm_Initialize()


TxtTitre.SetFocus
End Sub
Private Sub chkTauxVariable_Click()
If chkTauxVariable.Value = True Then
LbVar1.Enabled = True
lbVar2.Enabled = True
lbVar3.Enabled = True
TxtTaux2.Enabled = True
SpinTaux2.Enabled = True
TxtNumEx.Enabled = True
Else
LbVar1.Enabled = False
lbVar2.Enabled = False
lbVar3.Enabled = False
TxtTaux2.Enabled = False
SpinTaux2.Enabled = False
TxtNumEx.Enabled = False
End If
End Sub
Private Sub TxtTaux1_Change()

505

506

Excel 2010 et VBA

24:
If IsNumeric(TxtTaux1.Value) = False Then
25:
MsgBox Le taux pour les droits dauteur doit tre une valeur numrique., _
26:
vbOKOnly+vbInformation, Informations incompltes
27:
TxtTaux1.Value =
28:
TxtTaux1.SetFocus
29:
Exit Sub
30:
ElseIf TxtTaux1.Value < 1 Or TxtTaux1.Value > 20 Then
31:
MsgBox Le taux pour les droits dauteur doit tre compris entre 1 et 20., _
32:
vbOKOnly+vbInformation, Valeur non valide
33:
TxtTaux1.Value =
34:
TxtTaux1.SetFocus
35:
End If
36:
spinTaux1.Value = TxtTaux1.Value
37: End Sub
38:
39: Private Sub TxtTaux2_Change()
40:
If IsNumeric(TxtTaux2.Value) = False Then
41:
MsgBox Le taux pour les droits dauteur doit tre une valeur
numrique., _
42:
vbOKOnly+vbInformation, Informations incompltes
43:
TxtTaux2.Value =
44:
TxtTaux2.SetFocus
45:
Exit Sub
46:
ElseIf TxtTaux2.Value < 1 Or TxtTaux2.Value > 20 Then
47:
MsgBox Le taux pour les droits dauteur doit tre compris entre 1 et 20., _
48:
vbOKOnly+vbInformation, Valeur non valide
49:
TxtTaux2.Value =
50:
TxtTaux2.SetFocus
51:
Exit Sub
52:
End If
53:
SpinTaux2.Value = TxtTaux1.Value
54: End Sub
55:
56: Private Sub spinTaux1_Change()
57:
TxtTaux1.Value = spinTaux1.Value
58: End Sub
59:
60: Private Sub SpinTaux2_Change()
61:
TxtTaux2.Value = SpinTaux2.Value
62: End Sub
63:
64: Private Sub chkAvance_Click()
65:
If chkAvance.Value = True Then
66:
lbAvance1.Visible = True
67:
lbAvance2.Visible = True

Chapitre 17

Exemple complet dapplication Excel 

507

68:
txtAvance.Visible = True
69:
optUnVersement.Enabled = True
70:
OptDeuxVersements.Enabled = True
71:
Else
72:
lbAvance1.Visible = False
73:
lbAvance2.Visible = False
74:
txtAvance.Visible = False
75:
optUnVersement.Enabled = False
76:
OptDeuxVersements.Enabled = False
77:
End If
78: End Sub
79:
80: Private Sub cmdAnnuler_Click()
81:
Dim rep As Byte
82:
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _
83:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
84:
If rep = vbNo Then
85:
Exit Sub
86:
End If
87:
Me.Hide
88:
Call ContratFin
89:
End
90: End Sub
91:
92: Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
93:
Dim rep As Byte
94:
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en cours?, _
95:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
96:
If rep = vbNo Then
97:
Exit Sub
98:
End If
99:
Me.Hide
100:
Call ContratFin
101:
End
102: End Sub
103:
104: Private Sub CmdRetour_Click()
105:
fmContratAuteur.Show
106: End Sub
107:
108: Private Sub CmdSuite_Click()
109:
110: Vrifier validit des informations

508

Excel 2010 et VBA

111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:

If TxtTitre.Value = Then
MsgBox Vous devez indiquer un titre douvrage., _
vbOKOnly+vbInformation, Informations incompltes
TxtTitre.SetFocus
Exit Sub
End If
If TxtISBN.Value = Then
MsgBox Vous devez indiquer un ISBN., _
vbOKOnly+vbInformation, Informations incompltes
TxtISBN.SetFocus
Exit Sub
End If
If Len(TxtISBN.Value) <> 6 Then
MsgBox LISBN nest pas correctement format., _
vbOKOnly+vbInformation, Informations incompltes
TxtISBN.SetFocus
Exit Sub
End If
If TxtTaux1.Value = Then
MsgBox Vous devez indiquer un taux pour les droits dauteur., _
vbOKOnly+vbInformation, Informations incompltes
TxtTaux1.SetFocus
Exit Sub
End If
If TxtTaux2.Value = And chkTauxVariable = True Then
MsgBox Vous devez indiquer un taux pour les droits dauteur., _
vbOKOnly+vbInformation, Informations incompltes
TxtTaux2.SetFocus
Exit Sub
End If
If TxtNumEx.Value = And chkTauxVariable = True Then
MsgBox Vous devez indiquer une valeur valide pour le nbre
dexemplaires affects par le taux 1., _
vbOKOnly+vbInformation, Informations incompltes
TxtNumEx.SetFocus
Exit Sub
End If
If IsNumeric(TxtNumEx.Value) = False And chkTauxVariable = True Then
MsgBox Le nbre dex. concerns par le taux doit tre une valeur numrique., _
vbOKOnly+vbInformation, Informations incompltes
TxtNumEx.Value =

Chapitre 17

Exemple complet dapplication Excel 

509

155:
TxtNumEx.SetFocus
156:
Exit Sub
157:
End If
158:
159:
If txtAvance.Value = And chkAvance = True Then
160:
MsgBox Vous devez indiquer une somme pour lavance sur droits dauteur., _
161:
vbOKOnly+vbInformation, Informations incompltes
162:
txtAvance.SetFocus
163:
Exit Sub
164:
End If
165:
If IsNumeric(txtAvance.Value) = False And chkAvance = True Then
166:
MsgBox Lavance sur droits dauteur doit tre une valeur numrique., _
167:
vbOKOnly+vbInformation, Informations incompltes
168:
txtAvance.Value =
169:
txtAvance.SetFocus
170:
Exit Sub
171:
End If
172:
173: Validation des donnes
174:
With MesConditionsAuteur
175:
.Titre = TxtTitre.Value
176:
.ISBN = TxtISBN.Value
177:
.TauxVariable = chkTauxVariable.Value
178:
.TauxDroitsNum1 = TxtTaux1.Value
179:
.TauxDroitsNum2 = TxtTaux2.Value
180:
.NumExemplairesTaux1 = TxtNumEx.Value
181:
.AvanceOuNon = chkAvance.Value
182:
If MesConditionsAuteur.AvanceOuNon = True Then
183:
MesConditionsAuteur.AvanceSurDroits = txtAvance.Value
184:
End If
185:
If optUnVersement = True Then
186:
MesConditionsAuteur.NumPaiements = 1
187:
Else
188:
MesConditionsAuteur.NumPaiements = 2
189:
End If
190:
Obtention des quivalents chanes des valeurs
191:
MesConditionsAuteur.TauxDroitsStr1 = RenvoyerChaneValeur
(.TauxDroitsNum1)
192:
MesConditionsAuteur.TauxDroitsStr2 = RenvoyerChaneValeur
(.TauxDroitsNum2)
193:
End With
194:
195:
Me.Hide
196: End Sub

510

Excel 2010 et VBA

La procdure dinitialisation (lignes 1 3) a pour seule fonction de passer le focus au


contrle txtTitre.
La procdure chkTauxVariable_Click (lignes5 21) gre lvnement clic survenant sur
la case cocher Taux variable. Si la case est coche, les trois libells txtVar1, txtVar2
et txtVar3 deviennent disponibles. Il en est de mme pour les zones de texte txtTaux2 et
le bouton toupie qui lui est attach (spinTaux2), ainsi que pour la zone de texte txtNu
mEx (lignes 7 12). Si la case est dcoche, tous ces contrles sont dsactivs (voir
Figure17.16).
Figure17.16
Laccessibilit des
contrles du cadre
Droits dauteur dpend
de ltat de la case
cocher Taux variable.

Les procdures txtTaux1_Change et txtTaux2_Change (lignes 23 54) grent de faon


identique les modifications apportes aux zones de texte destines recevoir les droits
dauteur. Lignes24 29 et 40 45, on vrifie que la valeur entre est une valeur numrique. Dans le cas contraire, un message saffiche lattention de lutilisateur, la valeur du
contrle rinitialise et le focus lui est pass. Une instruction Exit entrane la sortie de la
procdure. Lignes30 34 et 46 51, les mmes instructions sont appliques si la valeur
saisie nest pas comprise entre 1 et 20. Enfin, si la valeur entre est valide, les instructions
des lignes36 et 53 affectent la valeur entre par lutilisateur dans lune des zones de texte
au bouton toupie associ. Cela est indispensable pour que, lorsque lutilisateur clique sur le
bouton toupie, la valeur affiche dans la zone de texte soit toujours en rapport avec la valeur
de cette zone au moment du clic.

Chapitre 17

Exemple complet dapplication Excel 

511

Figure17.17
La validit des taux de droits
dauteur est contrle.

Les procdures des lignes56 62 affectent la valeur des boutons toupie aux zones de texte
associes lorsque lutilisateur clique sur lun deux.
La procdure chkAvance_Click (lignes64 78) gre les clics sur la case cocher Avance
sur droits dauteur. Si la case est coche, les libells lbAvance1 et lbAvance2 sont visibles
(lignes66 et 67). Il en est de mme pour la zone de texte txtAvance. Enfin, les deux boutons
doption deviennent accessibles (lignes69 et 70). Si la case est dcoche, le traitement inverse
est appliqu ces contrles (voir Figure17.18).
Figure17.18
Ltat de la case cocher
Avance sur droits dauteur
influe sur les proprits des
autres contrles du cadre
Avance.

Lignes 80 102, les procdures CmdAnnuler_Click et UserForm_QueryClose grent les


annulations. Elles sont semblables aux procdures de la feuille fmContratAuteur portant
le mme nom.

512

Excel 2010 et VBA

La procdure CmdRetour_Click des lignes104 106 gre les clics sur le bouton Retour.
Elle affiche la feuille fmContratAuteur. Notez que la feuille fmContratConditions nest
pas masque. Si vous souhaitez la masquer, ajoutez simplement linstruction Me.Hide
devant linstruction fmContratAuteur.Show.
Enfin, la procdure CmdSuite_Click gre les clics sur le bouton Suite. Lignes110 171, la
validit des donnes entres est contrle. Le reste de la procdure valide les donnes en
les affectant la variable MesConditionsAuteur.
Lignes111 123, on vrifie que les zones de texte Titre et ISBN contiennent des informations. Si tel nest pas le cas, un message saffiche lattention de lutilisateur, le focus est
pass au contrle vide et une instruction Exit entrane la sortie de la procdure. Ligne124
129, on vrifie que lISBN entr contient six caractres. Lignes131 136, on vrifie quun
taux a t prcis pour les droits dauteur dans le contrle txtTaux1. Linstruction conditionnelle des lignes138 143 vrifie que si la case Taux variable est coche le second taux
a bien t entr. Lignes145 150, on contrle que si la case Taux variable est coche, le
nombre dexemplaires touchs par le taux initial a t fourni. On vrifie ensuite si ce taux
est une valeur numrique (lignes151 157). Enfin, lignes159 170, on vrifie que si la
case Avance est coche, une valeur a t fournie (lignes159 164) et que cette valeur est
une valeur numrique (lignes165 171).
Figure17.19
La validit des donnes
est contrle.

Si les donnes fournies sont valides, la procdure atteint la ligne173 sans quune instruction
Exit nen ait entran la sortie. Les donnes sont alors affectes aux diffrents sous-types

Chapitre 17

Exemple complet dapplication Excel 

513

de la variable MesConditionsAuteur laide dune structure With...End With. Remarquez linstruction conditionnelle utilise lignes185 189 pour affecter la valeur 1 ou 2
MesConditionsAuteur, selon que lun ou lautre des boutons doption est coch.
Lignes191 et 192, la fonction RenvoyerChane est appele deux reprises et reoit chaque
fois une valeur correspondant lun des taux de droits dauteur sous forme numrique.
Cette fonction doit renvoyer la valeur qui lui est passe sous forme de chane de caractres,
pour les besoins du contrat. Placez la fonction RenvoyerChane dans le module Contrats
Divers. Elle se prsente comme suit:
Public Function RenvoyerChaneValeur(valeur)
Select Case valeur
Case 0
RenvoyerChaneValeur = zro
Case 1
RenvoyerChaneValeur = un
Case 2
RenvoyerChaneValeur = deux
Case 3
RenvoyerChaneValeur = trois
Case 4
RenvoyerChaneValeur = quatre
Case 5
RenvoyerChaneValeur = cinq
Case 6
RenvoyerChaneValeur = six
Case 7
RenvoyerChaneValeur = sept
Case 8
RenvoyerChaneValeur = huit
Case 9
RenvoyerChaneValeur = neuf
Case 10
RenvoyerChaneValeur = dix
Case 11
RenvoyerChaneValeur = onze
Case 12
RenvoyerChaneValeur = douze
Case 13
RenvoyerChaneValeur = treize
Case 14
RenvoyerChaneValeur = quatorze
Case 15
RenvoyerChaneValeur = quinze

514

Excel 2010 et VBA

Case 16
RenvoyerChaneValeur
Case 17
RenvoyerChaneValeur
Case 18
RenvoyerChaneValeur
Case 19
RenvoyerChaneValeur
Case 20
RenvoyerChaneValeur
End Select
End Function

= seize
= dix-sept
= dix-huit
= dix-neuf
= vingt

Cette fonction utilise une structure Select Case...End Select pour renvoyer une chane
en fonction de la valeur qui lui est passe.

eil
Cons

ce stade, placez linstruction daffichage de la feuille fmContratConditions


dans la procdure EditionContratAuteur et excutez cette dernire afin de
vrifier que votre programme ne contient pas derreurs. Testez les diffrentes
conditions en entrant des donnes variables dans les interfaces. La procdure
EditionContratAuteur doit maintenant se prsenter comme suit:
Sub EditionContratAuteur()
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur
Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)
If Err.Number <> 0 Then Err.Clear
fmContratAuteur.Show
fmContratConditions.Show

End Sub

Feuille fmContratDates
La feuille fmContratDates permettra lutilisateur dindiquer les dates de remise et de
parution. Nous utiliserons pour cela le contrle Calendar sur lequel lutilisateur naura
qu cliquer pour prciser une date. Une zone de liste modifiable permettra de slectionner
la date que lutilisateur veut prciser (date de remise ou date de parution). Deux zones de
texte dont la fonction sera prcise par deux contrles Label laisseront apparatre les dates
slectionnes sur le calendrier. Ces zones de texte permettront de visualiser les dates choisies, mais leur valeur ne pourra tre modifie. Enfin, nous retrouverons les mmes boutons
de commande que pour la feuille fmContratConditions, savoir un bouton Annuler, un
bouton Retour et un bouton Suite. La Figure17.20 reprsente la feuille fmContratDates en
mode Conception.

Chapitre 17

Exemple complet dapplication Excel 

515

Figure17.20
La feuille fmContratDates en mode Conception.

pel
Rap

Le contrle Calendar ne fait pas partie des contrles standard de la bote


outils de Visual Basic Editor. Pour un rappel de la procdure permettant dajouter un contrle la bote outils, consultez la section "Personnaliser la bote
outils" du Chapitre12.

Pour "dessiner" la feuille fmContratDates, commencez par placer un contrle Frame sur
la feuille. Placez ensuite deux contrles TextBox et un contrle ComboBox dans le cadre.
Dposez trois contrles Label ct de chacun deux afin den prciser la fonction. Dposez et dimensionnez le contrle Calendar. Dposez lextrieur du cadre les trois boutons
de commande.

ce
Astu

Copiez les boutons de la feuille fmContratConditions et collez-les sur la feuille


fmContratDates. Ainsi vous naurez pas en redfinir les proprits. Vous
pouvez galement copier-coller les procdures cmdAnnuler_Click et UserForm_
QueryClose puisque celles-ci sont identiques dune feuille lautre.

Dfinissez les proprits des contrles comme indiqu dans le tableau suivant:

516

Excel 2010 et VBA

Proprit

Valeur

Feuille
Name

fmContratDates

Caption

Dates de remise et de parution

Contrle Frame
Caption

Indiquez la date valider et slectionnez-la sur le calendrier

Contrle TextBox 1
Name

txtRemise

Enabled

False

Contrle TextBox 2
Name

txtParution

Enabled

False

Contrle ComboBox
Name

cboDateAValider

Style

2 - fmStyleDropDownList

Contrle Label 1
Caption

Date de remise:

Contrle Label 2
Caption

Date de parution:

Contrle Label 3
Caption

Date valider:

Contrle Calendar
Name

Calendrier

Contrle CommandButton 1
Name

cmdAnnuler

Caption

Annuler

Cancel

True

Contrle CommandButton 2
Name

cmdRetour

Caption

Retour

Contrle CommandButton 3
Name

CmdSuite

Caption

Suite

Default

True

Chapitre 17

Exemple complet dapplication Excel 

517

Ouvrez ensuite la fentre Code de la feuille et placez-y les procdures vnementielles


reproduites ci-aprs:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

Private Sub UserForm_Initialize()


cboDateAValider.AddItem (Date de remise)
cboDateAValider.AddItem (Date de parution)
cboDateAValider.ListIndex = 0
Calendrier.Value = Date+30
Calendrier.SetFocus
End Sub
Private Sub Calendrier_Click()
If cboDateAValider.ListIndex = 0 Then
txtRemise.Value = Calendrier.Value
cboDateAValider.ListIndex = 1
Else
TxtParution.Value = Calendrier.Value
End If
End Sub
Private Sub CmdAnnuler_Click()
Dim rep As Byte
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _
vbYesNo+vbQuestion, Annuler ldition de contrat?)
If rep = vbNo Then
Exit Sub
End If
Me.Hide
Call ContratFin
End
End Sub

21:
22:
23:
24:
25:
26:
27:
28:
29:
30: Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
31:
Dim rep As Byte
32:
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _
33:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
34:
If rep = vbNo Then
35:
Exit Sub
36:
End If
37:
Me.Hide
38:
Call ContratFin
39:
End

518

Excel 2010 et VBA

40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:

End Sub
Private Sub CmdRetour_Click()
fmContratConditions.Show
End Sub
Private Sub CmdSuite_Click()
Vrifier la validit des informations
If txtRemise.Value = Then
MsgBox Vous devez spcifier une date de remise., _
vbOKOnly+vbCritical, Contrat dauteur
Exit Sub
ElseIf TxtParution.Value = Then
MsgBox Vous devez spcifier une date de parution., _
vbOKOnly+vbCritical, Contrat dauteur
Exit Sub
ElseIf DateValue(TxtParution) - DateValue(txtRemise) <= 0 Then
MsgBox Vous devez spcifier une date de remise antrieure la date de
parution., _
vbOKOnly+vbCritical, Contrat dauteur
Exit Sub
ElseIf DateValue(TxtParution) - DateValue(txtRemise) < 40 Then
Dim continuer As Integer
continuer = MsgBox(Vous avez indiqu une date de remise seulement _
& DateValue(TxtParution) - DateValue(txtRemise) _
& jours de la date de parution. Valider cette date?,
vbYesNo+vbQuestion, _
Valider la date de remise?)
If continuer = vbNo Then Exit Sub
End If

66:
67:
68:
69:
70:
Me.Hide
71:
72: Validation des dates
73:
MesConditionsAuteur.remise = txtRemise.Value
74:
MesConditionsAuteur.Parution = TxtParution.Value
75: End Sub

La procdure dinitialisation (lignes1 7) ajoute les entres Date de remise et Date de


parution la zone de liste modifiable (lignes2 et 3), puis active le premier lment de la
liste (ligne4). Ligne5 et 6, la valeur du calendrier est dfinie 30 jours de la date courante
renvoye par la fonction Date, et le calendrier reoit le focus.

Chapitre 17

Exemple complet dapplication Excel 

519

La procdure Calendrier_Click (lignes9 16) gre laffectation des dates slectionnes


sur le calendrier aux zones de texte txtRemise et txtParution. Une structure conditionnelle est utilise pour dfinir lentre slectionne dans la zone de liste modifiable et entrer
la date choisie dans la zone de texte correspondante (lignes11 et 14). Si le premier lment
de la liste est slectionn (Date de remise), la zone de texte txtRemise reoit pour valeur
la date slectionne et le second lment (Date de parution) est slectionn dans la zone de
liste modifiable (ligne12). Ainsi, lutilisateur na pas modifier lentre slectionne dans
la zone de liste modifiable et peut choisir immdiatement la date de parution.
Les procdures CmdAnnuler_Click et UserForm_QueryClose (lignes 18 40) sont identiques aux procdures quivalentes des feuilles fmContratAuteur et fmContratConditions.
La procdure CmdRetour_Click (lignes42 44) gre les clics sur le bouton Retour. Elle
affiche la feuille fmContratConditions.
Enfin, la procdure CmdSuite_Click (lignes46 75) vrifie la validit des dates indiques
(lignes48 68) et affecte ces valeurs aux variables appropries.
Une seule instruction conditionnelle est utilise pour vrifier la validit des dates. Lignes49
56, on vrifie quune date de remise et une date de parution ont t prcises. Si tel nest
pas le cas, un message saffiche lattention de lutilisateur et une instruction Exit entrane
la sortie de la procdure (voir Figure17.21).
Figure17.21
Les dates de remise
et de parution doivent tre
prcises.

Lignes57 60, on vrifie que la date de parution est postrieure la date de remise. On
utilise pour cela la fonction DateValue qui renvoie la valeur de la date sous forme numrique (consultez laide en ligne pour plus de prcisions). Si tel nest pas le cas, un message
saffiche lattention de lutilisateur et une instruction Exit entrane la sortie de la procdure. Lignes61 68, on vrifie si plus de 40 jours sparent la date de remise de la date
de parution. Si tel nest pas le cas, lutilisateur en est averti par un message. Il peut alors

520

Excel 2010 et VBA

valider les dates ou cliquer sur le bouton Non. Dans ce second cas de figure, une instruction
Exit (ligne67) entrane la sortie de la procdure.
Figure17.22
Les dates proposes sont
compares laide de la
fonction DateValue.

Ligne70, la feuille est masque. Les dates fournies sont ensuite affectes aux espaces de
stockage appropris de la variable MesConditionsAuteur.

eil
Cons

Placez linstruction daffichage de la feuille fmContratDates dans la procdure


EditionContratAuteur et excutez cette dernire afin de vrifier que votre programme ne contient pas derreurs. La procdure EditionContratAuteur doit
maintenant se prsenter comme suit:
Sub EditionContratAuteur()
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur
Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)
If Err.Number <> 0 Then Err.Clear
fmContratAuteur.Show
fmContratConditions.Show
fmContratDates.Show

End Sub

Feuille fmContratImpression
La feuille fmContratImpression permettra lutilisateur dindiquer sil souhaite imprimer
le contrat et les feuilles de paie, ainsi que le nombre de copies raliser. Une case cocher
servira prciser sil souhaite ou non imprimer. Deux autres cases cocher permettront
dindiquer si les feuilles de paie, le contrat ou les deux doivent tre imprims. Elles ne
seront accessibles que si la case Imprimer est coche. Une zone de texte et un bouton toupie
permettront de prciser le nombre de copies souhaites pour chaque impression. Enfin,
nous retrouverons les trois boutons de retour, dannulation et de validation des feuilles

Chapitre 17

Exemple complet dapplication Excel 

521

prcdemment cres. La Figure17.23 prsente la feuille fmContratImpression en mode


Conception.

Figure17.23
La feuille fmContratImpression en mode Conception.

ce
Astu

Notez limage de limprimante apparaissant entre la premire case cocher et


son libell. Il sagit dun contrle Picture qui a t plac sur le contrle CheckBox. Nous avons ajout des espaces devant le texte de la proprit Caption du
contrle afin de ne pas masquer le libell de la case cocher.

Commencez par placer un contrle Frame sur la feuille. Placez ensuite trois cases cocher
sur la feuille, en plaant les deux dernires en retrait par rapport la premire. Dposez un
contrle TextBox, un contrle SpinButton et un contrle Label ct de ces deux cases
cocher. Enfin, placez trois boutons de commande hors du cadre. Dfinissez les proprits
des contrles comme indiqu dans le tableau suivant.

522

Excel 2010 et VBA

Proprit

Valeur

Feuille
Name

fmContratImpression

Caption

Impression du contrat

Contrle Frame
Caption

Options dimpression

Contrle CheckBox 1
Name

chk Imprimer

Caption

Imprimer les contrats

Value

True

Contrle CheckBox 2
Name

chkImprimessionContrat

Caption

Contrat auteur en

Value

True

Contrle CheckBox 3
Name

chkImprimessionPaie

Caption

Fiches de paie en

Value

True

Contrle TextBox 1
Name

txtQteContrat

Value

Contrle TextBox 2
Name

txtQtePaie

Value

Contrle SpinButton 1
Name

spinContrat

Value

Min

Max

10

Chapitre 17

Proprit

Exemple complet dapplication Excel 

523

Valeur

Contrle SpinButton 2
Name

spinPaie

Value

Min

Max

10

Contrles Label 1 et 2
Caption

Exemplaires

Contrle CommandButton 1
Name

cmdAnnuler

Caption

Annuler

Cancel

True

Contrle CommandButton 2
Name

cmdRetour

Caption

Retour

Contrle CommandButton 3
Name

CmdTerminer

Caption

Terminer

Default

True

Ouvrez la fentre Code de la feuille et placez-y le code des procdures vnementielles que
devra grer la feuille:
1: Private Sub UserForm_Initialize()
2:
If MonAuteur.societe = True Then
3:
ChkImpressionPaie.Value = False
4:
ChkImpressionPaie.Enabled = False
5:
TxtQtePaie.Enabled = False
6:
SpinPaie.Enabled = False
7:
End If
8: End Sub
9:
10: Private Sub ChkImprimer_Click()
11:
If ChkImprimer.Value = False Then
12:
ChkImpressionPaie.Enabled = False

524

Excel 2010 et VBA

13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:

ChkImpressionContrat.Enabled = False
TxtQteContrat.Locked = True
TxtQtePaie.Locked = True
SpinPaie.Enabled = False
spinContrat.Enabled = False
Else
If MonAuteur.societe = False Then
ChkImpressionPaie.Enabled = True
TxtQtePaie.Locked = False
SpinPaie.Enabled = True
End If
ChkImpressionPaie.Value = True
ChkImpressionContrat.Enabled = True
ChkImpressionContrat.Value = True
TxtQteContrat.Locked = False
spinContrat.Enabled = True
End If
End Sub
Private Sub chkImpressionContrat_Click()
If ChkImpressionContrat.Value = False Then
TxtQteContrat.Locked = True
spinContrat.Enabled = False
Else
TxtQteContrat.Locked = False
spinContrat.Enabled = True
End If
End Sub
Private Sub ChkImpressionPaie_Click()
If ChkImpressionPaie.Value = False Then
TxtQtePaie.Locked = True
SpinPaie.Enabled = False
Else
TxtQtePaie.Locked = False
SpinPaie.Enabled = True
End If
End Sub
Private Sub spinContrat_Change()
TxtQteContrat.Value = spinContrat.Value
End Sub

Chapitre 17

56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:

Exemple complet dapplication Excel 

525

Private Sub SpinPaie_Change()


TxtQtePaie.Value = SpinPaie.Value
End Sub
Private Sub TxtQteContrat_Change()
If IsNumeric(TxtQteContrat.Value) = False Then
MsgBox Le nombre de copies doit tre une valeur numrique., _
vbOKOnly+vbInformation, Informations erronnes
TxtQteContrat.Value =
TxtQteContrat.SetFocus
Exit Sub
ElseIf TxtQteContrat.Value < 1 Or TxtQteContrat.Value > 10 Then
MsgBox Le nombre de copies doit tre compris entre 1 et 10., _
vbOKOnly+vbInformation, Valeur non valide
TxtQteContrat.Value =
TxtQteContrat.SetFocus
Exit Sub
End If
spinContrat.Value = TxtQteContrat.Value
End Sub
Private Sub TxtQtePaie_Change()
If IsNumeric(TxtQtePaie.Value) = False Then
MsgBox Le nombre de copies doit tre une valeur numrique., _
vbOKOnly+vbInformation, Informations erronnes
TxtQtePaie.Value =
TxtQtePaie.SetFocus
Exit Sub
ElseIf TxtQtePaie.Value < 1 Or TxtQtePaie.Value > 10 Then
MsgBox Le nombre de copies doit tre compris entre 1 et 10., _
vbOKOnly+vbInformation, Valeur non valide
TxtQtePaie.Value =
TxtQtePaie.SetFocus
Exit Sub
End If
SpinPaie.Value = TxtQtePaie.Value
End Sub
Private Sub CmdAnnuler_Click()
Dim rep As Byte
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _

526

Excel 2010 et VBA

97:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
98:
If rep = vbNo Then Exit Sub
99:
Me.Hide
100:
End
101: End Sub
102:
103: Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
104:
Dim rep As Byte
105:
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _
106:
vbYesNo+vbQuestion, Annuler ldition de contrat?)
107:
If rep = vbNo Then
108:
Exit Sub
109:
End If
110:
Me.Hide
111:
End
112: End Sub
113:
114: Private Sub CmdRetour_Click()
115:
fmContratConditions.Show
116: End Sub
117:
118: Private Sub CmdSuite_Click()
119:
With MonImpression
120:
.Imprimer = ChkImprimer.Value
121:
.ImprimerCourrier = ChkImpressionContrat.Value
122:
.ImprimerPaie = ChkImpressionPaie.Value
123:
.nbreCourrier = TxtQteContrat.Value
124:
.nbrePaie = TxtQtePaie.Value
125:
End With
126:
Me.Hide
127: End Sub

La procdure dinitialisation de la feuille (lignes1 8) utilise une structure conditionnelle


pour dsactiver les contrles ddis limpression des feuilles de paie si le contrat est dit
au nom dune socit les socits facturent tandis quon tablit une feuille de paie au
nom des personnes physiques. On interroge pour cela la valeur de la variable MonAuteur.
Societe qui a reu la valeur True ou False lorsque lutilisateur a valid la feuille fmContra
tAuteur. Si la variable renvoie la valeur True, la case cocher chkImpressionPaie est
dcoche (ligne3), puis rendue inaccessible (ligne4). La zone de texte et le bouton toupie
associs sont galement rendus inaccessibles (lignes5 et 6).

Chapitre 17

Exemple complet dapplication Excel 

527

La procdure ChkImprimer_Click modifie ltat des contrles permettant de dfinir les


lments imprimer et le nombre de copies raliser. Si le bouton est dcoch, les deux
autres cases cocher sont dsactives (lignes12 et 13), les deux zones de texte correspondantes sont verrouilles (lignes14 et 15) et les deux boutons toupie associs ces dernires
rendus inaccessibles (lignes16 et 17). Dans le cas contraire, les instructions des lignes19
29 sexcutent. Lignes19 24, une structure conditionnelle imbrique active les contrles
permettant de dfinir le nombre dimpression des feuilles de paie, si le contrat nest pas
tabli au nom dune socit. Les contrles servant dfinir limpression du contrat sont
activs (lignes25 28).
Lignes 32 40, la procdure chkImpressionContrat_Click gre les clics sur la case
correspondante. Elle active ou dsactive laccs la zone de texte et au bouton toupie
correspondant, selon que la case est coche ou dcoche. Lignes 42 50, la procdure
ChkImpressionPaie_Click effectue les mmes oprations pour la case cocher libelle
Fiches de paie.
Les deux procdures des lignes52 58 affectent la valeur du bouton toupie la case correspondante lorsque lutilisateur clique sur lun des contrles SpinContrat ou spinPaie.
Lignes60 75 et lignes77 92, les procdures TxtQteContrat_Change et TxtQtePaie_
Change sont identiques aux procdures TxtTaux1_Change et TxtTaux2_Change de la feuille
fmContratConditions. Elles permettent de sassurer que les valeurs saisies dans les zones
de texte sont valides et daffecter la valeur saisie au contrle SpinButton correspondant.
Les procdures CmdAnnuler_Click et UserForm_QueryClose sont identiques aux procdures
quivalentes des feuilles fmContratAuteur, fmContratConditions et fmContratDates. La
procdure CmdRetour_Click des lignes114 116 affiche la feuille fmContratDates.
Enfin la procdure CmdSuite_Click des lignes118 127 transfre les informations dimpression fournies dans la variable MonImpression.

Feuille fmContratFin
La feuille fmContratFin est trs simple. Elle sert indiquer lutilisateur que les informations ncessaires ont t fournies et que le contrat va tre dit. Elle contient un seul bouton
et un contrle Label. Ralisez cette feuille en vous appuyant sur sa reprsentation de la
Figure17.24 (nous avons affect une image bitmap la proprit Picture du contrle).
Dfinissez la proprit Caption du bouton de commande cmdOK.
Figure17.24
Ouf!

528

Excel 2010 et VBA

Placez maintenant le code suivant dans la fentre Code de la feuille fmContratFin:


Private Sub cmdOK_Click()
Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim rep As Byte
rep = MsgBox(Etes-vous sr de vouloir annuler ldition du contrat en
cours?, _
vbYesNo+vbQuestion, Annuler ldition de contrat?)
If rep = vbNo Then
Exit Sub
End If
Me.Hide
End
End Sub

On ne prsente plus la procdure UserForm_QueryClose. Quant la procdure CmdOK_Click,


elle masque simplement la feuille.
ce stade du dveloppement, la procdure EditionContratAuteur doit se prsenter comme
suit:
Sub EditionContratAuteur()
1. Liaisons des var. objet
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)
If Err.Number <> 0 Then Err.Clear
2. Affichage des feuilles
fmContratAuteur.Show
fmContratConditions.Show
fmContratDates.Show
fmContratImpression.Show
fmContratFin.Show
3. Edition des feuilles de paie et du courrier
4. Mise jour du tableau Word
5. libration des ressources mmoire
End Sub

crire des procdures ddition de documents


Les interfaces sont maintenant dveloppes, les donnes stockes dans des variables. Il ne
nous reste qu crire les procdures qui gnreront le contrat et les feuilles de paie, les
imprimeront et les enregistreront, et qui mettront jour le tableau Word.

Chapitre 17

Exemple complet dapplication Excel 

529

dition des feuilles de paie


Commencez par modifier la procdure EditionContratAuteur en y insrant lappel de la
procdure EditerFeuilleDePaie.
Sub EditionContratAuteur()
1. Liaisons des var. objet
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)
If Err.Number <> 0 Then Err.Clear
2. Affichage des feuilles
fmContratAuteur.Show
fmContratConditions.Show
fmContratDates.Show
fmContratImpression.Show
fmContratFin.Show
3. Edition des feuilles de paie et du courrier
If MonAuteur.societe = False Then
Call EditerFeuilleDePaie
End If
4. Mise jour du tableau Word
5. libration des ressources mmoire
End Sub

Notez que la procdure EditerFeuilleDePaie nest appele que si le contrat nest pas dit
au nom dune socit.
Placez maintenant la procdure EditerFeuilleDePaie dans le module ContratAuteur:
1: Sub EditerFeuilleDePaie()
2:
Dim feuillnum As Byte
3:
4:
For feuillnum = 1 To MesConditionsAuteur.NumPaiements
5:
Edition de la (des) feuille(s)
6:
Workbooks.Add Template:=C:\Documents and settings\Administrateur\
Application Data\Microsoft\Modles\PAIEMENT.xlt
7:
With ActiveWorkbook.Sheets(1)
8:
If MonAuteur.societe = False Then
9:
.Range(C2).Value = MonAuteur.Prenom & & MonAuteur.Nom
10:
Else

530

Excel 2010 et VBA

11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:

.Range(C2).Value = MonAuteur.Nom
End If
.Range(C3).Value = MesConditionsAuteur.Titre
.Range(C4).Value = MesConditionsAuteur.ISBN
.Range(C6).Value = MesConditionsAuteur.remise
.Range(C7).Value = MesConditionsAuteur.Parution
.Range(C9).Value = MonAuteur.Adresse
.Range(C10).Value = MonAuteur.CodePostal
.Range(C11).Value = MonAuteur.Ville
.Range(C12).Value = MonAuteur.Pays
.Range(F15).Value = _
MesConditionsAuteur.AvanceSurDroits / MesConditionsAuteur.NumPaiements
If MesConditionsAuteur.NumPaiements = 1 Then
.Range(F30).Value = MesConditionsAuteur.Parution
Else
If feuillnum = 1 Then
.Range(F30).Value = MesConditionsAuteur.remise
Else
.Range(F30).Value = MesConditionsAuteur.Parution
End If
End If
If MesConditionsAuteur.TauxVariable = True Then
.Range(B32) = Pour les & _
MesConditionsAuteur.NumExemplairesTaux1 & _
premiers ouvrages
.Range(B33) = Au-del
.Range(F32) = MesConditionsAuteur.TauxDroitsNum1 &
.Range(G32) = MesConditionsAuteur.TauxDroitsStr1 &
.Range(F33) = MesConditionsAuteur.TauxDroitsNum2 &
.Range(G33) = MesConditionsAuteur.TauxDroitsStr2 &
Else
.Range(B32) =
.Range(B33) =
.Range(F32) = MesConditionsAuteur.TauxDroitsNum1 &
.Range(G32) = MesConditionsAuteur.TauxDroitsStr1 &
.Range(F33) =
.Range(G33) =
End If
End With
Application.Calculate

%
pour cent
%
pour cent

%
pour cent

Chapitre 17

Exemple complet dapplication Excel 

54:
55:

impression du classeur
If MonImpression.Imprimer = True And MonImpression.ImprimerPaie =
True Then
ActiveWorkbook.PrintOut copies:=MonImpression.nbrePaie
End If

531

56:
57:
58:
59:
enregistrement du classeur
60:
ActiveWorkbook.SaveAs Filename:=C:\Mes Documents\ & _
61:
MesConditionsAuteur.ISBN & & MonAuteur.Nom & & _
62:
Paie & feuillnum & .xlsx, FileFormat:=xlNormal
63:
ActiveWorkbook.Close
64:
Next feuillnum
65: End Sub

Cette procdure utilise une boucle For...Next pour diter le nombre de feuilles de paie
appropri, soit MesConditionsAuteur.NumPaiements.
chaque passage de la boucle, un classeur fond sur le modle Paiement.xlt est cr
(ligne6). Notez que le chemin apparaissant dans ce listing est celui du dossier de stockage
des modles sur la machine sur laquelle a t cr et test le programme. Il se peut quil
diffre sur votre machine. Lignes7 34 une structure With...End With est utilise pour
insrer les donnes appropries dans les cellules du classeur. Ligne22, lavance sur droits
dauteur est divise par le nombre de paiements. Lignes25 33, une structure conditionnelle sert dfinir les dates de rglement: si un seul paiement est effectu, le rglement
sopre la parution (ligne26). Si le rglement est effectu en deux versements (lignes27
33), le premier rglement est vers lors de la remise (ligne29) et le second lors de la
parution (ligne31). Lignes35 50, une structure conditionnelle sert complter les informations concernant les taux des droits dauteur. Ligne52, le calcul est forc sur les calculs
ouverts. Lignes55 57 le classeur est imprim. Les lignes60 62 correspondent une
seule instruction denregistrement. Le classeur est enregistr dans le dossier C:\Mes documents et a pour nom ISBN Nom Paie1.xlsx ou ISBN Nom Paie2.xlsx o ISBN est lISBN
de louvrage, et Nom le nom de lauteur. Ligne63, le classeur est ferm.

Mise jour du Tableau Word


Commencez par insrer lappel de la procdure de mise jour du tableau dans la procdure
EditionContratAuteur.
Sub EditionContratAuteur()
1. Liaisons des var. objet
Set ClasseurAuteurs = GetObject(C:\Mes documents\Classeur Auteurs.xlsx)
Set MonTableauWord = GetObject(, Word.Application)

532

Excel 2010 et VBA

If Err.Number <> 0 Then Err.Clear


2. Affichage des feuilles
fmContratAuteur.Show
fmContratConditions.Show
fmContratDates.Show
fmContratImpression.Show
fmContratFin.Show
3. Edition des feuilles de paie et du courrier
If MonAuteur.societe = False Then
Call EditerFeuilleDePaie
End If
Call MettreTableauAJour
4. Mise jour du tableau Word
5. libration des ressources mmoire
End Sub

Placez ensuite le code suivant dans le module ContratsAuteur:


1: Sub MettreTableauAJour()
2:
Dim derligne As Integer
3:
Set MonTableauWord = GetObject(C:\Mes documents\Contrats Auteurs.doc)
4:
MonTableauWord.Tables(1).Rows.Add
5:
derligne = MonTableauWord.Tables(1).Rows.Count
6:
With MonTableauWord.Tables(1)
7:
.Cell(derligne, 1).Range.InsertAfter MesConditionsAuteur.ISBN
8:
.Cell(derligne, 2).Range.InsertAfter MesConditionsAuteur.Titre
9:
.Cell(derligne, 3).Range.InsertAfter MonAuteur.Nom
10:
If MesConditionsAuteur.TauxVariable = True Then
11:
.Cell(derligne, 4).Range.InsertAfter MesConditionsAuteur.
TauxDroitsNum1 & _
12:
sur & MesConditionsAuteur.NumExemplairesTaux1 & _
13:
puis & MesConditionsAuteur.TauxDroitsNum2
14:
Else
15:
.Cell(derligne, 4).Range.InsertAfter MesConditionsAuteur.
TauxDroitsNum1
16:
End If
17:
.Cell(derligne, 5).Range.InsertAfter MesConditionsAuteur.Avance
SurDroits
18:
.Cell(derligne, 6).Range.InsertAfter Date
19:
.Cell(derligne, 7).Range.InsertAfter MesConditionsAuteur.remise

Chapitre 17

Exemple complet dapplication Excel 

533

20:
.Cell(derligne, 8).Range.InsertAfter MesConditionsAuteur.Parution
21:
End With
22:
MonTableauWord.Save
23:
MonTableauWord.Close
24: End Sub

Ligne3, la variable MonTableauWord se voit affecter un document Word. Ligne4, une ligne
est ajoute au premier tableau de ce document, et le numro de cette ligne est stock dans
la variable DerLigne la ligne suivante. Lignes6 21, une structure With...End With sert
complter les cellules du tableau avec les valeurs appropries. Lignes22 et 23, le tableau
est enregistr puis ferm.

eil
Cons

Telle quelle se prsente, cette application fonctionne. Pour la scuriser, vous


devez cependant la tester dans des conditions diffrentes et mettre en place des
gestionnaires derreur. De multiples conditions peuvent gnrer une erreur.
Ce sera par exemple le cas si un document utilis (le modle Paiement.xlt ou
le document Contrats Auteur.doc par exemple) nest pas disponible, ou est en
cours dutilisation par un autre utilisateur.

Annexe
Mots cls
pour la manipulation
de fichiers et de dossiers
Cette annexe prsente les mots cls ddis la gestion de fichiers et de dossiers. Manipulezles avec prudence afin de ne pas supprimer malencontreusement des fichiers importants!
Mots cls pour la manipulation des fichiers et des dossiers

Mot cl

Description

Exemple

path

Change de dossier.

ChDir C:\Mes documents.

Notez que le lecteur courant nest pas modifi. Fait de C:\Mes documents le
dossier actif.
drive

Change de lecteur.

ChDrive D:

Fait du lecteur D: le lecteur actif.


CurDir

Retourne le chemin du dossier en cours.

536

Excel 2010 et VBA

Mot cl

Description

Exemple

(pathname,
attributes)

Retourne le nom des fichiers dun dossier ou


dun volume. pathname est facultatif et peut
reprsenter le nom du dossier et le lecteur.
attributes est facultatif et reprsente les
attributs des fichiers que lon veut retourner.

MyFile = Dir(*.doc,
vbHidden).

Retourne le premier fichier


possdant lextension .doc
et lattribut Fichier cach.

Additionnez les valeurs suivantes pour dfinir


la valeur de attributes:
vbNormal ou 0: Fichiers sans attributs
(valeur par dfaut).
vbReadOnly ou 1: Fichiers accessibles en
lecture seule et fichiers sans attributs.
vbHidden ou 2: Fichiers cachs et fichiers
sans attributs.
vbSystem ou 4: Fichiers systme et fichiers
sans attributs (non disponible sur Macintosh).
vbVolume ou 8: Nom de volume; si un
autre attribut valeur est prcis, la constante
vbVolume est ignore (non disponible sur
Macintosh).
vbDirectory ou 16: Dossiers et fichiers
sans attributs.
source,
destination

Copie un fichier un autre emplacement.


source est le fichier copier et destination
lendroit o il doit tre copi.
Notez que le nom du fichier copi peut tre
diffrent de celui du fichier source.

FileCopy C:\toto.doc,
A:infos.doc

Copie le fichier toto.doc sur le


lecteur a: et sous le nom infos.
doc.

Attention: une erreur est gnre si vous


tentez de copier un fichier ouvert.
FileDateTime
(pathname)

Retourne les informations de date et dheure


dun fichier.

FileDateTime(C:\toto.
doc)

Retourne la date et lheure du


fichier toto.doc.
(pathname)

Retourne la taille dun fichier en octets.

FileLen(C:\toto.doc)

Retourne la taille de toto.doc.


FullName

Retourne le nom complet dun fichier


(avec son chemin).

ActiveDocument.FullName

Retourne le nom complet du


document actif.

Annexe

Mots cls pour la manipulation de fichiers et de dossiers 

Mot cl

Description

(pathname)

Renvoie une valeur reprsentant les attributs


dun fichier, dun dossier ou dun volume. La
valeur retourne est la rsultante de laddition
de ces valeurs:

537

Exemple

vbNormal ou 0: Fichier normal.


vbReadOnly ou 1: Fichier en lecture seule.
vbHidden ou 2: Fichier cach.
vbSystem ou 4: Fichier systme (non disponible sur Macintosh).
vbDirectory ou 16: Dossier.
vbArchive ou 32: Fichier modifi depuis
la dernire sauvegarde (non disponible sur
Macintosh).
path

Cre un nouveau dossier.

MkDir C:\MonDossier

Cre le dossier C:\MonDossier.


Name

Path

Retourne le nom dun fichier (sans son


chemin).

ActiveDocument.Name

Supprime un dossier.

RmDir C:\MonDossier

Retourne le nom du document


actif.
Supprime le dossier C:\
MonDossier.

pathname,
attributes

Modifie les attributs dun fichier. Utilisez


les mmes valeurs que pour la fonction
GetAttr() pour dfinir les attributs
du fichier.
Si le fichier est ouvert, une erreur est gnre.

SetAttr C:\toto.doc,
vbHidden + vbReadOnly

Affecte les attributs Fichier cach


et Lecture seule au fichier toto.
doc.

Index

Symboles
-, oprateur arithmtique 181
*, oprateur arithmtique 181
/, oprateur arithmtique 181
+, oprateur arithmtique 181
&, oprateur de concatnation 174
<, oprateur relationnel 211
<=, oprateur relationnel 211
=, oprateur relationnel 211
>, oprateur relationnel 211
>=, oprateur relationnel 211

A
Abs, fonction 264
Accelerator, proprit 387
Activate, vnement 448
Activation (feuille de calcul) 448
ActiveCell, proprit 69, 443
ActiveSheet, proprit 443
ActiveWorkbook, proprit 443
Afficher
barre doutils 121
bote outils 102

Explorateur
de projet 89
dobjets 93
fentre
Code 104
Proprits 117
UserForm 102
feuille 357
AfterUpdate, vnement 408
Aide
code 169
VBA 96
touche F1 360
Ajouter
module 149
procdure 153
Aligner, commande 347
Alignment, proprit 362
Ancrage 124
And, oprateur logique 252
Annuler 445
Apparence des contrles 362
VoirProprits des contrles

540

Excel et VBA

Appels
pile 299, 304
procdures 131, 162
Property Get 145
Property Let 147
Application
cration 441
hte 5, 16, 86
objet 18, 440
dclaration et instanciation 440
mthodes 445
proprits 443
Arguments
facultatifs 138
fonctions 29
nomms 165
passage 137
procdure 164
passs 131
Arrt
enregistrement 67
mode 298
Asc, fonction 266
As, mot cl 138
Atn, fonction 264
Authentification
VoirScurit
Automation 17, 203
AutoSize, proprit 372
AutoTab, proprit 373
AutoWordSelect, proprit 374

B
BackColor, proprit 363
BackStyle, proprit 363
Barre de dfilement 340, 443
VoirScrollBar
Barre de formule 443
Barre dtat 443
Barre doutils
afficher/masquer 121
personnaliser 321
Visual Basic Editor 121

BeforeDragOver, vnement 408


BeforeDropOrPaste, vnement 408
BeforeRightClick, vnement 448
BeforeUpdate, vnement 408
Bibliothque dobjets 17, 93
Excel 95
MSForms 94
Office 95
rfrencer 204
VBA 95
Bote outils 88, 333
afficher 102
ajouter
contrles 353
page 355
contrle
CheckBox 336
ComboBox 335
CommandButton 338
Frame 335
Label 334
ListBox 336
MultiPage 339
OptionButton 337
ScrollBar 340
SpinButton 340
TabStrip 338
TextBox 334
ToggleButton 338
personnaliser 352
Botes de dialogue
afficher 235
InputBox 235, 239
MsgBox 241
dvelopper 329
VoirFeuille
Enregistrer
macro 48
sous 247
Excel 246
Macro 48
Ouvrir 247
Boolean, type 24

BorderColor, proprit 363


BorderStyle, proprit 364
Boucles 210
Do Loop 215
For EachNext 224
ForNext 218
imbriques 222
WhileWend 210
Boutons
VoirOptionButton
bascule 338
VoirToggleButton
commande 338
VoirCommandButton
macro 48
Ne pas commenter 158
option 337
rorganiser 351
toupie 340
VoirSpinButton
ByRef, mot cl 138
Byte, type de donnes numriques 180
ByVal, mot cl 138, 140

C
Cadre
VoirFrame
Calculate
vnement 448
mthode 445
Calcul forc 445
feuille de calcul 448
Call, mot cl 162
Cancel, proprit 374
Caption, proprit 364, 443
Caractre
continuit de ligne 156
sparation 444
Case cocher 336
Casse 52
CBool, fonction 200, 267
CByte, fonction 200, 267
CCur, fonction 200, 267

Index

CDate, fonction 200, 267


CDbl, fonction 200, 267
CDec, fonction 200, 267
Cells, proprit 69
Cellule
active 66, 443
modification 448
Centrer 350
Chane de caractres
comparer 283
concatner 276
variables tableau 278
espaces 280
extraire 281
longueur 281
manipuler 275
modifier 276
casse 283
rechercher 286
remplacer 282
type de donnes 22
variables 178
Change, vnement 409, 448
ChDir, instruction 535
ChDrive, instruction 535
CheckBox, contrle 336, 377, 429
valeur 367
Chr, fonction 236, 266, 278
CInt, fonction 200, 267
Classes 15, 95
membres 93, 96
Classeur 20, 444, 445
actif 443
calcul forc 445
macros 55
stockage 54
Clavier 64
Click, vnement 410
CLng, fonction 200, 267
Codage 36
Code 36
aide 169
commentaires 156

541

542

Excel et VBA

couleurs 159
criture 155
excuter 168
fentre 102
deux volets 112
plusieurs 111
mise en forme 158
objets 105
options
daffichage 113
ddition 114
stockage 130
Collection dobjets
For EachNext 224
Collection dobjets 15, 20
indice 20
mthode 28
Column, proprit 69
COM 203
Combinaison (touches) 445
ComboBox, contrle 335, 366, 377, 378, 421
valeur 368
CommandButton, contrle 338, 374, 375
Commande (enregistrer) 36
Commenter 156
bouton 158
Comparer (chanes) 283
Compilation 295
erreurs de 294
Complment automatique des instructions,
option 170
Comportement 372
VoirProprits des contrles
Concatnation
chanes de caractres 276
variables 181
Conditions
imbriques 231
oprateur relationnel 211
Constantes 197
caractres 279
dfinition 133
Excel 25
intrt 202

prfixes 24
stockage 173
VoirVariables
type de donnes 24
Const, mot cl 197
Contrles 329
VoirFeuilles
ajouter 353
aligner 347
centrer 350
CheckBox 336, 377, 429
valeur 367
ComboBox 335, 366, 377, 378, 421
valeur 368
CommandButton 338, 374, 375
copier/coller 344
vnements 408
Voirvnements
focus 373
Frame 335
grouper 351
info-bulle 365
Label 334, 415
ListBox 336, 426
valeur 368
mise en forme 346
MultiPage 339
valeur 368
OptionButton 337, 388, 429
valeur 367
placer 341
procdure 402
programme 209
VoirStructure de contrle
proprits 118
VoirProprits des contrles
raccouri 387
ScrollBar 340, 385, 386, 430
valeur 368
slectionner 345
sparer 351
SpinButton 340, 385, 386, 432
valeur 368
supprimer 345

TabStrip 338
tabulation 373
TextBox 334, 377, 378, 379, 380, 418
valeur 367
ToggleButton 338
valeur 367
uniformiser
espace inter- 349
taille 348
valeur 367
ControlTipText, proprit 365
Conventions 9, 10
Copier/coller 344
Cos, fonction 264
Couleurs du code 159
CreateObject, fonction 193, 203
Crer
macro 51
procdure 152
CSng, fonction 200, 267
CStr, fonction 201, 267
CurDir, instruction 535
Currency, type de donnes numriques 181
CurrentRegion, proprit 80
Curseurs 443
Cursor, proprit 443
CVar, fonction 201, 267

D
Date
fonction 228, 267, 268
variable 184
DateSerial, fonction 269
DateValue, fonction 269
Day, fonction 268
DDB, fonction 270
Deactivate, vnement 448
Dbogage 293
espions 302
exemple 305
fentre Excution 301
interroger 298
modifier 301

Index

pas pas 297


pile des appels 304
points darrt 300
tester 295
Dclaration
explicite et implicite 174
module 107
procdures
Function 141
Property Get 144
Property Let 146
variables 174
Default, proprit 375
Dfilement 382
VoirProprits des contrles
Delay, proprit 384
Dplacements
codage VB 69
Excel 63
Dsactivation 448
Dtecteur derreur 312
Dveloppement environnement 86
VoirVisual Basic Editor
Dialog
collection 246
objet 247
Dim, mot cl 177, 202
Dir, instruction 536
DisplayAlerts, proprit 443
DisplayFormulaBar, proprit 443
DisplayScrollBars, proprit 443
DisplayStatusBar, proprit 443
Document hte 53
DoLoop, structure de contrle 215
Donnes
conversion 198, 200
stockage 173
VoirVariables
type 22
VoirTypes de donnes
validation 198
Dossiers 91
Feuilles 91

543

544

Excel et VBA

manipuler 535
Microsfot Excel Objets 91
Modules 91
de classe 91
Rfrences 91
Double
clic 448
type de donnes numriques 181
DropButtonClick, vnement 410
Dure de vie (variables) 201

E
criture du code 155
Emplacement 393
VoirProprits des contrles
EnableCancelKey, proprit 444
Enabled, proprit 375
End
mot cl 297, 298
proprit 81
Sub, instruction 43
Enregistrer
commandes 36
macro 37, 38
enregistreur 36
sous 247
Enter, vnement 410
EnterKeyBehavior, proprit 377
Erreurs
compilation 294
dtecteur 312
excution 294
gestion 293, 312
gestionnaire 312
logiques 295
objet Err 313
On Error 312
Espaces 280
Espions 302
express 304
supprimer 304
tiquettes 312
vnements 28, 106, 408

Activate 448
AfterUpdate 408
BeforeDragOver 408
BeforeDropOrPaste 408
BeforeRightClick 448
BeforeUpdate 408
Calculate 448
Change 409, 448
Click 410
Deactivate 448
DropButtonClick 410
Enter 410
Exit 410
feuille de calcul 448
gestion des utilisateurs 440
Initialize 411
KeyDown 411
KeyPress 412
KeyUp 412
MouseDown 414
MouseMove 414
MouseUp 414
procdures 107, 132
SelectionChange 448
SpinDown 414
SpinUp 415
Excel
barre
de dfilement 443
de formule 443
dtat 443
botes de dialogue 246
cellule active 66
intitul 443
message 443
modle dobjets 29
rfrence
absolue 67, 69
relative 67, 78
slection 64
Excution
code 168
erreurs 294

VoirGestion des erreurs et dbogages


fentre 301
impossible 298
macro 40
pas pas 297
Exit
vnement 410
mot cl 311, 312
Exp, fonction 265
Explorateur de projet 88, 89
afficher 89
ordre alphabtique 92
masquer 89
utiliser 91
Explorateur dobjets 88, 92
afficher 93
aide 96
fonctions 260
masquer 93
rechercher 98
utiliser 94
Exporter (module) 151, 458
Expressions 133
arithmtiques 23
oprateurs relationnels 211

F
False, valeur boolenne 24
Fentre
ancrer 124
Code 88, 102
affichage 111, 112, 113
options daffichage 113
options ddition 114
rechercher 109
remplacer 110
slection 108
utiliser 105
Excution 301
Proprits 116, 117
afficher 117
utiliser 118
UserForm 88, 100

Index

afficher 102
Variables locales 298
Feuille 329, 436
VoirContrles
afficher 357
contrles
placement 341
proprits 118
cration et mise en forme 329, 358
crer 331
de calcul
activation 443, 448
calcul forc 448
dsactivation 448
double-clic 448
grer les vnements 448
modification 448
dveloppement 331
dossier 91
exploiter 359
VoirContrles; VoirProprits
masquer 357
mettre en forme 346
position 394
raccourci 387
Fichiers 535
FileCopy, instruction 536
FileDateTime, instruction 536
FileLen, instruction 536
Filter, fonction 289
Fix, fonction 265
Focus 373
Fonctions 29
Abs 264
arguments 29
Asc 266
Atn 264
CBool 200, 267
CByte 200, 267
Ccur 200, 267
CDate 200, 265, 267
CDbl 200, 267
CDec 200, 267

545

546

Excel et VBA

Chr 236, 266, 278


CInt 200, 267
CLng 200, 267
conversion 200
Cos 264
CreateObject 193, 203
CSng 200, 267
CStr 201, 267
CVar 201, 267
Date 267
Date 228
DateSerial 269
DateValue 269
Day 268
DDB 270
Excel 258
Exp 265
Filter 289
Fix 265
Format 266
FV 270, 271
GetObject 191, 203
Hex 266
Hour 269
InputBox 235
InStr 225
IPmt 272
IRR 271
IsArray 198
IsDate 198
IsEmpty 198
IsError 198
IsMissing 198
IsNull 198
IsNumeric 198
IsObject 198
Join 278
LBound 188
LCase 283
Left 225, 281
Len 281
Log 265
LTrim 280

Mid 281
Minute 269
MIRR 272
Month 268
MsgBox 241
Now 268
NPer 272
NPV 273
Oct 266
personnalises 258
Pmt 272
PPmt 272
PV 273
Rate 271
recommandations 263
Replace 282
Resize 80
RGB 266
Right 281
Rnd 265
Round 265
RTrim 280
Second 269
Sgn 265
Sin 265
SLN 270
Sqt 265
Str 266
StrComp 284
StrConv 283
String 280
SYD 270
Tan 265
Time 268
Timer 269
TimeSerial 269
TimeValue 269
Trim 280
TypeName 199
types de donnes 198
UBound 188
UCase 283
Val 266

VarType 199
VBA 264
conversion 266, 267
date et heure 267, 268
financires 270, 272
mathmatiques 264
Weekday 268
WeekdayName 268, 269
Year 268
Font, proprit 399
For EachNext, structure de contrle 224
ForeColor, proprit 365
Format, fonction 266
Formulaire 329
VoirFeuilles
ForNext, structure de contrle 218
Frame, contrle 335
FullName, instruction 536
Function, procdures 141
appels 163
syntaxe 141
FV, fonction 270, 271

G
Gestion avance des objets Excel 436, 449
Gestion des erreurs 293
exemple 313
gestionnaire 312
GetAttr, instruction 537
GetObject, fonction 191, 203
GetOpenFilename, mthode 247
GetSaveAsFilename, mthode 247
GoTo, instruction 234
Grille 346
GroupName, proprit 388

H
Height, proprit 393
HelpContextID, proprit 388
Hex, fonction 266
HideSelection, proprit 377
Hirarchie de classes 16
Hour, fonction 269

Index

I
IfThenElse, structure de contrle 228
Info
bulles 298, 365
express automatique, option 171
Initialize, vnement 411
InputBox
fonction 235
mthode 239
Instanciation 16
dun objet 15
InStr, fonction 225
Instructions
casse 52
ChDir 535
ChDrive 535
commenter 158
complment 170
conditionnelles 228
IfThenElse 228
Select Case 233
CurDir 535
daffectation 134
de dclaration 134
Dir 536
End Sub 43
excutables 135
FileCopy 536
FileDateTime 536
FileLen 536
FullName 536
GetAttr 537
GoTo 234
imbriques 158
MkDir 537
modifier 301
Name 537
prsentation 133
retraits de ligne 158
RmDir 537
SetAttr 537
Sub 43
sur plusieurs lignes 156

547

548

Excel et VBA

Integer, type de donnes numriques 180


Interface
utilisateur 329
VoirFeuille
Visual Basic Editor 88
Interruption (macro) 444
Int, fonction 265
Intitul 334
VoirLabel
barre de titre 443
IPmt, fonction 272
IRR, fonction 271
IsArray, fonction 198
IsDate, fonction 198
IsEmpty, fonction 198
IsError, fonction 198
IsMissing, fonction 198
IsNull, fonction 198
IsNumeric, fonction 198
IsObject, fonction 198
Is, oprateur relationnel 211

J
Join, fonction 278

K
KeepScrollsVisible, proprit 384
KeyDown, vnement 411
KeyPress, vnement 412
KeyUp, vnement 412

L
Label, contrle 334, 415
LargeChange, proprit 386
LBound, fonction 188
LCase, fonction 283
Left
fonction 225, 281
proprit 393
Libell 334
VoirLabel
Librer (variable objet) 195

Like, oprateur relationnel 211


ListBox, contrle 336, 426
valeur 368
Locked, proprit 378
Log, fonction 265
Long, type de donnes numriques 180
LTrim
fonctions 280
Len 281

M
Macros
accder 53, 60
amliorer 47
autorisations 459
bouton 321
complmentaires 56
activer/dsactiver 58
enregistrer 57
intgres 59
date de cration 38
cran 444
crire 51
enregistrement 37, 38
Excel 67
enregistreur 36
excution 40
heure prcise 445
globales 55
instructions 43
interrompre 176
interdire 444
sauvegarde 457
scurit 452
VoirScurit
signer 472
stockage 53
enregistrement 54
structure 42
utilisation 35
virus 452
Majuscules (convertir) 283
Manipuler 535

Masquer 357
Matrice, variables (de) 185
MaxLenght, proprit 378
Max, proprit 385
Membres dune classe 93, 96
Menu (personnaliser) 323
Messages dalerte 443
Mthodes 20, 27
Application 445
Calculate 445
collection 28
InputBox 239
OnKey 445
OnTime 445
OnUndo 445
Microsfot Excel Objets, dossier 91
Mid, fonctions 281
Min, proprit 385
Minuscules (convertir) 283
Minute, fonction 269
MIRR, fonction 272
Mise jour de lcran 444
Mise en forme
code 158
contrles 346
MkDir, instruction 537
Mode Arrt 298
Modle dobjets 16, 19, 29
Modifier
bouton 48
cellule 27
chanes 276
casse 283
Change 409, 448
commandes 4
contrle 354
instructions 301
macro 42
objet 22, 26
proprits 119
Resize 69, 80
SelectionChange 448
variable 200

Index

Module
affichage du code 114
ajouter 149
dclarations gnrales 107
de classe 91
dossier 91
exporter 151, 458
objets 105
prsentation 130
procdures 106
supprimer 151
Month, fonction 268
Mot cl 43, 133
As 138
ByRef 138
ByVal 138, 140
Call 162
Const 197
dfinition 133
Dim 177, 202
End 297, 298
Exit 311, 312
Nothing 195
On Error 312
Optional 138
ParamArray 138
Private 137, 155, 202
Public 137, 155, 202
recherche 98
REM 156
Resume 312
Set 190
Static 137, 139, 203
Stop 298, 300, 301
Type 195
WithEvents 440
Mot de passe 362
MouseDown, vnement 414
MouseIcon, proprit 388
MouseMove, vnement 414
MousePointer, proprit 389
MouseUp, vnement 414
MSForms, bibliothque dobjets 94

549

550

Excel et VBA

MsgBox, fonction 241


MultiLine, proprit 379
MultiPage, contrle 339
valeur 368

N
Name
instruction 537
proprit 361
Nom dutilisateur 444
Nothing, mot cl 195
Now, fonction 268
NPer, fonction 272
NPV, fonction 273

O
Objets 105
VoirExplorateur dobjets
accder 19
affecter une macro 325
aide 96
Application 18, 440
dclaration et instanciation 440
mthodes 445
proprits 443
bibliothque 17
caractristiques 14
classes 15
classeur 444
code 105
collections 15, 20
For EachNext 224
dfinition (proprits) 44
Dialog 247
vnements 28
explorer 92
gestion
avance 449
vnements 440
instanciation 15, 16
mthodes 27
modles 16
prsentation (des) 14, 29

proprits 21
recherche 98
rfrencer 204
rfrentiel 20, 26
ThisWorkbook 445
variables 190
Workbook 20
Worksheet 448
Oct, fonction 266
Office
applications htes 16
bibliothque 95
Offset, proprit 69
OLE Automation 203
On Error, mot cl 312
Onglets 338
VoirTabStrip et MultiPage
OnKey, mthode 445
OnTime, mthode 445
OnUndo, mthode 445
Oprateurs
arithmtiques 181
comparaison 211
concatnation 179
logiques 252
And 252
Or 252
Xor 252
relationnels 211
Option
ancrage des fentres 126
Base 1, instruction 186
Explicit, option 175
Optional, mot cl 138
OptionButton, contrle 337, 388, 429
valeur 367
Ordre de tabulation 373, 391
dfinir 391
Or, oprateur logique 252
Ouvrir
bote de dialogue 247
Visual Basic Editor 86

P
Page 355
ParamArray, mot cl 138
Paramtres
fonctions 29
Visual Basic Editor 124
Pas pas, commande 298
Passage darguments 131, 137, 164
apparition 164
nomms 165
rfrence 138
valeur 138, 140
PasswordChar, proprit 362
PathSeparator, proprit 444
PERSONAL.XLSB 55
Personnaliser
barres doutils 321
bote outils 352
menus 323
raccourcis clavier 318
PictureAlignment, proprit 396
PicturePosition, proprit 398
Picture, proprit 395
PictureSizeMode, proprit 397
PictureTiling, proprit 398
Pile des appels 299, 304
Plage de cellules
courantes 80
fin 81
nommes 83
redimensionner 80
utilises 81
Pmt, fonction 272
Points darrt 300
Police des contrles 399
VoirProprits des contrles
Porte
des procdures 137
notion 154
variables 201
prive 201
procdure 201
publique 202

Index

PPmt, fonction 272


Private, mot cl 137, 155, 202
Procdures
appels 131, 162
crer 152
dfinition 105
dplacer 161
vnement 28, 107
Voirvnements
application 441
classeur 445
feuille 448
vnementielles 132, 402
Function 141
appels 163
dclaration 141
noms 136
pas pas 297
passage darguments 164
pile des appels 299
portes 136, 137
prsentation 131
prives 136, 137
Property 142, 143
Property Get, dclaration 144
Property Let, dclaration 146
publiques 136, 137
quitter 166
rcursives 246
Sub 136
appels (de) 162
tester 295
types de 136
Programmation oriente objet 13, 29
Programme VBA
droulement 209
VoirStructure de contrle
instructions 133
lisibilit 162
modules 130
pas pas 297
procdures 131
quitter 167
structure 130

551

552

Excel et VBA

Projets
compiler 295
dossiers constitutifs 91
Explorateur de projet 92
explorer 89
rinitialiser 296
structure 149
tester 295
verrouiller 459
Property Get, procdures
appel 145
syntaxe 144
Property Let, procdures
appel 147
syntaxe 146
Property, procdures 143
appels 163
Proprits 21
accder 26
ActiveCell 69, 443
ActiveSheet 443
ActiveWorkbook 443
Application 443
Caption 443
Cells 69
Column 69
contrles 360
Accelerator 387
Alignment 362
AutoSize 372
AutoTab 373
AutoWordSelect 374
BackColor 363
BackStyle 363
BorderColor 363
BorderStyle 364
Cancel 374
Caption 364
ControlTipText 365
Default 375
Delay 384
Enabled 375
EnterKeyBehavior 377

Font 399
ForeColor 365
GroupName 388
Height 393
HelpContextID 388
HideSelection 377
KeepScrollsVisible 384
LargeChange 386
Left 393
Locked 378
Max 385
MaxLenght 378
Min 385
MouseIcon 388
MousePointer 389
MultiLine 379
Name 361
Picture 395
PictureAlignment 396
PicturePosition 398
PictureSizeMode 397
PictureTiling 398
ScrollBars 382
SelectionMargin 379
SmallChange 386
SpecialEffect 366
StartUpPosition 394
Style 366, 380
TabIndex 391
TabKeyBehavior 380
TabStop 392
Tag 393
TextAlign 381
Top 393
TripleState 381
Value 367
Visible 369
Width 393
WordWrap 382
CurrentRegion 80
Cursor 443
DisplayAlerts 443
DisplayFormulaBar 443

DisplayScrollBar 443
DisplayStatusBar 443
EnableCancelKey 444
End 81
en lecture-criture 22
en lecture seule 22
fentre 116
modifier 119
Offset 69
PasswordChar 362
PathSeparator 444
Range 69
Row 69
ScreenUpdating 444
Select 69
Selection 69
ThisWorkbook 444
UsedRange 81
valeurs (des) 22, 45
Protection
voirScurit
Public, mot cl 137, 155, 202
PV, fonction 273

R
Raccourcis clavier
dplacer 65
macro 318
Range, proprit 69
Rate, fonction 271
Rechercher
chane 286
fentre Code 109
texte 98
Redimensionner (plage) 80
Rfrence
absolue 67, 69
bote de dialogue 204
dossiers 91
relative 67, 78
Rfrentiel dobjet 20, 26
Rinitialiser 296
REM, mot cl 156

Index

Remplacer
chane 282
texte 109, 110
Rorganiser (boutons) 351
Replace, fonction 282
Resize, fonction 80
Resume, mot cl 312
Retrait
automatique, option 159
bouton 159
ligne (code) 158
RGB, fonction 266
Right, fonctions 281
RmDir, instruction 537
Rnd, fonction 265
Round, fonction 265
Row, proprit 69
RTrim, fonctions 280

Sauvegarder (macros) 457


ScreenUpdating, proprit 444
ScrollBar
contrle 340, 385, 386, 430
valeur 368
proprit 382
Second, fonction 269
Scurit 452
macros
autoriser 459
sauvegarder 457
signer 472
virus 452
niveaux 452, 455
sources fiables 455
verrouiller 459
Select Case, structure de contrle 233
Slection
cellules 448
codage VB 69
lignes et colonnes 72
rfrence absolue 69, 71
Excel 63
outil 334
plusieurs contrles 345

553

554

Excel et VBA

SelectionChange, vnement 448


SelectionMargin, proprit 379
Selection, proprit 69
Select, proprit 69
SetAttr, instruction 537
Set, mot cl 190
Sgn, fonction 265
Signature numrique 472
Sin, fonction 265
Single, type de donnes numriques 180
SLN, fonction 270
SmallChange, proprit 386
Sortie
procdure 166
programme 167
Souris 66
SpecialEffect, proprit 366
SpinButton, contrle 340, 385, 386, 432
valeur 368
SpinDown, vnement 414
SpinUp, vnement 415
Sqr, fonction 265
Standard 122
StartUpPosition, proprit 394
Static, mot cl 137, 139, 203
Stockage
donnes 173
VoirVariables
macros 53
Stop, mot cl 298, 300, 301
StrComp, fonction 284
StrConv, fonction 283
Str, fonction 266
String
fonction 280
type de donnes 22
variables 178
Structure
macros 42
programmes VBA 130
projets 149
WithEnd With 48
Structures de contrle 209, 253

Botes de dialogue 235


boucles 210
Do Loop 215
For EachNext 224
ForNext 218
WhileWend 210
GoTo 234
instructions conditionnelles 228
IfThenElse 228
Select Case 233
Oprateurs logiques 235
Style, proprit 366, 380
Sub
instruction 43
procdures 136
appels 162
Supprimer
contrles 345
espaces 280
module 151
SYD, fonction 270
Syntaxe
accs
objets 20
proprits 26
arguments 137
nomms 165
Const 197
couleurs 159
CreateObject 193
Dim 177
DoLoop 215
For EachNext 224
ForNext 218
Function 141
gestion des erreurs 312
GetObject 191
GoTo 234
IfThenElse 228
InputBox 235, 239
mthodes 27
MsgBox 241
Private 202

Index

procdures
appel 162
vnementielles 402
Property Get 144
Property Let 146
Public 202
Select Case 233
Set 190
Static 203
Type 195
vrification automatique 169
WhileWend 210
WithEnd With 44

T
TabIndex, proprit 391
TabKeyBehavior, proprit 380
Tableaux 138
instruction Option Base 186
TabStop, proprit 392
TabStrip, contrle 338
Tag, proprit 393
Tan, fonction 265
TextAlign, proprit 381
TextBox, contrle 334, 377, 378, 379, 380,
418
valeur 367
ThisWorkbook
objet 445
proprit 444
Time, fonction 268
Timer, fonction 269
TimeSerial, fonction 269
TimeValue, fonction 269
ToggleButton, contrle 338
valeur 367
Top, proprit 393
Touches, combinaison 445
Trait de soulignement 156
Trim, fonctions 280
TripleState, proprit 381
True, valeur boolenne 24
Type, mot cl 195

TypeName, fonction 199


Types de donnes 178
chane de caractres 22
constantes 24
conversion 200
valeur
boolenne 24
numrique 23
validation 198
vrifier 198

U
UBound, fonction 188
UCase, fonction 283
Underscore 156
Uniformiser
espace, commande 349
taille, commande 348
UsedRange, proprit 81
UserForm, fentre 100

V
Valeurs
boolennes 24
variables 183
des contrles 367
numriques
type de donnes 23
variables 180
Val, fonction 266
Value, proprit 367
Variables 173, 203
boolean 183
concatnation 181
conversion du type 200
Dates 184
dclarer 174
dfinir 199
de matrice
rechercher 289
dure de vie 201
forcer la dclaration 175
info-bulles 298

555

556

Excel et VBA

locales 140
fentre 298
matrice 185
concatner 278
numriques 180
objets 190
librer 195
personnalises 195
portes 201
statiques 139, 203
String 178
longueur 179
types 178
validation 198
Variant 185
vrifier 198
Variant, variables 185
VarType, fonction 199
VBA, bibliothque dobjets 95
Vrification (syntaxe) 169
Verrouiller un projet 459
Virus, macros 452
Visible, proprit 369
Visual Basic
mots cls 43, 133
prsentation 13, 29
rechercher 98
structure 130
Visual Basic Editor 129, 169
VoirOutils VBA; VoirProgrammes VBA
ancrer les fentres 124
barres doutils 121
dvelopper dans 129, 152
environnement 88
environnement de travail 126,
Explorateur
de projet 89
dobjets 92

fentre
Code 102
Proprits 116
UserForm 100
lancer 86
paramtrer 124
quitter 88

W
Weekday, fonction 268
WeekdayName, fonction 268, 269
WhileWend, structure de contrle 210
Width, proprit 393
WithEnd With, structure 44, 48
WithEvents, mot cl 440
WordWrap, proprit 382
Workbook
vnements 445
objets 20, 445
Worksheet
vnements 448
objets 448

X
Xor, oprateur logique 252

Y
Year, fonction 268

Z
Zone de liste 336
VoirListBox
Zone de liste modifiable 335
VoirComboBox
Zone de texte 334
VoirTextBox

Microsoft

Excel et VBA

Vous souhaitez automatiser vos manipulations sous


Excel pour viter davoir refaire toujours les mmes
tches ? De la simple macro enregistre la conception de programmes plus labors, cet ouvrage vous
explique comment amliorer votre productivit !
Prenant en compte lvolution dOffice, il vous aidera
dvelopper des macros compatibles avec toutes
les versions dExcel (de 1997 2010).
Vous dcouvrirez en dtail les multiples outils de
Visual Basic Editor et apprendrez dboguer vos
programmes et grer les erreurs. Vous saurez personnaliser lenvironnement dExcel laide de programmes capables de dtecter tout vnement
utilisateur. Enfin, le dernier chapitre vous propose de
rviser lensemble des connaissances acquises en
ralisant une application complte, de sa conception son dbogage.
Quil sagisse de faire face un besoin immdiat ou
de crer des programmes durables, cet ouvrage
vous permettra de tirer pleinement profit dExcel.
Les codes sources du livre sont disponibles sur
www.pearson.fr.

Pearson Education France


47 bis, rue des Vinaigriers 75010 Paris
Tl. : 01 72 74 90 00
Fax : 01 42 05 22 17
www.pearson.fr

TABLE DES MATIRES

Notions fondamentales de la
programmation oriente objet

Premires macros

Dplacement et slection dans une macro


Excel

Dcouvrir Visual Basic Editor

Dvelopper dans Visual Basic Editor

Variables et constantes

Contrler les programmes VBA

Fonctions Excel et VBA

Manipulation des chanes de caractres

Dbogage et gestion des erreurs

Intgrer des applications VBA dans


linterface dExcel

Crer des interfaces utilisateur

Exploiter les proprits des contrles ActiveX

Matriser le comportement des contrles

Programmer des vnements Excel

Protger et authentifier des projets VBA

Exemple complet dapplication Excel

Mots cls pour la manipulation de fichiers et


de dossiers

Niveau : Dbutant / Intermdiaire


Catgorie : Programmation et bureautique
Configuration : PC

propos de lauteur
diteur et dveloppeur indpendant, Mikal Bidault a
dvelopp des modules VBA pour des maisons ddition
et des sites Internet rputs. Il a crit de nombreux
ouvrages sur ce sujet, comme LIntro Cration de macros
avec VBA pour Office (CampusPress, 2002) et Le Tout en
Poche Excel et VBA (CampusPress, 2006).

ISBN : 978-2-7440-4158-7

Vous aimerez peut-être aussi