Vous êtes sur la page 1sur 551

Microsoft

Excel et VBA

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

Mikal Bidault

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

Microsoft

Excel & VBA


Version 97, 2000, XP, 2003 et 2007
Mikal Bidault

Pearson Education France a apport le plus grand soin la ralisation de ce li vre afin de ous fournir une information complte et fiable. Cependant, Pearson Education France nassume de respon sabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tierces personnes qui pourraient rsulter de cette utilisation. Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions thoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle. Pearson Education France ne pourra en aucun cas tre tenu pour responsable des prjudices ou dommages de quelque nature que ce soit pouv ant rsulter de lutilisation de ces e xemples ou programmes. Tous les noms de produits ou marques cits dans ce li propritaires respectifs.
Publi par Pearson Education France 47 bis, rue des Vinaigriers 75010 PARIS Tl. : 01 72 74 90 00 www.pearson.fr Mise en pages : TyPAO ISBN : 978-2-7440-4108-2 Copyright 2009 Pearson Education France Tous droits rservs

vre sont des marques dposes par leurs

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 ................................................. Partie I Dcouvrir la programmation Excel ..........................

1 11

11. Intgrer des applications VBA dans linterface dExcel ......................... 305 Partie III Dvelopper des interfaces utilisateur........................... 317 12. Crer des interfaces utilisateur .............. 319 13. Exploiter les proprits des contrles ActiveX ........................... 347 14. Programmer les interfaces utilisateur .... 387 Partie IV Notions avances de la programmation Excel ..................... 423 15. Programmer des vnements utilisateur 425 16. Protger et authentifier des projets VBA 437 17. Bonus : exemple complet dapplication Excel ............................... 461 Annexe ........................................................ 517 Index ............................................................ 521

1. Notions fondamentales de la programmation oriente objet ........ 13 2. Premires macros .................................... 35 3. Dplacement et slection dans une macro Excel ............................. 63 4. Dcouvrir Visual Basic Editor ................ 85 Partie II Programmer en Visual Basic. 127 5. Dvelopper dans Visual Basic Editor ..... 129 6. Variables et constantes ............................ 171 7. Contrler les programmes VBA ............. 205 8. Fonctions Excel et VBA ......................... 251 9. Manipulation des chanes de caractres .. 267 10. Dbogage et gestion des erreurs ............ 283

Table des matires

Introduction ............................................ VBA, cest quoi ? ................................


Des programmes .............................. Une application hte et des projets ... Un langage de programmation ......... Un environnement de travail ............

1 2 4 5 6 8 9

CHAPITRE 2. Premires macros ............. Crer une macro GrasItalique .............


Dmarrer lenregistrement ............... Enregistrer les commandes de la macro ...................................... Excuter la macro ............................ Structure de la macro ....................... Amliorer la macro ..........................

35 36 37 39 40 42 47 50 50 51 51 53 54 54 55 55 56

Conventions typographiques ...............

I Dcouvrir la programmation Excel 11


CHAPITRE 1. Notions fondamentales de la programmation oriente objet 13 Comprendre le concept dobjet ...........
Objets et collections dobjets ........... Application hte et modles dobjets 16 Accder aux objets ........................... Les proprits .................................. Les mthodes ................................... Les vnements ................................ Les fonctions ...................................

Une autre mthode denregistrement ....


Enregistrement ................................. Structure de la macro .......................

Ecrire la macro .................................... 14 14 19 21 26 28 28 29


Excution de la macro ......................

Choisir laccessibilit des macros .......


Accessibilit globale ou limite ........ Classeurs et modles ........................ Le classeur de macros personnel ...... Les macros complmentaires ............ Dfinir le classeur de stock ge lors de lenregistrement dune macro 61 Accder aux macros dun classeur spcif que ........................................

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

61

VI

Excel et VBA

CHAPITRE 3. Dplacement et slection dans une macro Excel .............................. Mthodes de slection dans une feuille Excel ..........................................................
Clavier ....................................................... Souris ..................................................... Notion de cellule active ........................... Rfrences relatives et rfrences absolues

Ajouter un module ..................................

148 150 151 151 152 154 155 160 161 161 162 163 165 166 167 167 168 170 171 172 172 173 176 176 178 181 181 182 183 187 192 194 195 198

63 64
64

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

Crer une procdure ................................... Ecrire linstruction de dclaration ..........


La bote de dialogue Ajouter une procdure ......................................... La notion de porte ................................ Ecriture et mise en forme du code ........... Dplacer une procdure .........................

66 66 . 76 69 69 77 80

Coder les dplacements effectus lors de lenregistrement dune macro ........ Rfrence absolue aux cellules ................ Rfrence relative aux cellules ................
Rfrence aux cellules fonction de leur contenu ....................................... Rfrence aux plages de cellules nommes 83

Appel et sortie dune procdure ................. Appel dune procdure Sub .....................
Appels de procdures Function et Property ............................................. Passage darguments .............................. Sortie dune procdure ........................... Sortie dun programme ...........................

CHAPITRE 4. Dcouvrir Visual Basic Editor 85 Accder Visual Basic Editor .................... Les outils et les fentres de Visual Basic Editor LExplorateur de projet ........................... LExplorateur dobjets ............................ La fentre UserForm ............................... La fentre Code ...................................... La fentre Proprits .............................. Les barres doutils .................................. Paramtrer Visual Basic Editor .................. 86 88 89 93 100 103 115 119 123

Excuter du code ....................................... Aide lcriture de code ............................ Vrification automatique de la syntax ....
Info express automatique ........................

Complment automatique des instructions 169

CHAPITRE 6. Variables et constantes ............ Dclarer une variable ................................. Dclaration implicite ..............................
Dclaration explicite ..............................

II Programmer en Visual Basic


CHAPITRE 5. Dvelopper dans Visual Basic Editor ...................................

127
129

Types de donnes des variables ................. Chanes de caractres .............................


Valeurs numriques ................................ Valeurs boolennes ................................. Dates ..................................................... Type Variant ........................................... Variables de matrice ............................... Variables objet ....................................... Types de donnes personnaliss .............. Constantes ............................................. Validation et conversion des types de donnes .............................................

Structure des programmes Visual Basic ..... 130 Les modules ............................................ 130 Les procdures ........................................ 131 Les instructions ...................................... 133 Les diffrents types de procdures ............. 135 Procdures Sub ....................................... 136 Procdures Function ............................... 140 Procdures Property ............................... 143 Des projets bien structurs ......................... 148

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

Table des matires

VII

Porte de niveau procdure ..................... Porte de niveau module prive .............. Porte de niveau module publique ........... Variables statiques .................................

198 198 199 199 200 205 206 206 210 214 219 223 223 227 229 229 230 234 236 241 246 247 251 252 252 254

CHAPITRE 9. Manipulation des chanes de caractres ............................................ Modifier des chanes de caractres ............ Concatner des chanes ..........................
Insrer des caractres non accessibles au clavier ............................................... Rpter une srie de caractres .............. Supprimer les espaces superf us dune chane .......................................... Extraire une partie dune chane ............. Effectuer des remplacements au sein dune chane ..........................................

267 268 268 270 271 272 272 274 275 277 277 280 283 284 285 287 288 290 291 291 292 294 295 297 298 301 303 305 306 307

Traitement interapplications laide de variables objet ....................................... CHAPITRE 7. Contrler les programmes VBA ............................... Rpter une srie dinstructions : les boucles .................................................. La boucle While...Wend .......................... La boucle Do...Loop ............................... La boucle For...Next ................................ La boucle For Each...Next ....................... Utiliser des instructions conditionnelles .... La structure de contrle If...Then...Else ... La structure de contrle Select Case ....... Dfinir linstruction su vante avec GoTo ... Interagir avec lutilisateur via des botes de dialogue ................................................. La fonction InputBox .............................. La mthode InputBox .............................. La fonction MsgBox ............................... Affi hage de botes de dialogue Excel ...... Utiliser les oprateurs logiques .................. Trier des donnes ....................................... CHAPITRE 8. Fonctions Excel et VBA ........... Utiliser les fonctions Excel dans VBA ...... Crer des fonctions Excel personnalises .... Intgrer une fonction via lExplorateur dobjets ......................................................

Modif er la casse des chanes de caractres 275

Comparer des chanes de caractres .......... Rechercher dans les chanes de caractres Rechercher une chane dans une chane ...
Rechercher une chane dans une variable de matrice ..............................................

CHAPITRE 10. Dbogage et gestion des erreurs ................................................ Les tapes et les outils du dbogage .......... Test du projet ......................................... Excuter pas pas ................................. La fentre Variables locales .................... Les points darrt ...................................
Modif er lordre dexcution des instructions ...................................... La fentre Excution ............................... Les espions ............................................ La pile des appels ..................................

Exemple de dbogage ................................ Recherche du bogue ............................... Rsolution du bogue ............................... Gestion des erreurs et des exceptions ........ Exemple de gestion derreur ...................... CHAPITRE 11. Intgrer des applications VBA dans linterface dExcel ................. Affecter une macro un raccourci clavier . Personnaliser la barre doutils Accs rapide dExcel 2007 ........................

Insrer une fonction VBA dans votre code 254 Insrer une fonction Excel dans votre code 255

Recommandations pour lcriture de fonctions Excel .....................................


Les limites de la cellule ............................ Des fonctions toujours jour ..................

256
256

257 257

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

VIII

Excel et VBA

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

309 310 312 313 315

Uniformiser lespace entre les contrles . Centrer les contrles .............................. Rorganiser les boutons .......................... Grouper ou sparer des contrles ...........

337 338 339 340 341 341 343 345 347 349 350
350

Personnaliser la bote outils .................... Ajouter/supprimer un contrle ................ Ajouter/supprimer une page .................... Afficher/masquer une feuille ..................... CHAPITRE 13. Exploiter les proprits des contrles ActiveX ............................... Proprit Name .......................................... Apparence ..................................................
Alignment ................................................. BackColor .............................................. BackStyle ............................................... BorderColor ........................................... BorderStyle ............................................ Caption .................................................. ControlTipText ........................................ ForeColor ............................................... SpecialEffect .......................................... Style ....................................................... Value ...................................................... Visible ....................................................

III Dvelopper des interfaces utilisateur


CHAPITRE 12. . Crer des interfaces utilisateur .................................................. Les phases de dveloppement de feuilles .. Crer une feuille .........................................

317
319 320 321

Les contrles de la bote outils ................ 323 Outil Slection ........................................ 323
Contrle Label ....................................... Contrle TextBox .................................... Contrle ComboBox ............................... Contrle Frame ...................................... Contrle ListBox .................................... Contrle CheckBox ................................. Contrle OptionButton ........................... Contrle ToggleButton ............................ Contrle CommandButton ...................... Contrle TabStrip ................................... Contrle MultiPage ................................ Contrle ScrollBar ................................. Contrle SpinButton ...............................

323 324 325 325 325 326 327 327 327 328 328 329 330

350 351 351 351 352 353 353 353 354 354 356 359
359

Comportement ...........................................
AutoSize .................................................... AutoTab .................................................. AutoWordSelect ...................................... Cancel ................................................... Default ................................................... Enabled .................................................. EnterKeyBehavior .................................. HideSelection ......................................... Locked ................................................... MaxLenght ............................................. MultiLine ............................................... SelectionMargin ..................................... Style ....................................................... TabKeyBehavior .....................................

Placer des contrles sur une feuille ............ 330 Copier-coller des contrles ..................... 332
Slectionner plusieurs contrles .............. Supprimer des contrles .........................

333 334

Mise en forme des contrles ...................... 334 La grille ................................................. 335


Aligner les contrles ............................... Uniformiser la taille des contrles ..........

336 337

360 360 361 362 362 364 364 364 365 365 365 366 367

Table des matires

IX
406 411 414 415 417 420

TextAlign ................................................ TripleState .............................................. WordWrap ..............................................

367 367 368 369


369

Contrle ComboBox ............................... Contrle ListBox .................................... Contrles CheckBox et OptionButton ...... Contrle ScrollBar ................................. Contrle SpinButton ...............................

Dfilement ................................................
ScrollBars ................................................ . KeepScrollsVisible .................................. Delay ..................................................... Max et Min ............................................. SmallChange .......................................... LargeChange ..........................................

370 370 371 372 372 373


373

Exploiter les informations dune feuille VBA ......................................

Divers .........................................................
Accelerator ............................................... GroupName ............................................ HelpContextID ....................................... MouseIcon ............................................. MousePointer ......................................... TabIndex ................................................ TabStop .................................................. Tag .........................................................

IV Notions avances de la programmation Excel


CHAPITRE 15. Programmer des vnements utilisateur ................................................. Lobjet Application ....................................
Dclaration et instanciation de lobjet Application ............................. Cration de procdures vnementielles de niveau application ............................. Proprits de lobjet Application ............ Mthodes de lobjet Application .............

423

374 375 375 376 377 379 379 379


379

425 426 426 427 429 431 431 433 437 438 438 438 440 444 445 445 457 458 459

Emplacement .............................................
Height et Width ......................................... Left et Top .............................................. StartUpPosition ......................................

379 380 381


381

Lobjet ThisWorkbook ............................... Lobjet Worksheet ...................................... CHAPITRE 16. Protger et authentifier des projets VBA ....................................... Les virus macro ......................................... Se protger des virus macros .....................
Dfinir un niveau de scurit dans Excel 2007 .................................... Dfinir un niveau de scurit avec Excel 2000, XP et 2003 .................... Effectuer des sauvegardes des macros .....

Image .........................................................
Picture ...................................................... PictureAlignment .................................... PictureSizeMode .................................... PicturePosition ....................................... PictureTiling ..........................................

382 383 384 384 385


385

Police .........................................................
Font ...........................................................

CHAPITRE 14. Programmer les interfaces utilisateur ........................... Crer des procdures vnementielles ....... Crer une procdure ............................... Les vnements ....................................... Exemples dexploitation des contrles ...... Contrle Label ....................................... Contrle TextBox ....................................

387 388 388 394 400 401 403

Protger laccs aux macros ......................


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

Limiter les droits dexcution dune macro 447

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


Obtenir une authentif cation ................... Authentif er une macro ...........................

Excel et VBA

CHAPITRE 17. Bonus : exemple complet dapplication Excel .................................. Prsentation dun projet dapplication Excel .........................................................

Feuille fmContratDates ..........................

498 504 510 511 511 514 517 521

461

Feuille fmContratImpression ................... Feuille fmContratFin ..............................

462 Identif cation des informations recueillir 463 Dfinition de la structu e du programme . 464 470 472 472 484

Cration du modle Excel .......................... Cration des interfaces ...............................


Feuille fmContratAuteur ......................... Feuille fmContratConditions ...................

Ecriture des procdures ddition de documents ............................................. Edition des feuilles de paie ..................... Mise jour du Tableau Word .................. ANNEXE . Manipulation des fichiers et des dossiers ........................................... Index ..............................................................

Introduction

Visual Basic pour Applications, VBA, est la solution de programmation propose avec les applications de la suite Of fice. La connaissance de VBA permet lutilisateur dExcel de tirer pleinement profit du tableur de Microsoft en en d eloppant les capacits et les 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 v ersion 97. Depuis, Microsoft a confirm sa olont de f aire de VBA un lment part entire des applications Office et la progress vement propos a vec lensemble des applications de sa suite bureautique. Visual Basic pour Applications constitue aujourdhui un lang age et un environnement stables et prennes. Si lenvironnement des applications de la suite 2007 a t trs largement modifi, vec le remplacement des menus classiques des versions prcdentes par un systme de "ruban" et d"onglets", ce nest pas le cas pour la programmation VBA au sein de ces applications. En effet, cette nouvelle suite Office intgre la ersion 6.3 de Visual Basic, dj livre avec Office XP et O fice 2003. Cest pourquoi cet ouvrage se v eut le plus e xhaustif possible et couvre les v ersions 97, 2000, XP, 2003 et 2007 dExcel. En effet, dune version lautre, il ny a pas eu de rvolution. Le modle dobjets sest af fin et les nou elles fonctions dExcel, apparues au cours de s diffrentes versions du logiciel, peuvent galement tre manipules via la programmation VBA. Cependant, le langage, la gestion des programmes, len vironnement et les outils au service du dveloppeur bref, tout ce que vous devez savoir pour programmer Excel et q ue cet ouvrage se propose de vous apprendre restent inchangs dune version lautre.

Excel et VBA

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

Info

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

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

VBA, cest quoi ?


Excel of fre des possibilits trs tendues. Pourtant, quelle que soit la puissance des fonctions dExcel, elles ne peuvent rpondre toutes les situations. La programmation VBA est la solution de personnalisation offerte par Excel, afin dajouter des caractris tiques, des fonctions et des commandes qui rpondent prcisment vos besoins. La programmation VBA peut tre dfinie comme la personnalisation dun logiciel afin d sassurer gain de temps, qualit des documents et simplification des t hes complexes ou fastidieuses. Voici quelques exemples de ce que permettent les programmes VBA :

Combiner un nombre indtermin de commandes. Nous sommes souvent amens rpter ou associer certaines commandes plutt que dautres et ignorer certaines fonctionnalits en fonction de lusage personnel que nous a vons dun logiciel. VBA permet dassocier un nombre illimit de commandes une seule. Vous pouvez ainsi ouvrir simultanment plusieurs documents Excel stocks dans des dossiers ou sur des serveurs diffrents, y insrer des donnes spcifiques et leur appliquer des mises e forme adaptes, en excutant une seule commande cre en VBA. Ajouter de nouvelles commandes et de nouvelles fonctions Excel. VBA permet de crer de nouvelles commandes et dajouter des fonctions au tableur par exemple une

Introduction

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

Automatiser des actions rptiti ves. Nous sommes parfois amens rpter certaines oprations plusieurs fois sur un mme document ou ritrer des traitements spcifiques. Un programme VBA peut, par e xemple, mettre en forme des cellules dans un classeur Excel, effectuer des sries de calculs, etc. Modifier et amlio er les commandes dune application. Les commandes Excel ne sont pas toujours adaptes nos besoins ou prsentent parfois des limitations gnantes. Un programme VBA peut modifie , brider ou complter les commandes dune 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 vec ceux-ci de f aon transparente pour lutilisateur . Vous pouv ez ainsi crer une commande qui envoie automatiquement le classeur Excel ouv ert en fichier joint dan un mail Outlook des destinataires dfinis ou qui gnre un rapport Word partir de donnes Excel et limprime.

Excel et VBA

Crer des interfaces personnalises. Les programmes VBA peuvent ramener des tches comple xes la simple information de champs dans des botes de dialogue personnalises pour lutilisateur final, simplifiant ainsi considrablement le t vail de celui-ci, tout en v ous assurant quaucun oubli ou f ausse manipulation naura lieu.

Visual Basic pour Applications permet le dv eloppement de solutions adaptes v os besoins. Les outils que v ous apprendrez manier v ous permettront de dv elopper des programmes simples, sans crire la moindre ligne de code, comme des programmes complets intgrant une interface utilisateur adapte. La fonction dun programme VBA peut tre dautomatiser une tche rptiti ve. Mais vous pouvez aussi crer trs vite un petit programme VBA pour faire face une ncessit immdiate ; par e xemple, afin de gnraliser un traitement xceptionnel lensembl e dun document.
Figure I.2 Visual Basic pour Applications vous permet de dvelopper des interfaces utilisateur volues.

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

Introduction

ition Dfin

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

Lenregistrement de macros constitue sans aucun doute le meilleur mo yen de se familiariser avec la programmation en Visual Basic. Ainsi, sans connatre le langage les instructions qui le composent et la f aon dont elles sont structures , v ous pouv ez crer des programmes VBA et en visualiser ensuite le code.

Une application hte et des projets


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

Excel et VBA

laccessibilit un classeur Excel spcifique. La disponibilit des programmes aborde au Chapitre 2.

VBA est

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

Introduction

ouvrage, un certain nombre dinstructions spcifiques la hirarchie dobjets dExcel, qui vous familiariseront avec la logique de ce langage.
Figure I.3 La fonction VBA MsgBox permet daffi her une bote de dialogue.

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

ition Dfin

La hirarchie dobjets dune application, encor e appele modle dobjets, est le rapport quentretiennent entre eux les diffrents objets dune application. Ce concept ainsi que les notions spcifiques aux lang ges orients objet ser ont dvelopps au Chapitre 1, "Notions fondamentales de la programmation oriente objet".

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

Excel et VBA

Un environnement de travail
Visual Basic pour Applications dispose dun en vironnement de dv eloppement part entire : Visual Basic Editor.
Figure I.5 Visual Basic Editor est lenvironnement de dveloppement de Visual Basic pour Applications.
Explorateur de projet Fentre Code Fentre Proprits

Explorateur d'objets

Bote outils

Fentre UserForm

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

Introduction

Conventions typographiques
Afin den aciliter la lecture, nous a vons adopt dans cet ouvrage un certain nombre de conventions typographiques. Lorsquun mot apparat pour la premire fois, il est compos en italique. Les programmes et les mots cls du lang age Visual Basic apparaissent dans une police chasse fixe. Lorsque, dans un programme, un mot signale une information attendue dans le code, celui-ci apparat en italique. Lorsquune ligne de code ne peut tre inscrite sur une seule ligne de louvrage, cette flch () en dbut de ligne indique que le texte est la poursuite de ligne prcdente. Par ailleurs, v ous rencontrerez au long de cet ouvrage dif frents types de notes, signales dans la marge par des pictogrammes. Ces rubriques apportent un complment dinformation en rapport avec le sujet trait. Leur lectur e nest pas indispensable . Mais elles peuvent vous aider mieux cerner le sujet. Vous trouverez sous ces rubriques la dfinition de termes te hniques spcifique la programmation VBA. Ces rubriques vous mettent en garde contre les risques inhrents telle ou telle commande ou manipulation. Il est parfois ncessaire de se rafrachir la mmoire. Lorsquun sujet fait appel des connaissances acquises plusieur s c hapitres aupar avant, cette rubrique vous les remmore brivement. Sous cette rubrique , vous tr ouverez des trucs pour aller plus vite et tr availler plus efficacement Nous vous faisons ici part de notre exprience, en vous prodiguant des conseils qui vous aideront dvelopper des projets VBA de qualit. Ces notes prodiguent des informations spcifiques la ve sion 2007 dExcel.

Info

ition Dfin

ntion Atte

pel Rap

ce Astu

eil Cons

200

Partie

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 lang age de programmation orient objet. En tant que tel, il repose sur des concepts communs tous les langages de programmation orients objet. Avant de vous lancer dans la programmation pour Excel, il est important de v ous familiariser avec ces concepts et le v ocabulaire qui les dcrit. Plus concrtement, ce chapitre v ous fera 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 trouv erez pas dans ce chapitre de programmes VBA. Il est destin v ous faire acqurir les bases et la terminologie sur lesquelles nous nous appuierons tout au long de cet ouvrage. Alors, patience ! Les connaissances quil vous apportera permettront dapprhender vos premiers programmes ds le Chapitre 2.

Comprendre le concept dobjet


Comme pour tous les lang ages de programmation objet, les objets sont le fondement de Visual Basic. Quelle que soit la fonction dun programme VBA, presque toutes les actions quil excute sapparentent la modification dobjets Les ouvrages prsentant la programmation oriente objet (POO) le font presque toujours par analogie a vec les objets de la vie relle. Nous ne drogerons pas cette rgle. La programmation oriente objet repose en ef fet sur une structure qui rappelle, par de nombreux points, les objets de la vie courante et les rapports quils entretiennent. 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 lo peut e xcuter sur celui-ci. Une v oiture est un objet. Lorsque v ous parlez de lobjet Voiture, vous pouvez f aire rfrence un objet abstrait ("Je v ais acheter une v oiture") comme une v oiture bien concrte ("Mate un peu ma belle 2CV rouge"). Les objets que vous utiliserez dans vos programmes VBA rpondent une mme dfinition Dans le premier cas, v ous voquez un objet Voiture imprcis, et pourtant tout le monde comprend de quoi v ous parlez. Il v ous suf fit de prononcer le mot " oiture" pour que chacun imagine et visualise une v oiture bien spcifique, en fonction de ses gots, de se aspirations, de ses souv enirs, etc. Cependant, quelle que soit la v oiture imagine, en tant proprits (une carrosserie, des quobjet Voiture, elle possde un certain nombre de 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 v oitures, qui dfinissen lobjet Voiture. Elles sont sous-entendues, videntes et essentielles. Il e xiste donc des milliers de voitures diffrentes, toutes reconnaissables par un certain nombre de caractVoiture. En POO, cet objet ristiques communes dfinies dans le concept (lobjet) abstrait est appel la classe Voitures. La classe Voitures est la dfinition formelle des obj ts Voiture (leurs proprits et leurs mthodes). Il sagit du modle partir duquel v ous pouvez imaginer et crer des milliers de v oitures diffrentes. Lensemble des vhicules appartenant la classe Voitures (parce quils possdent les proprits et les mthodes dfinies dans cette classe) est appel la collection dobjets Voitures. Une collection porte le nom pluriel des objets quelle rassemble.

Info

Ainsi, la collection WorkBooks renvoie tous les objets Workbook, soit tous les classeurs WorkBook, la proprit ouverts, la collection Sheets, toutes les feuilles dun objet Worksheets, toutes les feuilles de calcul dun objet Workbook, etc. La section "Le modle dobjets dExcel" situe en fin de chapitre ous permettra de dcouvrir les objets Excel les plus importants. Le terme Classe dsigne la dfinition commune dun ensemble dobjets (quest ce quune voitur e ?), tandis quune Collection dsigne lensemble des objets appartenant une classe (toutes les voitures en circulation).

ition Dfin

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

Info

16

Excel et VBA

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

Application hte et modles dobjets


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

Chapitre 1

Notions fondamentales de la programmation oriente objet

17

Cependant, limage des pices de v otre maison, les applications Of fice ne sont pa hermtiques. Vous pouvez parfaitement vous prparer un plateau repas dans la cuisine et choisir de manger au lit. De f aon semblable, des projets VBA volus peuvent utiliser des objets de dif frentes applications Of fice. Un programme d elopp dans Excel peut utiliser des donnes stockes dans une base de donnes Access ou des objets Word pour imprimer un courrier qui accompagnera une f acture, et en voyer un message Outlook de confirmation. Vous devez alors choisir une application hte pour votre projet. Deux critres doivent la dterminer :

Votre programme sera plus performant et plus simple dvelopper si lapplication hte est celle dans laquelle sexcute lessentiel des instructions du programme. La prsence du programme dans lapplication hte doit tre logique, et lutilisateur final doit y voir un accs f acile puisque le programme ne pourra tre e xcut qu partir de celle-ci. Tous les projets dvelopps dans cet ouvrage seront hbergs dans Excel. Pour accder aux objets dune application autre que lapplication hte, vous utiliserez la technologie Automation. Laccs aux objets dune autre application est trait au Chapitre 6.

Info

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

Pice (Salle de bain)

Rangements

Conteneurs

Produits de nettoyage

Armoire

Etagres

Baignoire

Lavabo

Bidet

Savons

Shampooings

Dentifrices

Savon Surgras

Savon de Marseille

Savon Monjoli

18

Excel et VBA

Info

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

Au sommet du modle se trouv e la pice lapplication. Tous les objets auxquels v ous pouvez accder y sont contenus. Si lon tablit un modle dobjets pour lensemble des pices de la maison, on retrouvera toujours lobjet Pice au sommet du modle. De la mme f aon, au sommet des modles dobjets des applications Office, se trou e lobjet Application.
Figure 1.2 Le modle dobjets dExcel.

Viennent ensuite les classes situes immdiatement sous lobjet Pice. Plus on progresse dans le modle dobjets, plus les objets sont prcis et donc spcifiques de la pice ou d

Chapitre 1

Notions fondamentales de la programmation oriente objet

19

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

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

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

Accder aux objets


Le modle dobjets dtermine le chemin emprunter pour accder un objet. Pour vous la ver les dents, v ous devez dabord accder v otre brosse dents. Mme si le processus est inconscient, v ous identifiez lobjet Brosse dents par son emplacement : il est situ dans la salle de bains, parmi les objets et produits de toilette. De la mme f aon, en Visual Basic, v ous de vez identifier un objet vant de pouv oir agir dessus (appliquer lune de ses mthodes ou modifier la aleur de lune de ses proprits). Lorsque v ous souhaitez v ous la ver les dents, v ous pensez et sui vez inconsciemment les tapes suivantes :

aller la Salle de bains ; se diriger vers les Produits de toilette ; choisir parmi ceux-ci le dentifrice et sen saisir.

Pour accder un objet Excel, v ous oprerez selon le mme mode, cest--dire en partant de lobjet situ le plus haut dans la hirarchie dobjets et en progressant dans celle-ci jusqu atteindre lobjet voulu.

20

Excel et VBA

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

Le code VBA permettant daccder lobjet Dentifrice serait :


Piece.ProduitsNettoyants("Dentifrice").Prendre

La premire partie du code permet daccder lobjet Dentifrice; lexpression identifiant un objet est appele rfrentiel dobjet. La mthode Prendre est ensuite applique cet objet afin de sen saisi . Le code Visual Basic permettant dappeler la feuille de classeur Excel nomme "MaFeuille", et situe dans le classeur "MonClasseur" ( condition que celui-ci soit ouvert), serait :
Application.Workbooks("MonClasseur").Sheets("MaFeuille").Activate

On accde lobjet Workbook MonClasseur de la collection Workbooks (tous les classeurs Sheets (toutes les ouverts), puis la feuille nomme "MaFeuille" de la collection feuilles de lobjet MonClasseur). Une fois le chemin daccs lobjet indiqu, on lui applique la mthode Activate pour lactiver.
Outre leur nom, les objets dune collection sont identifis au sein de la collectio par une valeur dindice r eprsentant leur position dans la collection. Cette valeur peut tre utilise pour renvoyer un objet dune collection, selon la syntaxe suivante :
Nom_Collection(IndexObjet)

Info

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


Workbooks(2).Activate

instruction

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

Poursuivons lanalogie. Si v ous vous trouvez dj dans la salle de bains au moment o vous dcidez de vous laver les dents, vous navez pas besoin dy accder. Si vous avez dj le nez parmi les produits de toilette, il est inutile dy faire rfrence. De faon semblable, dans le code VBA, les objets de niveau hirarchique suprieur celui de lobjet que v ous souhaitez atteindre peuv ent parfois tre ignors. Cest toujours le cas pour lobjet Application. En ef fet, votre projet VBA tant stock et donc excut partir dune application hte, il est inutile de rappeler que v ous tes dans cette application.

Chapitre 1

Notions fondamentales de la programmation oriente objet

21

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

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

Info

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

Les proprits
Revenons lanalogie a vec lautomobile et prenons la classe Voitures. T outes les proprits propres aux objets Voitures y sont dfinies. Les objets ou classes situ immdiatement sous Voitures dans le modle dobjets appartiennent la collection dobjets Voitures. En tant que tels, ils hritent de toutes les proprits dfinies dans l classe Voitures. Les proprits peuvent tre un attribut de lobjet ou un aspect de son comportement. Par exemple, les proprits dune v oiture sont, notamment, sa marque, son modle, ltat des pneus, lactivation ou non du moteur , etc. Les proprits dun document Word sont son modle, son nom, sa taille, etc. Les proprits prennent des v aleurs spcifiques qui distinguent les di frents objets de la collection. La proprit Couleur dun objet Voiture peut prendre la v aleur Rouge, tandis que la mme proprit dun objet de la collection est attache la valeur Bleu. Lorsque v ous dv elopperez des programmes VBA, v ous e xploiterez les proprits dun objet de deux faons :

En modifiant les aleurs attaches aux pr oprits de lobjet. Pour modifier u objet, il suffit de changer les aleurs de ses proprits. Les proprits dont les v aleurs peuvent tre modifies sont dites en lecture-criture Certaines proprits ne peuv ent tre modifies et sont dites en lecture seule. Vous pouvez, par e xemple, modifier la proprit Etat_du_moteur (allum ou teint) dun

22

Excel et VBA

objet Voiture, mais non sa proprit Marque. Vous pouv ez modifier le nombre d feuilles qui composent un classeur, mais non sa date de cration.

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

Types de valeurs des proprits


Les valeurs affectes aux proprits dun objet peuvent tre de quatre types :

une chane de caractres ; une valeur numrique ; une valeur boolenne ; une constante.

Chanes de caractres Une chane de caractres est une suite de caractres contigus lettres, chiffres, espaces ou signes de ponctuation. Ces donnes sont aussi qualifies de type Chane ou String. Une chane de caractres peut contenir jusqu en viron deux milliards de caractres. En Visual Basic, les chanes de caractres sont places entre guillemets. Les exemples suivants sont des chanes de caractres :

"Paul" ; "1254" ; "Je suis une chane de caractres compose de 59 caractres".

Les chanes de caractres sont interprtes en tant que caractres, et non en tant que valeur numrique. Autrement dit, la chane "1254" est interprte comme la combinaison des caractres 1, 2, 5 et 4. Par exemple, la proprit Modle dun objet Voiture est toujours une chane de caractres. Celle-ci ne peut tre compose que de chif fres par exemple "2000" , sans que v ous puissiez pour autant diviser cette valeur par un nombre quelconque.

Chapitre 1

Notions fondamentales de la programmation oriente objet

23

Valeurs numriques Une valeur numrique est une suite de chif fres. Elle peut tre un nombre entier ou dcimal, positif ou ngatif. Les exemples suivants sont des valeurs numriques :

0; 1 548 972 ; 1 245,4542 ; 100E4. Le caractre E dans une variable numrique signifie "Exposant". Ainsi, la valeur numrique 100E4 est gale 100 104.

Info

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

Info

Notez quune e xpression arithmtique peut tr e compose de nombr es (100 25), de variables auxquelles sont af fectes des valeur s numriques (nombre1 nombre2), ou dune combinaison des deux (nombr e1 25). Les variables sont tudies en dtail au Chapitre 6.

Les valeurs numriques pouvant tre affectes une proprit varient avec les proprits et les objets. Par exemple, dans Excel, la taille dune police doit tre comprise entre 1 et 409. Size (taille) dun objet Font Par consquent, la v aleur que peut prendre la proprit (police) dExcel doit aussi tre comprise entre ces deux v aleurs. Dans le cas de lobjet Voiture, la proprit Contenu_Rservoir doit toujours tre suprieure 0, la valeur maximale dpendant dautres spcificits de lobjet, telles que ses proprits Marque et Modle. Valeurs boolennes Certaines proprits ne peuv ent prendre que deux tats : elles sont vrifies ou elles ne l sont pas. Ces proprits sont attaches une v aleur de type Boolean, ou valeur boolenne. Une valeur boolenne peut tre True ou False.

24

Excel et VBA

La proprit Moteur_Allum dun objet Voiture est attache une v aleur boolenne. La Voiture est allum. Dans le cas valeur True lui est af fecte si le moteur de lobjet contraire, la proprit Moteur_Allum sera gale False. Comme vous le verrez au Chapitre 15, un classeur Excel gre une vingtaine de proprits qui reprsentent ses options et son tat un moment donn. Nombre de ces proprits acceptent une valeur de type Boolean. Cest par exemple le cas de la proprit Saved qui renvoie True si aucune modification na t apporte au document depuis son dernier enre gistrement, et False dans le cas contraire. En Visual Basic, la valeur True peut tre remplace par 1, et la valeur False, par 0. Cette pratique est cependant dconseille, puisquelle rend la lecture du code moins aise.

Info

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

Lorsquune proprit accepte des constantes pour valeurs, le nombre de ces constantes est dtermin et correspond aux diffrents tats que peut prendre la proprit. Par exemple, les clignotants dune v oiture peuv ent accepter quatre tats dif frents : dsacti vs, acti vs droite, acti vs g auche, position Warning (les clignotants droite et g auche acti vs).

Chapitre 1

Notions fondamentales de la programmation oriente objet

25

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

Excel intgre un nombre important de constantes. Lorsquune commande Excel e xige de lutilisateur la slection dune option parmi plusieurs possibles, ces options sont gnralement reprsentes sous forme de constantes en lang age VBA. Par exemple, lorsque v ous insrez une cellule dans une feuille de classeur (Insertion, Cellules), v ous devez choisir entre les options Dcaler les cellules v ers la droite ou Dcaler les cellules v ers le bas. Linstruction VBA correspondante sera :
Selection.Insert(Shift)

o lar gument Shift est une des constantes XlInsertShiftDirection spcifiant l mthode Insert la f aon dont la cellule sera insre. Il peut sagir de la constante xlShiftToRight (les cellules seront dcales vers la droite) ou de la constante xlShiftDown (les cellules seront dcales vers le bas). Les constantes sont la r eprsentation textuelle de valeur s numriques. Chacune des constantes Clignotant correspond une valeur numrique . La pr oprit ClignotantWarning pourrait, par e xemple, 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 lectu e du code . Si vous compr enez langlais, les constantes vous sembler ont en ef fet plus parlantes que de simples chiffres.

Info

Accder aux proprits


Pour modifier une proprit dun objet, on utilise la synta e suivante :
Expression.Proprit = valeur

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

26

Excel et VBA

la proprit Contenu_Rservoir dun objet Voiture naccepte quune valeur numrique ; vous ne pouvez pas lui affecter une chane de caractres. Le Tableau 1.1 illustre diffrentes possibilits de modifier lobjet Voiture "MaVoiture" :
Tableau 1.1 : Pour modier un objet, il suft den changer les proprits

Syntaxe Voitures("MaVoiture") .Immatriculation = "4444AB29" Voitures("MaVoiture").Moteur_Allume = True Voitures("MaVoiture").Contenu_Rservoir = 50 Voitures("MaVoiture").Cligotant.Etat = ClignotantWarning

Type de la valeur affecte


Chane de caractres Valeur boolenne Valeur numrique Constante

Consquence pour lobjet Voiture


Une nouvelle immatriculation Le moteur est allum Le rservoir contient 50 litres Lobjet clignotant est en position Warning

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

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

Linstruction suivante stocke dans la variable TypeAffichage la aleur reprsentant le type daffichage en cours
TypeAffichage = ActiveWindow.View

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

Chapitre 1

Notions fondamentales de la programmation oriente objet

27

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

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

o Collection reprsente la collection dobjets sur laquelle on souhaite agir , et Mthode, une mthode commune aux objets de la collection. Vous pouvez, par e xemple, arrter toutes les v oitures de la collection Voitures, en leur appliquant la mthode Arrter:
Voitures.Arrter

28

Excel et VBA

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

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

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

ition Dfin

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

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

Chapitre 1

Notions fondamentales de la programmation oriente objet

29

entire dun nombre. Certaines fonctions sont particulirement utiles. Cest le cas de la fonction MsgBox qui permet daf ficher une bote de dialogue contenant des boutons tels que Oui, Non Annuler, etc., et qui renvoie une valeur refltant le choix de lutilisateu . Vous pouv ez aussi crer v os propres fonctions qui traiteront les v aleurs qui leur seront passes pour renvoyer une valeur ensuite utilise par le programme. Dans le cas dun objet Voiture, v ous pouv ez crer une fonction Cot_Plein qui e xploitera les proprits Contenu_Rservoir et Contenance_Rservoir de lobjet, ainsi quune v ariable 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 doi ent tre passs la v fonction Cot_Plein pour quelle se xcute correctement : le contenu du rserv oir, sa contenance et le prix de lessence.

Le modle dobjets dExcel


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

Collection (objet)
Objets de niveau Application

Description

Add-ins (Add-in)

Lensemble des macros complmentaires, charges ou non. Accessibles dans la bote de dialogue Macros complmentaires (Outils, Macros complmentaires). Lensemble des barres de commande de lapplication. Les botes de dialogue prdnies dExcel. Renvoie des informations sur les paramtres de langue utiliss dans lapplication.

CommandBars (CommandBar) Dialogs (Dialog) LanguageSettings

30

Excel et VBA

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

Collection (objet) Names (Name) Windows (Window) Workbooks (Workbook) Worksheetfunction

Description
Lensemble des objets Name de niveau Application. Un objet Name reprsente un nom dni pour une plage de cellules nomme. Lensemble des fentres disponibles (accessibles via le menu Fentre). Lensemble des classeurs ouverts. On utilise lobjet Worksheetfunction pour accder aux fonctions de feuilles de calcul partir de VBA. Faites suivre la proprit Worksheetfunction dun point, puis du nom de la fonction et de ses arguments entre parenthses.

Objets de lobjet Workbook

Charts (Chart) Names (Names) Styles (Style)

Lensemble des feuilles graphiques de lobjet Workbook. Lensemble des objets Name pour le classeur spci. Lensemble des styles disponibles dans un classeur. Il peut sagir dun style dni par lutilisateur ou dun style prdni, tel que les styles Millier, Montaire ou Pourcentage (Format, Styles). Lensemble des fentres pour le classeur spci. Lensemble des feuilles de calcul de lobjet Workbook dsign.

Windows (Window) Worksheets (Worksheet)


Objets de lobjet Worksheet

Names (Name) Range Comments (Comment) HPageBreaks (HPageBreak) VPageBreaks (VPageBreaks) Hyperlinks (Hyperlink) Scenarios (Scenario) OLEObjects (OLEObject) Outline PageSetup

Lensemble des objets Name pour la feuille de calcul spcie. Une cellule, une ligne, une colonne ou une plage de cellules, contigus ou non, une plage de cellules 3D. Lensemble des commentaires pour lobjet Worksheet dsign. Les sauts de page horizontaux de la feuille de calcul. Les sauts de page verticaux de la feuille de calcul. Lensemble des liens hypertexte de la feuille de calcul. Les scnarios de la feuille de calcul. Les objets incorpors ou lis et les contrles ActiveX de la feuille. Le plan de la feuille de calcul. Les options de mise en page de la feuille.

Chapitre 1

Notions fondamentales de la programmation oriente objet

31

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

Collection (objet) QueryTables (QueryTable) PivotTables (PivotTable) ChartObjects (ChartObject)


Objets de lobjet Range

Description
Les tables de requte de la feuille. Les tableaux et les graphiques croiss dynamiques. Les graphiques incorpors de la feuille de calcul spcie.

Areas Borders (Border)

Les plages de cellules contigus lintrieur dune slection. Les bordures dun objet Range. La collection Borders regroupe toujours quatre objets Border, reprsentant les quatre bordures de lobjet Range dsign. Les attributs de police de caractres de lobjet Range spci. Lintrieur de lobjet Range. Lensemble des caractres contenus par lobjet Range. Le premier nom dans la liste des noms de la plage de cellules prcise. Le style de lobjet Range dsign. Lensemble des mises en forme conditionnelles de lobjet Range. Lensemble des liens hypertexte de lobjet Range. La validation des donnes pour la plage de cellules prcise. Le commentaire de cellule pour lobjet Range dsign.

Font Interior Characters Name Style FormatConditions (FormatCondition) Hyperlinks (Hyperlink) Validation Comment

Listing 1.1 : Exemples dutilisation des objets Excel


activation de la macro complmentaire Outils pour lEuro AddIns("Outils pour lEuro").Installed = True -----------------------------------------------------------activation des info-bulles pour les barres doutils Application.CommandBars.DisplayTooltips = True affichage de la barre doutils Presse-papiers Application.CommandBars("Clipboard").Visible = True -----------------------------------------------------------affichage de la bote de dialogue prdfinie Nouveau Classeur Dialogs(xlDialogWorkbookNew).Show -----------------------------------------------------------masquage de la fentre active et affichage de perso.xls ActiveWindow.Visible = False

32

Excel et VBA

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

Chapitre 1

Notions fondamentales de la programmation oriente objet

33

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

2
Premires macros
Au sommaire de ce chapitre

Crer une macro GrasItalique Diffrentes mthodes denregistrement Ecrire la macro Crer une macro Titre_WordArt Stocker des macros

36

Excel et VBA

Lenregistrement de macros constitue certainement le meilleur apprentissage de Visual Basic pour Applications. Les commandes de lapplication hte accessibles par les menus, les barres doutils ou les raccourcis cla vier, le dplacement ( laide du cla vier ou de la souris) dans un classeur et la modification de ce dernier peu ent tre enregistrs dans une macro. Il suf fit simplement de dclencher lEnr gistreur de macro et dexcuter ces commandes, sans quil soit ncessaire dcrire la moindre ligne de code. Cette mthode permet ensuite de rpter autant de fois que v ous le souhaitez la srie dinstructions ainsi mmorises, en excutant simplement la macro. Lorsque la srie de commandes est enregistre dans une macro, v ous pouvez en visualiser le codage dans la fentre Code de Visual Basic Editor. Vous dcouvrez ainsi la structure et la syntax e des programmes VBA par la pratique. Le code est le te xte, crit dans le langa ge de pr ogrammation, constituant le programme. Le coda ge dsigne le fait de gnr er du code , soit en utilisant lEnregistreur de macro, soit en lcrivant dir ectement dans la fentre de code de Visual Basic Editor.

ition Dfin

A travers des exemples simples, ce chapitre vous initiera lenregistrement et la cration de macros. Vous crerez une premire macro, puis en amliorerez trs simplement la fonctionnalit. Vous verrez que lenre gistrement de macros est relati vement souple, et que la cration dune macro offre plusieurs possibilits, plus ou moins efficaces et plus ou moin rapides. Vous apprendrez rapidement utiliser lune ou lautre des mthodes disponibles (voire les combiner), en fonction de lobjet de votre macro.

Crer une macro GrasItalique


Lorsque v ous souhaitez enrichir le contenu dune cellule dattrib uts de caractres, une solution consiste choisir la commande Cellule du menu F ormat, et slectionner longlet Police. On dfinit ensuite les attri uts 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 v ous initier aux dif frentes mthodes de cration et doptimisation de macros. Prenez donc le temps de le lire dans sa totalit ; les principes acquis seront valables pour lensemble des macros que v ous crerez par la suite, et ce quel que soit leur niveau de complexit.

Chapitre 2

Premires macros

37

Dmarrer lenregistrement
200 7

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

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

Avant de commencer lenregistrement de la macro GrasItalique, slectionnez une cellule laquelle vous attribuerez les formats de caractres voulus. 1. Lancez lenregistrement de la macro : Off ce 2007 : cliquez sur le bouton Enre longlet Dveloppeur. gistrer une macro du groupe Code de

Versions antrieures dExcel : dans le menu Outils, slectionnez Macro, Nouv elle macro, ou saisissez le raccourci cla vier Alt + F8. La bote de dialogue Enre gistrer une macro saffiche ( oir Figure 2.2).
Figure 2.2 La bote de dialogue Enregistrer une macro.

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

38

Excel et VBA

eil Cons

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

3. Dans la zone Enre gistrer la macro dans, conserv ez loption par df aut, Classeur de macros personnelles. 4. Dans la zone Description, tapez une brv e description de la macro, en conserv ant la date de cration et, ventuellement, le nom du crateur. Lorsque vous enr egistrez une macr o, la date de son enr egistrement et le nom dutilisateur dclar pour lapplication appar aissent dans la zone Description sous la forme "Macr o enregistre le Date par Utilisateur". Vous retrouverez les mmes indications dans la fentr e de Code de la macr o. Si vous parta gez vos macros avec dautr es utilisateur s, il peut tr e utile de conserver le nom du crateur afin de les identifier apidement. De mme, conserver la date de cration dune macr o permettr a de la situer plus facilement. Cette indication se rvlera trs utile si vous devez mettre jour des macros.

eil Cons

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

Chapitre 2

Premires macros

39

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 af fect une commande Excel, il ser a 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 particulir ement si dautres utilisateurs sont amens utiliser vos macr os. Ils risquer aient en effet de xcuter in volontairement la macr o en pensant utiliser le r accourci clavier dune commande Excel.

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

Arrter l'enregistrement

Rfrence absolue ou rfrence relative

7 200

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

ce Astu

Enregistrer les commandes de la macro


Comme nous la vons dit dans le chapitre prcdent, la cration dune macro simple ne ncessite pas la moindre ligne dcriture. Il suf fit d xcuter les commandes qui la composent aprs a voir acti v lEnre gistreur de macro : lapplication hte se char ge de convertir les commandes excutes en langage Visual Basic.

40

Excel et VBA

Pour enregistrer la macro GrasItalique : 1. Choisissez la commande Cellule du menu F ormat. Activez longlet Police de la bote de dialogue Format de cellule. Avec Excel 2007, activez longlet Accueil du ruban puis cliquez sur le bouton Format de cellule , situ dans langle infrieur dr oit du gr oupe Police. Vous pouvez galement utiliser le raccourci clavier Ctrl + Maj + F.

7 200

2. Dans la zone Style, slectionnez Gras Italique, puis cliquez sur OK. 3. Les commandes de la macro GrasItalique sont enre gistres. Cliquez sur le bouton Arrter lenregistrement de la barre doutils Arrt de lenre gistrement. Celle-ci dispara t automatiquement. Si vous cliquez sur le bouton de fermeture (la croix) de la barre doutils Arrt de lenregistrement, celle-ci disparat, mais lenregistrement de la macro se poursuit. Pour interrompre lenregistrement de la macro, slectionnez Outils, Macro, Arrtez lenregistrement. Par la suite, lorsque vous activerez lEnregistreur de macro, cette barre doutils ne rapparatra pas, et ce mme si vous quittez puis relancez Excel. Vous ne pourrez donc plus choisir dactiver lenregistrement de cellules par rfr ence r elative. P our ractiver laf fi hage de cette barr e doutils, cliquez du bouton dr oit sur lune des barr es doutils et, dans le menu contextuel, slectionnez Arrt de lenregistrement. Si vous slectionnez une cellule aprs avoir dclench lEnregistreur de macro, cette manipulation ser a enr egistre. Par consquent, la macr o applique ra la mise en forme Gras Italique cette cellule, et non aux cellules actives au moment de son excution.

Info

ntion Atte

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

La bote de dialogue Macro


1. Slectionnez la plage de cellules laquelle v ous souhaitez appliquer les attrib uts propres la macro, puis, dans le menu Outils, choisissez Macro et, dans le menu contextuel, Macros La bote de dialogue Macro saffiche

Chapitre 2

Premires macros

41

7 200

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

Figure 2.5 La bote de dialogue Macro.

2. Dans la liste des macros disponibles, slectionnez GrasItalique. Le nom de la macro saffiche dans la zone Nom de la macro 3. Cliquez sur le bouton Excuter. La bote de dialogue Macro disparat automatiquement et les cellules slectionnes senrichissent des attrib uts Gras et Italique (v oir Figure 2.6).
Figure 2.6 Les cellules slectionnes aprs excution de la macro.

Si la procdure de xcution que v ous v enez de mettre en uvre con vient certaines macros plus complexes et dun usage moins frquent, elle ne prsente pas dintrt pour la macro GrasItalique puisquelle ncessite plus doprations pour lutilisateur quelle nen excute.

42

Excel et VBA

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

Structure de la macro
Lors de lenregistrement de la macro, les actions que v ous avez effectues ont t converties en langage Visual Basic. Pour en visualiser la syntaxe : 1. Choisissez Outils, Macro, Macros. Dans la bote de dialogue Macro, slectionnez la macro GrasItalique. Le nom slectionn saffiche dans la zone Nom de la macro 2. Cliquez sur le bouton Modifie . Visual Basic Editor, lenvironnement de dv eloppement intgr dOffice, souvre sur la fentre Code de otre macro (voir Figure 2.7). Lorsque vous tentez de modifier la mac o, si Excel affi he le message "Impossible de modifier une mac o dans un classeur masqu", vous de vez affi her le f chier Perso.xls. Si vous utilisez Excel 2007, slectionnez longlet Aff chage, puis cliquez sur le bouton Affi her du gr oupe F entre. Si vous utilisez une version antrieure dExcel, slectionnez la commande Affi her du menu F entre. Slectionnez le fi hier Perso.xls dans la fentre qui saffi he et validez.

Info

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

Chapitre 2

Premires macros

43

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


Sub GrasItalique()

et se termine par linstruction :


End Sub

Ces deux instructions encadrent systmatiquement toute macro enregistre. Sub est 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 instruc tions sont indispensables au fonctionnement de toute macro ; cependant, vous naurez pas vous en soucier : lorsque vous enregistrez une macro, les instructions qui la composent sont systmatiquement encadres par celles-ci. Directement places derrire linstruction Sub NomMacro, des lignes de commentaires reprennent les informations que contenait la zone Description lors de lenre gistrement de la macro (voir Figure 2.3). En loccurrence le nom du crateur et la date denre gistrement de la macro, ainsi que le texte descriptif de la macro. Les commentaires sont des indications ajoutes dans le code dun pr ogramme et destines en faciliter la reconnaissance et/ou la comprhension.

Info

Certains lments du code apparaissent en couleur . Cette mise en v aleur permet de distinguer aisment les lments constitutifs du code. P ar df aut, Visual Basic Editor applique la couleur v erte aux commentaires et la couleur bleue aux mots cls du langage.
ition Dfin

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

Entre les instructions Sub GrasItalique() et End Sub se trouv ent les instructions quexcutera la macro :
With Selection.Font .Name = "Arial"

44

Excel et VBA

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

200

Si vous utilisez Excel 2007, la ligne .ColorIndex = xlAutomatic est remplace par les trois lignes suivantes : .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor Elles correspondent de nouvelles fonctionnalits.

Il sagit des commandes ef fectues lors de lenre gistrement : ces lignes indiquent la macro les actions accomplir . Leur structure peut v ous drouter, mais vous vous y 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 v ous enregistrerez des macros, vous verrez que certains objets, et les proprits qui leur sont associes, sont trs usits. Cest le cas de Selection, qui apparat dans le code dune macro Excel chaque fois quune opration (format de police, dimensions, dfinition dune catgorie d donnes, etc.) est ef fectue sur une plage de cellules sans que celle-ci soit dfini auparavant. Le code dun projet VBA reflte la hi archie dobjets (ou modle dobjets) de lapplication hte. Des proprits sont utilises pour appeler des objets spcifiques. our un rappel de ces concepts, reportez-vous au Chapitre 1.

Info

Font indique la macro quil sagit dappliquer un format de police lobjet Selection (les cellules slectionnes).

Les instructions With et End With encadrent lensemble des proprits de lobjet Font. Comme tout mot cl, elles apparaissent en bleu dans la fentre de code. Lorsque, durant lenregistrement dune macro, v ous faites appel une bote de dialogue dans

Chapitre 2

Premires macros

45

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

ition Dfin

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. A chaque proprit est af fecte une valeur. Elle indique ltat de cette option lors de lenregistrement de la commande. Cette valeur peut tre : False ou True (valeur boolenne). Indiquent respectivement que loption ntait pas coche (faux) ou quelle ltait (vrai). Superscript = False indique ici que la case cocher Exposant ntait pas valide lors de lenregistrement de la macro.
pel Rap

Vous pouvez aussi utiliser les valeur s 1 et 0 la place de True et False. Par exemple, lexpression .Superscript = False pourra tre remplace par .Superscript = 1.

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

46

Excel et VBA

Le Tableau 2.1, en prsentant quelles options de la bote de dialogue F ormat de cellule (onglet Police) les proprits de lobjet Font sont associes, v ous aidera comprendre comment les actions que v ous effectuez aprs a voir activ lEnregistreur de macro sont codes par Visual Basic pour Applications.
Tableau 2.1 : Les proprits de lobjet Font dExcel

Proprit Name FontStyle Size

Format de cellule (onglet Police)


Zone de texte Police Zone de texte Style Zone de texte Taille

Valeurs autorises
Chane de caractres correspondant au nom dune police disponible dans la zone de liste modiable1. Chane de caractres correspondant loption slectionne dans la zone de liste1. Valeur numrique reprsentant le corps de la police. Cette valeur peut tre comprise entre 1 et 4091.

Strikethrough Case cocher Barr Superscript SuperScript


Case cocher Exposant

True (barr) ou False (non barr)1. True (mise en forme exposant) ou False (pas de mise en forme
exposant)1. 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 SubScript

Case cocher Indice

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


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


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. Une des cinq constantes xlUnderlineStyleNone reprsentant les cinq types de soulignement disponibles dans Excel1. Une valeur numrique reprsentant la valeur dindex dune couleur dans la palette de couleurs en cours, ou la constante xlColorIndexAutomatic (couleur automatique)2.

Underline

Zone de liste droulante Soulignement Zone de liste droulante Couleur

ColorIndex

Si vous interrogez la valeur dune proprit pour une plage contenant des cellules dont les attributs correspondants Name de lobsont diffrents, la valeur Null sera renvoye. Par exemple, si vous interrogez la valeur de la proprit jet Font dune plage de cellules contenant la fois des cellules en police Arial et dautres en police Times, la valeur Null sera renvoye. 2 Notez que cet tat est le reflet de ce qui se passe dans la bote de dialogue Police. Vous ne pouvez pas en effet cocher la fois loption Indice et loption Exposant.

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 F ormat de cellule sur longlet Police et y dfinit les options telles quelles lont t lors de lenr gistrement. Elle applique ensuite ces proprits au texte slectionn. Fermez la fentre Visual Basic Editor, en slectionnant la commande Fermer et retourner Microsoft Excel du menu Fichier.

Amliorer la macro
Slectionnez maintenant une cellule dont la police et le corps sont diffrents de ceux de la plage slectionne lors de lenregistrement de la macro. Tapez le raccourci clavier affect la macro (Ctrl + B). Celle-ci sexcute. A la Figure 2.8, on constate que les attributs Gras et Italique ont bien t appliqus, mais la police et le corps du texte ont chang. Tous les arguments en cours dans la bote de dialogue Police ont en effet t pris en compte lors de lenregistrement de la macro. Cela apparat clairement dans la fentre de code (voir Figure 2.7) : les arguments .Size = 10 et .Name = "Arial" du texte de la macro correspondent la police et au corps du texte slectionn lors de lenregistrement de la macro.
Figure 2.8 Lensemble des arguments en cours lors de 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. Choisissez Outils, Macro, Macros. Slectionnez GrasItalique, puis cliquez sur le bouton Modifie . Visual Basic Editor souvre sur la fentre de code de la macro GrasItalique.

48

Excel et VBA

200

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

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

Choisissez Fichier, Fermer. Le tour est jou.


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

Info

Au fur et mesure que v ous avancerez dans lapprentissage de la programmation Excel, vous dcouvrirez par la pratique les dif frents lments des botes de dialogue Macro et Enregistrer une macro. Le Tableau 2.2 en prsente rapidement les fonctions.
Tableau 2.2 : Fonctions des botes de dialogue Macro et Enregistrer une macro

Bouton
Bote de dialogue Macro Excuter Annuler Pas pas dtaill

Description

Excute la macro slectionne dont le nom apparat dans la zone de texte Nom de la macro. Ferme la bote de dialogue Macro. 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.

Chapitre 2

Premires macros

49

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

Bouton
Modier Crer

Description
Ouvre la fentre de code de la macro slectionne dans Visual Basic Editor an den permettre la modication. 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. Supprime la macro slectionne. Un message vous demandant de conrmer la suppression de la macro est afch. Ouvre la bote de dialogue Options de macro pour la macro slectionne, permettant de lui attribuer un raccourci clavier et den modier la description. Permet de dsigner une macro existante ou de saisir le nom dune nouvelle macro. Lorsque vous slectionnez une macro dans la liste des macros disponibles, son nom est afch dans cette zone de texte. Permet de dsigner le classeur dont vous souhaitez afcher les macros1.

Supprimer Options

Zone de texte Nom de la macro

Zone de texte Macros dans

Bote de dialogue Enregistrer une macro Nom de la macro Nom de la macro qui sera enregistre. Si le nom spci est dj attribu une macro existante, lapplication hte afchera une bote de dialogue vous demandant de conrmer le remplacement de la macro. Permet daffecter un raccourci clavier la macro que lon souhaite enregistrer. Dsigne le classeur o sera stocke la macro.1 Le lieu de stockage dune macro dtermine partir de quels documents la macro sera disponible, cest--dire o elle pourra tre excute, modie ou supprime. Destine la saisie dune description de la macro. Par dfaut, la date de cration et le crateur apparaissent dans cette zone. Dmarre lenregistrement de la macro sans quaucun raccourci ne lui soit attribu. Ferme la bote de dialogue Enregistrer une macro sans dclencher lEnregistreur de macro.

Touche de raccourci Enregistrer la macro dans

Description Bouton OK Bouton Annuler


1

Le stockage et la disponibilit des macros sont traits la fin de ce chapitre.

50

Excel et VBA

Une autre mthode denregistrement


LEnregistreur de macro est un instrument souple qui enre gistre 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. Dans le cas de la macro GrasItalique, il est plus simple de cliquer successi vement sur les icnes Gras et Italique de la barre doutils que de passer par la bote de dialogue F ormat de cellule. Rien ne vous empche denregistrer votre macro de la mme faon.

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

5. Cliquez tour tour sur les icnes Gras et Italique de la barre doutils. 6. Cliquez sur le bouton Arrter lenregistrement de la barre doutils Arrt de 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.

Chapitre 2

Premires macros

51

Structure de la macro
Observons la faon dont ces actions ont t codes en Visual Basic : ouvrez la Fentre de code de la macro GrasItalique (Outils, Macro, Macros, puis Modifier) Le texte de la macro se prsente ainsi :
Sub GrasItalique() Selection.Font.Bold = True Selection.Font.Italic = True End Sub

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

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

52

Excel et VBA

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


Sub GrasItalique() End Sub

3. Insrez une ligne entre Sub GrasItalique() et End Sub. Saisissez simplement le texte de la macro tel que nous lavons vu lors de la section prcdente. 4. Dans le menu Fichier , choisissez Enre gistrer PERSO.XLS, puis Fermer et retourner dans Microsoft Excel. Crer une macro nest pas plus compliqu que cela. Contrairement la mthode de lenre gistrement, la cration dune macro ne permet pas lattribution dun raccourci cla vier. Pour af fecter un raccourci cla vier la macro GrasItalique, procdez comme suit : 1. Choisissez Outils, Macro, Macros ou, si vous utilisez Excel 2007, cliquez sur le bouton Macros de longlet Dveloppeur. 2. Slectionnez la macro GrasItalique, puis cliquez sur le bouton Options. 3. Dans la bote de dialogue Options de macro qui saffiche, indiquez un raccourci cl vier et saisissez v entuellement une description pour la macro (v oir Figure 2.10). Validez en cliquant sur OK
Figure 2.10 La bote de dialogue Options de macro permet daffecter un raccourci clavier une macro existante.

Info

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 lectur e. Mais vous pouvez parfaitement saisir du te xte dans une fentre de code entirement en minuscules (selection.font).

Chapitre 2

Premires macros

53

ce Astu

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 r econnat pas. P ar e xemple, selection.font.bold = true deviendra Selection.Font.Bold = True lor s du c hangement de ligne ; par contre, si vous tapez selection.font.old = true, Word ne placer a pas de capitale old. Cest un bon moyen de vrifier que vous navez pas commis d fautes lors de la saisie.

Excution de la macro
Une macro cre sexcute exactement de la mme faon quune macro enregistre. Vous pouvez excuter la macro GrasItalique, soit partir de la bote de dialogue Macros, soit en utilisant le raccourci clavier que vous lui aurez attribu aprs. Vous savez maintenant enregistrer (selon la mthode de votre choix) et crer une macro. Si la macro GrasItalique v ous parat anodine, sachez que les principes acquis dans les sections prcdentes sont v alables pour toutes les macros, quelle que soit lapplication hte. La macro GrasItalique est une vritable commande que v ous a vez ajoute Excel. En procdant de la mme f aon, vous pouvez crer nimporte quelle commande, en fonction de vos besoins : insrer un titre WordArt et lui appliquer une mise en forme spcifique dfinir les aleurs de cellules, etc. Vous avez appris dans ce c hapitre enregistrer ou crer une macro. La mise en uvre de macros complexes ncessite souvent de combiner ces deux mthodes. On enr egistre en gnr al les commandes de la macr o, puis on y crit les fonctions qui ne peuvent tre enregistres.
Pour quune macro sexcute automatiquement louvertur e dun classeur, affectez-lui le nom Auto_Open. Cette fonction est intressante si vous souhaitez paramtrer dif fremment Excel selon les classeur s af fi hs. Enr egistrez simplement les options dExcel dans une macro Auto_Open. Pour quune macro sexcute automatiquement la fermeture dun classeur, affectez-lui le nom Auto_Close. Vous pouvez ainsi mettr e jour un autr e fi hier, crer une sauvegarde du fi hier dans un autre dossier, etc.

Info

ce Astu

54

Excel et VBA

Choisir laccessibilit des macros


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

Accessibilit globale ou limite


Une macro peut tre accessible cest--dire e xcute, modifie, renomme o supprime partir de nimporte quel document, ou limite des documents spcifiques Sil est intressant de pouv oir assurer une accessibilit globale aux macros, il est parfois prfrable dattacher une macro un classeur spcifique. Cest le cas si la macro es conue pour fonctionner avec un certain type de donnes et si elle est inutile dans dautres classeurs voire susceptible dy pro voquer des dommages. En outre, limiter la disponibilit des macros aux documents concerns en facilite la gestion. Le stockage dune macro est dfini lors de son enr gistrement ou de sa cration, et peut tre modifi par la suite. Une macro peut alement tre cre directement partir de Visual Basic Editor, sans passer par la bote de dialogue Macros ni par la bote de dialogue Enregistrer une macro. Le stockage de la macro est alors dtermin dans lExplorateur de projet. LExplorateur de projet et la cration de macros partir de Visual Basic Editor sont respectivement prsents aux Chapitres 4 et 5. Lors de lenregistrement dune macro, laffectation de la macro un document sef fectue par la zone de liste Enregistrer la macro dans de la bote de dialogue Enre gistrer une macro (voir Figure 2.11). Les sections sui vantes prsentent les possibilits de stockage des macros Excel.
Figure 2.11 Slectionnez le document de stockage de la macro lors de son enregistrement.

Chapitre 2

Premires macros

55

Classeurs et modles
Les macros enre gistres dans Excel sont stockes dans des classeurs ou dans des modles . Pour accder une macro, il f aut que le classeur dans lequel est stocke la macro soit ouvert. Si plusieurs classeurs sont ouv erts, vous pouvez accder aux macros dun des classeurs ouverts partir de nimporte quel autre classeur. Les macros enre gistres dans un modle sont accessibles lorsque v ous crez un nouv eau classeur fond sur ce modle (en choisissant la commande Nouveau du menu Fichier et en slectionnant un modle). Lorsque v ous enre gistrez le nouv eau classeur, les macros du modle sont "copies" dans celui-ci, et restent donc disponibles par la suite, lorsque v ous rouvrez le classeur. Notez cependant que les classeurs Excel nentretiennent pas de rapport a vec le modle partir duquel ils ont t crs. Si vous ajoutez, modifiez ou supprimez des macros dans u modle, ces changements ne seront pas ef fectifs pour les classeurs pralablement crs partir du modle. Pour enregistrer ou crer une macro dans un modle, v ous devez ouvrir le modle en question. Dans Excel 2007, les classeurs dans lesquels sont stockes les macros sont identifis par une xtension spcifiqu . Il peut sagir dun "modle prenant en charge les macros" (.xltm) ou dun "classeur prenant en charge les macros" (.xlsm).

7 200

Le classeur de macros personnel


Lors de lenregistrement de vos macros, vous pouvez choisir de stock er la macro dans le classeur actif afin den limiter la disponibilit ce dernie . La macro ne pourra alors tre excute, modifie ou supprime qu condition que ce classeur soit ou ert. Mais v ous aurez certainement besoin daccder la plupart de vos macros partir de classeurs diffrents. Pour rendre une macro accessible partir de nimporte quel classeur Excel, il suf fi de lenregistrer dans le classeur de macros personnel, PERSO.XLS. Le classeur PERSO.XLS est cr la premire fois que v ous enregistrez une macro dans le classeur de macros personnel. Lorsque v ous quittez Excel aprs a voir enre gistr v otre premire macro dans le classeur de macros personnel, la bote de dialogue prsente la Figure 2.12 saffiche Le classeur de macros personnel est ouv ert chaque fois que v ous e xcutez Excel. Vous pouvez donc en excuter les macros qui y sont stockes partir de nimporte quel classeur .

56

Excel et VBA

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

Info

Par dfaut, le classeur de macr os personnel est masqu au lancement dExcel. Pour accder ce classeur, choisissez la commande Affi her du menu Fentre, et slectionnez Perso.xls dans la bote de dialogue Affi her.
Le classeur de macros personnel est un fi hier Excel nomm PERSO.XLS, et stock dans le dossier XLStart. Ce classeur contiendr a probablement lessentiel de vos macros. Il est donc conseill den ef fectuer rgulir ement une sauve garde. Lemplacement de ce fi hier varie dune version dExcel lautre. Sous Windows 2000 et Windows XP, ce classeur est enr egistr par dfaut dans le dossier C:\Documents and Settings\nom dutilisateur\Application Data\Micr osoft\Excel\XLStart. Sous Micr osoft Windows Vista, ce classeur se tr ouve par dfaut dans le dossier C:\Users\nom dutilisateur\Application Data\Microsoft\Excel\XLStart.

eil Cons

Les macros complmentaires


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

distribution et gestion simplifies

Chapitre 2

Premires macros

57

possibilit dactivation/dsactivation trs simple ; conomie de ressources mmoire ; excution plus rapide des macros ; ajout de commandes lapplication de faon transparente pour lutilisateur ; les macros complmentaires charges napparaissent pas dans la liste des macros.
Lintgration des macr os complmentaires len vironnement dExcel se fait par programmation, laide de la collection CommandBars qui r eprsente lensemble des barres de commande de lapplication. On cre pour cela des pr ocdures vnementielles Open (ouverture du classeur ) et AddinUninstall (dsactivation de la macr o complmentair e) auxquelles on affecte le code ajoutant ou supprimant la commande linterface de lapplication. La cration de pr ocdures vnementielles pour contrler le comportement dExcel est traite au Chapitre 15.

Info

Enregistrer une macro complmentaire


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

58

Excel et VBA

Figure 2.13 Choisissez un titre et un commentaire clairs.

3. Choisissez Fichier, Enregistrer sous. Dans la zone Type de fichie , slectionnez Macro complmentaire Microsoft Excel (*.xla). Le dossier Documents and settings\ Administrateur\Application Data\Microsoft\Macros complmentaires est activ par dfaut. Excel 2007 propose deux formats pour les macr os complmentaires : le format 2007 (extension .xlam) et le format Excel 97-2003 (extension .xla). Si vous souhaitez distrib uer vos macr os, il est r ecommand de c hoisir ce second format, afi dassurer la compatibilit de vos macros avec un maximum de versions dExcel.

200

4. Affectez un nom adapt et cliquez sur Enregistrer. La macro complmentaire est enregistre et automatiquement ferme.

Activer/dsactiver une macro complmentaire


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

Chapitre 2

Premires macros

59

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

Figure 2.14 La liste des complments dExcel 2007.

Les macros complmentaires intgres dExcel


Excel est livr avec un nombre important de macros complmentaires, telles que lAssistant Somme conditionnelle, lEnre gistrement automatique, le Solv eur, etc. Celles-ci doivent tre installes pour tre accessibles. Si ce nest pas le cas, v ous devez relancer

60

Excel et VBA

Figure 2.15 Notre macro complmentaire apparat maintenant dans la liste des macros complmentaires dExcel.

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

Chapitre 2

Premires macros

61

eil Cons

Avant de vous lancer dans des activits de pr ogrammation complexe, vrifiez si nexiste pas une macro complmentaire intgre rpondant vos besoins. Vous pouvez galement tlc harger gr atuitement des macr os complmentair es sur le site de Micr osoft (http://www.microsoft.com/france). Enfin, des socits d dveloppement spcialises commercialisent des macros complmentaires.

Dnir le classeur de stockage lors de lenregistrement dune macro


Lors de lenre gistrement dune macro, la zone Enre gistrer la macro dans de la bote de dialogue Enregistrer une macro, permet de dfinir le classeur dans lequel sera stocke l macro. Trois options sont disponibles :

Classeur de macros personnel. La macro sera enregistre dans le classeur de macros personnel, et accessible partir de nimporte quel classeur. Nouveau classeur. Un nouveau classeur est cr et la macro y est stocke. Ce classeur. La macro est stocke dans le classeur actif. Il peut sagir du classeur de macros personnel (PERSO.XLS) ou dun autre classeur.

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

Accder aux macros dun classeur spcique


La zone de liste droulante Macros de la bote de dialogue Macro permet de dfinir le macros que vous souhaitez visualiser. Quatre options soffrent vous :

Tous les classeurs ouv erts. Les macros de tous les classeurs ouv erts (y compris le classeur de macros PERSO.XLS) sont accessibles. Les macros qui ne sont pas stocke s dans le classeur de macros personnel apparaissent sous la forme Classeur!NomMacro, o Classeur est le nom du classeur hber geant la macro, et NomMacro le nom de la macro. Ce classeur. Seules les macros du classeur actif sont af fiches. Les macros apparaissen alors simplement sous la forme NomMacro.

62

Excel et VBA

PERSO.XLS. Seules les macros du classeur de macros personnel sont accessibles. Nom_Classeur. Vous pouvez aussi choisir de ne visualiser que les macros de lun des classeurs ouverts, en slectionnant simplement son nom dans la liste.

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

ntion Atte

Si vous fermez le classeur de macr os personnel, vous ne pourr ez plus accder aux macros qui y sont stoc kes, ni y enr egistrer de nouvelles macr os. Le classeur de macr os per sonnel souvrira de nouveau lor s de la pr ochaine session Excel. Pour enregistrer des macr os daccs global ou accder aux macr os du classeur de macros personnel au cours de la session active, vous devez rouvrir le classeur PERSO.XLS. Le classeur Perso.xls souvre le xcution dExcel parce quil se tr ouve dans le dossier XLStart ou XLOuvrir (selon la ver sion dOffice). our ouvrir automatiquement un classeur au lancement dExcel, crez un r accourci ver s ce classeur et placez-le dans ce dossier.

ce Astu

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 cla vier sans jamais interv enir sur le contenu ou la mise en forme de la cellule, ces dplacements ne seront pas enregistrs dans la macro, puisquils ne modifient en rien la feuille La slection dlments dans une feuille Excel repose sur lobjet Range qui reprsente une cellule, une ligne, une colonne ou une combinaison de ces lments. Comme v ous le verrez dans cette section, les proprits utilises v arient selon le type de slection ef fectu, mais toutes renvoient un objet Range. Le codage en lang age Visual Basic de v os dplacements dans la feuille de calcul Excel varie selon que v ous activiez ou non la rfrence relati ve aux cellules, en cliquant sur le bouton correspondant de la barre doutils Arrt de lenre gistrement (v oir Figure 3.1 ou dans la zone Code de longlet Dveloppeur si vous utilisez Excel 2007).
Figure 3.1 Vous pouvez enregistrer vos dplacements par rfrence relative ou absolue aux cellules.
Rfrence absolue Rfrence relative

Mthodes de slection dans une feuille Excel


Clavier
Lenregistrement de dplacements dans une feuille Excel, par rfrence relati ve aux cellules, ncessite, dans certains cas, que v ous utilisiez le cla vier (par e xemple, si v ous souhaitez acti ver la dernire cellule non vide dune ligne). Le Tableau 3.1 prsente les diffrentes possibilits de dplacement dans Excel laide du clavier.

Chapitre 3

Dplacement et slection dans une macro Excel

65

Tableau 3.1 : Dplacement dans une feuille Excel laide du clavier

Pour se dplacer
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 Sur la premire cellule non vide de la ligne courante1 Sur la dernire cellule non vide de la ligne courante1 Sur la premire cellule non vide de la colonne courante1 Sur la dernire cellule non vide de la colonne courante1 Sur la cellule situe langle suprieur gauche de la feuille active (A1) Sur la cellule situe langle infrieur droit de la feuille active 2
1

Clavier
Dbut Ctrl + Ctrl + Ctrl + Ctrl + Ctrl + Dbut Ctrl + Fin

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 cour ante), vous devez activer lenr egistrement par rfr ence relative aux cellules en cliquant sur le bouton correspondant de la barre doutils Arrt de lenregistrement.

Pour tendre la slection de la cellule acti ve une cellule donne de la feuille, utilisez lune des combinaisons de touches prsentes dans le Tableau 3.1, en maintenant la touche Maj enfonce. Pour slectionner les colonnes entires correspondant aux cellules s lectionnes, 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 ef fectuer des slections dans Excel est trs simple. Pour slectionner une cellule, cliquez dessus. Pour slectionner une ligne ou une colonne, cliquez sur len-tte de la ligne ou de la colonne concerne. Pour slectionner des cellules adjacentes, cliquez sur la premire cellule de la plage que vous souhaitez slectionner, appuyez sur la touche Maj et, tout en la maintenant enfonce, cliquez sur la dernire cellule de la plage. Pour slectionner des lignes ou des colonnes adjacentes, procdez de la mme f aon, en cliquant sur les rfrences de ces lignes ou de ces colonnes. Pour slectionner des cellules non contigus, cliquez sur la premire cellule que v ous souhaitez slectionner , appuyez sur la touche Ctrl et, tout en la maintenant enfonce, cliquez successivement sur les cellules que v ous souhaitez slectionner . Pour slectionne r des lignes ou des colonnes non contigus, procdez de la mme f aon, en cliquant sur les rfrences de ces lignes ou de ces colonnes. Vous pouvez combiner la slection dlments non contigus de la feuille en maintenant la touche Ctrl enfonce et en cliquant sur les lments v oulus. Vous pouvez, par e xemple, slectionner simultanment la colonne C, la ligne 5 et la cellule F4. Cliquez sur len-tte de la colonne C, appuyez sur la touche Ctrl et, tout en la maintenant enfonce, cliquez sur len-tte de la ligne 5, puis sur la cellule F4.

Notion de cellule active


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

Si vous appliquez une mise en forme (une police particulire, par e xemple), cette mise en forme sera applique lensemble des cellules de la plage slectionne. Si v ous appuyez

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 v ous effectuez une opration pouv ant affecter simultanment plusieurs cellules, elle sappliquera lensemble des cellules de la plage slectionne. Cependant, certaines oprations comme la saisie de texte ou de formules ne peuvent sappliquer qu une cellule la fois. Cest alors la cellule acti ve de la plage slectionne qui est af fecte. P ar e xemple, si la plage de cellules A5 + F10 est slectionne, et si la cellule active est la cellule A5, le texte saisi au clavier sera insr dans la cellule A5, et la plage A5 + F10 restera slectionne.
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 acti ve dune plage de cellules dpend de lordre dans lequel v ous avez slectionn les diffrentes cellules qui la composent. Vous verrez dans les sections qui sui vent comment le mode de slection dtermine la cellule acti ve et comment la cellule active est code en langage Visual Basic.

Rfrences relatives et rfrences absolues


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

68

Excel et VBA

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

Pour calculer la prime, il suffit de procder comme suit 1. Se placer dans la premire cellule contenant un chiffre daffaires (D4). 2. Effectuer le calcul de la prime vous apprendrez au Chapitre 5 crer des fonction s personnalises et les exploiter dans vos programmes VBA. 3. Se dplacer dune cellule vers la droite (E4). 4. Insrer le rsultat issu du calcul. 5. Se dplacer dune cellule vers le bas, puis dune cellule vers la gauche, afin datteindre a cellule contenant le chiffre suivant (D5). 6. Recommencer au point 2 si la cellule slectionne contient une valeur. Si vous souhaitez crer un programme VBA prenant en char ge ce calcul, il v ous faudra utiliser une rfrence absolue aux cellules pour le point 1 et une rfrence relati ve aux cellules pour les dplacements des points 3 et 5. Il v ous suffit pour cela de ous assurer que lenre gistrement de la macro sef fectue par rfrence absolue a vant def fectuer la slection de la cellule A4, puis de cliquer sur le bouton Rfrence relati ve, afin dact ver lenregistrement des dplacements par rfrence relative aux cellules. La rfr ence aux cellules (r elative ou absolue) active au moment o vous interrompez lenr egistrement dune macr o ser a aussi la rfr ence active si vous enregistrez une nouvelle macro dans la mme session Excel (sans avoir quitt, puis r elanc lapplication). Lor sque vous enr egistrez une macr o, pensez toujour s vrifier que vos dplacements se ont enregistrs selon la rfrence aux cellules souhaites avant de commencer vous dplacer dans la feuille Excel.

ntion Atte

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 calcul. Selection. Renvoie lobjet slectionn dans la feuille de calcul active. Si lobjet slectionn est une cellule ou un groupe de cellules, lobjet ren voy est un objet Range reprsentant cette cellule ou ce groupe de cellules. Offset. Renvoie un objet Range qui reprsente une plage dcale par rapport la plage spcifie Select et GoTo. Slectionnent lobjet spcifi Activate. Active lobjet spcifi. Sil sagit dun objet Range, la cellule spcifie d vient la cellule active. Si un groupe de cellules est slectionn, la slection est maintenue. Resize. Modifie lampleur dune plage de cellules

Vous apprendrez exploiter ces objets laide des mthodes suivantes :


Rfrence absolue aux cellules


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

Slection de cellules contigus


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

70

Excel et VBA

La proprit Range indique quil sagit dun objet Range. Largument Adresse_Cellule prcise ladresse de cet objet. Cet argument est compos de la rfrence de colonne (une lettre) immdiatement sui vie de la rfrence de ligne (un nombre). La mthode Select entrane la slection de lobjet Range prcdemment dfini (ici l cellule).

Par exemple, linstruction Visual Basic pour activer la cellule B5 de la feuille active est :
Range("B5").Select

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

Info

Nous considrerons dans la suite de ce c hapitre que la slection sef fectue sur la feuille active, et omettrons donc toute instruction destine activer la feuille dont les cellules doivent tre slectionnes.
La proprit Cells permet aussi de coder une rfr ence absolue une cellule . La proprit Cells sutilise avec la syntaxe suivante :
Cells (ligne, colonne)

ce Astu

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

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

o Cell1 et Cell2 reprsentent respectivement la cellule situe langle suprieur gauche de la plage et la cellule situe langle infrieur droit de la plage de cellules slectionne.

Chapitre 3

Dplacement et slection dans une macro Excel

71

Dans lexpression Range("Cell_Active").Activate, largument Cell_Active indique la cellule active dans la plage slectionne. Dans Excel, cette cellule nest pas noircie et correspond la cellule partir de laquelle la slection a t tendue. Si v ous saisissez du texte au clavier, il sera insr dans cette cellule. Par exemple, lexpression Visual Basic :
Range("B5:D10").Select Range("D5").Activate

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

Slection de cellules non contigus


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

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

72

Excel et VBA

revient slectionner successi vement les cellules B5, D10, F2 et touche Ctrl enfonce.

A3 en maintenant la

Slection de lignes et de colonnes


Lorsque v ous slectionnez une colonne dans une feuille Excel, lEnre gistreur de macro code cette slection laide de la proprit Columns. Dans le cas dune ligne, cest la proprit Rows qui sera utilise. Ces proprits ren voient toutes deux des objets Range, de type colonne, pour la proprit Columns, et de type ligne, pour la proprit Rows. Pour slectionner une colonne ou une ligne dans une feuille Excel, cliquez sur len-tte de la ligne ou de la colonne que vous souhaitez slectionner , ou utilisez lun des raccourcis clavier prsents dans le Tableau 3.1. Pour slectionner des colonnes ou des lignes contigus, slectionnez la pr emire ligne/colonne, puis enfoncez la touche Maj et cliquez sur la dernire ligne/colonne de la plage que vous souhaitez slectionner.

pel Rap

Lignes contigus La syntaxe de la proprit Rows est la suivante :


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

o les arguments ligne1 et ligne2 reprsentent respectivement lindex de la premire et lindex de la dernire ligne de la plage slectionne. La mthode Select slectionne lobjet Range dfini par la proprit Rows. Dans le xpression Range("cell_active").Activate, cell_active reprsente ladresse de la cellule acti ve dans la plage slectionne. Cette e xpression est omise si la cellule active est la cellule situe langle suprieur gauche de la plage slectionne. Lorsque vous slectionnez une plage de lignes dans une feuille Excel, la cellule active est la premire cellule de la ligne que vous slectionnez. Par exemple, si, lors de lenregistrement dune macro, vous slectionnez la ligne 5, puis maintenez la touc he Maj enfonce et slectionnez la ligne 10, cest la cellule A5 (situe langle suprieur gauche de la plage) qui sera active. En revanche, si vous slectionnez la ligne 10, puis la ligne 5, en maintenant la touc he Maj enfonce, cest la cellule A10 qui sera active.

Info

Chapitre 3

Dplacement et slection dans une macro Excel

73

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

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

Si v ous slectionnez les lignes 5 10 (en slectionnant la ligne 5 en premier , puis la ligne 10, tout en maintenant la touche Maj enfonce), le code Visual Basic correspondant se prsentera ainsi :
Rows("5:10").Select

Si vous slectionnez la mme plage, mais en slectionnant dabord la ligne Visual Basic correspondant se prsentera ainsi :
Rows("5:10").Select Range("A10").Activate

10, le code

Figure 3.6 La cellule A10 est la cellule active.

Lorsque v ous slectionnez une ligne, par df aut, la premire cellule de la ligne est la cellule active. Si vous modifiez la cellule act ve dans ou hors de la plage slectionne

74

Excel et VBA

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 acti ve. Par exemple, si vous slectionnez la ligne 14, puis maintenez la touche enfonce et cliquez sur la cellule B14 lors de lenre gistrement dune macro, le code Visual Basic correspondant se prsentera ainsi :
Range("14:14,B14").Select Range("B14").Activate

Figure 3.7 La cellule B14 est la cellule active.

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

o les ar guments col1 et col2 reprsentent respecti vement linde x de la premire et lindex de la dernire colonne de la plage slectionne. La mthode Select slectionne lobjet Range dfini par la proprit Columns. Dans le xpression Range("cell_active").Activate, cell_active reprsente ladresse de la cellule acti ve dans la plage slectionne. Cette e xpression est omise si la cellule active est la cellule situe langle suprieur gauche de la plage slectionne. Si la slection ne porte que sur une colonne, les ar guments col1 et col2 ont la mme valeur et le xpression Range("cell_active").Activate est omise. P ar exemple, si v ous enregistrez dans une macro la slection de la colonne B de la feuille acti ve, le code Visual Basic correspondant se prsentera ainsi :
Columns("B:B").Select

Chapitre 3

Dplacement et slection dans une macro Excel

75

Si vous slectionnez les colonnes B E (en slectionnant la colonne B, puis la colonne E, tout en maintenant la touche Maj enfonce), le code Visual Basic correspondant se 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 acti ve. Si v ous modifiez la cellule act ve 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 lar gument cell_active reprsente ladresse de la cellule acti ve. P ar e xemple, si vous slectionnez la colonne E, puis maintenez la touche Ctrl enfonce et cliquez sur la cellule E5 lors de lenre gistrement dune macro, le code Visual Basic correspondant se prsentera ainsi :
Range("E:E,E5").Select Range("E5").Activate

Figure 3.8 La cellule E5 est la cellule active.

Info

Vous pouvez substituer la pr oprit Range aux pr oprits Rows et Columns dans le code de votr e macr o, en conservant les mmes ar guments. P ar exemple, les e xpressions Visual Basic Range("5:10").Select et Rows("5:10").Select correspondent toutes deux la slection des lignes 5

76

Excel et VBA

10 de la feuille active . Lors de lenregistrement de macros, les slections sont codes diffremment de faon faciliter la lecture du code. Lignes et colonnes non contigus Lorsque vous slectionnez des lignes ou des colonnes non contigus dune feuille Excel lors de lenre gistrement dune macro en maintenant la touche Ctrl enfonce , la proprit Range est utilise. La syntaxe se prsente alors ainsi :
Range("item1:item2, item3:item4,..., item-n:item-n+1").Select Range("cell_active").Activate

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

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

Info

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

Chapitre 3

Dplacement et slection dans une macro Excel

77

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

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

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

Enfin, ous pouvez conjuguer la slection de lignes, colonnes et cellules contigus ou non. Le code suivant indique la mme slection que dans le xemple prcdent, laquelle on a ajout la slection des cellules A2 F2 et de la cellule B13.
Range("C:E,G:G,4:6,8:8,A2:F2,B13").Select Range("B13").Activate

Rfrence relative aux cellules


Le codage Visual Basic des dplacements dans Excel par rfrence relati ve aux cellules rpond aux mmes principes que le codage du dplacement par rfrence absolue aux cellules. Cette section prsente donc de f aon sommaire les spcificits du dplacemen par rfrence relative aux cellules.

78

Excel et VBA

Slection de cellules contigus


Lexpression Visual Basic pour une rfrence relative une cellule se prsente ainsi :
ActiveCell.Offset(RowOffset, ColumnOffset).Range("A1").Select

La proprit ActiveCell renvoie un objet Range qui reprsente la cellule active. La proprit Offset renvoie un objet Range (cellule ou plage de cellules), fonction des arguments nomms RowOffset et ColumnOffset. Ceux-ci indiquent (en nombre de lignes et de colonnes) le dcalage effectuer partir de la cellule active pour atteindre ladresse de cet objet. Ces arguments prennent une v aleur numrique ngative si le dplacement sef fectue vers le haut (RowOffset) ou vers la gauche (ColumnOffset).

La proprit Range("A1") prcise quil sagit dun dplacement de style A1. Autrement dit, la cellule acti ve sert de rfrence et est virtuellement considre comme la cellule A1. Bien que toujours prcise lors de lenre gistrement dune macro, cette proprit est facultative et vous pouvez la supprimer du code de la macro. La mthode Select entrane la slection de lobjet (ici la cellule) prcdemment dfini

Par exemple, lexpression Visual Basic ActiveCell.Offset(3, 2).Select entranera la slection de la cellule situe trois lignes au-dessous et deux colonnes droite de la cellule active. Lexpression ActiveCell.Offset(-3, -2).Select entranera la slection de la cellule situe trois lignes au-dessus et deux colonnes gauche de la cellule active. Lorsque vous slectionnez une plage de cellules, le code Visual Basic gnr se prsente ainsi :
ActiveCell.Offset(RowOffset, ColumnOffset).Range("A1:Cell2").Select

o Offset(RowOffset, ColumnOffset) indique le dplacement ef fectuer relative-ment la cellule acti ve et A1:Cell2 reprsente la plage de cellules slectionnes en estimant que la cellule active est A1. Par exemple, lexpression Visual Basic
ActiveCell.Offset(-3, 0).Range("A1:A4").Select

revient tendre la slection de la cellule acti ve jusqu la cellule situe trois lignes audessus. On obtient alors une slection qui valente la slection A1:A4 (il peut sagir de B1:B4, C5:C8, etc.)

Chapitre 3

Dplacement et slection dans une macro Excel

79

Slection de cellules non contigus


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

o A1 reprsente la cellule acti ve et les ar guments Cell2,..., Celln reprsentent les adresses des cellules successi vement slectionnes, par position relati ve la cellule initiale. Largument Cell_Active reprsente la dernire cellule slectionne. Lors de dplacements par rfr ence r elative aux cellules, le cod age Visual Basic se fait par style de rfr ence A1 ; cela signifie que lad esse virtuelle A1 est toujours attribue la cellule active , ce qui permet de r eprsenter les dplacements et slections dautr es cellules par r apport cette adr esse virtuelle.

Info

Par exemple, lexpression Visual Basic


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

indique que la macro slectionnera simultanment la cellule active (virtuellement A1) et les cellules dont les adresses virtuelles (en style de rfrence A1) sont A7, C7, C1. L a Offset(0, 2) de la cellule acti ve sera la cellule situe deux colonnes droite cellule initialement active (virtuellement C1). Si la cellule active au moment de lexcution de la macro est la cellule B5, les cellules B5, B11, D11 et D5 seront slectionnes. La cellule D5 sera la cellule active. Pour bien comprendre ce principe, gardez lesprit que ce qui fait la relativit du 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 syntaxe suivante :
expression.Resize(RowSize, ColumnSize)

Resize selon la

o expression ren voie lobjet Range redimensionner . RowSize et ColumnSize son t facultatifs et ren voient respectivement le nombre de lignes et le nombre de colonnes qui

80

Excel et VBA

doivent tre ajoutes (valeurs positives) ou retires (valeurs ngatives) la slection. Si lun ou lautre de ces arguments est omis, il prend la valeur par dfaut de 0 et la dimension correspondante nest pas modifie Linstruction suivante tend la slection en cours dune ligne et dune colonne 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 fonction du contenu des cellules. Il ser ainsi utile dtendre la slection lensemble des cellules non vides dun tableau a vant deffectuer un tri ou didentifier la premire cellule vide dans une colonne afin dy insr du contenu. VBA propose pour cela les proprits suivantes :

CurrentRegion retourne la plage de cellules courante (les cellules contigus qui contiennent des donnes). End permet didentifier les cellules vides dans une plage de cellules UsedRange retourne une plage compose des cellules dune feuille contenant des donnes.

La proprit CurrentRegion

Pour tendre la slection la zone courante, cest--dire la zone entoure par une combinaison de lignes et de colonnes vides, v ous utiliserez la proprit CurrentRegion selon la syntaxe suivante :
Range.CurrentRegion.Select

o Range est une e xpression qui ren voie un objet Range. Considrez les deux instructions suivantes :
ActiveCell.CurrentRegion.Select Range("C8").CurrentRegion.Select

La premire instruction tend la slection la zone courante partir de la cellule acti ve, tandis que la seconde procde de mme, mais partir de la cellule C8.

Chapitre 3

Dplacement et slection dans une macro Excel

81

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

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

La proprit End

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

o Range renvoie lobjet Range partir duquel on recherche la dernire cellule, et o Direction reprsente le sens dans lequel on se dplace. Il peut sagir de lune des constant s e xlDirection suivantes :

xlDown: dplacement vers le bas. xlToRight: dplacement vers la droite. xlToLeft: dplacement vers la gauche.

82

Excel et VBA

xlUp: dplacement vers le haut.

Appliques au tableau de la Figure 3.11, les quatre instructions sui vantes ren voient respectivement lobjet Range reprsentant les cellules E4, E12, C8 et H8.
Range("E8").End(xlUp).select 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

La proprit UsedRange La proprit UsedRange retourne la plage de cellules contenant les donnes dune feuille. Cette proprit est donc particulirement pratique pour identifier les cellules sur lesquel les doi vent sappliquer des traitements lors de le xcution dun programme. La plage retourne par UsedRange est une plage de cellules contigus dont les limites sont dfinie par :

la cellule dont lindex de colonne est le plus lev ; la cellule dont lindex de colonne est le plus faible ; la cellule dont lindex de ligne est le plus lev ; la cellule dont lindex de ligne est le plus faible.

Chapitre 3

Dplacement et slection dans une macro Excel

83

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

Linstruction suivante slectionne la plage de cellules utilise sur la feuille acti ve du classeur actif :
ActiveWorkbook.ActiveSheet.UsedRange.Select

Rfrence aux plages de cellules nommes


Pour faire rfrence une plage de cellules nomme dans Excel, utilisez la syntaxe suivante :
Range("[NomClasseur]NomFeuille!NomPlage")

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

84

Excel et VBA

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

Pour slectionner une plage nomme, utilisez la mthode GoTo qui active successivement le classeur et la feuille si ncessaire, puis slectionne la plage v oulue. Les deux instructions sui vantes slectionnent la plage nomme MaPlage, puis en ef facent le contenu :
Application.Goto Reference:="[Test.xls]Feuil1!MaPlage" Selection.ClearContents

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 v ous ont f ait dcouvrir la fentre Code de Visual Basic Editor tra vers la modification et la cration de macros. Mais Visual Basic Editor ne se rsume pas un simple diteur de code. Il sagit dun logiciel complet, proposant des outils daide au dveloppement que ce chapitre vous propose de dcouvrir.

Accder Visual Basic Editor


Lorsque vous choisissez de modifier une macro xistante ou de crer une nouvelle macro, selon les procdures tudies au Chapitre 2, v ous accdez la fentre Code de Visual Basic Editor . Vous pouv ez aussi dv elopper un projet VBA en accdant directement Visual Basic Editor, sans passer par la bote de dialogue Macro. On accde toujours Visual Basic Editor partir dune application hte. Autrement dit, une session Visual Basic Editor peut tre lie Word, Po werPoint ou encore Excel, mais ne permet daccder quaux projets de lapplication partir de laquelle il a t excut. Lorsque vous tes dans Visual Basic Editor, vous pouvez accder lensemble des lments constitutifs des projets accessibles, y compris aux macros disponibles dans la bote de dialogue Macro. Pour quun projet soit accessible dans Visual Basic Editor, il faut que le document dans lequel il est stock soit ouvert dans lapplication hte.

Info

ntion Atte

Pour accder Visual Basic Editor partir dExcel 2007, activez longlet Dveloppeur du ruban, puis slectionnez Visual BasicOutils, Macro, Visual Basic Editor , ou tapez le raccourci clavier Alt + F11. Pour accder Visual Basic Editor partir dune version dExcel antrieure 2007, slectionnez Outils, Macro, Visual Basic Editor, ou tapez le raccourci cla vier Alt + F11. Vous pouvez galement accder Visual Basic Editor partir du bouton Visual Basic Editor de la barre doutils Visual Basic, si celle-ci est affiche La Figure 4.3 prsente la fentre de Visual Basic Editor. Il se peut que, sur v otre ordinateur, la fentre ne prsente pas les mmes lments. Vous verrez par la suite comment affiche les diffrents composants de Visual Basic Editor.

Chapitre 4

Dcouvrir Visual Basic Editor

87

Figure 4.1 Nouvelle interface dOffice 2007 obli e, laccs Visual Basic Editor se fait via le ruban. Figure 4.2 Pour accder Visual Basic Editor partir dune version dExcel antrieure 2007, slectionnez la commande... Visual Basic Editor !

Figure 4.3 La fentre de Visual Basic Editor.

88

Excel et VBA

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 pr emire tape de dveloppement de votr e pr ojet consiste crer une feuille permettant une interaction avec lutilisateur. Vous accderez alors directement Visual Basic Editor, sans passer par la bote de dialo gue Macro.

Pour quitter Visual Basic Editor et retourner lapplication hte, vous pouvez :

ouvrir le menu Fichier , slectionner la commande Fermer et retourner Microsoft Excel ; taper le raccourci clavier Alt + Q ; cliquer sur la case de fermeture de Visual Basic Editor (situe lextrmit suprieure droite de la fentre).

Pour retourner lapplication hte sans quitter Visual Basic Editor, vous pouvez :

cliquer sur licne Affichage Microsoft Excel, situe l xtrme g auche de la barre doutils Standard ; taper le raccourci clavier Alt + F11.

Les outils et les fentres de Visual Basic Editor


Cette section prsente sommairement les lments essentiels de linterface de Visual Basic Editor. Vous en dcouvrirez plus prcisment les fonctionnalits au fur et mesure que vous avancerez dans la lecture de louvrage. Les lments essentiels de linterface de Visual Basic Editor sont :

LExplorateur de pr ojet. Il permet de visualiser les dif frents projets et lments constitutifs qui les composent objets, modules, modules de classe, feuilles (ou formulaires) et Rfrence , et daccder ces lments ou au code qui leur est attach. Pour quun projet apparaisse dans lExplorateur de projet, il faut que le document auquel il est attach soit ouvert dans lapplication hte. La fentr e Pr oprits. Elle permet de visualiser et de modifier lensemble de proprits associes aux objets constitutifs dun projet.

Chapitre 4

Dcouvrir Visual Basic Editor

89

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

Figure 4.4 Visual Basic Editor.

Explorateur d'objets

Bote outils

Fentre UserForm

LExplorateur de projet
LExplorateur de projet permet dexplorer les diffrents projets chargs dans lapplication hte et les lments qui les composent. A partir de lExplorateur de projet, v ous pouvez

90

Excel et VBA

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

Afcher et masquer lExplorateur de projet


Pour afficher lExplorateur de projet, ous pouvez :

choisir la commande Explorateur de projet du menu Affichage taper le raccourci clavier Ctrl + R ; cliquer sur le bouton Explorateur de projet de la barre doutils Standard de Basic Editor. Visual

Pour masquer lExplorateur de projet, vous pouvez :

faire un clic droit dans sa fentre et slectionner la commande Masquer du menu contextuel qui saffiche faire un clic droit sur sa barre de titre et slectionner la commande Fermeture ; taper le raccourci clavier Alt + F4 ; cliquer sur la case de fermeture de la fentre.

Figure 4.5 LExplorateur de projet permet daccder aisment aux diffrents lments constitutifs dun projet.

Chapitre 4

Dcouvrir Visual Basic Editor

91

Figure 4.6 Le menu contextuel de lExplorateur de projet.

Naviguer dans lExplorateur de projet


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

Le dossier Micr osoft Excel Objets. Contient les documents associs au projet. Il sagit du classeur dans lequel est stock le projet, et de ses feuilles de calcul. Vous verrez au Chapitre 15 que v ous pouv ez associer des procdures spcifiques ce objets de faon contrler les interventions dun utilisateur sur un classeur. Le dossier Feuilles. Contient les feuilles (ou formulaires) du projet. Vous apprendrez crer des feuilles aux Chapitres 12 14. Le dossier Modules. Contient les modules standard (ou modules de code) tels que les macros constitutifs dun projet. Le dossier Modules de classe. Contient les ventuels modules de classe dun projet. Le dossier Rfrences. Contient les rfrences dautres projets. Si un pr ojet ne contient aucun module ou module de classe , les dossier s correspondants nappar atront pas sous le pr ojet dans lExplor ateur de projet.

ntion Atte

92

Excel et VBA

Info

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

Le signe plus (+) permet de dv elopper larborescence dun dossier ou dun projet, et le signe moins () de la rduire. A la Figure 4.6, larborescence du dossier Feuilles du projet PERSO.XLS est dv eloppe, tandis que les autres dossiers ainsi que le projet Chif fresRepresentants.xls sont rduits. Plutt quun af fichage par dossie , les lments constitutifs dun projet peuv ent tre prsents par ordre alphabtique dans lExplorateur de projet. Cliquez simplement sur le bouton Basculer dossiers de lExplorateur de projet. La Figure 4.7 prsente lExplorateur de projet aprs masquage des dossiers. Pour re venir un affichage par dossie , cliquez de nouveau sur ce bouton.
Figure 4.7 Lorsque laffi hage des dossiers est dsactiv, les icnes permettent de distinguer les lments 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 :
Afcher le code Afche le code de llment slectionn dans lExplorateur de projet an den permettre lcriture ou la modication. Afche 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.

Afcher lobjet

Chapitre 4

Dcouvrir Visual Basic Editor

93

LExplorateur dobjets
Lorsquon commence dv elopper en VBA, la difficult essentielle consiste manipule les objets de lapplication hte (dans notre cas les objets Excel). Comment, par e xemple, accder une plage de cellules dune feuille spcifique dun classeur Excel et y insre une formule ? L Enregistreur de macros est dans de nombreux cas la solution ce problme. Vous manipulez les objets Excel aprs avoir activ lEnregistreur de macro, puis vous visualisez dans Visual Basic Editor les mots cls Visual Basic utiliss pour accder aux objets, leurs proprits et leurs mthodes. Cependant, certains lments de code dun programme VBA ne peuv ent tre gnrs laide de lEnre gistreur de macro et ne peuv ent qutre saisis dans la fentre Code du programme. Vous de vez alors connatre la position de lobjet auquel v ous souhaitez accder dans la hirarchie de classes de lapplication. Vous de vez aussi connatre les mthodes et proprits associes cet objet pour pouv oir le manipuler ou en e xtraire des informations. Les chapitres prcdents vous ont initi la syntaxe VBA permettant daccder un objet. Pour autant, lorsque v ous commencerez dv elopper dans Visual Basic Editor , vous ne connatrez pas toujours le chemin emprunter pour accder tel ou tel objet, ni la mthode lui appliquer pour ef fectuer telle ou telle opration. LExplorateur dobjets constitue pour cela une aide trs apprciable pour le dv eloppeur. L Explorateur dobjets recense en effet lensemble des objets disponibles dans les bibliothques dobjets accessibles pour un projet, ainsi que les proprits, constantes, mthodes et vnements associs ces objets. Il constitue en cela un trs supplment laide de Visual Basic pour Applications. Une bibliothque dobjets est un fi hier contenant toutes les donnes dobjets (leur s pr oprits, mthodes, vnements, constantes, etc.). Ce fi hier porte le xtension .OLB et cest lui que se rfr e Visual Basic lor sque vous manipulez des objets Excel. Le nom de fi hier de la bibliothque dobjets dExcel ainsi que son emplacement varient dune ver sion lautre. Pour le localiser, effectuez une recherche sur *.olb.

ition Dfin

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 v ous fournit une documentation complte. Il permet daccder au modle dobjets de lapplication hte, mais aussi aux objets dautres applications et aux objets, procdures et constantes que v ous avez crs dans le cadre de v otre projet, ainsi quaux rubriques daide associes chacun de ces lments.

94

Excel et VBA

Afcher et masquer lExplorateur dobjets


Pour afficher lExplorateur dobjets, ous pouvez :

slectionner la commande Explorateur dobjets du menu Affichage taper le raccourci clavier F2 ; cliquer sur le bouton Explorateur dobjets de la barre doutils Standard de Visual Basic Editor.
Liste droulante Rechercher un texte Liste droulante Projet/Bibliothque

Figure 4.8 LExplorateur dobjets permet dexplorer lensemble des objets disponibles pour un projet.

Liste Classes Liste Membres

Zone Dtails

Pour masquer lExplorateur dobjets, vous pouvez : faire un clic droit dans sa fentre et slectionner la commande Masquer du menu contextuel qui saffiche cliquer sur licne situe g auche de la barre de titre et slectionner la commande Fermeture ; cliquer sur la case de fermeture de la fentre.

Naviguer dans lExplorateur dobjets


Sil peut effrayer le programmeur novice, lExplorateur dobjets est en ralit dune 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 v otre choix. Le Tableau 4.1 prsente les bibliothques les plus courantes accessibles dans lExplorateur dobjets.

Chapitre 4

Dcouvrir Visual Basic Editor

95

Tableau 4.1 : Les bibliothques de lExplorateur dobjets

Bibliothque

Description

<Toutes bibliothques> Lorsque cette option est slectionne, les objets sont afchs, toutes bibliothques confondues. MSForms Ofce Contient les objets accessibles dans la fentre UserForm, tels que les boutons doptions, cases cocher, zones de liste, etc. Contient les objets Microsoft Ofce. Il sagit des objets communs aux applications Ofce, tels que lobjet Balloon reprsentant linfobulle dans laquelle le Compagnon Ofce afche les informations. 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 vrier des informations, le module String contient les procdures permettant deffectuer des oprations sur des chanes. Contient les objets dExcel. Contient les objets des autres applications rfrences dans votre projet. Rfrencer une autre application permet daccder aux objets de cette application partir dExcel. Vous verrez au Chapitre 6 comment crer une rfrence la bibliothque dobjets dune autre application, et comment manipuler des objets de cette dernire. Afche les objets propres au projet, tels que les feuilles, les modules de classe et les modules de code que vous avez crs.

VBA

Excel Autres applications

Projets

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

On appelle membr es dune classe lensemble des lments rfr encs pour cette classe, cest--dire ses proprits, constantes, mthodes et vnements.

96

Excel et VBA

Figure 4.9 Les classes contenant du code apparaissent en gras.

Ces classes comportent du code rdig par lutilisateur

Les membres affichs dans la zone Membres de "Classe" sont affichs par type (propri ts, constantes, mthodes et vnements) et par ordre alphabtique au sein de chaque type. Chaque type de membre est symbolis par une icne. Lorsquun membre contient du code rdig par lutilisateur, son nom apparat en gras. Pour affi her les membr es dune classe par or dre alphabtique, indpendamment de leur type , faites un clic dr oit dans lExplor ateur dobjets et, dans le menu conte xtuel qui saf fi he, slectionnez la commande Membr es du gr oupe. Pour revenir un affi hage par groupe, rptez cette opration.

ce Astu

Accder la rubrique daide de lobjet slectionn Lorsquun lment est slectionn dans lExplorateur dobjets, il est trs simple daccder la rubrique daide qui lui est affecte. Vous pouvez :

cliquer sur le bouton Aide de lExplorateur dobjets ; taper le raccourci clavier F1 ; faire un clic droit sur llment v oulu et slectionner la commande contextuel. Aide du menu

Vous obtenez ainsi une aide prcieuse sur lutilisation de llment v oulu (v oir Figure 4.10). Vous pouvez ventuellement consulter lexemple de code fourni dans laide de VBA et en copier la syntaxe afin de la coller dans otre propre code.

Chapitre 4

Dcouvrir Visual Basic Editor

97

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

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

98

Excel et VBA

Figure 4.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 v ous f ait remonter dune slection. Le bouton Avancer permet de re venir aux dernires slections ef fectues aprs a voir utilis le bouton Retourner. Le bouton Copier place dans le Presse-papiers le te xte slectionn. Il peut sagir du te xte de la zone Dtails, de la zone Membres de ou de la zone Classes. Le texte ainsi copi peut tre coll dans une fentre Code. Le bouton Afficher la dfinition est accessible lorsque la classe ou le membre de clas slectionn contient du code rdig. Il entrane laf fichage de la fentre Code corres pondant la slection en cours dans lExplorateur dobjets. Rechercher du texte LExplorateur dobjets of fre un outil permettant de rechercher des chanes de caractres dans les bibliothques de v otre choix. Pour rechercher du te xte dans les bibliothques/ projets, procdez comme suit : 1. Dans la zone Bibliothque/Projet, slectionnez la bibliothque ou le projet dans lesquels vous souhaitez que la recherche seffectue. Si vous ne sa vez dans quelle bibliothque ef fectuer la recherche, slectionnez <T outes bibliothques>.

Chapitre 4

Dcouvrir Visual Basic Editor

99

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


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

ce Astu

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

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

100

Excel et VBA

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

Le rsultat slectionn...

est reflt dans les zones Classe et Membres de...

ainsi que dans la zone Dtails

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

La fentre UserForm
La fentre UserF orm permet de dessiner des botes de dialogue pour v os projets. Dans Visual Basic pour Applications, ces botes de dialogue sont appeles des feuilles on parle aussi de formulaires. Une feuille peut tre trs simple, ou prsenter un grand nombre de fonctionnalits. La Figure 4.14 prsente une feuille cre dans Visual Basic Editor. Le dv eloppement de feuilles est un aspect essentiel de la programmation VBA. Les Chapitres 12 14 sont entirement consacrs ce sujet. Cette section prsente somma irement les possibilits de dveloppement dans la fentre UserForm.

Chapitre 4

Dcouvrir Visual Basic Editor

101

Figure 4.14 Une feuille dveloppe dans Visual Basic Editor.

On peut distinguer deux phases essentielles dans la cration dune interface utilisateur :

le dveloppement visuel de la feuille trait au Chapitre 12 ; lassociation de code aux dif frents lments de la feuille traite aux Chapitres 13 et 14.

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

102

Excel et VBA

Figure 4.15 Les contrles que vous pouvez placer sur une feuille sont les mmes que ceux que vous rencontrez dans les applications Offic .

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

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

Afcher et masquer la fentre UserForm et la bote outils


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

Chapitre 4

Dcouvrir Visual Basic Editor

103

Slectionnez la commande Bote outils du menu Affichage ou : Cliquez sur le bouton Bote outils de la barre doutils Standard de Visual Basic Editor.

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

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

La fentre Code prsente de nombreuses et prcieuses fonctionnalits, destines faciliter le dveloppement de vos projets.

104

Excel et VBA

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

Afcher et masquer la fentre Code


Pour accder au code dun lment constitutif dun projet, ouvrez lExplorateur de projet pz afficher le code. E fectuez ensuite lune des oprations suivantes :

Double-cliquez sur un module de code. Faites un clic droit sur llment v oulu et choisissez la commande Code du menu contextuel. Cliquez sur le bouton Afficher le code de lExplorateur de projet Slectionnez la commande Code du menu Affichage Tapez le raccourci clavier F7.

La fentre Code de llment voulu saffiche

Chapitre 4

Dcouvrir Visual Basic Editor

105

Info

Pour accder au code des contrles dune feuille , double-cliquez dessus ou faites un clic dr oit et c hoisissez la commande Code du menu conte xtuel qui saffi he.

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

Naviguer dans la fentre Code


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

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

Les zones de listes Objet et Procdure La zone de liste Objet rfrence tous les objets contenus dans le module (dans le cas dune feuille, tous les contrles). Pour accder au code dun objet, droulez la zone de liste et slectionnez-en le nom. Le code attach cet objet apparat dans le haut de la fentre Code, le point dinsertion tant plac sur la premire ligne du code en question (v oir Figure 4.20).

106

Excel et VBA

Figure 4.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 peuv ent tre des procdures ou des vnements, selon le type du module. Si la fentre Code est celle dun module de code, la zone de liste Procdure rpertorie toutes les procdures du module en question. La Figure 4.21 prsente la zone de liste Procdure dans la fentre Code du module LivreExcel. Lensemble des procdures du projet y est rfrenc, ces dernires tant spare s par des lignes grises.
Figure 4.21 Utilisez cette zone pour accder rapidement une procdure du module.

Chapitre 4

Dcouvrir Visual Basic Editor

107

pel Rap

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 (v oir Figure 4.22) et la fentre Code affiche la procdure dvnement correspondante. Si loption (Gnral) est s lectionne dans la zone Objet, la zone Procdure rpertorie lensemble des dclarations et des procdures de la feuille. Une procdure dvnement (ou pr ocdure vnementielle) est une pr ocdure attache un vnement spcifique tel quun clic de souris. Ce type de p ocdure sexcute lorsque lvnement est r econnu par le pr ogramme. La cration de procdures dvnement est traite au Chapitre 14.

ition Dfin

Pour accder une procdure spcifique, droulez la zone de liste et slectionnez-en l nom. Le code de la procdure choisie apparat dans le haut de la fentre Code, le point dinsertion tant automatiquement plac sur la premire ligne de code de la procdure.
Figure 4.22 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, v ous pouvez slectionner du te xte laide de la souris ou du cla vier. Nous supposons ici que v ous connaissez les mthodes de slection standard laide de ces deux priphriques. Il e xiste cependant des modes de slection spcifiques la fentre Code de Visual Basic Editor.

Pour slectionner une procdure laide de la souris, placez le pointeur sur la g auche du code de f aon quil prenne la forme dune flche oriente ers la droite et doublecliquez (voir Figure 4.23).

Figure 4.23 Vous pouvez slectionner rapidement une procdure entire.

Vous pouvez aussi vous dplacer ou ef fectuer des slections de blocs de code laide du clavier. Pour atteindre la procdure prcdente, faites le raccourci clavier Ctrl + Pg. Prc. Pour atteindre la procdure suivante, faites le raccourci Ctrl + Pg. Suiv. Pour tendre la slection, utilisez les mmes combinaisons de touches auxquelles v ous ajouterez la touche Maj. La substitution des touc hes fl hes haut et bas aux touc hes Pg. Prc. et Pg . Suiv. dans les combinaisons mentionnes ci-dessus permet datteindr e la premire ligne de code sous la dclar ation de pr ocdure ( Sub, Function ou Property) plutt que la dclaration de procdure elle-mme.

ce Astu

Chapitre 4

Dcouvrir Visual Basic Editor

109

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

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

110

Excel et VBA

6. Cliquez sur le bouton Suivant pour lancer la recherche. Si la recherche aboutit, le texte trouv est affich en surbrillance dans la fentre Code (Si la recherche porte sur le projet entier et si la chane est trouve dans un autre module, la fentre de Code de ce module est ouverte.) Pour rechercher une autre 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. Une pression sur la touche F3 ou la commande Suivant du menu Edition relance la dernire recherche effectue sans ouvrir la bote de dialogue Rechercher.

ce Astu

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

2. Indiquez le texte rechercher et dfinissez ltendue, le sens et les options de recherch . Dans la zone Remplacer par, saisissez le texte de remplacement. 3. Si vous souhaitez effectuer le remplacement sur toutes les occurrences du texte recherch dans la zone de recherche dfinie, cliquez sur Remplacer tout Une bote de dialogue vous indique le nombre de remplacements effectus. 4. Pour visualiser les occurrences du te xte trouv a vant def fectuer le remplacement, cliquez sur le bouton Sui vant pour lancer la recherche. Lorsque le te xte est trouv, il apparat en surbrillance dans la fentre Code. Pour remplacer loccurrence slectionne, cliquez sur le bouton Remplacer . Le te xte est remplac et la recherche se poursuit. Pour poursui vre la recherche sans ef fectuer de remplacement, cliquez sur le bouton Suivant.

Chapitre 4

Dcouvrir Visual Basic Editor

111

Afchage de plusieurs fentres Code Lorsque vous dvelopperez dans Visual Basic Editor , vous serez souv ent amen v ous dplacer entre les fentres Code de diffrents lments de votre projet, voire changer du code dune fentre lautre pour en pargner une nouvelle saisie. Pour passer dune 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 (v oir Figure 4.26) ou Mosaque verticale (v oir Figure 4.27) du menu Fentre, de f aon visualiser simultanment toutes les fentres Code ouvertes.
Figure 4.26 Les fentres Code organises en mosaque horizontale.

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

112

Excel et VBA

Figure 4.27 Les fentres Code organises en mosaque verticale.

2. Lorsque le curseur se transforme en une double flche, aites glisser la barre de 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 v olets autonomes (voir Figure 4.28), vous pouvez modifier la fichage de lun ou lautre des olets laide des barres de dfilement erticales.
Figure 4.28 Le fractionnement de la fentre Code permet daffi her simultanment diffrentes sections de code dun mme module.

Chapitre 4

Dcouvrir Visual Basic Editor

113

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

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

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

114

Excel et VBA

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

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

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

Chapitre 4

Dcouvrir Visual Basic Editor

115

La fentre Proprits
La fentre Proprits permet daccder aux proprits de divers lments dun projet. Vous pouvez y visualiser et modifier les proprits dun classeur ou dune feuille de calcul dune feuille UserF orm, dun contrle, dune classe, dun projet ou dun module. Vous utiliserez la fentre Proprits essentiellement lors du dv eloppement de feuilles pour vos projets. Vous dcouvrirez les pr oprits essentielles des contrles ActiveX que lon place sur les feuilles UserForm et apprendrez les modifier aux Chapit es 13 et 15.

Info

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

116

Excel et VBA

Figure 4.33 La fentre Proprits du projet PERSO.XLS.

Afcher et masquer la fentre Proprits


La fentre Proprits peut tre affiche partir de lExplorateur de projet ou partir dun fentre UserForm. Pour afficher une fentre Proprits, procdez comme suit 1. Dans lExplorateur de projet, slectionnez le module dont v ous souhaitez af ficher le proprits ou, dans la fentre UserF orm, slectionnez le contrle ou la feuille dont vous souhaitez afficher les proprits Lorsque plusieur s contrles sont slectionns sur une feuille , la fentr e Proprits affi he les proprits communes aux contrles slectionns.

Info

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

Naviguer dans la fentre Proprits


Lorsque vous vous trouvez dans la fentre Proprits dune feuille ou dun contrle, une zone de liste droulante permet daccder aux proprits des contrles de la feuille acti ve. Droulez simplement la liste et slectionnez le contrle dont v ous souhaitez af ficher le proprits (voir Figure 4.34).

Chapitre 4

Dcouvrir Visual Basic Editor

117

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

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

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

Figure 4.35 Laffi hage par catgorie permet daccder rapidement aux proprits voulues.

118

Excel et VBA

Les catgories de proprits essentielles sont :

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

Modier une proprit


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

dune chane de caractres ; dune valeur numrique ; dune constante ; dune valeur boolenne.

Pour modifier la aleur dune proprit dans la fentre Proprits, procdez comme suit : 1. Slectionnez cette proprit dans la fentre Proprits. Elle apparat en surbrillance. Appuyez sur la touche Tab pour slectionner la valeur en cours pour cette proprit. 2. Affectez ensuite la v aleur voulue la proprit. La dmarche v arie selon le type de valeur affect la proprit : Si la proprit accepte une chane de caractres ou une v aleur numrique, saisissez directement la valeur souhaite au clavier.

Chapitre 4

Dcouvrir Visual Basic Editor

119

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

ce Astu

Dans le cas des pr oprits 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.

Les barres doutils


Visual Basic Editor contient quatre barres doutils, prsentes dans les figures su vantes.
Figure 4.37 La barre doutils Standard permet daccder aux fonctions les plus communes de Visual Basic Editor.

120

Excel et VBA

Figure 4.38 La barre doutils Edition permet dobtenir de laide, de mettre en forme le texte et de sy dplacer. Figure 4.39 La barre doutils Dbogage permet de tester le comportement dun programme. Figure 4.40 La barre doutils UserForm propose des outils pour organiser les contrles sur une feuille.

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

Afcher, masquer et dplacer une barre doutils


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

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

Chapitre 4

Dcouvrir Visual Basic Editor

121

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 Gnr al, cochez loption Affi her les info-bulles.

La barre doutils Standard


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

Bouton Nom
Afcher Microsoft Excel Insertion

Description
Bascule entre lapplication hte et le document Visual Basic actif (raccourci clavier : Alt + F11). En cliquant sur la che, 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> Couper

Enregistre le document hte, y compris le projet et tous ses composants feuilles et modules (raccourci clavier : Ctrl + S). 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). Copie le texte slectionn dans la fentre Code ou le contrle slectionn sur la feuille active dans le Presse-papiers (raccourci clavier : Ctrl + C). 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).

Copier

Coller

122

Excel et VBA

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

Bouton Nom
Rechercher

Description
Permet de rechercher une chane dans une fentre Code voir la section "La fentre Code", plus haut dans ce chapitre (raccourci clavier : Ctrl + F). Chaque clic sur ce bouton annule la dernire modification effectue (raccourci clavier : Ctrl + Z). Chaque clic sur ce bouton rtablit la dernire action annule. Pour quil soit accessible, il faut quune action ait t annule et quaucune modication nait eu lieu depuis lannulation. 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. 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). Rinitialise le projet. 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. Afche la fentre Explorateur de projet (raccourci clavier : Ctrl + R). Afche la fentre Proprits de lobjet slectionn (raccourci clavier : F4). Afche la fentre Explorateur dobjets (raccourci clavier : F2). Afche la bote outils. Accessible uniquement si une fentre UserForm est active. Ouvre la fentre de lAssistant Ofce, dans laquelle vous tes invit saisir le sujet sur lequel vous souhaitez obtenir de laide (raccourci clavier : F1).

Annuler Rpter

Excuter Sub/UserForm ou Excuter la macro

Arrt

Rinitialiser Mode Cration/Quitter le mode Cration

Explorateur de projet Fentre Proprits Explorateur dobjets Bote outils Assistant Ofce

Chapitre 4

Dcouvrir Visual Basic Editor

123

Paramtrer Visual Basic Editor


Laffichage de Visual Basic Editor peut tre paramtr et personnalis. Testez ces options de faon trouver les paramtrages qui vous conviennent le mieux. Comme la plupart des fentres Windows, les fentres de Visual Basic Editor peuvent tre dplaces en oprant un cliquer -glisser sur leur barre de titre, et redimensionnes en en tirant les bords. Vous pouvez aussi choisir dancrer une ou plusieurs fentres lune des bordures de la fentre de Visual Basic Editor. Une fentre est dite ancre lor squelle est fixe la bo dure dune autre fentre. Une fentr e peut tr e ancre la fentr e de lapplication ou une autr e fentre elle-mme ancre.

ition Dfin

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

124

Excel et VBA

Les fentres pouvant tre ancres sont :


la fentre Excution ; la fentre Variables locales ; la fentre Espions ; la fentre Explorateur de projet ; la fentre Proprits ; la fentre Explorateur dobjets.

Lorsquune fentre est ancre, elle se place automatiquement sur lune des bordures de la fentre de Visual Basic Editor quand vous la dplacez. Si vous souhaitez pouvoir la 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 :

Faites un clic droit dans la fentre de v otre choix. Un menu conte xtuel saffiche, e fonction de la fentre choisie. Ces menus contextuels ont en commun de possder une commande Ancrable (v oir Figure 4.43). La slection de cette commande acti ve ou dsactive lancrage de la fentre, une coche indiquant que la fentre est ancre.

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

Slectionnez la commande Options du menu Outils et placez-v ous sur longlet Ancrage (voir Figure 4.44). Cochez les cases des fentres que v ous souhaitez ancrer et dcocher les cases des fentres dont vous voulez dsactiver lancrage. Cliquez sur OK.
Si laccs aux commandes de Visual Basic Editor ne convient pas votre faon de travailler, vous pouvez c hoisir den personnaliser les menus et les barr es doutils. Vous pouvez ainsi ajouter ou supprimer des commandes aux menus et des boutons

Info

Chapitre 4

Dcouvrir Visual Basic Editor

125

sur les barres doutils. Vous pouvez aussi crer une nouvelle barr e doutils ou un nouveau menu dans lesquels vous placer ez les c ommandes de votr e c hoix. Pour connatre les procdures de personnalisation de menus et de barres doutils, reportezvous au Chapitre 11.
Figure 4.43 La bote de dialogue Options permet de modif er les options dancrage de plusieurs fentres simultanment.

Partie

II

Programmer en Visual Basic


CHAPITRE 5. Dvelopper dans Visual Basic Editor CHAPITRE 6. Variables et constantes CHAPITRE 7. Contrler les programmes VBA CHAPITRE 8. Fonctions Excel et VBA CHAPITRE 9. Manipulation des chanes de caractres CHAPITRE 10. Dbogage et gestion des erreurs CHAPITRE 11. Intgrer des applications VBA dans linterface dExcel

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

Structure des programmes Visual Basic


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

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

Chapitre 5

Dvelopper dans Visual Basic Editor

131

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

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

On qualifie de p ocdure vnementielle ou procdure dvnement une procdure dclenche par un vnement, telle quun clic de souris ou la frappe dune touche clavier, par opposition aux pr ocdures standard dun module de code , indpendantes de tout vnement utilisateur.

132

Excel et VBA

Info

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

Nous v ous conseillons de structurer v os programmes sous forme de petites procdures effectuant chacune un traitement spcifique dans le cadre de otre programme. Le programme principal peut alors consister en une procdure qui appelle les autres 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 alide. Si le nom nest pas valide, cette procdure pourra prendre en char ge la rsolution du problme ou appeler une autre procdure conue dans ce b ut. Les procdures QuelSalaire et CalculPrime sont ensuite appeles af n de renvoyer le salaire et la prime du reprsentant. Enfin, la procdure CalculPaie est appele pour renvoyer la paie du reprsentant, qui est affiche dans une bote de dialogue Les techniques dappels de procdures sont traites en dtail plus loin dans ce chapitre. Cette faon de procder prsente plusieurs avantages :

Les programmes sont plus faciles lire et comprendre. Chaque procdure prenant en charge une tche spcifique du programme, il est plus ais den comprendre le fonc tionnement. En cas de bogue du programme, il est plus f acile disoler la procdure coupable et de corriger le problme. Le code est ainsi rutilisable. Certaines tches sont e xcutes par diffrents programmes. Si la tche a t isole dans une petite procdure, elle peut tre e ploite par diffx rents programmes.

Chapitre 5

Dvelopper dans Visual Basic Editor

133

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

Les instructions
Une procdure est compose dinstructions. Chaque instruction e xcute une tche prcise, qui peut tre vidente ou in visible pour lutilisateur , destine ef fectuer des traitements propres au projet. Une instruction Visual Basic est compose de mots cls du langage, de constantes et de variables. Ces lments peuv ent tre combins pour former une expression. Une expression peut vrifier des donnes ou e fectuer une tche. Par e xemple, Mavar = Workbooks.Count est une instruction. Elle combine la v ariable Mavar, et les mots cls =, Workbooks et Count. Pour affecter la variable Mavar une valeur gale au nombre de classeurs ouv erts, on associe cette v ariable le xpression Workbooks.Count laide de loprateur arithmtique =. (La proprit Workbooks renvoie la collection dobjets Workbooks reprsentant lensemble des classeurs ouv erts ; la proprit Count renvoie le nombre dobjets de la collection spcifie. Un mot cl est un mot ou un symbole r econnu comme lment du langa ge Visual Basic. Il peut sa gir dune fonction, dune pr oprit, dune mthode ou encore dun oprateur arithmtique.
Les constantes sont des lments nomms af fects une valeur qui, contr airement une variable , ne c hange pas dur ant 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 p opres constantes laide de linstruction Const (voir Chapitre 6). Vous pouvez par e xemple dfinir une constante que vous nomme ez TVA et laquelle vous affecterez la valeur 0,196. Chaque fois que vous souhaiter ez utiliser cette valeur dans votre programme, il vous suffi a dutiliser le nom de la constante qui lui est affecte. Ainsi, lexpression :
PrixHorsTaxe * TVA

ition Dfin

pel Rap

sera quivalente
PrixHorsTaxe * 0.196

134

Excel et VBA

pel Rap

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

On distingue trois types dinstructions :

Les instructions de dclaration. Ces instructions sont in visibles pour lutilisateur et servent nommer une variable, une constante ou une procdure. Le nom attrib u un lment dans linstruction de dclaration sera ensuite utilis pour invoquer cet lment tout au long du projet. Une instruction de dclaration peut aussi dterminer le type de llment dclar.
Sub MaProcdure() est un e xemple dinstruction de dclaration, nommant la 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 l type (String, cest--dire une chane de caractres).

Les instructions daffectation. Ces instructions af fectent une v aleur ou une e xpression une v ariable, une constante ou encore une proprit et contiennent donc toujours loprateur =. Lexcution de ce type dinstructions peut tre visible comme invisible pour lutilisateur.
MaVar = 5 et MaVar = Workbooks.Count sont des exemples dinstructions daffectation, attribuant respectivement une valeur et une expression la variable MaVar.

Linstruction Let est linstruction daf fectation de Visual Basic. Ainsi linstruction MaVar = 5 peut aussi tre crite sous la forme Let MaVar = 5. Cependant, cette instruction est facultative et gnralement omise.
ActiveSheet.Range("C1").Font.Name = "Arial" est une instruction daf fectation visible pour lutilisateur puisquelle applique la police Arial la cellule C1 de la feuille Excel active la valeur "Arial" est affecte la proprit Name de lobjet Font de cette cellule.

Les instructions excutables. Ces instructions accomplissent des actions (excution dune mthode, dune fonction). Les instructions de contrle (traites au Chapitre 7) sont aussi considres comme des instructions excutables.
MsgBox "Quel est le nombre de classeurs ouverts?", vbOKOnly & vbInformation, "Bonne question" est une instruction e xcutable entranant laf fichage de l bote de dialogue reprsente la Figure 5.2. L instruction MsgBox est tudie au Chapitre 7.

Chapitre 5

Dvelopper dans Visual Basic Editor

135

Figure 5.2 Les instructions MsgBox sont des instructions excutables.

La procdure suivante illustre lutilisation conjointe des diffrents types dinstructions :


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

Cette procdure af fiche une bote de dialogue indiquant le nombre de classeurs ou dans la session Excel active (voir Figure 5.3).
Figure 5.3 Dans une procdure, les instructions excutables sont les seules instructions visibles pour lutilisateur.

erts

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

Les diffrents types de procdures


Une procdure peut e xcuter une tche visible pour lutilisateur comme ef fectuer des tches invisibles, internes au projet, et qui seront e xploites ultrieurement par dautres procdures. On distingue dif frents types de procdures, en fonction du type de tche quexcute la procdure. Les types essentiels de procdures sont :

les procdures de type Sub;

136

Excel et VBA

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

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

Les instructions Sub et End Sub dterminent le db ut et la fin de la procdure. NomDeLaProcdure correspond au nom attrib u v otre procdure et doit respecter les rgles daffectation de noms de Visual Basic prsentes dans la note suivante. Ce nom est utilis pour invoquer la procdure partir dune autre procdure. Dans le cas dune macro enregistre ou cre partir dExcel, il sagit du nom attribu la macro dans la bote de dialoInstructions correspond aux instructions gue Macro ou Enre gistrer une macro. quexcute la procdure.
ntion Atte

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

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

Private ou Public indique si la procdure est prive ou publique. Une procdure publique peut tre invoque par nimporte quelle procdure du projet, y compris les p rocdures stockes dans dautres modules. Une procdure pri ve ne peut tre invoque qu partir

Chapitre 5

Dvelopper dans Visual Basic Editor

137

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

Dans linstruction Sub suivante :


Sub MaProcdure(arg1, arg2)

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

Tableau 5.1 : Dclaration darguments dans une instruction Sub

Elment

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

Optional

138

Excel et VBA

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

Elment

Description 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 modie. 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 modier. 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 modie. 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. Spcie 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 dni par lutilisateur. Une erreur est gnre si le type de la variable passe par la procdure appelante est incompatible avec le type dclar. Linstruction de dclaration de MaProcdure suivante indique quun argument Arg1 de type String (chane de caractres) est requis : Sub MaProcdure(Arg1 As String) Les diffrents types de donnes ainsi que la cration de types de donnes sont tudis au Chapitre 6. 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")

ByVal ou ByRef

ParamArray

As Type

= ValeurParDfaut

Chapitre 5

Dvelopper dans Visual Basic Editor

139

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 pou les arguments concerns, la procdure doit tre conue pour sexcuter sans faire appel ces ar guments lor squils ne sont pas tr ansmis. Dans le cas contraire, une erreur sera gnre.

Le programme suivant illustre lutilisation du mot cl Static dans une instruction Sub:
Dim MaVar Sub ProcdureAppelante() MaVar = 2 Call ProcdureStatic(MaVar) Call ProcdureStatic(MaVar) Call ProcdureStatic(MaVar) End Sub Static Sub ProcdureStatic(MaVar) Dim MaVarStatique MaVarStatique = MaVarStatique+MaVar MsgBox MaVarStatique End Sub

La procdure ProcdureAppelante in voque trois reprises la procdure ProcdureStatic laide de linstruction Call en lui passant la v ariable MaVar dont la v aleur est 2. A chaque appel, la procdure ProcdureStatic incrmente la v ariable MaVarStatique de la valeur de MaVar et affiche sa aleur dans une bote de dialogue laide de la fonction MsgBox. La procdure appelante reprend alors la main (et invoque nouveau la procdure ProcdureStatic). Ce programme af fiche donc trois reprises une bote de dialogue dont le message es successivement 2, 4, puis 6. En ef fet, la procdure ProcdureStatic tant dclare Static, la v ariable locale MaVarStatique conserv e sa v aleur entre deux appels. Cette valeur est incrmente de 2 chaque excution de la procdure. Une variable est dite locale pour une pr ocdure lor squelle est pr opre la procdure, par opposition une variable publique ou passe par la pr ocdure appelante.

ition Dfin

Si vous supprimez linstruction Static de la dclaration de procdure Static Sub ProcdureStatic, la v ariable MaVarStatique ne conserv era plus sa v aleur entre les dif frents appels de procdures, et le programme affichera trois reprises une bote de dialogue don le message sera toujours 2.

140

Excel et VBA

Le programme suivant illustre le passage dun ar gument par valeur. Les lments ajouts par rapport lexemple prcdent apparaissent en gras :
Dim MaVar Sub ProcdureAppelante() MaVar = 2 Call ProcdureStatic(MaVar) Call ProcdureStatic(MaVar) Call ProcdureStatic(MaVar) End Sub Static Sub ProcdureStatic(ByVal MaVar) Dim MaVarStatique MaVarStatique = MaVarStatique+MaVar MsgBox MaVarStatique MaVar = 100 End Sub

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

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

Chapitre 5

Dvelopper dans Visual Basic Editor

141

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

Linstruction de dclaration Function peut aussi contenir des ar guments facultatifs, selon la syntaxe suivante :
[Private | Public] [Static] Function NomDeLaProcdure ([Arguments]) [As Type] Instructions ... NomDeLaProcdure = Expression End Function

As Type permet de prciser le type de v aleur renvoy par la procdure. Il peut sagir de lun des types de v ariables prsents au Chapitre 6. A df aut dtre prcis, la fonction renverra une valeur de type Variant. Comme nous la vons dj mentionn, il est recommand de prciser cet argument afin de limiter la mmoire empl ye par le programme.

Les mots cls Private et Public indiquent si la procdure est pri ve ou publique. Le mot cl Static indique que les v ariables locales de la procdure sont statiques, cest--dire conservent leur valeur entre les appels. Pour un rappel de ces concepts, reportez-v ous la section prcdente, "Procdures Sub".
Arguments reprsente les ar guments passs la procdure Function par la procdure appelante. La virgule sert de sparateur entre les diffrentes variables transmises.

Dans linstruction Function suivante :


Sub MaFonction(arg1, arg2)

La procdure MaFonction est dclare comme ncessitant les ar guments arg1 et arg2. Autrement dit, lorsque la procdure MaFonction sera appele, la procdure appelante devra lui passer ces ar guments ou une erreur sera gnre. Les appels de procdures et le passage darguments sont tudis dans la section "Appel et sortie dune procdure", plus loin dans ce chapitre.

142

Excel et VBA

Chacun des arguments de Arguments rpond la syntaxe suivante :


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

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

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

La sous-routine MaProcdure dclare la variable Rayon et lui affecte la valeur 10. Elle affi che ensuite une bote de dialogue dont une partie du message (en gras, dans le listing) f ait appel la fonction SurfaceCercle en lui passant largument Rayon prcdemment dfini La fonction SurfaceCercle calcule donc la surf ace du cercle et rend la main la procdure appelante qui affiche la bote de dialogue prsente la Figure 5.4

Chapitre 5

Dvelopper dans Visual Basic Editor

143

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

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

Les procdures Property Get ren voient la v aleur dune proprit qui sera ensuite exploite par dautres procdures. Les procdures Property Let dfinissent la aleur dune proprit. Les procdures Property Set tablissent une rfrence entre un objet et une proprit. Une proprit est un attribut nomm dun objet, dfinissant ses ca actristiques ou son tat. P ar e xemple, la pr oprit Address dun objet Range r envoie ladresse de cet objet (A1, par e xemple). La pr oprit ColorIndex dun objet Font renvoie la couleur de cet objet (une police de caractres).

pel Rap

Procdures Property Get


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

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

144

Excel et VBA

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

ntion Atte

Ce listing est numr ot de faon simplifier la prsentation des di frentes instructions de la procdure RenvoyerCommentaire. La prsence de cette numrotation dans la procdure relle gnrerait videmment une erreur lexcution.

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

Chapitre 5

Dvelopper dans Visual Basic Editor

145

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

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

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

146

Excel et VBA

Procdures Property Let


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

Les instructions Property Let et End Property dterminent le dbut et la fin de la proc dure. NomDeLaProcdure correspond au nom attrib u la procdure et doit respecter les rgles daf fectation de noms de Visual Basic. Ce nom est utilis pour in voquer la procdure partir dune autre procdure.
Instructions correspond aux instructions quexcute la procdure. VarStockage est la variable recevant la valeur passe par la procdure appelante et assimile la valeur affecte la proprit. Comme vous le verrez dans lexemple suivant, cette valeur peut ensuite tre traite par la procdure afin de dterminer la aleur devant tre affecte la proprit.

La procdure Property Let suivante est en quelque sorte la procdure miroir de la 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 af fect la cellule. La chane reprsentant le commentaire dtermine la v aleur 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

A la ligne 1, linstruction Property Let dclare la procdure CouleurDeRemplissage, spcifiant que la gument LaCellule de type Range doit tre pass par la procdure appelante. La variable IndexCouleur est dclare laide de linstruction Dim la ligne 2. Une instruction de contrle Select Case est ensuite utilise pour tester la v aleur de lexpression LaCellule.Comment.Text, qui renvoie le texte de commentaire de la cellule (lignes 3 12). Si la v aleur renvoye est g ale Trs mauvais, Mauvais ou Correc t, une valeur reprsentant un inde x de couleur est af fecte la v ariable IndexCouleur.

Chapitre 5

Dvelopper dans Visual Basic Editor

147

Si le commentaire de la cellule ne correspond aucune de ces v aleurs, IndexCouleur se voit affecter la constante xlColorIndexNone. Enfin, linstruction de la ligne 13 affecte la valeur de IndexCouleur la proprit ColorIndex de lobjet Interior de la cellule, cest-dire applique une couleur de remplissage la cellule Pour appeler une procdure Property Let, utilisez une instruction daffectation, assimilable laf fectation dune proprit ( Proprit = Valeur). Le nom de la procdure plac gauche de linstruction daf fectation sera assimil une e xpression ren voyant une proprit. Largument requis par la procdure Property Let place droite de le xpression sera assimil la valeur affecte la proprit. Considrez lexemple suivant :
Sub DefinirRemplissage() Dim LaCellule As Range For Each LaCellule In Selection CouleurDeRemplissage = LaCellule Next LaCellule End Sub Property Let CouleurDeRemplissage(LaCellule As Range) Dim IndexCouleur As Integer Select Case LaCellule.Comment.Text Case "Trs mauvais" IndexCouleur = 3 Index de la couleur Rouge Case "Mauvais" IndexCouleur = 6 Index de la couleur Jaune Case "Correct" IndexCouleur = 5 Index de la couleur Bleu Case Else IndexCouleur = xlColorIndexNone End Select LaCellule.Interior.ColorIndex = IndexCouleur End Property

Dans la sous-routine DefinirRemplissage, linstruction daffectation CouleurDeRemfectation de proprit. Couleurplissage = LaCellule est assimile une af DeRemplissage est assimil une e xpression renvoyant une proprit et LaCellule, la valeur affecte cette proprit. La procdure CouleurDeRemplissage est donc appele par cette instruction. Elle se xcute et interroge la v aleur de la proprit Text de lobjet Comment de la v ariable LaCellule. La v ariable IndexCouleur reoit une v aleur, fonction du rsultat retourn. Cette v aleur est ensuite af fecte la proprit 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.

148

Excel et VBA

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

Cette syntaxe est la mme que celle utilise pour les ar guments des instructions de 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 v aleur ren voy par la procdure. Il peut sagir de lun des types de v ariables prsents au Chapitre 6.

Des projets bien structurs


Contrairement aux feuilles qui sont automatiquement stockes dans le dossier UserF orm de votre projet, il v ous incombe de dterminer lor ganisation des modules de code et des modules de classe. Vous pouvez ainsi structurer les procdures constituant votre projet, de faon y accder facilement. Les modules sont en quelque sorte les dossiers dans lesquels v ous rangez les papiers qui constituent vos applications VBA. Une bonne organisation vous assurera de retrouver 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 se gment sera plus f acile grer , et le dbogage considrablement simplifi

Ajouter un module
Vous serez probablement amen dv elopper des applications VBA distinctes au sein dun mme projet. Il est alors important de placer les procdures constituant une application au sein de mmes modules. Si v ous stockez toutes les procdures dun projet au sein

Chapitre 5

Dvelopper dans Visual Basic Editor

149

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

150

Excel et VBA

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

3. Si vous souhaitez supprimer dfinit vement le module, choisissez Non. Le module est supprim. 4. Pour effectuer une sauvegarde du module afin de pou oir le rcuprer en cas de ncessit, choisissez Oui. 5. La bote de dialogue Exporter un fichier sa fiche ( oir Figure 5.8). Le type du fichie export varie selon llment supprim : Les modules standard ou modules de code sont e xports sous la forme de fichier Basic portant lextension .bas. Les modules de classe sont e lextension .cls. xports sous la forme de fichiers Classe portan xtension

Les feuilles sont e xportes sous la forme de fichiers Feuille portant l .frm.

6. Indiquez le rpertoire et le nom denregistrement, puis cliquez sur le bouton Enregistrer. Pour exporter un module sans le supprimer, slectionnez la commande Expor ter un fi hier du menu Fichier. Vous pourrez ensuite limporter dans nimporte quel projet en choisissant Fichier, Importer un fi hier.

Info

Chapitre 5

Dvelopper dans Visual Basic Editor

151

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

Crer une procdure


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

Ecrire linstruction de dclaration


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

Les pr ocdures ne peuvent tr e imbriques. Veillez donc ce que le point dinsertion se trouve lextrieur de toute procdure.

2. Saisissez les v entuels mots cls prcisant la porte de la procdure ( Public ou Private) et le comportement des variables locales (Static). (Etape facultative.) 3. Tapez linstruction de dclaration correspondant au type de procdure que v ous souhaitez crer, soit Sub, Function, Property Get, Property Let ou Property Set. 4. Saisissez le nom de la procdure. 5. Indiquez ensuite les v entuels ar guments de la procdure entre parenthses. (Etape facultative.) 6. Tapez sur la touche Entre afin de placer un retour chariot

152

Excel et VBA

Visual Basic Editor ajoute automatiquement linstruction End correspondant au type de procdure ajout ( End Sub, End Function ou End Property). Si vous navez indiqu aucun ar gument pour la procdure, une parenthse ouvrante, immdiatement sui vie dune parenthse fermante, est automatiquement ajoute derrire le nom de la procdure (voir Figure 5.9). 7. Saisissez le code de votre procdure entre ces instructions dencadrement.
Figure 5.9 Saisissez linstruction de dclaration de la procdure, et Visual Basic Editor insrera linstruction End correspondante.
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 pr ocdure en ajoutant, par e xemple, le mot cl Static de vant linstruction de dclaration de faon dfinir les variables locales comme statiques. our plus de prcisions, reportez-vous au Chapitre 6.

La bote de dialogue Ajouter une procdure


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

Info

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.

Chapitre 5

Dvelopper dans Visual Basic Editor

153

Figure 5.10 La bote de dialogue Ajouter une procdure.

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

Info

Lorsque vous slectionnez le type Property, les instructions dencadr ement dune procdure Property Get et dune procdure Property Let sont insres.

154

Excel et VBA

La notion de porte
La porte dune procdure est essentielle puisquelle en dtermine laccessibilit pour les autres procdures du projet. Les procdures peuv ent tre publiques ou prives. Une procdure publique est visible pour nimporte quelle procdure du projet, quel que soit son module de stockage. Une procdure pri ve est in visible pour les procdures autres que celles de son module. Ainsi, une procdure de vant tre appele par une procdure appelante situe dans un autre module doit tre publique. Si, au contraire, v ous souhaitez interdire lappel dune procdure par une procdure appelante situe dans un autre module, v ous de vez la dclarer prive. La porte dune procdure est dtermine dans son instruction de dclaration. Le mot cl Public indique une procdure de porte publique, tandis que le mot cl Private indique une procdure de porte prive. Par dfaut, les procdures des modules de code et des modules de classe sont publiques. Il nest donc pas utile de placer le mot cl Public devant une instruction de dclaration de procdure pour la rendre publique. P ar contre, si v ous souhaitez dclarer une procdure prive, vous devez placer le mot cl Private devant linstruction de dclaration de cette procdure. Les procdures vnementielles sont, par dfinition, pr ves. Elles ne peuvent en effet pas tre appeles par une autre procdure, puisque seul lvnement spcifi peut les dclen cher. Comme vous le verrez au Chapitre 14, lorsque vous crez des procdures vnementielles, 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

Chapitre 5

Dvelopper dans Visual Basic Editor

155

Ecriture et mise en forme du code


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

Caractre de continuit de ligne


Une instruction peut cependant tre crite sur plusieurs lignes de code en plaant le caractre de continuit de ligne le trait de soulignement (_) afin dindiquer que linstruc tion se poursuit sur la ligne sui vante. Le caractre de continuit de ligne f acilite dans certains cas la lecture du code, en permettant de lire une instruction longue sans avoir se dplacer dans la fentre Code laide de la barre de dfilement horizontale Ainsi, la procdure suivante est compose des instructions de dclaration Sub et End Sub et dune seule et mme instruction excutable MsgBox rpartie sur plusieurs lignes laide du caractre de continuit de ligne :
Sub MaProcdure() MsgBox ("Cette instruction affiche une bote de dialogue " _ & "dans laquelle est affich ce trs long message, que nous avons " _ & "rparti sur quatre lignes laide du caractre de continuit " _ & "de ligne") End Sub

Notez que le message af fich par la fonction MsgBox a t spar en plusieurs chanes de caractres concatnes laide de loprateur &. Le caractre de continuit de ligne ne peut en effet tre utilis quentre des lments distincts dune instruction. Autrement dit, une mme chane de caractres, une e xpression, un mot cl ou encore une constante ne peuvent tre crits sur plusieurs lignes.

Les commentaires
Un commentaire est une indication destine f aciliter la lecture du code en dcri vant les tches quexcute une instruction, la date de cration dune procdure, etc. Linsertion de commentaires dans le te xte dune procdure peut se rvler utile, particulirement si elle comprend un grand nombre dinstructions dont vous souhaitez reconnatre rapidement les fonctions respectives. Si v ous souhaitez insrer des commentaires dans le te xte dune procdure, il f aut bien videmment que ceux-ci soient reconnus en tant que tels, et non en tant quinstructions, ce qui gnrerait une erreur lors de lexcution de la procdure.

156

Excel et VBA

Visual Basic considre le te xte en tant que commentaire et lignore lors de le dune procdure sil est prcd :

xcution

dune apostrophe () ; du mot cl REM.

Par dfaut, les commentaires apparaissent en v ert dans Visual Basic Editor. Pour modifie la couleur daf fichage des commentaires, reportez- ous la section "Un code tout en couleur", plus loin dans ce chapitre. Utiliser lapostrophe Lutilisation de lapostrophe pour marquer les commentaires permet de placer ceux-ci nimporte quel endroit du te xte. Vous pouvez ainsi insrer un commentaire sur la mme ligne que linstruction concerne en plaant autant despaces que v ous le souhaitez entre celle-ci et lapostrophe. Lapostrophe se rvlera particulirement intressante et ef ficac pour les instructions dont la syntax e est courte, puisquelle permettra daligner les dif frents commentaires. A la Figure 5.12, lapostrophe a t utilise comme marqueur de commentaires dans la macro GrasItalique du Chapitre 2.
Figure 5.12 Lapostrophe permet daligner les commentaires.

Utiliser REM La syntaxe REM joue le mme rle que lapostrophe. Cependant, contrairement celle-ci, le marqueur REM ne peut tre accol linstruction quil commente mais doit toujours tre plac en db ut de ligne. Il sera donc utilis de prfrence pour commenter des blocs dinstructions plutt quune seule instruction. La Figure 5.13 illustre lutilisation de REM.
ce Astu

Vous pouvez utiliser des car actres facilement discernables pour fair e ressowwwwrtir les commentair es. Vous pouvez, par e xemple, prsenter vos commentair es de la faon suivante : ******************************* ****Ceci est un commentaire**** *******************************

Chapitre 5

Dvelopper dans Visual Basic Editor

157

Figure 5.13 Linstruction REM ne peut tre place quen dbut de ligne.

Commenter un bloc dinstructions Lorsque vous testerez le comportement des applications VBA, il se rvlera parfois ncessaire de placer en commentaire un bloc dinstructions que v ous ne souhaitez pas v oir sexcuter lors de cette phase. Le bouton Commenter bloc de la barre doutils Edition permet de commenter toutes les instructions slectionnes dans la fentre Code acti ve, en plaant une apostrophe devant chaque ligne de la slection. Pour ractiver un bloc dinstructions commentes, slectionnez les instructions en question et cliquez sur le bouton Ne pas commenter de la barre doutils Edition. Toutes les apostrophes de dbut de ligne du bloc dinstructions sont supprimes. Lorsque vous enr egistrez une macr o dans lapplication hte , des lignes de commentaires indiquant la date denr egistrement de la macr o sont places derrire linstruction de dclaration de la procdure.

Info

Mise en forme du code


La mise en forme du code consiste appliquer des retraits de ligne v ariables aux instructions, et effectuer dventuels sauts de ligne entre les blocs dinstruction afin damliore la lisibilit et de faciliter linterprtation du code. On applique en gnral un mme retrait aux instructions de mme niveau, cest--dire sexcutant un mme niveau dans la 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 ( oir Figure 5.14).

158

Excel et VBA

Figure 5.14 Utilisez les retraits de ligne pour amliorer la lisibilit de votre code.

ition Dfin

Des instructions sont dites imbriques lor sque leur e xcution sef fectue lintrieur dun autre bloc dinstructions. Vous pouvez, par exemple, crer une instruction conditionnelle qui vrifie quune pl ge de cellules dune feuille de classeur contient des valeurs numriques, et y imbriquer une autr e structure conditionnelle qui effectuera des tches dtermines. Les structures de contrle et leur imbrication sont tudies au Chapitre 7.

Pour appliquer des retraits de ligne, v ous pouvez placer indif fremment des espaces ou des tabulations en dbut de ligne. Lditeur peut aussi tre paramtr de faon que, lorsquun retrait de ligne est appliqu, le mme retrait soit appliqu la ligne suivante : 1. Choisissez la commande Options du menu Outils et slectionner longlet Editeur de la bote de dialogue Options. 2. Cochez la case Retrait automatique, puis dfinissez une aleur de retrait comprise entre 1 et 32 dans la zone Retrait de la tab ulation. Cette v aleur correspond au nombre despaces qui seront appliqus lors de la frappe de la touche Tabulation. 3. Cliquez sur OK pour valider les paramtres dfinis Pour augmenter ou diminuer simultanment le retrait de ligne de plusieurs instructions, slectionnez celles-ci, puis cliquez sur le bouton Retrait ou sur le bouton Retrait ngatif de la barre doutils Edition. La v aleur du retrait appliqu correspond la v aleur dfinie pou le retrait de tabulation.

Un code tout en couleur


Toujours dans loptique de faciliter linterprtation du code, les lments constitutifs dune procdure sont affichs dans di frentes couleurs, chaque couleur identifiant une catgori spcifique du lan age. P ar e xemple, les commentaires sont af fichs par d aut en v ert, tandis que les mots cls du langage apparaissent en bleu et que les erreurs de syntaxe sont affiches en rouge ( oir Figure 5.15).

Chapitre 5

Dvelopper dans Visual Basic Editor

159

Figure 5.15 Les couleurs dterminent les catgories de texte et mettent en valeur les erreurs de syntaxe.

Pour dfinir os propres paramtres daf fichage du t xte dans la fentre Code, procdez comme suit : 1. Choisissez la commande Options du menu Outils, puis acti vez longlet F ormat de lditeur de la bote de dialogue qui saffiche ( oir Figure 5.16).
Figure 5.16 Longlet Format de lditeur permet de personnaliser laffi hage du code.

2. Dans la zone Couleur de code, slectionnez la catgorie dont v ous souhaitez modifie les paramtres daf fichage. Dterminez ensuite les options da fichage de otre choix dans les zone de liste droulantes suivantes : Premier plan. Dfinit la couleur de premier plan. Lorsque le t xte nest pas slectionn, il sagit de la couleur des caractres. Arrire-plan. Dtermine la couleur darrire-plan. Indicateurs. Dfinit la couleur des indicateurs apparaissant en ma catgories du langage affichant ce type dindicateu . ge, pour les

160

Excel et VBA

3. Modifiez entuellement la police daf fichage du code, en slectionnant la police d caractres de votre choix dans la zone de liste droulante Police et en dterminant un corps de caractres dans la zone Taille. 4. Pour masquer la barre des indicateurs en marge, dcochez la case correspondante. Vous gagnerez de lespace pour afficher le code, mais les indicateurs en ma ge ne seront plus affichs 5. Cliquez sur OK pour valider les paramtres daffichage du code dfini Les par amtres daf fi hage du code tels quils sont dfinis par dfaut dan Visual Basic Editor assurent une lecture confortable lcran. Si vous souhaitez cependant per sonnaliser les par amtres daf fi hage du code , veillez conserver cette qualit de lecture.

eil Cons

Dplacer une procdure


Si vous tes un adepte des grands mnages larri ve du printemps, il v ous arrivera de souhaiter mettre de lordre dans vos projets VBA. Vous serez alors probablement amen dplacer des procdures dun module un autre, afin de structurer de aon cohrente vos projets. Pour dplacer une procdure vers un autre module, utilisez la technique du glisserdplacer : 1. Ouvrez les fentres Code concernes et af fichez-les simultanment laide de commandes Mosaque horizontale ou Mosaque verticale du menu Fentre. 2. Slectionnez la procdure que vous souhaitez dplacer. 3. Cliquez sur le te xte ainsi slectionn et, tout en maintenant le bouton de la souris enfonc, dplacez le curseur v ers la fentre Code v oulue. Une barre v erticale grise indique o la procdure slectionne sera dplace. 4. Relchez le bouton de la souris. Sil est impossible def fectuer un glisser-dplacer dans la fentre Code, slectionnez Outils, Options et cochez la case Glisser-dplacer pour ldition de texte de longlet Editeur.
Noubliez pas que lEnr egistreur de macr o peut rduir e de faon considr able le travail dcriture de code. Nhsitez pas enregistrer les tches qui peuvent ltre dans une macr o. Ajoutez ensuite les instructions Visual Basic qui ne peuvent tr e enregistres dans la fentre Code de la macro.

Info

eil Cons

Chapitre 5

Dvelopper dans Visual Basic Editor

161

Si vous de vez ajouter des instructions une macr o, vous pouvez enr egistrer les commandes correspondantes dans une nouvelle macr o, puis coller le code ainsi gnr lemplacement voulu.

Appel et sortie dune procdure


La di vision dun programme en plusieurs modules ef fectuant des tches prcises en amliore la lisibilit et f acilite les v entuels dbog ages. Pour e xcuter le programme, lutilisateur excute une procdure. Celle-ci effectue alors les tches pour lesquelles elle a t dfinie et peut appeler une autre procdure qui prendra en cha ge le xcution dautres tches. Elle pourra elle-mme appeler dautres procdures, et ainsi de suite. Lorsquune procdure en appelle une autre, cette dernire se xcute, puis la procdure appelante reprend la main et se poursuit avec linstruction qui suit linstruction dappel.

Appel dune procdure Sub


Appeler une procdure consiste demander une procdure de sexcuter partir dune autre procdure. La procdure appele est excute, puis la procdure appelante reprend Sub, utilisez le mot cl Call, selon la la main. Pour appeler une procdure de type syntaxe suivante :
Call NomProcdure

o NomProcdure est le nom de la procdure appeler. Une instruction contenant simplement le nom dune pr ocdure suffit appele cette dernire. Lomission du mot cl Call est cependant dconseille , car le code y perd en lisibilit.

eil Cons

Considrez lexemple suivant :


Sub AppelsDeProcdures() MsgBox "1er message de la procdure 1" Call Procdure2 MsgBox "2e message de la procdure 1" End Sub Sub Procdure2() MsgBox "1er message de la procdure 2" Call Procdure3 MsgBox "2e message de la procdure 2" End Sub

162

Excel et VBA

Sub Procdure3() MsgBox "1er message de la procdure 3" MsgBox "2e message de la procdure 3" End Sub

Lexcution de la procdure messages suivants :


AppelsDeProcdures entrane laf fichage successif de

1er message de la procdure 1 1er message de la procdure 2 1er message de la procdure 3 2e message de la procdure 3 2e message de la procdure 2 2e message de la procdure 1

La premire instruction de la procdure AppelsDeProcdures af fiche un message. L procdure Procdure2 est ensuite appele laide de linstruction Call. Elle af fiche u message, puis appelle son tour la procdure Procdure3. Celle-ci se xcute et af fich conscutivement deux messages. Elle se termine alors, et la procdure appelante, Procdure2, reprend la main. Elle se poursuit a vec linstruction place immdiatement sous lappel et affiche de nou eau un message. Elle se termine son tour et rend la main la procdure qui la appele, AppelsDeProcdures, qui af fiche un ultime message et s termine.
ntion Atte

Pour appeler une pr ocdure, celle-ci doit tr e visible pour la pr ocdure appelante. P our plus dinformations, r eportez-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 ren voyer une valeur vous pouvez y placer des instructions effectuant des tches prcises dans un document, mais il est prfrable de rserv er ces oprations aux procdures Sub. Pour appeler une procdure Function ou Property, il suf fit de placer le nom de la procdure dans un expression lemplacement o une v aleur est attendue. La procdure Property ou Function se xcute alors et se v oit af fecter une v aleur qui se substitue son appel dans la procdure appelante. Pour des exemples dappels de ce type de procdures, reportez-vous aux sections "Procdures Function" et "Procdures Property", plus haut dans ce chapitre.

Chapitre 5

Dvelopper dans Visual Basic Editor

163

Passage darguments
Lorsquune procdure est appele, il est souvent ncessaire de lui passer des valeurs issues de la procdure appelante. La procdure appele e xploite alors les v aleurs qui lui sont transmises et peut son tour passer des v aleurs une autre procdure. Les ar guments que peut recevoir une procdure dune procdure appelante doi vent apparatre entre parenthse s dans linstruction de dclaration de la procdure. Ces ar guments peuvent tre facultatifs ou obligatoires, de type dfini ou non Largument pass la procdure appele peut tre une v aleur ou toute e xpression renvoyant une valeur accepte par largument, cest--dire dun mme type de donnes les types de donnes sont tudis au Chapitre 6. Pour une re vue dtaille de la syntax e de dclaration des ar guments dune procdure, reportez-vous au Tableau 5.1.

Passage darguments par ordre dapparition


Pour passer des arguments une procdure, vous pouvez faire apparatre les valeurs passer entre parenthses dans linstruction dappel, en sparant chaque ar gument transmis par une virgule et en respectant lordre dapparition des ar guments dans la dclaration de la 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 se xcuter correctement sans que ces arguments lui soient passs par la procdure appelante. Pour ignorer un argument lors dun appel de procdures, placez deux vir gules conscutives dans linstruction dappel, correspondant lemplacement de lar gument dans linstruction de dclaration de la procdure appele. Par exemple, linstruction utilise pour passer les arguments Arg1 et Arg3 la procdure MaProcdure sera :
Call MaProcdure(ValArg1, , ValArg3)

Lorsque vous ignorez un argument, veillez ne pas oublier de placer une vir gule pour cet argument dans linstruction dappel de procdure. Un tel oubli gnrerait un dcalage dans le passage de valeur la procdure appele. Linstruction suivante :
Call MaProcdure(ValArg1, ValArg3)

164

Excel et VBA

passe respectivement les v aleurs ValArg1 et ValArg3 aux ar guments Arg1 et Arg2 de la procdure MaProcdure.
Pour vrifier si des a guments facultatifs ont t omis lor s de lappel de la pr ocdure, utilisez la fonction IsMissing selon la syntaxe suivante :
IsMissing(NomArgument)

eil Cons

La valeur True est renvoye si aucune valeur corr espondant largument na t passe la procdure ; False dans le cas contraire.
ntion Atte

La fonction IsMissing fonctionne avec des valeur s de type Variant. Si vous testez un ar gument dun autr e type , IsMissing renverra toujour s False, que largument ait t pass ou non.

Arguments nomms
Le passage dar guments une procdure selon leur ordre dapparition dans linstruction de dclaration de la procdure appele est parfois prilleux. En particulier lorsque des arguments facultatifs ne sont pas passs par la procdure appelante ; une simple vir gule oublie dans linstruction dappel peut alors gnrer une erreur du programme ou, pire, des rsultats errons dont il sera difficile de dtecter la source Lutilisation des arguments nomms permet dviter de tels problmes, en nommant la valeur passe la procdure afin dviter toute ambigut. Les aguments nomms sont des arguments dont le nom est reconnu par le programme. Lorsque v ous dclarez une procdure, les ar guments qui lui sont af fects deviennent des ar guments nomms. Au lieu de passer les ar guments selon leur ordre dapparition, v ous pouvez affecter des v aleurs aux arguments nomms, dans lordre de v otre choix, en mentionnant le nom de lar gument dans linstruction dappel, selon la syntaxe suivante :
Call NomProcdure (ArgNomm:= valeur, AutreArgNomm:= valeur)

o NomProcdure est le nom de la procdure appele et valeur, les v aleurs affectes aux arguments nomms. Dans lexemple suivant, la procdure PassageArgumentsNomms appelle MaProcdure et lui passe les arguments nomms NomFichier et Propritaire:
Sub PassageArgumentsNomms() Call MaProcdure(Propritaire: =ActiveWorkbook.BuiltinDocumentProperties(3), _ NomFichier:=ActiveWorkbook.Name) End Sub Sub MaProcdure(NomFichier As String, Propritaire As String) MsgBox "Lauteur du classeur " & NomFichier & " est " & _ Propritaire End Sub

Chapitre 5

Dvelopper dans Visual Basic Editor

165

La procdure MaProcdure accepte les ar guments NomFichier et Propritaire, tous deux de type String (chane de caractres). La procdure PassageArgumentsNomms lui passe ces arguments, sans tenir compte de leur ordre dapparition, mais en utilisant leurs noms darguments nomms. L argument Propritaire reoit pour v aleur la chane ren voye par lexpression ActiveWorkbook.BuiltinDocumentProperties(3). La proprit BuiltinDocumentProperties ren voie une collection DocumentProperties qui reprsente toutes les proprits de document prdfinies. index 3 permet de ne ren voyer que le troisime membre de la collection, en loccurrence le nom de lauteur . NomFichier se voit affecter la chane retourne par le xpression ActiveWorkbook.Name qui ren voie le nom du classeur actif. Ces arguments sont exploits par la procdure appele pour af ficher la bote de dialo gue reprsente la Figure 5.17.
Figure 5.17 Utilisez les noms des arguments nomms pour passer des informations une procdure dans un ordre alatoire.

Info

Les arguments nomms ne sont pas une spcificit des p ocdures. La plupart des fonctions intgres de Visual Basic intgrent des arguments nomms.

Sortie dune procdure


Il peut tre utile de quitter une procdure a vant la fin de son xcution. Pour quitter une procdure avant la fin de son xcution, utilisez le mot cl Exit suivi du mot cl dterminant le type de la procdure :

Exit Sub entrane la sortie dune procdure de type Sub. Exit Property entrane la sortie dune procdure de type Property. Exit Function entrane la sortie dune procdure de type Function.

Lorsquune sortie de procdure est pro voque par le mot cl Exit, le programme se poursuit avec linstruction suivant immdiatement celle qui a appel la procdure quitte. Dans le xemple suivant, une bote de dialogue est af fiche laide de la fonctio MsgBox, afin de demander lutilisateur sil souhaite xcuter de nouv eau le programme.
Sub MonProgramme() Instructions Call AutreProcdure Instructions

166

Excel et VBA

Recommencer = MsgBox "Recommencer lopration?", vbYesNo+vbQuestion If Recommencer = vbYes Then Call MonProgramme Else Exit Sub End If End Sub

La procdure MonProgramme e xcute des instructions, puis appelle une autre procdure. Elle reprend ensuite la main et e xcute une autre srie dinstructions. Une bote de dialogue est alors af fiche, proposant lutilisateur de ritrer lopration. Une structure d contrle If...End If est utilise pour dterminer le comportement du programme, en fonction de la rponse de lutilisateur . Sil choisit le bouton Oui, la procdure sappelle elle-mme et se xcute de nouv eau ; sil choisit Non, une instruction Exit entrane la sortie de la procdure et le programme se termine. Les structures de contrle et les fonctions MsgBox et InputBox sont tudies au Chapitre 7.

Info

Sortie dun programme


Deux instructions permettent dinterrompre lexcution dun programme : End et Stop. Une instruction End met fin l xcution dun programme et libre lensemble des ressources mmoire quil utilise. Les v ariables perdent leur v aleur, les feuilles UserF orm sont dchar ges, et les v entuels classeurs ouv erts par le programme laide de la mthode Open sont ferms. Si vous votre programme utilise des v ariables objet ou char ge des feuilles UserF orm, linstruction End permet de rinitialiser lensemble des v aleurs, vous prservant ainsi dventuels problmes de mmoire. Dautre part, si le programme est e xcut nouveau lors de la session Excel en cours, toutes les v aleurs seront rinitialises comme lors de la premire excution. Si vous ne mettez pas fin au programme par un instruction End et si v ous ne librez pas les ressources utilises par le programme par des instructions appropries, les valeurs telles que les donnes entres dans une feuille UserForm restent char ges en mmoire et celles-ci saf ficheront vec les dernires valeurs entres par lutilisateur si elles sont nouv eau affiches au cours de la sessio Excel. Linstruction Stop est utilise dans le cadre du dbogage (voir Chapitre 10) et de lanalyse des programmes VBA afin de placer l xcution dun programme en mode Arrt. Lorsquun programme atteint une instruction Stop, il sinterrompt et Visual Basic Editor Stop qui apparat en souvre sur la fentre Code du module contenant linstruction surbrillance. Les ressources mmoire ne sont pas libres et les v ariables conservent leurs

Chapitre 5

Dvelopper dans Visual Basic Editor

167

valeurs. Vous pouvez poursuivre lexcution pas pas, crire des instructions dans la fentre Excution afin d aluer ou de tester v otre programme ou encore poursui vre le xcution du programme. Les outils et les techniques de dbog age des programmes VBA constituent le sujet du Chapitre 10.

Excuter du code
Pour excuter le code partir de Visual Basic Editor, placez le curseur dans la procdure que vous souhaitez excuter, puis cliquez sur le bouton Excuter de la barre doutils Standard, ou choisissez la commande Excuter Sub/UserF orm du menu Excution, ou, enfin appuyez sur la touche F5. Seules les procdures Sub ne ncessitant pas dar guments sont accessibles par la bote de dialogue Macro dExcel. Pour e xcuter une procdure Sub partir de lapplication hte, choisissez Outils, Macro, Macros. Dans la bote de dialogue Macros, slectionnez la procdure excuter, puis cliquez sur le bouton Excuter. Macro or not macr o ? Les macros sont des pr ocdures de type Sub pouvant tr e 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.

ition Dfin

Vous pouvez aussi af fecter un bouton de barre doutils ou un menu de commande une procdure Sub. Lactivation de ce bouton ou de ce menu excute alors la procdure. Pour plus de prcisions, reportez-vous au Chapitre 11. Si lexcution dun programme gnre une erreur, reportez-vous au Chapitre 10.

Info

Aide lcriture de code


Visual Basic Editor met v otre disposition des outils daide lcriture de code dans Visual Basic Editor . Pour acti ver ou dsacti ver ces outils, choisissez la commande Options du menu Outils et acti vez longlet Editeur . Cochez ou dcochez ensuite les options de la zone P aramtres du code (v oir Figure 5.18). Si v ous db utez dans la programmation en VBA, activez les options daide lcriture de code. Ils v ous accompagneront dans votre apprentissage.

168

Excel et VBA

Figure 5.18 Visual Basic Editor propose des outils daide lcriture de code.

Vrication automatique de la syntaxe


Loption de vrification automatique de la synta e entrane la vrification automatique d la validit de chaque ligne de code saisie. Chaque fois que v ous frappez la touche Entre ou que vous changez de ligne, la ligne en cours est vrifie. Si une erreur est dtecte, u message dcrivant lerreur de syntax e est af fich, et linstruction non alide apparat en rouge (voir Figure 5.19).
Figure 5.19 Vous tes prvenu chaque fois quune erreur est dtecte.

Vous pouv ez alors cliquer sur le bouton OK et corriger lerreur si elle v ous apparat vidente, ou choisir le bouton Aide afin da ficher la rubrique daide associe lerreu repre. Celle-ci vous prsente les sources probables de lerreur et v ous propose des solutions adaptes (voir Figure 5.20). Ds que vous entrez une modification dans linstructio incrimine, celle-ci retrouv e sa couleur normale, que lerreur soit ou non corrige. Si lerreur de syntaxe nest pas rsolue, le message saffichera de nou eau lorsque vous changerez de ligne.

Chapitre 5

Dvelopper dans Visual Basic Editor

169

Figure 5.20 Si vous ne parvenez pas dceler lorigine de lerreur, activez la rubrique daide Visual Basic.

Complment automatique des instructions


Loption Complment automatique des instructions affiche une liste alphabtique de mot cls possibles chaque fois que lattente dun complment est reconnue lors de lcriture de code. Cest par e xemple le cas lorsque v ous saisissez un nom de proprit appelant un objet, directement suivi dun point. Visual Basic Editor reconnat alors quun membre de lobjet (proprit ou mthode) est attendu et en affiche la liste ( oir Figure 5.21).
Figure 5.21 Loption de complment automatique des instructions affi he la liste des mots cls possibles.

170

Excel et VBA

Vous pouvez alors slectionner lun des lments de la liste laide de la souris ou des touches flches puis alider ce choix par la touche Espace, ou continuer saisir v otre code, sans tenir compte de la liste affiche

Info express automatique


Chaque fois quune fonction intgre de Visual Basic ou quune procdure Function du module est reconnue, loption Info e xpress automatique en af fiche la synta e dtaille, dans un cadre situ sous linstruction saisie (voir Figure 5.22).
Figure 5.22 Loption dinfo express automatique affi he la syntaxe des fonctions au cours de la saisie.

ce Astu

Les options daide lcritur e de code dans Visual Basic Editor peuvent aussi tre actives par la barre doutils Edition.

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

172

Excel et VBA

Les variables sont un lment essentiel de la programmation. Elles permettent de stock er les informations de v otre choix tout moment de le xcution dun programme et de les rexploiter nimporte quel autre moment. Les v ariables sont un lieu de stockage que vous dterminez. Vous pouvez, par e xemple, stocker dans une v ariable une v aleur reprsentant le nombre de classeurs ouv erts, le nom du fichie , la v aleur ou ladresse dune cellule, les informations entres par lutilisateur dans une feuille VBA, etc.

Dclarer une variable


Pour crer une v ariable, v ous de vez la dclarer , cest--dire lui af fecter un nom quil suffira par la suite de rutiliser pour xploiter la valeur qui y est stocke. La dclaration de variables dans un programme VBA peut tre implicite ou e xplicite. Autrement dit, les programmes VBA peuv ent reconnatre lutilisation dune nouv elle v ariable sans que celle-ci soit pralablement cre dans une instruction de dclaration. Vous pouvez aussi paramtrer Visual Basic Editor afin d xiger la dclaration e xplicite des v ariables avant leur utilisation.

Dclaration implicite
Si la dclaration explicite des variables nest pas requise, le simple f ait de faire apparatre un mot non reconnu par le programme dans une instruction daf fectation suffira pour qu ce nom soit considr comme une variable de type Variant par le programme les types de variables sont prsents plus loin dans ce chapitre. Cest le cas dans lexemple suivant :
Sub DclarImpliciteDeVariables() mavar = Range("D7").Value MsgBox "La somme totale des transactions est " & mavar, _ vbInformation+vbOKOnly Instructions End Sub

Le mot MaVar apparat pour la premire fois dans une instruction daf fectation valide. La variable MaVar est donc cre et affecte la valeur de la cellule D7. Elle est ensuite utilise pour afficher un message lattention de lutilisateur ( oir Figure 6.1). Loprateur de concatnation & est utilis pour f aire apparatre la v aleur de la v ariable au cur dune chane de caractres dfinie
Figure 6.1 Les variables peuvent tre utilises dans des chanes laide de loprateur de concatnation.

Chapitre 6

Variables et constantes

173

Vous pouv ez attrib uer le nom de v otre choix une v ariable. Un nom de v ariable doit cependant respecter les rgles suivantes :

Il doit commencer par une lettre. Il ne peut contenir plus de 255 caractres. Le point, le point dexclamation, les espaces et les caractres @, &, $ et # ne sont pas autoriss. Ce nom ne doit pas tre un mot rserv , cest--dire un mot reconnu comme un lment du langage Visual Basic (nom de fonction, dobjets, de proprit, dar gument nomm, etc.).

Dclaration explicite
Si les v ariables peuv ent tre dclares implicitement, il est fortement recommand de dclarer explicitement les variables avant de les utiliser.

Forcer la dclaration des variables avec Option Explicit


Visual Basic Editor permet de forcer la dclaration des v ariables a vant leur utilisation, grce linstruction Option Explicit. Lutilisation de cette option permet dviter les risques derreurs lies une f aute de frappe dans le nom dune v ariable. Considrez la procdure suivante :
Sub MacroErreur() MaVariable = Workbooks.Count While MaVarable < 10 Workbooks.Add MaVariable = MaVariable+1 Wend End Sub

Cette procdure a pour b ut douvrir des classeurs en boucle, jusqu ce que dix classeurs soient ouverts au total. Le nombre de classeurs ouv erts ( Workbooks.Count) est affect la v ariable MaVariable. Une instruction While...Wend que v ous dcouvrirez dans le prochain chapitre est utilise pour crer un nouv eau classeur ( Workbooks.Add) et ajouter 1 MaVariable tant que la v aleur de celle-ci est infrieure 10. Cependant, le nom de la variable a t incorrectement saisi dans linstruction suivante :
While MaVarable < 10

"MaVarable" nexistant pas, cette variable est cre et aucune valeur ne lui est affecte. La procdure ouvre donc des documents et incrmente MaVariable de 1 linfini, sans que l condition MaVarable < 10 ne soit jamais respecte.

174

Excel et VBA

Info

Pour interr ompre une macr o se xcutant linfini, tapez la combinaiso clavier Ctrl + Pause.

Pour viter ce type derreur , forcez la dclaration e xplicite des variables. Pour cela, placezvous dans la section Dclarations de la fentre Code du module et saisissez-y linstruction Option Explicit (voir Figure 6.2).
Figure 6.2 Linstruction Option Explicit doit se trouver dans la section Dclarations de la fentre Code.

Dornavant, lapparition de noms de v ariables non pralablement dclares laide de linstruction Dim dans une procdure gnrera une erreur. Dans notre exemple, lutilisation de linstruction Option Explicit entranera le message derreur prsent la Figure 6.3 lexcution du programme.
Figure 6.3 Loption Option Explicit permet de dtecter 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

175

1. Slectionnez la commande Options du menu Outils et placez-vous sur longlet Editeur. 2. Cochez la case Dclaration explicite des variables, puis cliquez sur OK. Linstruction Option Explicit sera dsormais automatiquement place dans la section approprie de la fentre Code de chaque nouveau module.

Dclarer une variable avec Dim


La dclaration de variables se fait laide de linstruction Dim, selon la syntaxe suivante :
Dim NomVariable As Type

o NomVariable est le nom de la v ariable, qui sera utilis par la suite pour y f aire rfrence, et Type le type de donnes quaccepte la v ariable prsents dans la section suivante. Largument Type est f acultatif, mais la dclaration dun type de v ariable peut vous faire conomiser de lespace mmoire et amliorer ainsi les performances de v otre programme. Lors de la dclaration de v ariables, une v ariable de type String prend pour valeur une chane vide, une variable numrique prend la valeur 0. Dans lexemple suivant, les variables Message, Boutons et Titre sont dclares laide de linstruction Dim, des valeurs leur sont ensuite affectes, puis sont utilises comme arguments de MsgBox afin da ficher la bote de dialogue de la Figure 6.4
Sub UtiliserDim() Dim Message As String Dim Boutons As Single Dim Titre As String Message = "La procdure est termine." Boutons = vbOKOnly+vbInformation Titre = "Cest fini" MsgBox Message, Boutons, Titre End Sub

Figure 6.4 Des variables peuvent tre utilises comme arguments dune fonction.

Plusieurs variables peuvent tre dclares dans une mme instruction Dim, selon la syntax e suivante :
Dim NomVar1 As Type, NomVar2 As Type, ..., NomVarn As Type

176

Excel et VBA

o NomVar1 est le nom de la premire variable dclare, et ainsi de suite. Les trois instructions de dclaration de le xemple suivant peuvent ainsi tre ramenes une seule instruction de dclaration :
Dim Message As String, Boutons As Single, Titre As String

Gardez lesprit que pour af fecter un type aux v ariables dune telle instruction, celui-ci doit tre mentionn pour chacune des v ariables dclares. L instruction suivante dclare une variable Message de type Variant et une variable Titre de type String:
Dim Message, Titre As String

Types de donnes des variables


Lorsque vous crez une variable, vous pouvez dterminer son type. Le type dune 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 v aleurs af fectes aux v ariables dans des inst ructions daffectation doivent tre compatibles avec le type de la variable. Par exemple, dclarer une variable de type numrique et lui af fecter par la suite une chane de caractres gnrera une erreur. Vous pouvez aussi choisir de ne pas dterminer le type dune variable. Elle sera alors de type Variant, et vous pourrez y stocker tous les types de donnes. Cette section prsente les diffrents types de variables.

Chanes de caractres
Les variables de type String encore appeles "v ariables de chane" permettent le stockage de donnes reconnues comme une chane de caractres. Pour dclarer une v ariable de type String, utilisez la syntaxe suivante :
Dim NomVariable As String

Une variable de chane peut tre af fecte toute e xpression renvoyant une valeur de type chane (chane, proprit, fonction, etc.). Pour af fecter une chane de caractres une variable de type String, placez celle-ci entre guillemets. Si v ous souhaitez placer des guillemets dans une chane de caractres (ou tout autre caractre), utilisez conjointement loprateur de concatnation & et la fonction Chr selon la syntaxe suivante :
"Chane de car." & Chr(codeANSI) & "Chane de car."

o codeANSI est le code ANSI du caractre que vous souhaitez insrer.

Chapitre 6

Variables et constantes

177

Info

Loprateur +peut aussi tre utilis pour concatner des c hanes de caractres. Prfrez cependant loprateur &, afin de distinguer aisment la concatnation d chanes dadditions de valeurs numriques qui, elles, requirent loprateur +.

Les instructions daffectation suivantes sont toutes valides :


Prnom = "Luc" NomFichier = ActiveWorkbook.Name Message = "Le nom du classeur actif est " & Chr(34) & ActiveWorkbook.Name & Chr(34) & "."

La premire instruction af fecte une chane dfinie la ariable Prnom. La seconde instruction affecte la valeur de la proprit Name du classeur actif la variable NomFichier. La troisime conjugue laf fectation de chanes dfinies dans le t xte, renvoyes par une fonction et renvoyes par une proprit, en concatnant ces dif frentes chanes laide de loprateur &. La macro suivante affiche la bote de dialogue reprsente la Figure 6.5
Sub ConcatenerLesChaines() Dim Message As String, Boutons As Single, Titre As String Message = "Le nom du document actif est " & Chr(34) & _ ActiveWorkbook.Name & Chr(34) & "." Boutons = vbInformation+vbOKOnly Titre = "Concatnation de chanes" MsgBox Message, Boutons, Titre End Sub

Figure 6.5 Le message affi h par la fonction MsgBox est toujours une chane de caractres.

Les variables de chane dfinies prcdemment sont dites de longueur variable et peuvent tre constitues den viron deux milliards de caractres. Vous pouvez cependant dclarer des v ariables de chane de longueur fix , autorisant de 1 65 400 caractres, selon la syntaxe suivante :
Dim NomVariable As String * longueur

o longueur est le nombre de caractres que peut rece voir la v ariable. La dclaration de variables de chane de longueur fi e peut gnrer une conomie de mmoire et donc un gain de performance pour v otre programme, mais doit tre utilise prudemment.

178

Excel et VBA

En effet, si la chane af fecte une v ariable de longueur fi e dpasse la capacit de cette dernire, la chane sera purement et simplement rogne. Remplacez linstruction de 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 Figure 6.6.


Figure 6.6 Utilisez les variables de chane de longueur f xe avec prudence.

Valeurs numriques
Les variables numriques permettent le stockage de valeurs exploitables en tant que telles, cest--dire sur lesquelles vous pouvez effectuer des oprations arithmtiques. Il existe plusieurs types de v ariables numriques. Elles se distinguent par lchelle des v aleurs quelles acceptent et par la place quelles occupent en mmoire. Le Tableau 6.1 prsente les diffrents types de variables numriques :
Tableau 6.1 : Types de donnes numriques

Types de donnes

Valeurs acceptes Nombre entier, compris entre 0 et 255 Nombre entier compris entre 32 768 et 32 767 Nombre entier compris entre 2 147 483 648 et 2 147 483 647 Nombre virgule ottante compris entre 1,401298E-45 et 3,402823E38 pour les nombres ngatifs, entre 1,401298E-45 et 3,402823E38 pour les nombres positifs Nombre virgule ottante compris entre 1,79769373486232E308 et 4,94065645841247E-324 pour les nombres ngatifs, entre 4,94065645841247E-324 et 1,79769373486232E308 pour les nombres positifs Nombre virgule xe, avec quinze chiffres pour la partie entire et quatre chiffres pour la partie dcimale, compris entre 922 337 203 685 477,5808 et 922 337 203 685 477,5807

Mmoire occupe 1 octet 2 octets 4 octets 4 octets

Byte (octet) Integer (entier) Long (entier long) Single (simple prcision) Double (double prcision)

8 octets

Currency (montaire)

8 octets

Chapitre 6

Variables et constantes

179

Si v otre programme e xploite beaucoup de v ariables, laf fectation du type appropri celui qui e xploite le moins despace mmoire aux diffrentes variables en amliorera les performances. Veillez cependant ce que les valeurs quune variable est susceptible de prendre soient toujours couv ertes par le type de donnes acceptes par la v ariable. Par exemple, si une valeur suprieure 255 ou infrieure 0 est affecte une variable de type Byte, une erreur sera gnre (voir Figure 6.7).
Figure 6.7 Le type de donnes acceptes par une variable doit couvrir lensemble des valeurs possibles lors de lexcution du programme.

ntion Atte

Utilisez le point comme spar ateur 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 v ariable numrique peut aussi tre af fecte toute e xpression renvoyant une v aleur numrique (chane, proprit, fonction, etc.). Vous pouv ez aussi ef fectuer des oprations arithmtiques sur les v ariables numriques en utilisant les oprateurs arithmtiques prsents dans le Tableau 6.2.
Tableau 6.2 : Les oprateurs arithmtiques

Oprateur

Description Addition. Soustraction. Multiplication. Division. Division. Seule la partie entire du rsultat de la division est renvoye (lopration 18 \ 5 retournera la valeur 3). Elvation la puissance (2 ^ 4 renvoie 16).

* / \ ^

180

Excel et VBA

A condition que le type de la v ariable numrique MaVar couvre les v aleurs qui lui sont affectes, les instructions daffectation suivantes sont toutes valides :

MaValeur = 58 NbreClasseur = Workbooks.Count Range("D5").Value = (Range("D3").Value+Range("D4").Value) / 2 SurfaceCercle = (varRayon ^ 2) * 3.14

La premire instruction af fecte une v aleur dfinie la ariable MaValeur. La deuxime instruction affecte la v aleur de la proprit Count de lobjet (la collection) Workbooks (le nombre de classeurs ouverts). La troisime utilise loprateur arithmtique + pour additionner les v aleurs des cellules D3 et D4, et loprateur arithmtique / pour di viser la v aleur obtenue par deux. La dernire instruction lv e la variable varRayon prcdemment dfini au carr laide de loprateur ^, puis multiplie cette valeur par 2 laide de loprateur *. Par contre, linstruction sui vante affecte une v aleur de type chane la v ariable numrique Mavar et gnre une erreur (voir Figure 6.8).
Sub ErreurAffectation() Dim Mavar As Byte MaVar = ActiveWorkbook.Name End Sub

Figure 6.8 Une chane de caractres ne peut tre affecte une variable numrique.

Rappelez-vous que les constantes sont en ralit des valeurs numriques. Une constante peut donc tre af fecte une v ariable numrique et utilise dans une e xpression arithmtique. Veillez ne pas utiliser loprateur &, rserv la concatnation de chanes, dans une instruction daffectation de valeur une variable numrique. Par exemple, linstruction :
MsgBox "Le message de la bdg", vbOKOnly+vbInformation, "Titre"

est valide, tandis que linstruction :


MsgBox "Le message de la bdg", vbOKOnly & vbInformation, "Titre"

gnrera un message derreur , car loprateur & est utilis pour additionner les v aleurs affectes aux constantes vbOKOnly et vbInformation.

Chapitre 6

Variables et constantes

181

VBA intgre de nombreuses fonctions permettant de manipuler les v aleurs numriques. Les deux fonctions suivantes en sont des exemples :

ABS(nombre). Renvoie la valeur absolue du nombre spcifi entre parenthses Int(nombre). Renvoie la partie entire du nombre spcifi entre parenthses

La liste des fonctions VBA est consultable dans laide en ligne. Choisissez la rubrique Manuel de rfrence du langage. Vous y trouverez une rubrique Fonctions rpertoriant les fonctions par ordre alphabtique. Vous pouv ez g alement y choisir la rubrique Liste et index. Vous y trouverez des rubriques thmatiques, telles que Rsum des mots cls financier , ou Rsum des mots cls mathmatiques.

Valeurs boolennes
Les variables de type Boolean servent stock er le rsultat de xpressions logiques. Une variable de type Boolean peut renvoyer la valeur True ou False et occupe deux octets en mmoire. Une v ariable boolenne peut rece voir la v aleur retourne par une e xpression renvoyant une valeur de type Boolean, mais peut aussi tre af fecte une v aleur numrique. Dans ce cas, si la v aleur numrique est g ale zro, la v ariable prendra la v aleur False, True dans le cas contraire. Une variable boolenne utilise comme chane de caractres renvoie le mot Vrai ou Faux. Dans lexemple suivant, la variable boolenne ClasseurSauvegard prend la v aleur False si le classeur actif a subi des modifications depuis le dernier enr gistrement ; True dans le cas contraire. Une bote de dialogue af fiche ensuite le message Vrai ou Faux, en fonction de la valeur de ClasseurSauvegard.
Sub ClasseurSauvegardOuNon() Dim ClasseurSauvegard As Boolean ClasseurSauvegard = ActiveWorkbook.Saved MsgBox ClasseurSauvegard End Sub

Dates
Les dates comprises entre le 1er janvier 100 et le 31 dcembre 9999 peuvent tre affectes des v ariables de type Date. Ces v ariables sont stockes sous la forme de nombres virgule flottante et occupent huit octets en mmoire La partie entire du nombre reprsente le jour. 0 correspond au 30 dcembre 1899, 1 au 31 dcembre 1899, etc. Les v aleurs ng atives reprsentent des dates antrieures au 30 dcembre 1899. La partie dcimale du nombre reprsente lheure. 0.5 correspond 12 heures, 0.75, 18 heures, etc. Ainsi, 36526.00001 correspond au 1 er janvier 2000, 00:00:01.

182

Excel et VBA

Visual Basic intgre des fonctions permettant de manipuler les dates. P ar e xemple, les fonctions Date, Time et Now renvoient respectivement la date courante, lheure courante et la date courante suivie lheure courante. La procdure suivante affiche la bote de dialogu de la Figure 6.9 :
Sub DateEtHeure() Dim LaDate As Date, LHeure As Date LaDate = Date LHeure = Time MsgBox "Nous sommes le " & LaDate & ", il est " & LHeure & ".", _ vbOKOnly+vbInformation, "Fonctions Date et Time" End Sub

Figure 6.9 Visual Basic intgre des fonctions permettant de manipuler les dates et les heures.

Pour plus dinformations sur les fonctions de date et dheure, reportez-vous laide Visual Basic, en choisissant Rsum des mots cls de date et dheure de la rubrique Inde x/Listes du Manuel de rfrence du lang age. Vous pouvez galement vous reporter au Manuel de rfrence pour Microsoft Excel, disponible dans le sommaire de laide.
ntion Atte

Linstallation par dfaut dExcel ninstalle pas laide en ligne de VBA. Si vous navez pas ef fectu une installation per sonnalise, vous de vrez 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 v aleur est compatible a vec le type vers lequel sopre la con version. Autrement dit, une v ariable de type Variant peut tre initialement une chane de caractres, et tre e xploite par la suite en tant que v aleur numrique. Si les donnes qui lui sont affectes sont assimilables une valeur numrique, la con version se fera automatiquement, lorsque linstruction assimilable une opration numrique sera excute. Si les variables de type Variant sont trs pratiques, elles occupent un espace en mmoire plus important que les autres types de v ariables (16 octets pour les v aleurs numriques et 22 octets pour les valeurs de chane) et peuvent donc ralentir lexcution du programme.

Chapitre 6

Variables et constantes

183

Une variable, une constante ou un argument dont le type nest pas dclar sont assimils une variable de type Variant. Vous pouvez cependant spcifier le type Variant pour 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 v ariable ordinaire ne pouvant recevoir quune seule v aleur, vous pouvez dterminer plusieurs emplacements de stockage pour une v ariable de matrice. Les v ariables de matrice permettent de stock er des listes dlments de mme type dans une mme variable. Vous pouvez par exemple stocker dans une variable de matrice les chif fres daffaires de tous les reprsentants. Pour dclare r une variable de matrice, utilisez la syntaxe suivante :
Dim NomVariable(NbreElements) As Type

o NomVariable est le nom de la variable, NbreElements, le nombre de valeurs que recevra la variable, et Type, le type de donnes quaccepte la v ariable. Pour affecter des valeurs une variable de matrice ou accder celles-ci, il suf fit de spcifier la position de la aleur stocke dans la v ariable. La premire v aleur rece vant linde x 0, la dernire v aleur est toujours gale au nombre dlments contenus dans la variable moins 1. Pour dmarr er linde x dun tableau 1 plutt qu 0, placez linstruction Option Base 1 dans la section Dclarations du module.

ce Astu

Une variable de matrice peut galement tre dclare selon la syntaxe suivante :
Dim NomVariable(Dbut To Fin) As Type

o Dbut et Fin dfinissent la plage de aleurs qui sera utilise pour stocker et accder aux donnes de la variable. Une variable de matrice peut vous servir stocker des donnes de mme type. Il est alors recommand de dclarer un type appropri. Dans lexemple suivant, la variable de matrice JoursSemaine stock e sous forme de chanes les jours de la semaine. Une structure de contrle For...Next est ensuite utilise pour afficher les aleurs contenues par la variable dans une bote de dialogue.
Sub VarMatrice() Dim JoursSemaine(7) As String JoursSemaine(0) = "Lundi"

184

Excel et VBA

JoursSemaine(1) = "Mardi" JoursSemaine(2) = "Mercredi" JoursSemaine(3) = "Jeudi" JoursSemaine(4) = "Vendredi" JoursSemaine(5) = "Samedi" JoursSemaine(6) = "Dimanche" Dim compteur as Byte For compteur = 0 To 6 MsgBox JoursSemaine(compteur) Next compteur End Sub

Une variable de matrice peut aussi servir stock er des donnes de types dif frents. Elle doit alors tre de type Variant. La procdure sui vante stocke dans une seule v ariable le nom, la date de naissance, ladresse, la fonction et le salaire dun emplo y. Ces donnes sont ensuite affiches dans une bote de dialogue ( oir Figure 6.10).
Sub InfosEmploy Dim Employ(1 To 5) As Variant Employ(1) = "Jean Dupont" Employ(2) = "25/12/71" Employ(3) = "14, rue des Arts" Employ(4) = "Charg dtudes" Employ(5) = 12000 MsgBox Employ(1) & " est n le " & Employ(2) & ". Il habite " & _ Employ(3) & " et est " & Employ(4) & ". Son salaire est de: " & _ Employ(5) & " euros", vbOKOnly+vbInformation, "Infos employ" End Sub

Figure 6.10 Toutes les informations relatives un mme sujet peuvent tre stockes dans une seule variable de matrice.

ce Astu

Utilisez la fonction IsArray pour vrifier si une variable est de type Array.

Variables de matrice multidimensionnelles


Les variables de matrice peuv ent tre multidimensionnelles. Les donnes sont alors stockes horizontalement et verticalement, la manire dun tableau. Les variables de matrice multidimensionnelles permettent de stock er de f aon cohrente les v aleurs dune feuille Excel. Les v ariables multidimensionnelles se dclarent selon la mme syntax e que les

Chapitre 6

Variables et constantes

185

variables de matrice une dimension, en ajoutant simplement les ar guments dindex de dbut et de fin pour la deuxime dimension
Dim NomVariable(Dbut1 To Fin1, Dbut2 To Fin2) As Type

Considrez la feuille de classeur reprsente la Figure 6.11. Elle reprsente les v entes mensuelles pour lanne 2003, de quatre types de produits, soit 12 lignes sur quatre colonnes. Une v ariable de matrice multidimensionnelle permettra de stock er lensemble des valeurs de cette feuille logiquement.
Figure 6.11 Utilisez les variables de matrice multidimensionnelles pour stocker les valeurs dun tableau.

La dclaration de la variable de matrice multidimensionnelle se prsentera comme suit :


Dim MonTableau(1 To 12, 1 To 4) As Single

Cette variable correspond un tableau de donnes de 12 lignes sur 4 colonnes. Il suf ensuit fit 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 v entes dun mois, il suf fira de spcifier la aleur correspondante comme premier index de la variable MonTableau (1 = janvier, 2 = fvrier, etc.). Pour accder une catgorie de v entes, il suffira de spcifier la aleur correspondante comme second inde x de la variable MonTableau (1 = Livres, 2 = Vido, 3 = Hi-Fi, 4 = Autres). Par exemple, 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.

186

Excel et VBA

Nhsitez pas utiliser les v ariables de matrice pour stock er les donnes dune feuille Excel auxquelles un programme VBA doit accder de multiples reprises. La v ariable ainsi cre est charge en mmoire. Laccs aux donnes quelle contient en est sensiblement plus rapide quun accs aux valeurs contenues dans les cellules dune feuille de calcul. Lutilisation dune structure de contrle For...Next permettra daf fecter lensemble des valeurs de ce tableau une variable de matrice en quelques lignes de code. Vous apprendrez utiliser cette structure au Chapitre 7. Une variable de matrice nest pas limite deux dimensions. Vous pouvez parfaitement 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 et sutili sent selon la syntaxe suivante :
LBound(NomVariable, Dimension) et UBound(NomVariable, Dimension)

Info

eil Cons

o NomVariable est le nom de la variable de matrice et Dimension, la dimension dont vous souhaitez connatr e le plus petit ou le plus gr and indice (1 pour la premire dimension, 2 pour la deuxime , etc.). Si largument Dimension est omis, le plus petit ou le plus grand indice de la premire dimension est renvoy.

Variables de matrice dynamiques


Les v ariables de matrice dynamiques sont des v ariables de matrice dont v ous pouv ez modifier la taille. Pour dclarer une ariable de matrice dynamique, ne spcifiez pas d valeur entre les parenthses qui suivent son nom. Linstruction suivante :
Dim NomVariable()

cre une v ariable de matrice dynamique. Avant daf fecter des v aleurs la v ariable de matrice ainsi cre, vous devrez la redimensionner laide de linstruction ReDim, selon la syntaxe suivante :
ReDim NomVariable(Dbut To Fin)

Vous pouvez utiliser le mot cl ReDim pour redimensionner une variable de matrice autant de fois que vous le souhaitez. Les v ariables de matrice sont intressantes lorsque v ous ne connaissez pas la quantit de donnes stock er. Supposez que, dans lexemple prcdent, la feuille de calcul des ventes ne soit pas une feuille de calcul annuelle, mais mensuelle. Le tableau senrichirait alors tous les mois dune nouv elle ligne. Pour que v otre programme fonctionne tout au long de lanne, vous devrez crer une variable de matrice de longueur variable. Cest ce que fait la procdure suivante :

Chapitre 6

Variables et constantes

187

1: Sub AffectationVariableArray() 2: Dim MonTableau() As Single 3: Dim DerniereLigne As Byte 4: DerniereLigne = Range("A3").End(xlDown).Row 5: Dim NbreDeLignes As Byte 6: NbreDeLignes = DerniereLigne - 2 7: ReDim MonTableau(NbreDeLignes, 4) 8: Instructions daffectation de valeurs MonTableau 9: End Sub

Aux lignes 2 et 3, les variables MonTableau et DerniereLigne sont dclares. Linstruction de la ligne 4 sert affecter le numro de la dernire ligne contenant des donnes la variable DerniereLigne. La fonction End ren voie lobjet Range correspondant la dernire cellule non vide sous (xlDown) la cellule A3. La proprit Row renvoie la valeur du numro de ligne de cet objet. La v ariable NbreDeLignes est cre ligne 5. On lui af fecte ensuite une valeur gale DerniereLigne - 2, soit le nombre de lignes contenant des donnes stocker dans la variable (les deux premires lignes ne contenant pas de donnes stocker). A la ligne 7, la v ariable de matrice MonTableau est redimensionne de f aon accueillir lensemble des chiffres de ventes de la feuille.
ntion Atte

Lorsque vous r edimensionnez une variable de matrice , celle-ci est rinitialise et toutes les valeur s qui y taient stoc kes sont per dues. Pour conserver les valeur s dune variable de matrice lor s de son r edimensionnement, 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 nomb e de dimensions du tableau. Vous ne pouvez quagrandir la taille du tableau. Si vous rduisez la taille de la variable, toutes les donnes seront perdues.

La fonction premire dExcel tant def fectuer des calculs sur des donnes af fiches sou forme de tableaux, les v ariables de matrice sont trs utilises dans les programmes VBA pour Excel. Elles permettent en ef fet de stock er les donnes de feuilles de calcul sous forme de v ariables et de tra vailler directement sur la v ariable plutt que sur le tableau, amliorant ainsi sensiblement les performances du programme.

Variables objet
Les variables objet sont utilises pour f aire rfrence un objet et occupent 4 octets en mmoire. Une fois une v ariable objet dfinie, ous pouv ez interroger ou dfinir le proprits de lobjet, excuter lune de ses mthodes en f aisant simplement rfrence la variable. Pour dclarer une variable objet, utilisez la syntaxe suivante :
Dim NomVariable As Object

188

Excel et VBA

Vous pouv ez dclarer prcisment le type dobjet af fect la v ariable, en remplaant Object par un nom dobjet reconnu par lapplication. Vous pouvez, par e xemple, dclarer une variable objet Workbook (classeur) selon la syntaxe suivante :
Dim MonObjetClasseur As Workbook

Une fois la v ariable dclare, vous devez lui affecter un objet prcis, utilisez pour cela le mot cl Set, selon la syntaxe suivante :
Set NomVariable = Expression

o Expression est une e xpression ren voyant un objet de lapplication. Dans le xemple suivant, la variable objet Police est dclare en tant quobjet Font, puis affecte lexpression Workbooks("Representant.xls").Sheets("Feuil1").Range("A1:D5") .Font, soit lobjet Font (police) de la plage de cellules A1:D5 de la feuille libelle "Feuil1" du classeur Representant.xls. La v ariable objet est ensuite utilise pour dfinir la proprit Bold de lobjet True, cest--dire pour affecter lattribut gras la plage de cellules A1:D5 de ce classeur.
Sub VariablesObjet() Dim Police As Font Set Police = _ Workbooks("Representant.xls").Sheets("Feuil1").Range("A1:D5").Font Police.Bold = True End Sub

La fonction GetObject
Les variables objet vous permettent dagir sur un objet sans que celui-ci soit ouv ert. Vous pouvez ainsi interroger les v aleurs dun Tableau Excel sans que celui-ci soit ouv ert. Vous pouv ez galement modifier lobjet auquel ous accdez ainsi. Pour accder un objet, stockez cet objet dans une variable objet et laide de la fonction GetObject, selon la syntaxe suivante :
Set MonObjet = GetObject(pathname, class)

o pathname et class sont des arguments nomms de type chane, correspondant respectivement au chemin daccs complet et au nom du fichier auquel ous souhaitez accder et la classe de lobjet. Si largument pathname est spcifi, la gument class peut tre omis. La procdure sui vante cre une v ariable objet de type Workbook et lui af fecte le fichie Representant.xls, situ sur le Bureau de Windows.
Sub AccederObjetFerme() Dim ObjetClasseur As Workbook Set ObjetClasseur = _ GetObject("C:\Windows\Bureau\Representant.xls") End Sub

Chapitre 6

Variables et constantes

189

La fonction GetObject est particulirement intressante si des donnes entres dans un classeur doivent tre rpercutes dans un ou plusieurs autres classeurs. Vous pouvez ainsi crer un programme VBA, afin que, lorsquune commande est e fectue, le classeur contenant les donnes de stock soit mis jour . Si ncessaire, un message pourra tre af fich afin de pr enir lutilisateur quil est temps de renouv eler le stock, et ce sans mme quil sache quil existe un classeur des stocks. Cest ce que f ait la procdure sui vante, en supposant que la v aleur du stock pour le produit command se trouve dans la cellule A13 du classeur stock.xls.
1: Sub Commande() 2: Instructions Dim UnitsCommandes As Integer 3: Dim StockRestant As Integer 4: Dim UnitsCommandes As Integer 5: UnitsCommandes = 50 6: StockRestant = VerifierEtMettreAJourStock(UnitsCommandes) 7: If StockRestant < 0 Then 8: MsgBox "Le stock ne permet pas dassurer la commande. " & _ "Le stock pour ce produit est de " & _ (StockRestant + UnitsCommandes) & " units." 9: Exit Sub 10: Else 11: MsgBox "Commande effectue. Le stock restant pour ce " & _ "produit est de " & StockRestant & " units." 12: End If 13: Suite des instructions de la commande 14: End Sub 15: Function VerifierEtMettreAJourStock(QteCommande) 16: Dim ObjetStock As Workbook 17: Dim StockDispo As Integer 18: Set ObjetStock = GetObject("C:\Documents and Settings\ Administrateur\ Bureau\Stock.xls") 19: StockDispo = ObjetStock.Sheets(1).Range("A13").Value 20: VerifierEtMettreAJourStock = StockDispo - QteCommande 21: If VerifierEtMettreAJourStock >= 0 Then 22: ObjetStock.Sheets(1).Range("A13").Value = _ StockDispo - QteCommande 23: ObjetStock.Save 24: End If 25: End Function

ntion Atte

Veillez per sonnaliser le c hemin prcis pour la fonction ligne 18, sinon cette macro ne fonctionnera pas.

GetObject la

A la ligne 6, la procdure Commande appelle la procdure VerifierEtMettreAJourStock en lui passant la v aleur de la v ariable UnitsCommandes. La v aleur 50 a t af fecte cette variable la ligne 5 pour faire fonctionner le programme. Il va de soi que cette variable doit tre affecte au nombre dunits rellement commandes.

190

Excel et VBA

La fonction VerifierEtMettreAJourStock dclare la v ariable objet ObjetStock de type Workbook (ligne 16) et la v ariable StockDispo de type Integer (ligne 17). Ligne 18, la variable ObjetStock est affecte au classeur Stock.xls situ sur le Bureau de Windows. A la ligne suivante, la variable StockDispo reoit la valeur de la cellule A13 de la premire feuille de ce classeur. La fonction VerifierEtMettreAJourStock se voit ensuite affecter la valeur de StockDispo - QteCommande. Enfin, lignes 21 24, une structure If...Then... Else est utilise pour mettre jour la v aleur du stock restant. Linstruction de la ligne 21 vrifie que le stock restant aprs commande est suprieur zro. Si cest le cas, la aleur de la cellule A13 est mise jour pour reflter le stock restant (ligne 22) et le classeur est ensuite sauvegard (ligne 23). La procdure Commande reprend alors la main. Lignes 7 12, une structure conditionnelle If...Then...Else affiche un message lattention de lutilisateu , afin de linformer su ltat du stock. Si le stock est insuf fisant pour assurer la commande StockRestant < 0), linstruction de la ligne 8 est excute. Lutilisateur est alors averti que la commande na pu tre v alide, et inform du stock disponible ( StockRestant + UnitsCommandes). Si le stock permet dassurer la commande, linstruction de la ligne 11 af fiche un messag informant lutilisateur du stock restant aprs commande.

La fonction CreateObject
La fonction CreateObject sert crer une instance dun objet, et sutilise selon la syntaxe suivante :
CreateObject(class,servername)

o class et servername sont des ar guments nomms de type chane. class correspond la classe de lobjet dont on cre une instance. servername est f acultatif et correspond au nom dun serveur distant sur lequel est cr lobjet. Si v ous omettez cet argument, lobjet est cr sur la machine sur laquelle sexcute le programme. Une fois cre une instance dobjet, on accde aux proprits et aux mthodes de cet objet en utilisant le nom de la variable laquelle il est affect. Dans lexemple suivant, une instance de lobjet Excel est cre. Un nouv eau classeur est cr, configur puis enr gistr dans cette instance.
1: Sub CreerInstancesExcel() 2: dclaration des variables 3: Dim Xl As Excel.Application 4: Dim NouvClasseur As Excel.Workbook 5: Dim NomFichier As String 6: cration dune instance de lobjet Excel 7: Set Xl = CreateObject("Excel.Application") 8: affichage de lobjet Xl 9: Xl.Application.Visible = True

Chapitre 6

Variables et constantes

191

10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:

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 & ".xls" 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 per sonnaliser le c hemin prcis pour la fonction ligne 27, sinon cette macro ne fonctionnera pas.

GetObject la

Lignes 2 5, les variables sont dclares. Les variables Xl et NouvClasseur sont des variables objet de type Excel et Workbook. La v ariable NomFichier servira stock er le nom denregistrement du classeur . Ligne 7, une instance de lobjet Application dExcel est cre laide de linstruction CreateObject, et af fecte la v ariable Xl. La proprit Visible de lobjet Application est ensuite dfinie True afin de aire apparatre la session Excel lcran. Ligne 11, un nouv eau classeur est ajout lobjet Application nouv ellement cr, et affect la v ariable objet NouvClasseur . Notez que, par df aut, un nouv eau classeur est cr dans la session Excel partir de laquelle le programme est e xcut. Pour que le nouveau classeur soit cr dans la nouvelle session Excel, il est indispensable de faire rfrence lobjet Xl dans linstruction de la ligne 11 ( Xl.Workbooks.Add et pas simplement Workbooks.Add). Lignes 13 16, la troisime feuille du classeur est supprime et les deux autres sont renommes. Lignes 17 25, le nom denregistrement du classeur est dfini. La ariable NomFichier se voit tout dabord af fecter le nom Ventes suivi de la date du jour (V entes 12/08/2007, par exemple). Ce nom contient deux fois le caractre barre oblique ( / ), non v alide dans les noms de fichie . Lignes 21 25, une boucle For...Next est utilise pour rpter deux fois le traitement appliqu au nom du classeur afin de substituer des traits dunion aux barre obliques (les boucles sont tudies au prochain chapitre). On utilise pour cela les fonctions

192

Excel et VBA

de manipulation de chane InStr, Left, Right et Len. Instr est utilis pour ren voyer la position du caractre / dans la chane NomFichier (ligne 22). Len renvoie le nombre de caractres de la chane NomFichier (ligne 24). Les fonctions Left et Right sont utilises pour renvoyer respectivement les caractres situs gauche et droite des barres obliques, et un trait dunion est plac entre les deux chanes ainsi renvoyes. Lignes 27 et 28, le classeur est enre gistr puis ferm. Ligne 29, la mthode Quit est applique lobjet Excel, afin de fermer la session Excel cre en d ut de programme.

Librer une variable objet


Pour annuler laf fectation dun objet une v ariable objet, af fectez-lui la v aleur Nothing. Linstruction sui vante annule laf fectation de la v ariable objet Police cre prcdemment :
Set Police = Nothing

Il est important daffecter la valeur Nothing une variable objet, lorsque celle-ci nest plus utilise par le programme. Vous librez ainsi lensemble des ressources systme et mmoire associes lobjet. Dans lexemple de programme prcdent, vous devrez placer cette instruction au-dessus de la ligne 24. La v ariable objet ObjetStock sera ainsi libre avant que la procdure Commandes ne reprenne la main.

Types de donnes personnaliss


Le mot cl Type permet de crer des types de donnes personnaliss, associant les types de donnes prsents ci-dessus. Une telle opration se rvle intressante lorsquun programme doit associer de f aon rcurrente dif frents types de donnes. Vous pouv ez alors crer un nouveau type de donnes auquel il suffira de aire rfrence chaque fois que vous souhaiterez crer une nouvelle variable regroupant ces types de donnes. A linstar des v ariables de matrice, le mot cl Type permet donc de crer des v ariables capables de stock er des informations multiples. Mais, contrairement aux v ariables de matrice, Type permet dassocier des types de donnes dif frents. La dclaration dun nouveau type de donnes doit tre place dans la section Dclarations du module, selon la syntaxe suivante :
Type NomType Donnes1 As Type Donnes2 As Type .... Donnesn As Type End Type

Chapitre 6

Variables et constantes

193

o Donnes1, , Donnesn sont les donnes que contiendront les v ariables de type NomType. Ces noms seront emplo ys par la suite pour af fecter des v aleurs aux dif frents espaces de stockage des v ariables de type NomType. Type reprsente le type de donnes affect chaque lment du nouveau type de donnes. Dans lexemple suivant, un type de donnes Membre est cr, afin de pou oir intgrer dans une seule variable lensemble des informations concernant un membre dune association :
Type Membre Prnom As String Nom As String Adresse As String CodePostal As String Ville As String Tlphone As String Age As Byte End Type

Vous pouvez maintenant crer une nouvelle variable de type Membre, qui sera prte recevoir toutes les informations contenues dans ce type. Les informations contenues dans une variable peuvent ensuite tre interroges ou df nies en faisant suivre le nom de la variable dun point, puis du nom de la donne. La procdure suivante cre une variable de type Membre et dfinit ses aleurs, puis af fiche une bote de dialogue indiquant les donne Prnom et Nom de la variable (voir Figure 6.12) :
Sub NouveauMembre Dim NouvMembre As Membre With NouvMembre .Prnom = "Hlne" .Nom = "Bienvenue" .Adresse = "4, rue des oiseaux" .CodePostal = "56000" .Ville = "Vannes" .Tlphone = "00 01 02 03 04" .Age = 2 End With MsgBox "Le nouveau membre sappelle " & NouvMembre.Prnom & " " & _ NouvMembre.Nom, vbOKOnly + vbInformation, "Nouveau membre" End Sub

Figure 6.12 Les variables de type personnalis peuvent contenir un nombre indtermin dinformations.

194

Excel et VBA

Notez que, en phase de cration, un complment automatique est af fich lorsque ous faites rfrence une v ariable de type personnalis (v oir Figure 6.13) condition que loption correspondante soit valide.
Figure 6.13 Le complment automatique dinstruction est affi h pour les types de donnes personnaliss.

Constantes
Les constantes permettent dattrib uer un nom une v aleur fi e. Il est ainsi plus ais dexploiter cette v aleur dans le code en f aisant rfrence au nom de la constante, plutt qu la v aleur elle-mme. P ar ailleurs, si une v aleur est susceptible dtre modifie (un valeur de TVA, par e xemple), laffectation de cette v aleur une constante simplifiera le ventuelles mises jour. Il vous suffira en e fet de modifier la aleur de la constante, plutt que de modifier chaque occurrence de la aleur dans le code de lensemble de vos projets. Une fois quune valeur a t af fecte une constante , celle-ci ne peut tr e modifie par la suit .

ntion Atte

Pour dclarer une constante, utilisez linstruction Const, selon la syntaxe suivante :
Const NomConstante As Type = Valeur

o NomConstante est le nom de la constante, Type, le type de donnes de la constante il peut sagir de nimporte lequel des types de donnes prsents plus haut , et Valeur, la valeur qui lui est af fecte. Linstruction suivante dclare la constante TVA, laquelle la valeur 20.6 est affecte.
Const TVA As Single = 20.6

Chapitre 6

Variables et constantes

195

Validation et conversion des types de donnes


Il est souv ent ncessaire de vrifier que le type de donnes entres par lutilisateur dan une cellule ou dans une feuille UserF orm est v alide, cest--dire correspond au type de valeur attendue. Si tel nest pas le cas, il est probable que le programme gnre une erreur. Celle-ci peut alors tre vite en convertissant le type de la variable.

Vrier le type de donnes dune variable


VBA intgre des fonctions permettant de vrifier quune aleur correspond bien au type attendu. Ces fonctions sont prsentes dans le Tableau 6.3.
Tableau 6.3 : Fonctions VBA permettant de vrier les types de donnes

Fonction

Description Renvoie True si la variable MaVar est une variable de matrice ; False dans le cas contraire. Renvoie True si la variable MaVar est une variable de matrice ; False dans le cas contraire. Renvoie True si la variable MaVar est un nombre ; False dans le cas contraire. Renvoie True si la variable MaVar est une variable objet ; False dans le cas contraire. Renvoie True si largument optionnel MaVar est de type Variant et na pas t pass la fonction ou la procdure en cours. 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. 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. Renvoie True si la variable MaVar stocke une valeur qui correspond lun des codes derreur de VBA. False dans le cas contraire.

IsArray(MaVar) IsDate(MaVar) IsNumeric(MaVar) IsObject(MaVar) IsMissing(MaVar) IsEmpty(MaVar)

IsNull(MaVar)

IsError(MaVar)

Vous pouvez galement utiliser les fonctions VarType ou TypeName pour interroger le type dune variable. Utilisez VarType selon la syntaxe suivante :
MaVar = VarType(NomVar)

o MaVar est une v ariable de type Integer, et NomVar le nom de la v ariable dont v ous souhaitez interroger le type.

196

Excel et VBA

La variable MaVar reoit pour v aleur une constante Visual Basic, indiquant le type de la variable NomVar (vbInteger pour une variable de type Integer, vbDate pour une variable de type Date, etc.).
TypeName sutilise selon la mme syntax e ( MaVar = VarType(NomVar)), mais renvoie une chane de caractres reprsentant le type de la variable (voir Tableau 6.4).
Tableau 6.4 : Valeurs renvoyes par la fonction TypeName

Chane renvoye

Variable Objet dont le type est type_objet Octet Entier Entier long Nombre virgule ottante en simple prcision Nombre virgule ottante en double prcision Valeur montaire Valeur dcimale Valeur de date Chane Valeur boolenne Valeur derreur Non initialise Aucune donne valide Objet Objet dont le type est inconnu Variable objet qui ne fait pas rfrence un objet

Type objet Byte Integrer Long Single Double Currency Decimal Date String Boolean Error Empty Null Object Unknown Nothing

La fonction EntrerUneDate suivante utilise la fonction InputBox pour demander lutilisateur dentrer une date. La fonction IsDate est employe pour vrifier si la aleur entre par lutilisateur est bien une date. Si tel nest pas le cas, lutilisateur est de nouv eau invit entrer une date.
Function EntrerUneDate() Do EntrerUneDate = InputBox("Entrez une date", "Vrification du type de donnes")

Chapitre 6

Variables et constantes

197

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.

Modier le type dune variable


VBA intgre des fonctions permettant de con vertir une v ariable dun type dfini ers un autre type de donnes. Le Tableau 6.5 prsente sommairement ces fonctions. Pour plus de prcisions, reportez-vous laide en ligne de VBA.
Tableau 6.5 : Fonctions de conversion de types de donnes

Fonction

Description 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. Convertit MaVar en une variable de type Byte1. Convertit MaVar en une variable de type Currency (montaire)1. Convertit MaVar en une variable de type Date1. Convertit MaVar en une variable de type Double1. Convertit MaVar en une variable de type Decimal1. Convertit MaVar en une variable de type Integer1. Convertit MaVar en une variable de type Long1. Convertit MaVar en une variable de type Single1. 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. 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.

CBool(MaVar)

CByte(MaVar) CCur(MaVar) CDate(MaVar) CDbl(MaVar) CDec(MaVar) CInt(MaVar) CLng(MaVar) CSng(MaVar) CVar(MaVar) CStr(MaVar)

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.

198

Excel et VBA

Porte et dure de vie des variables


Outre leur type et leur v aleur, les v ariables et les constantes sont caractrises par leur porte. La porte dune v ariable ou dune constante dsigne son accessibilit pour les procdures et les modules du projet. Variables et constantes peuvent tre accessibles une procdure, lensemble des procdures dun module, ou encore lensemble des modules du projet en cours. Les v ariables sont aussi caractrises par leur dure de vie. La dure de vie dune variable dsigne le temps pendant lequel la variable conserve sa valeur. Une variable peut conserv er sa v aleur tant quune procdure se xcute, et tre rinitialise lorsque la procdure est termine, ou conserv er sa v aleur entre les dif frents appels de procdures.

Porte de niveau procdure


Une variable-constante est dite de niveau pr ocdure lorsquelle nest accessible qu la procdure dans laquelle elle est dclare. Cest le cas de toute variable/constante dclare lintrieur dune procdure. Les v ariables-constantes dclares lintrieur dune procdure ne sont accessibles qu la procdure laquelle elles appartiennent.

Porte de niveau module prive


Une v ariable-constante est dite de niveau module priv lorsquelle est accessible lensemble des procdures du module dans lequel elle est dclare. Elle doit pour cela tre dclare dans la section Dclarations du module, cest--dire lextrieur de toute procdure. Par dfaut, les variables-constantes dclares dans la section Dclarations dun module ont une porte prive, cest--dire ne sont accessibles quaux procdures du module. Vous pouvez cependant substituer le mot cl Private Dim pour amliorer la lisibilit de v otre code. La dclaration de la variable se prsente alors ainsi :
Private NomVariable As Type

Dans lexemple suivant, la constante Pi est dclare de niveau module priv et est accessible toutes les procdures du module.
Option Explicit Private Pi As Single Pi = 3.14 Sub Procdure-1 () [....] Instructions End Sub

Chapitre 6

Variables et constantes

199

[....]

Autres procdures du module

Sub Procdure-n () [....] Instructions End Sub

Porte de niveau module publique


Une v ariable-constante est dite de niveau module public lorsquelle est accessible lensemble des procdures du projet, quel que soit le module de stockage. Elle doit pour cela tre dclare dans la section Dclarations du module, laide de linstruction Public, selon la syntaxe suivante :
Public NomVariable As Type

eil Cons

Lorsque vous utilisez une valeur dfinie de faon rcur ente dans un pr ojet (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 modifi , il vous suf fi a de r edfinir linstructio daffectation de la constante pour mettre jour la totalit du projet.

Variables statiques
Une v ariable conserv e sa v aleur tant que le programme se xcute dans son champ de porte. Cette v aleur peut tre modifie, mais la ariable conserv e une v aleur. Lorsque lexcution du programme sort de la porte de la v ariable, celle-ci est rinitialise et perd sa valeur. Autrement dit, une v ariable de niveau procdure conserve sa valeur tant que la procdure dans laquelle elle est dclare est en cours de xcution mme lorsque la procdure appelle dautres procdures. Lorsque celle-ci se termine, la variable est rinitialise. Une v ariable de ni veau module conserv e sa v aleur jusqu ce que le programme prenne fin Pour quune variable de niveau procdure conserve sa valeur entre diffrents appels, substituez le mot cl Static Dim dans linstruction de dclaration de la v ariable, selon la syntaxe suivante :
Static NomVariable As Type

ce Astu

Pour dclarer toutes les variables dune pr ocdure Sub ou Function statiques, placez le mot cl Static devant linstruction de dclaration de la procdure.

200

Excel et VBA

Traitement interapplications laide de variables objet


Une variable objet peut tre af fecte un objet appartenant une application autre que lapplication hte du projet. Un programme VBA Excel peut ainsi e xploiter des objets du modle dobjets Word, Access ou toute autre application supportant Automation. Il v ous suffit pour cela da fecter les objets auxquels vous souhaitez accder une variable objet laide des fonctions GetObject et/ou CreateObject.
ition Dfin

Automation, ou OLE Automation, est une fonction du modle dobjets composant (COM, Component Object Model). Il sa git dun standard quutilisent les applications pour e xposer leur s objets, mthodes et pr oprits aux outils de dveloppement. Les applications Of fice supportent Automation. Un classeur Excel peut ainsi exposer une feuille de calcul, un graphique, une cellule ou une plage de cellules, etc. Un f chier Word pourra exposer une p age, un paragraphe, un mot, ou tout autr e objet de son modle dobjets. Visual Basic pour Applications permet daccder ces objets, dinterr oger ou de r edfinir leu s proprits, den excuter les mthodes, etc.

Pour quun projet puisse accder la bibliothque dobjets dune autre application, celle-ci doit tre rfrence dans le projet. Pour rfrencer une bibliothque dobjets, choisissez la commande Rfrence du menu Outils. Dans la bote de dialogue qui saffi che, cochez les cases des bibliothques que v ous souhaitez rfrencer, puis cliquez sur OK.
Figure 6.14 La bote de dialogue Rfrences.

Chapitre 6

Variables et constantes

201

Pour raliser lexemple suivant, rfrencez la bibliothque dobjets Microsoft Word Object Library partir dun projet Excel. Crez ensuite un nouveau document Word et enregistrez-le sur le Bureau de Windows, sous le nom MonDoc.doc. Placez ensuite le code suivant dans un module Excel :
1: Sub InsereTableauDansFichierWord() 2: Dim MonDoc As Object 3: On Error Resume Next 4: Set MonDoc = GetObject(, "Word.Application") 5: If Err.Number <> 0 Then Err.Clear 6: Set MonDoc = GetObject("C:\Documents and settings\ Administrateur\ Bureau\MonDoc.doc") 7: Dim MaPosition As Word.Range 8: Set MaPosition = MonDoc.Range(0, 0) 9: MonDoc.Tables.Add Range:=MaPosition, NumRows:=3, NumColumns:=4 10: MonDoc.Save 11: Set MonDoc = Nothing 12: Word.Application.Quit 13: End Sub

ntion Atte

Veillez per sonnaliser le c hemin prcis pour la fonction ligne 18, sinon cette macro ne fonctionnera pas.

GetObject la

Excutez la procdure, puis ouvrez le fichierWord. Un tableau de quatre colonnes sur trois lignes a t plac en dbut de document. fecte lobjet La v ariable objet MonDoc est dclare ligne 2. Elle est ensuite af Word.Application, reprsentant lapplication Word, laide de linstruction Set et de la fonction GetObject (ligne 4). Si lapplication Word nest pas ouverte, une erreur est gnre. Un dtecteur derreurs est donc plac en ligne 3, de faon ignorer lerreur et passer linstruction suivante. Si, effectivement, une erreur survient ( If Err.Number <> 0), la proprit Number de lobjet Err est redfinie 0 (ligne 5). Cette v entuelle erreur tant gre, MonDoc peut tre affecte MonDoc.doc (ligne 6). La variable MaPosition de type Word.Range est ensuite dclare (ligne 7) lobjet Range de Word reprsente une position de curseur dans un document. Ligne 8, la position reprsentant le dbut du document lui est affecte. Un tableau est ensuite insr cette position, ligne 9. Le document est ensuite sauv egard. Ligne 11, la v ariable MonDoc est libre. Enfin, linstruction de la ligne 12 permet de quitter Excel. En ef fet, lorsque v ous f aites appel une v ariable objet dune autre application, le moteur de lapplication est lanc. Nomettez donc pas demplo yer la mthode Quit, afin de librer les ressources occupe par lapplication.

202

Excel et VBA

Info

On distingue, dans laccs aux objets dautres applications laide dAutomation, la liaison tar dive de la liaison prcoce . La liaison est dite tar dive lorsquune variable objet de type Object ou Variant est dclare ( Dim MaVar As Object). La variable est ensuite initialise et af fecte un objet de lapplication trangre laide de la fonction GetObject. On parle de liaison prcoce lorsque la variable est dclare dun type identifiant lapplication dont o souhaite exploiter les objets ( Dim MaVar as Word.Application). Utilisez de prfrence une liaison prcoce dans vos pr ogrammes. Les performances du programme en seront amliores, et Visual Basic vrifie a la syntaxe spcifiqu aux objets de lapplication trangre lors de lcriture de votre programme.

Notez quun programme Excel peut e xcuter une macro stocke dans une autre application hte. Dans le xemple sui vant, la macro MacroW ord est e xcute sur un nouv eau document partir dExcel. Pour raliser cet e xemple, commencez par crer la macro MacroWord : 1. Lancez Word. Dfinissez le n veau de scurit des macros (Outils, Macro, Scurit) Moyen de faon autoriser lexcution des macros. 2. Choisissez Outils, Macro, Macros. La bote de dialogue Macros de Word saffiche 3. Dans la zone Nom de la macro, saisissez MacroW ord et, dans la liste droulante Macros disponibles dans, slectionnez Normal.dot (modle global). Le modle Normal.dot de Word est lquivalent du classeur de macr os personnel dExcel : les macr os stockes dans ce modle sont accessibles tous les documents Word.

Info

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

Chapitre 6

Variables et constantes

203

3: Set MonWord = CreateObject("Word.Application") 4: MonWord.Visible = True 5: MonWord.Documents.Add 6: MonWord.Run "MacroWord" 7: Set MonWord = Nothing 8: End Sub

Excutez la procdure Figure 6.15 saffiche

ExecuterMacroWord. La bote de dialogue reprsente la

Ligne 2, la v ariable MonWord est cre et reoit lobjet Word.Application la ligne suivante. Ligne 4, la proprit Visible de lobjet MonWord est dfinie True afin da fi cher Word lcran. Un document est ensuite cr. Ligne 6, on applique la mthode Run lobjet MonWord afin d xcuter la macro MacroWord. La bote de dialogue reprsente la Figure 6.15 saffiche alors. Ligne 7, la v ariable objet est libre et le programme prend fin
Figure 6.15 Une macro Excel peut contrler lexcution de macros dans dautres applications hte.

Info

Le programme complet prsent au Chapitre 17 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 sui ante avec GoTo Interagir avec lutilisateur via des botes de dialogue Utiliser les oprateurs logiques Trier des donnes

206

Excel et VBA

Visual Basic intgre des instructions permettant dorienter le comportement dune macro. Ces instructions sont appeles des structures de contrle on parle du flux d contrle dun programme. La connaissance et la matrise de ces structures constituent un pralable indispensable la cration de programmes VBA souples et puissants, se comportant diffremment selon ltat du document et de lapplication au cours de son excution, ou des informations fournies par lutilisateur. Ce chapitre aborde une une les structures de contrle de Visual Basic. Leur combinaison permettra de gagner un temps prcieux dans vos tches les plus communes comme les plus complexes. Linstruction GoTo et les fonctions MsgBox et InputBox, ainsi que la collection Dialogs sont aussi traites dans ce chapitre. Il ne sagit pas de structures de contrle, mais elles permettront aussi de contrler le comportement des programmes VBA, et dinteragir avec lutilisateur.

Rpter une srie dinstructions : les boucles


On entend par instructions en boucle, des instructions se rptant en srie. Des instructions en boucles peuvent se rpter un nombre de fois dtermin dans le code ou un nombre de fois indtermin, en fonction du contexte au moment de lexcution du programme.

Do...Loop et While...Wend permettent de gnraliser une srie dinstructions particulires lensemble dun document ; dans ce cas, ce sont ltat du document et ltat de lapplication qui dterminent le nombre de boucles ralises. For...Next permet de rpter sur un document une srie dinstructions un nombre de fois dtermin par lutilisateur. For Each...Next permet dexcuter une srie dinstructions sur tous les objets dune collection.

La boucle While...Wend
La structure de contrle While...Wend permet de rpter une srie dinstructions tant quune condition spcifie est remplie. Cest lune des structures les plus utilises pou automatiser les tches rptitives. Elle permet de rpter un traitement sur une chane, un format, un objet, etc., dtermin dans un document. La syntaxe de la structure While...Wend est la suivante :
While Condition Srie dinstructions Wend

o Condition est une e xpression comparant deux v aleurs laide dun oprateur relationnel. Lorsque la condition spcifie aprs While est ralise, le programme excute la

Chapitre 7

Contrler les programmes VBA

207

Srie dinstructions, place entre While et Wend. Lorsque linstruction Wend est While et interroge nouv eau la atteinte, le programme retourne linstruction condition. Si elle est ralise, la Srie dinstructions sexcute nouveau, etc. Dans le cas contraire, les instructions places entre While et Wend sont ignores, et le xcution du programme se poursuit avec linstruction situe immdiatement aprs Wend.

Pour poser une condition, on conjugue gnralement une e xpression avec un oprateur relationnel, ou oprateur de compar aison, et une v aleur. Loprateur relationnel permet dtablir un rapport entre la v aleur renvoye par lexpression et la valeur qui lui est associe. Si ce rapport est vrifi, la condition est respecte Le Tableau 7.1 prsente les oprateurs relationnels de Visual Basic.
Tableau 7.1 : Les oprateurs relationnels de Visual Basic

Oprateur relationnel

Signication Egal Suprieur Infrieur Diffrent de Suprieur ou gal Infrieur ou gal Identique (pour comparer des chanes de caractres) Egal (pour comparer des variables objet)

= > < <> >= <= Like Is

eil Cons

Deux c hanes de car actres peuvent tr e compares laide des opr ateurs relationnels =, <, >, etc. La compar aison seffectue alors entre les codes ANSI attachs aux car actres compars. Si vous de vez ef fectuer des comparaisons prcises, prfrez loprateur Like. Celui-ci permet en effet de prendre ou non en compte la casse et permet lutilisation de car actres gnriques. Consultez laide en ligne pour plus de prcisions.

La technique denregistrement dinstructions en boucle la plus courante consiste excuter la srie dinstructions aprs a voir acti v lEnre gistreur de macro, puis ouvrir la fentre Code de la macro et y insrer la structure While...Wend. Nous utiliserons une structure While...Wend pour automatiser la saisie dinformations dans une feuille de calcul. Considrez le classeur Representants par departements reprsent la Figure 7.1. La feuille de calcul active (libelle Representants) recense les dpartements af fects chaque reprsentant de la socit. Les noms des reprsentants

208

Excel et VBA

apparaissent dans les cellules de la ligne 3. Pour chaque cellule contenant le nom dun reprsentant, nous avons insr en commentaires les initiales du reprsentant. Sous le nom du reprsentant se trouvent les numros des dpartements dont il a la charge.
Figure 7.1 La rpartition des reprsentants par dpartements.

Le classeur Representants par clients illustr la Figure 7.2 contient la liste des clients de la socit (colonne A). La colonne B nous renseigne sur la ville du client, et la colonne D sur son numro de client. Les deux premiers chif fres de ce numro correspondent au dpartement dorigine du client. La colonne C contient les initiales du reprsentant en charge du client. Nous profiterons de ce que ces deux classeurs ont en commun le numr du dpartement pour automatiser la mise jour de la colonne C.
Figure 7.2 Le classeur avec la rpartition des reprsentants par clients avant mise jour de la colonne C.

La macro suivante interroge les deux premiers chiffres du numro de client. Elle recherche ensuite cette valeur dans le classeur Representants par departement de faon identifier l reprsentant en charge du client. Les initiales du client sont alors insres dans la cellule

Chapitre 7

Contrler les programmes VBA

209

situe g auche du numro de client. La structure While...Wend permet de rpter cette procdure en boucle. Chaque fois que les initiales dun reprsentant ont t insres, la cellule Numro de client sui vante est acti ve. La procdure se xcute TANT QUE la cellule slectionne contient une valeur.
1: Sub InsererInitialesRepresentants() 2: Dim ClasseurRepresentants As Workbook 3: Dim NumDepartement As String 4: Dim Colonne As Variant 5: Dim Initiales 6: Set ClasseurRepresentants = _ GetObject("C:\Documents and settings\ Administrateur\Bureau\ Representants par departements.xls") 7: 8: 9: 10: 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.xls").Close End Sub

11: 12: 13: 14: 15: 16: 17: 18: 19: 20:

Lignes 2 6, les variables qui seront exploites par le programme sont dclares, et la variable objet ClasseurReprsentant est af fect le classeur Representants par departements.xls, situ sur le Bureau. Ligne 7, la cellule D4 est slectionne. La boucle While...Wend des lignes 8 17 se xcute tant que la cellule slectionne contient des informations. Ligne 9, la fonction Left affecte la variable NumDepartement les deux caractres de gauche (correspondant au numro de dpartement) de la v aleur de la cellule active. Cette v aleur est ensuite recherche dans le classeur des reprsentants par dpartements (ligne 10). Lobjet Range renvoy par la mthode Find est affect la variable Colonne notez que la v ariable Colonne a t dclare de type Variant de sorte quelle puisse recevoir des valeurs de diffrents types. Ligne 11, Colonne reoit la v aleur correspondant au numro de la colonne de la cellule trouve. Li gne 12, la fonction CInt convertit la valeur de Colonne en valeur de type Integer. La variable Colonne peut ainsi tre utilise comme ar gument de la proprit Cells. Ligne 13, la v ariable Initiales reoit pour valeur les initiales du reprsentant en charge du dpartement. On lui affecte pour cela

210

Excel et VBA

le te xte de commentaires de la cellule situe dans la mme colonne que lobjet Range renvoy par la fonction Find, mais sur la ligne 3 la ligne des noms de reprsentants. Lignes 14 et 16, un dplacement par rfrence relati ve aux cellules est ef fectu. Tout dabord, la cellule situe gauche de la cellule active est slectionne et reoit la valeur de la v ariable Initiales (ligne 15). Un dplacement dune cellule v ers la droite puis dune cellule vers le bas est ensuite ef fectu. La cellule acti ve est alors la cellule sui vante de la colonne D. Le mot cl Wend ren voie le xcution du programme linstruction While correspondante. Celle-ci vrifie que la cellule act ve contient des donnes. Si tel est le cas, les instructions situes entre While et Wend sont excutes, et les initiales du reprsentant en charge du client insres. Lorsque la condition While nest plus vrifie, les instructions situes entre While et Wend sont ignores et le programme se termine a vec les instructions des lignes 18 et 19. L es ressources systme occupes par la v ariable objet ClasseurRepresentants sont libres, et le classeur des reprsentants par dpartements est ferm. Pour scuriser dfinitivement cette mac o, commencez par lui fair e activer la feuille de vant r ecevoir les informations. Elle de vra lo giquement tr e stoc ke dans ClasseurRepresentants.xls, puisquelle ne servira qu ce classeur. Ainsi, elle ne sexcutera que si le classeur est ouvert.

eil Cons

Figure 7.3 La macro a complt les informations de la colonne C.

La boucle Do...Loop
La structure de contrle Do...Loop est semblable While...Wend, mais of fre plus de souplesse car elle peut se dcliner sur quatre modes diffrents :

Chapitre 7

Contrler les programmes VBA

211

Do While...Loop tant que la condition est respecte, la boucle sexcute.


Do While Condition Srie dinstructions Loop

Do Until...Loop jusqu ce que la condition soit ralise, la boucle sexcute.


Do Until Condition Srie dinstructions Loop

Do...Loop While la boucle se xcute, puis se rpte, tant que la condition est respecte.
Do Srie dinstructions Loop While Condition

Do...Loop Until la boucle se xcute, puis se rpte, jusqu ce que la condition soit respecte.
Do Srie dinstructions Loop Until Condition

Le programme suivant utilise une boucle Do While...Loop pour supprimer les doublons dans un classeur Excel. Les Figures 7.4 et 7.5 prsentent un classeur contenant des doublons avant et aprs passage de la macro. On estime, dans cette premire version, quil existe un doublon lorsque deux cellules de la colonne A contiennent les mmes donnes.
Figure 7.4 La feuille avant passage de la macro.

212

Excel et VBA

Figure 7.5 La macro a supprim les doublons.

Le programme commence par faire un tri des donnes. Le contenu de chaque cellule de la colonne A est ensuite compar celui de la cellule sui vante. Sils sont identiques, la ligne de la cellule courante est supprime.
1: Sub SuppressionDoublons() 2: Dim CelluleCourante As Range 3: Dim CelluleSuivante As Range 4: Set CelluleCourante = ActiveSheet.Range("A1") 5: 6: Tri des donnes sur la cellule A1 7: ActiveSheet.Range("A1").Sort key1:=Range("A1"), _ 8: Order1:=xlAscending, Header:= xlGuess, OrderCustom:=1, _ 9: MatchCase:=False, Orientation:=xlTopToBottom 10: Boucle 11: Do While Not IsEmpty(CelluleCourante) = True 12: Set CelluleSuivante = CelluleCourante.Offset(1, 0) 13: If CelluleSuivante.Value = CelluleCourante.Value Then 14: CelluleCourante.EntireRow.Delete 15: End If 16: Set CelluleCourante = CelluleSuivante 17: Loop 18: End Sub

Lignes 2 et 3 les variables objet de type Range CelluleCourante et CelluleSuivante sont dclares. La v ariable CelluleCourante reoit ensuite un objet Range correspondant la cellule A1 de la feuille acti ve. Linstruction des lignes 7 9 trie les donnes. On applique pour cela la mthode Sort. Les ar guments Key1 et Order1 dfinissent respect vement le premier critre de tri et lordre de tri. Header indique sil e xiste des lignes de tri et reoit ici la constante xlGuess (Excel dfinit sil y a ou non une ligne de titre et, dans la firma tive, de quelle ligne il sagit). OrderCustom reoit la v aleur 1 et le tri est donc "Normal". Enfin MatchCase et Orientation correspondent au respect de la casse lors du tri et son orientation (ici de haut en bas).

Chapitre 7

Contrler les programmes VBA

213

Lignes 11 17, une boucle Do While...Loop est utilise pour tester toutes les cellules. La cellule stocke dans CelluleCourante est teste, puis CelluleCourante reoit la cellule stocke dans CelluleSuivante, soit la cellule situe immdiatement en dessous. La boucle se xcute tant que la cellule stocke dans CelluleCourante nest pas vide [ Not IsEmpty(CelluleCourante) = True]. Ligne 12, la proprit Offset est utilise pour attribuer CelluleSuivante la cellule situe une ligne en dessous, sur la mme colonne. Lignes 13 15, une instruction conditionnelle sert supprimer la ligne de CelluleCourante ( CelluleCourante.EntireRow) si la cellule contient les mmes donnes que la cellule sui vante. CelluleCourante reoit ensuite la cellule stocke dans CelluleSuivante (ligne 16). Ligne 17, linstruction Loop ren voie le programme linstruction While correspondante. Lexpression While est de nouveau value et le corps de la boucle sexcute si elle est vrifie. Lorsque l xpression de la ligne 11 nest plus vrifie, le programme se poursuit vec linstruction situe immdiatement sous linstruction Loop. En loccurrence, il prend fin Le programme fonctionne correctement, mais ne prend en compte que le contenu des cellules de la colonne A pour dterminer les doublons. La procdure sui vante supprime une ligne uniquement si les donnes sont g alement identiques dans les colonnes B, C et D. Les modifications apportes la premire ersion apparaissent en gras.
1: Sub SuppressionDoublons() 2: Dim Cellulecourante As Range 3: Dim Cellulesuivante As Range 4: Set Cellulecourante = ActiveSheet.Range("A1") 5: 6: Tri des donnes sur la cellule A1 7: ActiveSheet.Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), _ 8: Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending, Header:=xlGuess, _ 9: OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 10: Boucle et test des cellules 11: Do While Not IsEmpty(Cellulecourante) = True 12: Set Cellulesuivante = Cellulecourante.Offset(1, 0) 13: If Cellulesuivante.Value = Cellulecourante.Value Then 14: If LignesIdentiques(Cellulecourante, Cellulesuivante) = True Then 15: Cellulecourante.EntireRow.Delete 16: End If 17: End If 18: Set Cellulecourante = Cellulesuivante 19: Loop 20: End Sub 21: 22: Function LignesIdentiques(CellCourante As Range, CellSuivante As Range) As Boolean 23: If CellCourante.Offset(0, 1).Value <> CellSuivante.Offset(0, 1).Value Then 24: LignesIdentiques = False

214

Excel et VBA

25: 26: 27: 28: 29: 30: 31: 32:

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

Lignes 15, linstruction conditionnelle dfinissant si la ligne est supprime appelle la fonc tion LignesIdentiques en lui passant les ar guments CelluleCourante et CelluleSui vante. La fonction Lignesidentiques est dclare comme rece vant deux ar guments de type Range et renvoyant une valeur de type Boolean (ligne 22). Ligne 23 31, une structure conditionnelle sert dterminer la v aleur renvoye par la 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 f aon par rapport CelluleSui vante [ Offset(0, 1), Offset(0, 2) et Offset(0,3)]. Si ce contenu diffre, la valeur False est affecte la fonction (lignes 24, 26 et 28). Dans le cas contraire, la fonction renvoie True (ligne 30). La procdure appelante reprend alors la main et linstruction de la ligne 15 est e xcute si la fonction a ren voy True. Dans le cas contraire, la condition nest pas vrifie et la cellule su vante est teste.
pel Rap

Pour interrompre une macr o qui ne fonctionne pas corr ectement (qui e xcute une boucle sans fin, par xemple), appuyez sur Ctrl + Pause, puis voyez le Chapitre 10.

La boucle For...Next
La structure de contrle For...Next permet de rpter une srie dinstructions un nombre de fois dtermin dans le code, en utilisant un compteur. Utilisez linstruction For...Next selon la syntaxe suivante :
For compteur = x To y Step Pas srie dinstructions Next compteur

La macro e xcute en boucle la srie dinstructions spcifie entre For et Next, en incrmentant la variable compteur de la valeur de Pas chaque passage de la boucle. Si largument Step est omis, le compteur est incrment de 1. Tant que la v aleur attache la variable compteur est infrieure la valeur y, la boucle se rpte ; lorsque la valeur numrique de compteur est suprieure y, la boucle prend fin, et la procdure se poursuit avec les instructions situes derrire linstruction Next.

Chapitre 7

Contrler les programmes VBA

215

La procdure sui vante permet dappliquer un ombrage de cellules une ligne sur deux dune feuille de calcul Excel, afin dobtenir une mise en forme semblable celle reprsen te la Figure 7.6.
Figure 7.6 Une mise en forme automatise.

1: Sub FormaterClasseur() 2: Dim compteur As Integer 3: Dim MaLigne As Variant 4: Cells.Interior.ColorIndex = 2 5: MaLigne = Range("A1").End(xlDown).Address 6: MaLigne = Range(MaLigne).Row 7: If Not MaLigne / 2 = Int(MaLigne / 2) Then 8: MaLigne = MaLigne+1 9: End If 10: For compteur = 2 To MaLigne Step 2 11: Range(compteur & ":" & compteur).Select 12: Selection.Interior.ColorIndex = 15 13: Next compteur 14: End Sub

Deux variables sont tout dabord dclares. La proprit ColorIndex de lobjet Interior de tous les objets de la collection Cells (toutes les cellules de la feuille active) est ensuite dfinie 2 (ligne 4) ce qui revient appliquer la couleur de fond blanche lensemble des cellules de la feuille. Les instructions des lignes 4 9 serv ent dterminer jusqu quelle ligne le formatage doit seffectuer. Ladresse de la dernire cellule non vide sous la cellule A1 est affecte la variable MaLigne (ligne 5), qui reoit ensuite pour v aleur le numro de ligne de cette cellule (ligne 6). Une instruction conditionnelle If...End If est utilise pour vrifier qu MaLigne est une valeur paire (lignes 7 9). Si tel nest pas le cas (si MaLigne divis par 2 nest pas un nombre entier), MaLigne est incrmente de 1. xcute. Le compteur de la boucle La boucle For...Next peut maintenant tre e commence 2 et est incrment de 2 chaque passage de la boucle, jusqu atteindre la

216

Excel et VBA

valeur MaLigne (ligne 10). A chaque passage de la boucle, la ligne correspondant la valeur de la v ariable compteur est slectionne (ligne 11) et lombrage de cellule correspondant la valeur 15 de la proprit ColorIndex lui est appliqu (ligne 12). Le programme sui vant constitue une nouv elle version de la procdure SuppressionDoublons, dans laquelle la fonction LignesIdentiques a t amliore. La fonction utilise maintenant une boucle For...Next pour dfinir le dplacement Offset) effectu lors des comparaisons. Par ailleurs, le nombre de cellules de vant tre compares afin de dfinir une ligne constitue un doublon peut ainsi tre dfini lors de lappel de la fonction
1: Sub SuppressionDoublons() 2: Dim Cellulecourante As Range 3: Dim Cellulesuivante As Range 4: Set Cellulecourante = ActiveSheet.Range("A1") 5: 6: Tri des donnes sur la cellule A1 7: ActiveSheet.Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), _ 8: Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending, Header:=xlGuess, _ 9: OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 10: Boucle et test des cellules 11: Do While Not IsEmpty(Cellulecourante) = True 12: Set Cellulesuivante = Cellulecourante.Offset(1, 0) 13: If Cellulesuivante.Value = Cellulecourante.Value Then 14: If LignesIdentiques(Cellulecourante, Cellulesuivante, 3) = True Then 15: Cellulecourante.EntireRow.Delete 16: End If 17: End If 18: Set Cellulecourante = Cellulesuivante 19: Loop 20: End Sub 21: 22: Function LignesIdentiques(CellCourante As Range, Cellsuivante As Range, Num As Byte) As Boolean 23: LignesIdentiques = True 24: Dim compteur As Byte 25: boucle et test du Num colonnes 26: For compteur = 1 To Num 27: If CellCourante.Offset(0, compteur).Value <> Cellsuivante .Offset(0, compteur).Value Then 28: LignesIdentiques = False 29: Exit For 30: End If 31: Next compteur 32: End Function

Ligne 14, la fonction LignesIdentiques est appele et reoit maintenant une v aleur de type Byte pour largument Num (ici, 3).

Chapitre 7

Contrler les programmes VBA

217

La fonction LignesIdentiques contrle ensuite Num cellules afin de dfinir si la ligne do ou non tre supprime. Elle reoit dabord la v aleur True. La boucle For...Next (lignes 26 31) se xcute ensuite Num fois. Les cellules testes chaque passage de la boucle correspondent un dplacement de Num Cellules v ers la droite. Si, lors dun passage de la boucle, deux valeurs diffrentes sont dceles (ligne 27), la valeur False est affecte LignesIdentiques et linstruction Exit For entrane la sortie de la boucle. Si les valeurs des cellules compares sont toujours identiques, la boucle prend fin aprs Num passages, et la fonction garde la valeur True.
Boucle For...Next avec pas ngatif

Le programme suivant supprime les lignes vides de la feuille active. Il utilise pour cela une structure For...Next avec un pas ngatif de 1, de faon parcourir lensemble des lignes de la feuille, de la dernire ligne employe jusqu la premire.
1: Sub SupprLignesVides() 2: Dim DerniereLigne As Long 3: Dim Compteur As Long 4: DerniereLigne = ActiveSheet.UsedRange.Row - 1 + _ ActiveSheet.UsedRange.Rows.Count 5: For Compteur = DerniereLigne To 1 Step -1 6: If Application.WorksheetFunction.CountA(Rows(Compteur)) = 0 _ Then Rows(Compteur).Delete 7: Next Compteur 8: End Sub

Lignes 2 et 3, les variables sont dclares. Ligne 4, on affecte la variable DerniereLigne le numro de la dernire ligne emplo ye. On se sert pour cela de la proprit UsedRange qui renvoie la zone utilise sur la feuille acti ve, cest--dire la zone rassemblant 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 v aleur ainsi obtenue, on obtient le nombre de lignes vides prcdant cette zone. L expression Used-Range.Rows.Count renvoie le nombre de lignes de la zone. En additionnant ces deux v aleurs, nous obtenons le numro de la dernire ligne de la zone utilise. Une boucle For...Next est ensuite employe pour parcourir les lignes vrifie . La boucle utilise un pas ngatif (Step 1) de faon effectuer le parcours de la dernire ligne la premire. Ligne 6, on vrifie si la ligne teste est vide. On utilise pour cela la onction Excel CountA qui ren voie le nombre de cellules de la zone interroge (ici la ligne entire, Rows(Compteur)) contenant des donnes. Si la ligne est vide ( CountA renvoie 0), elle est supprime. Le programme passe ensuite la v aleur sui vante, en dcrmentant notre compteur de 1. Lutilisation dun pas ngatif nous assure ici que le programme teste toutes les lignes.En effet, si nous a vions emplo y un pas positif et parcouru la zone utilise de la premire ligne la dernire, la suppression dune ligne aurait entran le dcalage de la ligne

218

Excel et VBA

suivante dune ligne vers le haut, et elle naurait donc pas t traite lors du passage sui ant de v la boucle.

Boucles For...Next imbriques


Vous pouvez aussi utiliser des instructions For...Next imbriques. Veillez simplement donner des noms diffrents chacune des variables compteur. La procdure suivante utilise une structure For...Next pour stocker les valeurs du tableau prsent la Figure 7.7 dans une variable de matrice multidimensionnelle.
Figure 7.7 Pour stocker les valeurs dune feuille Excel dans une variable de matrice, utilisez des boucles For...Next imbriques.

Dim MonTableau() As Single 1: Sub BouclesForNextImbriques() 2: Dim DerniereLigne As Byte 3: DerniereLigne = Range("A3").End(xlDown).Row 4: Dim NbreDeLignes As Byte 5: NbreDeLignes = DerniereLigne - 2 6: ReDim MonTableau(NbreDeLignes, 4) 7: Call AffecterValeursTableau(NbreDeLignes) 8: End Sub 9: Sub AffecterValeursTableau(DerniereLigneTableau) 10: Dim CompteurLignes As Byte 11: Dim CompteurColonnes As Byte 12: For CompteurLignes = 1 To DerniereLigneTableau 13: For CompteurColonnes = 1 To 4 14: MonTableau(CompteurLignes, CompteurColonnes) = _ Cells(CompteurLignes+2, CompteurColonnes+1) 15: Next CompteurColonnes 16: Next CompteurLignes 17: End Sub

La variable de matrice MonTableau() est dclare dans la section Dclarations du module, afin dtre accessible toutes les procdures du module. La procdure BouclesForNextImbriques la redimensionne de f aon quelle accueille lensemble des donnes de la

Chapitre 7

Contrler les programmes VBA

219

feuille Excel active. Pour un descriptif des instructions de cette procdure, reportez-vous la section "Variables de matrice dynamiques" du chapitre prcdent. Elle appelle ensuite la procdure AffecterValeursTableau en lui passant la valeur de la variable NbreDeLignes. La procdure AffecterValeursTableau commence par crer deux v ariables numriques For...Next (lignes 10 de type Byte qui serviront de compteur chacune des boucles et 11). La premire boucle For...Next (lignes 12 16) utilise le compteur CompteurLignes pour rpter les instructions qui la composent un nombre de fois g al au nombre de lignes contenant des donnes stock er. La boucle For...Next imbrique (lignes 13 15) utilise le compteur CompteurColonnes pour rpter les instructions qui la composent une fois par colonne contenant des donnes stock er. Linstruction qui la compose (ligne 14) affecte une valeur un des espaces de stockage de la variable de matrice MonTableau. Les valeurs de ligne de la variable et de ligne de la feuille Excel sont lies la valeur du 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 v aleur du compteur de la boucle For...Next imbrique. La variable reoit les valeurs du tableau selon lordre suivant : 1. CompteurLigne = 1. La boucle For...Next imbrique se xcute quatre fois, et affecte les v aleurs des cellules B3 E3 MonTableau(1, 1), MonTableau(1, 2), MonTableau(1, 3) et MonTableau(1, 4). 2. CompteurLigne = 2. La boucle For...Next imbrique se xcute quatre fois et affecte les v aleurs des cellules B4 E4 MonTableau(2, 1), MonTableau(2, 2), MonTableau(2, 3) et MonTableau(2, 4). [Etc.]

La boucle For Each...Next


Cette structure de contrle permet de gnraliser un traitement lensemble des objets dune collection et sutilise selon cette syntaxe :
For Each lment In Collection Instructions Next lment

o lment est une v ariable de type Object ou Variant, utilise pour reprsenter chaque objet de la collection dans les Instructions, et Collection le nom de la collection dobjets. Les Instructions sont excutes une fois pour chaque objet de la collection. La procdure suivante utilise une structure For Each...Next pour appliquer une couleur de police rouge (ColorIndex = 3) tous les objets Cells de lobjet Selection (toutes les cellules de la slection en cours) dont la valeur est suprieure 1 000.
Sub FortesValeursEnRouge() Dim cellule As Range

220

Excel et VBA

For Each cellule In Selection.Cells If cellule.Value > 1000 Then cellule.Font.ColorIndex = 3 End If Next cellule End Sub

La procdure sui vante enre gistre tous les classeurs Excel ouv classeur perso.xls au format Excel 4.0 et les ferme :

erts le xception du

1: Sub EnregistrerFormatExcel4EtFermer() 2: Dim Classeur As Workbook 3: Dim position As Byte 4: Dim NomClasseur As String 5: For Each Classeur In Workbooks 6: If Not Classeur.Name = "perso.xls" Then 7: NomClasseur = Classeur.FullName 8: position = InStr(NomClasseur, ".xls") 9: NomClasseur = Left(NomClasseur, position - 1) & ".xlw" 10: Classeur.SaveAs FileName:=NomClasseur, _ FileFormat:=xlExcel4Workbook 11: Classeur.Close 12: End If 13: Next Classeur 14: End Sub

Les lignes 2 4 dclarent les v ariables ncessaires au programme. La condition de la ligne 6 vrifie que le classeur Excel correspondant lobjet Classeur nest pas le classeu de macros personnelles perso.xls. On utilise pour cela loprateur logique Not (prsent la fin de ce chapitre), et la proprit Name qui, attache un objet Workbook, renvoie le nom de fichier de ce dernier (sans le chemin) Ligne 7, la variable NomClasseur se voit affecter le nom complet du classeur le chemin suivi du nom de fichier renvoy par la proprit FullName. Les fonctions InStr et Left sont utilises pour substituer le xtension .xlw le xtension .xls, afin de dfinir des no denregistrement corrects pour les fichiers. La fonction InStr sert comparer deux chanes de caractres. Ici, elle ren voie une v aleur numrique reprsentant la position de la chane ".xls" dans la chane stocke dans la v ariable NomClasseur. La fonction Left sert ren voyer un nombre dtermin de caractres situs g auche dune chane. Ici, elle renvoie le nombre de caractres g al (position 1) dans la chane NomClasseur . On obtient ainsi le nom du document sans le xtension ".xls". Il suf fit alors de concatner l valeur de NomClasseur et la chane ".xlw" pour obtenir un nom de f chier possdant lextension ".xlw". La mthode SaveAs est ensuite applique lobjet Classeur, en affectant largument nomm FileName le nom ainsi dfini, et la gument nomm FileFormat, la constante Excel xlExcel4Workbook. Enfin, la mthode Close ferme le document ainsi enregistr.

Chapitre 7

Contrler les programmes VBA

221

Info

Le traitement des chanes de caractres est un sujet incontournable de la programmation. Vous serez invitablement amen manipuler des c hanes de car actres (composes de lettres comme de chiffres) afin den xtraire les donnes voulues ou de les modifie . Les fonctions de traitement des chanes de caractres sont prsentes au Chapitre 11.

Boucles For Each...Next imbriques


A linstar des boucles For...Next et, plus lar gement, de lensemble des structures de contrle, vous pouvez imbriquer des structures de contrle For Each...Next. Lexemple suivant e xtrait lensemble des formules du classeur inscrit et les crit dans un document Word qui est ensuite imprim. Nous utilisons pour cela deux structures For Each...Next. La premire parcourt la collection des feuilles de tra vail ( ActiveWorkbook.Worksheets) du classeur, tandis que la seconde y est imbrique et parcourt la collection des cellules de la zone courante dfinie partir de la cellule A1 ( MaFeuille.Cells(1, 1).CurrentRegion.Cells). Lorsque la boucle imbrique a fini de traiter les cellules de la zone courante d la feuille de travail en cours de traitement, la premire structure For Each...Next reprend la main et traite donc lobjet Worksheet la feuille de travail suivant de la collection.
1: 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: 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

222

Excel et VBA

30: 31:

Next MaCellule Next MaFeuille

32: End Sub

Lignes 2 5, les variables sont dclares. Lignes 6 13, la variable MonWord reoit lobjet Word.Application. Notez que la mthode GetObject est utilise a vec un gestionnaire derreur afin de capturer lerreur gnre si Word nest pas ouvert. Auquel cas, la mthode CreateObject cre une nouv elle instance de lapplication Word (ligne 9), et lobjet Err qui reoit lerreur est rinitialis (ligne 10). Lignes 12 et 13, lapplication Word est affich et un nouveau document est cr. Lignes 14 31, la premire boucle For Each...Next parcourt la collection des feuilles du classeur. Pour chaque feuille parcourue, le document Word reoit un te xte format (lignes 15 22). Nous utilisons pour cela une structure With...End With qui dfinit l police employe (Arial, corps 13) a vant dinsrer le texte "Formules de la feuille : " suivi du nom de la feuille. La taille de la police est ensuite redfinie 11 La seconde structure For Each...Next (lignes 23 30) prend alors la main et traite chacune des cellules de la collection MaFeuille.Cells(1, 1).CurrentRegion.Cells. Notez que lon utilise ici la proprit CurrentRegion pour dfinir la zone courante partir de la cellul A1 ( Cells(1, 1)) de la feuille. A chaque occurrence de notre boucle, on vrifie si l cellule contient une formule (ligne 24), et si tel est le cas, celle-ci est insre dans le document Word, prcde de ladresse de la cellule concerne. Lorsque toutes les cellules ont t traites, la boucle imbrique prend fin et linstruction d la ligne 31 appelle le passage suivant de la structure For Each...Next principale.
Figure 7.8 Toutes les formules du classeur ont t extraites.

Chapitre 7

Contrler les programmes VBA

223

Utiliser des instructions conditionnelles


Si les boucles permettent de raliser des macros puissantes, lusage des conditions leur assurera souplesse et sret. Les instructions conditionnelles permettent entre autres choses de :

sassurer que len vironnement de lapplication et ltat du document sont compatibles avec lexcution du programme ; modifier le comportement de la macro en fonction de ltat du document et de lappli cation un moment prcis ; changer des informations a vec lutilisateur lors de le (combines avec la fonction MsgBox, par exemple). xcution du programme

La structure de contrle If...Then...Else


Au mme titre que While...Wend, If...Then...Else est une instruction conditionnelle. Cependant, cette structure est plus souple et son utilisation comme structure conditionnelle plus rpandue que celle de While...Wend, essentiellement utilise pour raliser des boucles. La structure If...Then...Else permet en effet de spcifier di frentes options dexcution dans une procdure, en fonction de ltat de lapplication ou/et du document, ou de conjuguer les conditions dans des boucles imbriques. Dans sa forme minimale, linstruction conditionnelle If se prsente ainsi :
If Condition Then Srie dinstructions End If

Lorsque la Condition spcifie est remplie, la Srie dinstructions est e xcute ; sinon, ces instructions sont ignores et la procdure se poursuit a vec linstruction situe immdiatement aprs linstruction End If. La macro Auto_Open suivante utilise une structure If...End If pour contrler laffichag de la bote de dialogue prsente la Figure 7.9. Elle utilise pour cela la fonction Date qui renvoie la date du jour.
Figure 7.9 Ce message est affi h chaque ouverture du classeur effectue entre le 1er et le 7 dcembre.

224

Excel et VBA

pel Rap

Une macr o Auto_Open se xcute automatiquement louvertur e 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 " & _ "prvisionnels le 8 dcembre.", _ vbOKOnly+vbCritical, "Soyez prt!" End If End Sub

La valeur attache loprateur relationnel dans une condition v arie selon lobjet de la comparaison ; il peut sagir dune chane de caractres si lobjet de la condition est la valeur renvoye par une v ariable de type String ou une e xpression renvoyant elle-mme une chane de caractres. Il sagira dune v aleur numrique si lobjet de la condition est une v ariable numrique ou une e xpression ren voyant une v aleur numrique, ou encore dune valeur de type Boolean si lobjet de la condition est une variable de type Boolean ou une expression renvoyant une valeur de ce type. Dans lexemple suivant, linstruction If permet de sassurer que les conditions ncessaires au bon fonctionnement du programme sont ralises (en loccurrence que deux fentres de document sont ouv ertes). Si ce nest pas le cas, un message est af fich lattention d lutilisateur et linstruction Exit Sub entrane la sortie de la procdure.
Sub VrifierConditions If Workbooks.Count <> 2 Then MsgBox "La macro ne peut tre excute. " & _ "Deux classeurs doivent tre ouverts." Exit Sub End if Instructions excutes si deux classeurs sont ouverts End Sub

Une structure If...Then...Else autorise un nombre de conditions indtermin. Vous pouvez ainsi en visager les dif frents cas possibles dans une situation particulire et indiquer la procdure les instructions excuter dans chacun de ces cas. Linstruction rpond alors la syntaxe suivante :
If condition1 Then Srie dinstructions ElseIf condition2 Then Srie dinstructions ElseIf condition3 Then Srie dinstructions ... Else Srie dinstructions End If 1 2 3 n

Chapitre 7

Contrler les programmes VBA

225

Contrairement ElseIf, linstruction Else ne pose aucune condition : elle apparat en dernire position et les instructions qui lui sont attaches sont automatiquement excutes si aucune des conditions poses aupara vant na t ralise. P ar contre, si lune des conditions poses par une instruction If ou ElseIf est ralise, la macro e xcute les instructions qui lui sont attaches, puis ignore les autres conditions poses et se poursuit avec les instructions situes aprs End If. Les instructions ElseIf comme Else sont facultatives. Une instruction conditionnelle peut tre compose dune ou de plusieurs instructions ElseIf et ne pas prsenter dinstruction Else, et inversement. La fonction suivante dtermine la valeur dune remise sur un achat, et insre cette valeur ainsi que le prix aprs remise dans la feuille de calcul.
1: Sub CalculRemiseEtPrixDefinitif() 2: Dim PrixAvantRemise As Single, PrixDefinitif As Single 3: PrixAvantRemise = ActiveSheet.Range("C11") 4: PrixDefinitif = PrixAvecRemise(PrixAvantRemise) 5: ActiveSheet.Range("C13").Value = PrixDefinitif 6: End Sub 7: Function PrixAvecRemise(ValeurAchat) 8: Dim PourcentageRemise As Single 9: If ValeurAchat <= 1000 Then 10: PourcentageRemise = 0 11: ElseIf ValeurAchat > 1000 And ValeurAchat <= 2000 Then 12: PourcentageRemise = 0.1 13: ElseIf ValeurAchat > 2000 And ValeurAchat <= 5000 Then 14: PourcentageRemise = 0.2 15: ElseIf ValeurAchat > 5000 And ValeurAchat < 10000 Then 16: PourcentageRemise = 0.25 17: Else 18: PourcentageRemise = 0.3 19: End If 20: ActiveSheet.Range("C12").Value = PourcentageRemise 21: PrixAvecRemise = ValeurAchat - (ValeurAchat * PourcentageRemise) 22: End Function

La procdure CalculRemiseEtPrixDefinitif dclare les v ariables PrixAvantRemise et PrixDefinitif de type Single. La ariable PrixA vantRemise reoit la v aleur de la cellule C11 de la feuille acti ve. Linstruction de la ligne 4 appelle la fonction PrixA vecRemise en lui passant la valeur de PrixAvantRemise. La structure conditionnelle If...Then...Else des lignes 9 19 af fecte une v aleur la variable PourcentageRemise, fonction de la valeur de ValeurAchat. La valeur de la remise est insre dans la cellule C12. Ligne 21, la fonction reoit la v aleur aprs remise, cest--dire la valeur de ValeurAchat moins le prix de la remise (ValeurAchat * PourcentageRemise).

226

Excel et VBA

La procdure principale reprend ensuite la main. Linstruction de la ligne 5 affecte alors la cellule C13 la valeur de PrixDefinitif. La procdure prend fi
Une instruction conditionnelle peut aussi scrir e sur une seule ligne , en utilisant deux points (:) comme spar ateurs entre les instructions e xcuter si la co ndition est vrifi . Linstruction End If est alors omise et la syntaxe est la suivante :
If Condition Then Instruction1: Instruction2: ...: InstructionN

Info

Par exemple, linstruction :


If Selection.Font.Italic() = True Then Selection.Font.Italic() = False Selection.Font.Bold() = True End If

est aussi valide sous la forme :


If Selection.Font.Italic() = True Then Selection.Font.Italic() = False

Pour prsenter plusieur s instructions sur une mme ligne , utilisez les deux points (:) comme sparateur :
If Selection.Font.Italic() = True Then Selection.Font.Italic() = False: Selection.Font.Bold = True

Conditions imbriques
Vous pouvez dfinir des conditions lintrieur dune condition initiale. On parle alors d conditions imbriques. Les conditions imbriques permettent de prendre en considration un grand nombre de possibilits lors de lexcution du programme. Lexemple suivant est compos dune premire instruction conditionnelle qui vrifie qu deux fentres sont ouv ertes avant de se xcuter. Nous y a vons imbriqu une instruction conditionnelle (en gras, dans le texte de la macro), afin que la bote de dialogue a fiche s la premire condition est ralise ( Workbooks.Count <> 2) varie en fonction du nombre de fentres ouvertes. Lorganigramme de la Figure 7.10 prsente la structure de cette macro.
Sub ConditionsImbriques() If Workbooks.Count <> 2 Then Dim Message As String If Workbooks.Count < 2 Then Message = "Au moins deux documents doivent tre ouverts." Else Message = "Seuls les deux documents concerns doivent tre ouverts." End If

Chapitre 7

Contrler les programmes VBA

227

MsgBox Message, vbOKOnly+vbInformation, "Excution impossible" Exit Sub End if Instructions de la macro End Sub

Figure 7.10 Les conditions imbriques assurent aux macros souplesse et prcision.
If = 2

Sub

Workbooks.Count

If <> 2

If < 2

If > 2

Message 1

Message 2

Exit Sub Instructions de la macro

End Sub

Figure 7.11 Linstruction conditionnelle imbrique dtermine le message qui sera affi h.

La structure de contrle Select Case


La structure de contrle Select Case permet den visager dif frentes v aleurs pour une mme expression et de dterminer des instructions spcifiques pour chaque cas e visag. Elle rpond la syntaxe suivante :
Select Case Expression Case valeur1 Instructions Case valeur2 Instructions ...

228

Excel et VBA

Case valeurn Instructions Case Else Instructions End Select

o Expression est une expression renvoyant une valeur dont le type peut v arier. Lorsque la valeur renvoye par Expression correspond lune des valeurs poses par les instructions Case, les Instructions correspondantes se xcutent, et la procdure se poursuit a vec linstruction qui suit End Select. Si aucune des valeurs poses par les instructions Case ne correspond la v aleur renvoye par Expression, les instructions attaches Case Else sont excutes. Lutilisation de Case Else est facultative. Le programme suivant dtermine la valeur de la variable Reduction, fonction de la v aleur de la cellule D7 de la feuille 1 du classeur commande.xls. Une bote de dialogue est ensuite affiche, afin dinformer lutilisateur de la remise qui sera fectue.
1: Sub AffichageRduction() 2: Dim Rduction As Variant 3: Dim LongueurChane As Byte 4: Rduction = CalculerValeurReduction _ (Workbooks("commande.xls").Sheets(1).Range("D7").Value) 5: LongueurChane = Len(Rduction) 6: If LongueurChane = 3 Then Rduction = Rduction & "0" 7: MsgBox "La remise effectue sera de " & Rduction & "%." 8: End Sub 9: Function CalculerValeurReduction(PrixCommande) 10: Select Case PrixCommande 11: Case 0 To 999.99 12: CalculerValeurReduction = 0 13: Case 1000 To 1999.99 14: CalculerValeurReduction = 0.1 15: Case 2000 To 2999.99 16: CalculerValeurReduction = 0.25 17: Case Else 18: CalculerValeurReduction = 0.4 19: End Select 20: End Function

La variable Rduction est tout dabord dclare de type Variant. Elle stockera en effet une valeur numrique, qui sera ensuite manipule en tant que chane de caractres. L instruction daf fectation de la ligne 4 appelle la fonction CalculerValeurReduction, en lui passant la valeur de la cellule D7 de la premire feuille du classeur commande.xls. La fonction CalculerValeurReduction utilise une structure Select Case pour ren voyer une valeur fonction de la v aleur de largument PrixCommande (ici la v aleur de la cellule aleurs (0 999.99, 1000 D7). Le mot cl To est utilis pour dfinir des plages de 1999.99, etc.). La procdure principale reprend ensuite la main.

Chapitre 7

Contrler les programmes VBA

229

Les instructions des lignes 5 et 6 servent formater la chane stocke dans la v ariable Rduction. La fonction Len renvoie la longueur (le nombre de caractres) de la v ariable Rduction, qui est stocke dans la v ariable LongueurChane. Si la chane comprend trois caractres, un 0 est ajout la fin de la chane Rduction (0,1 et 0,4 deviennent respectivement 0,10 et 0,40). Enfin, linstruction de la ligne 7 affiche une bote de dialogue informant lutilisa teur de la valeur de la remise qui sera effectue. Dans les instructions Visual Basic, le point est utilis comme spar ateur dcimal des valeurs numriques. Cependant, lor sque vous af fi hez sous forme de c hane une valeur numrique comme linstruction de la ligne 7 de le xemple prcdent , la virgule est utilise comme sparateur de dcimales.

Info

Dnir linstruction suivante avec GoTo


Linstruction GoTo permet dorienter le droulement dune procdure v ers lemplacement spcifi par lutilisateu , et ce tout moment de lexcution. Cette instruction sutilise avec une tiquette, cest--dire une balise place dans le te xte. La syntax e de GoTo est la suivante :
GoTo Etiquette

Ltiquette spcifie aprs GoTo doit tre place en db ut dune ligne indpendante, situe avant linstruction sur laquelle on v eut brancher la procdure et tre immdiatement sui vie des deux points ":". Une instruction GoTo ne peut ren voyer qu une tiquette se trouv ant dans la mme procdure que linstruction elle-mme. Les instructions GoTo rendent difficil la lecture du code. Prfrez les structures de contrle linstruction GoTo.

Interagir avec lutilisateur via des botes de dialogue


Laffichage de botes de dialogue au cours de l xcution dun programme permet de renseigner lutilisateur sur son droulement, ou de lui demander des informations qui en modifieront le cours. Deux fonctions permettent la fichage de botes de dialogue

InputBox entrane laf fichage dune bote de dialogue prsentant une zone de t dans laquelle lutilisateur est invit entrer des informations.

xte

MsgBox permet daf ficher un message lattention de lutilisateur dans une bote d dialogue et de lui proposer de choisir entre dif frentes possibilits en cliquant sur lun des boutons de commande affichs

230

Excel et VBA

La fonction InputBox
La fonction VBA InputBox permet dafficher une bote de dialogue contenant une zone d texte lgende, afin di viter lutilisateur y saisir linformation attendue ; linformation saisie est renvoye sous forme de chane de caractres et stocke dans une variable afin d pouvoir tre ensuite exploite par le programme. La fonction InputBox sutilise selon la syntaxe suivante :
InputBox(prompt, title, default)

prompt, title et default sont des ar guments nomms de type String. prompt est le message affich dans la bote de dialogue afin de lgender la zone de xte. Largument title correspond au titre de la bote de dialogue (af fich dans la barre de titre) et e t facultatif. Si cet argument est omis, le nom de lapplication apparat dans la barre de titre. default est aussi facultatif et correspond au texte apparaissant par dfaut dans la zone de texte lors de laffichage de la bote de dialogue

La procdure suivante affiche la bote de dialogue reprsente la Figure 7.12


Sub UtilisationDeInputBox() Dim DateVal As String DateVal = InputBox("Date de validit:", "Nouveau membre", Date) End Sub

Figure 7.12 La fonction InputBox permet de stocker des informations entres par lutilisateur durant lexcution du programme.

Pour stock er linformation fournie par lutilisateur dans une v ariable, il suf fit da fecter une variable la fonction, selon la syntaxe suivante :
Variable = InputBox(prompt, title, default)

o Variable est une variable de type String ou Variant. Si laffi hage dune rponse par dfaut nest pas indispensable, il peut se rvler fort pr atique pour orienter lutilisateur lor sque linformation demande autorise plusieur s formats. P ar e xemple, si vous demandez lutilisateur dentrer une date, et sil est ncessair e, pour le bon dr oulement de la macr o,

eil Cons

Chapitre 7

Contrler les programmes VBA

231

que celle-ci soit saisie sous le format jj/mm/aa. Laffi hage dune date hypothtique laide de lar gument default permettr a dindiquer lutilisateur le format attendu. Vous pouvez afficher des ariables ou des caractres rservs (comme le guillemet ou la virgule) dans une bote de dialogue. On utilise pour ceci :

loprateur de concatnation &; la fonction Chr, pour afficher un caractre rserv en spcifiant le cod ASCII (entre 1 et 32).

La fonction InputBox se prsente alors ainsi :


InputBox("Texte"&variable+Chr(CodeAscii)+"Texte", "Titre", "Entre par dfaut")

La procdure suivante affiche la bote de dialogue prsente la Figure 7.13


Sub OuvertureSession() Dim Utilisateur As String, MotDePasse As String Utilisateur = Application.UserName MotDePasse = InputBox("Utilisateur: " & Utilisateur & Chr(10) & _ "Veuillez entrer votre mot de passe.", "Saisie du mot de passe") Call VerifierMotDePasse(Utilisateur, MotDePasse) End Sub

Figure 7.13 Utilisez loprateur de 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 v aleur 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

232

Excel et VBA

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 l classeur actif (lignes 2 8). Elle af fecte pour cela ladresse de la slection en cours la variable ZoneA Tester. Si aucune zone nest slectionne ( ZoneATester = Null), un message est af fich lattention de lutilisateur et linstruction de la ligne 7 entrane la sortie de la procdure. La fonction InputBox sert ensuite demander lutilisateur dindiquer une date dchance (ligne 11). La fonction Date est utilise pour dterminer la valeur par dfaut de la zone de te xte. Elle ren voie la date du jour laquelle on ajoute 30 jours. La chane renvoye par la fonction InputBox est stocke dans la v ariable DateEcheancede type Variant. Ligne 12, la fonction CDate est utilise pour con vertir la variable DateEcheance en une variable de type Date. Si vous dclar ez la variable de DateEcheance de type String, le pr ogramme fonctionnera correctement, mais linstruction de conversion de type de donnes de la ligne 12 ne modifie a pas le type de la variable DateEcheance. Linstruction conditionnelle de la ligne 17 effectuera alor s une compar aison entre les chanes de car actres et non entr e les dates. Le pr ogramme se dr oulera correctement, mais produira des rsultats errons.

ntion Atte

La procdure teste ensuite lensemble des cellules slectionnes. Une v ariable objet de type Range est dclare ligne 14. Lignes 15 22, une structure de contrle For Each...Next est utilise pour tester tous les objets Range de la collection dobjets contenue dans la slection en cours. Linstruction conditionnelle de la ligne 16 vrifie que la cellule traite contient des donne de type Date. Si ce nest pas le cas, elle est ignore, et la boucle se poursuit a vec la cellule

Chapitre 7

Contrler les programmes VBA

233

suivante. Si la cellule contient des donnes de type Date, la structure conditionnelle des lignes 17 19 est excute : si la valeur de la cellule est suprieure la date stocke dans la variable DateEcheance, la couleur jaune (ColorIndex = 6) est applique lintrieur de la cellule. La Figure 7.14 reprsente une feuille de calcul aprs passage de la macro VerifierEcheances (lutilisateur a indiqu le 01/04/98 pour date dchance).
ntion Atte

Si lutilisateur clique sur le bouton Annuler ou sur le bouton de fermetur e dune bote de dialo gue affi he laide de la fonction InputBox, la fonction r envoie une c hane vide . Une err eur pourr a alor s tr e gnre par le pr ogramme sil tente dexploiter la valeur retourne. Placez une instruction If...Then...Else pour vrifier que la valeur etourne par InputBox nest pas une c hane vide . Les instructions suivantes pourr ont tre places sous la ligne 11 du programme prcdent afin de mett e fin la p ocdure si lutilisateur annule la saisie dune valeur.
If DateEcheance = "" Then Exit Sub End if

De la mme faon, si lutilisateur saisit une valeur ne corr espondant pas la valeur attendue, le programme pourra gnrer une erreur ou produire des rsultats errons. Utilisez les instructions de contrle de type donnes prsentes au Chapitr e 6 pour vous assurer que les informations fournies par lutilisateur sont valides. Dans le cas du programme prcdent, si lutilisateur ne saisit pas une date dans la bote de dialogue, une erreur sera gnre. Vous crirez le code permettant de grer ces ventuelles erreurs au Chapitre 10.
Figure 7.14 Lensemble des cellules dont la date est ultrieur e la date indique par lutilisateur est mis en vidence.

234

Excel et VBA

La mthode InputBox
Lobjet Application dExcel possde une mthode InputBox, que vous pouvez substituer la fonction InputBox de Visual Basic. L intrt de la mthode InputBox dExcel est quelle permet de spcifier le type de donnes qui sera re voy. Utilisez cette mthode selon la syntaxe suivante :
Application.InputBox(prompt, title, default, left, top, helpFile, helpContextID, type)

Si vous ne spcifiez pas de aleur pour largument title, le titre par dfaut de la bote de dialogue sera "Entre". Les ar guments nomms left et top permettent de spcifie lemplacement de la bote de dialogue sur lcran au moment de son af fichage, tandis qu les arguments helpFile et helpContextID servent associer des fichiers daide la bot de dialogue. Ils existent aussi pour la fonction InputBox de Visual Basic. Largument de type Variant type est f acultatif. Il peut prendre lune des v aleurs prsentes dans le Tableau 7.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 v aleurs correspondantes. P ar exemple, pour que lutilisateur soit autoris indiquer une valeur numrique ou une rfrence de cellules, vous affecterez la valeur 9 largument type (1 + 8).
Tableau 7.2 : Valeurs admises par largument type de la mthode InputBox dExcel

Valeur de Type 0 1 2 4 8 16 64

Type de donnes renvoy par InputBox Formule Valeur numrique Chane de caractres Valeur boolenne (False ou True) Rfrence de cellule (objet Range) Valeur derreur Tableau de valeurs

eil Cons

Si linformation saisie par lutilisateur dans la zone de te xte de la bote de dialogue ne correspond pas au type de donnes dclar pour la mthode InputBox, une err eur sera gnre. Pensez crer un g estionnaire derreur (voir Chapitre 10), afin de prvoir les er eurs de saisie de lutilisateur final

Chapitre 7

Contrler les programmes VBA

235

Lautre avantage de la mthode InputBox dExcel sur sa concurrente Visual Basic est de permettre lutilisateur de slectionner une plage de cellules a vant de cliquer sur le bouton OK. Il est ainsi possible de slectionner un classeur ou une feuille spcifique, puis d slectionner la plage voulue. Les coordonnes de celles-ci saffichent alors dans la zone d texte de la bote de dialogue. L instruction sui vante af fiche une bote de dialogu qui accepte pour valeur une rfrence de cellule. Lutilisateur est invit slectionner une plage de cellules dans la feuille active (voir Figure 7.15).
Sub RenvoyerUnePlageAvecInputBox() Dim MaPlage As Range Set MaPlage = Application.InputBox(prompt:="Slectionnez la plage de cellules.", _ Title:="Contrle des chances", Left:=3, Top:=-80, Type:=8) End Sub

Figure 7.15 La zone de texte de la bote de dialogue reflte la slection effectue sur la feuille Excel.

Entranez-vous ! Modifiez la procdure VerifierEcheances, de f aon in viter lutilisateur slectionner la plage de cellules traiter , plutt que de traiter la plage slectionne au moment de lexcution de la macro. Lorsque vous utilisez la fonction InputBox dExcel pour in viter lutilisateur slectionner une plage de cellules, tirez profit des a guments Left et Top. Si la bote de dialo gue est af fi he dans langle suprieur gauc he de la fentr e, lutilisateur naura pas besoin de la dplacer pour slectionner des cellules sur la feuille.

eil Cons

236

Excel et VBA

La fonction MsgBox
La fonction MsgBox permet daf ficher une bote de dialogue prsentant un message e des boutons de commande, afin da ficher une information lattention de lutilisateu ou dobtenir une rponse une question qui orientera le xcution du programme. Une valeur de type Integer est ren voye fonction du bouton cliqu et stocke dans une variable, pour tre ensuite exploite par le programme. La fonction MsgBox sutilise selon la syntaxe suivante :
Variable = MsgBox(prompt, buttons, title)

o Variable est une v ariable de type Integer. prompt, buttons et title sont des ar guments nomms. prompt est un argument de type String, correspondant au message affich dans la bote de dialogue. buttons est un argument de type numrique f acultatif. Il dtermine les boutons af fichs dans la bote de dialogue, le symbole identifiant le type message (information, question, etc.) et le bouton par dfaut. Si cet argument est omis, un seul bouton libell OK est affich et aucune icne nidentifie le type du message title est un argument de type String facultatif, correspondant au titre de la bote de dialogue (aff ch dans la barre de titre). Si cet ar gument est omis, le nom de lapplication apparat dans la barre de titre. Largument buttons est dfini par la somme des aleurs choisies pour chacun des groupes prsents dans le Tableau 7.3. Votre code gagnera cependant en lisibilit si vous utilisez les constantes VBA intgres plutt que des valeurs numriques.
Tableau 7.3 : Dnition de largument buttons

Constante Bouton

Valeur

Description

vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel


Symbole

0 1 2 3 4 5

OK OK et Annuler Abandonner, Ressayer et Ignorer Oui, Non et Annuler Oui et Non Ressayer et Annuler

vbCritical vbQuestion

16 32

Message critique Question

Chapitre 7

Contrler les programmes VBA

237

Tableau 7.3 : Dnition de largument buttons (suite)

Constante

Valeur 48 64

Description Stop Information

vbExclamation vbInformation
Bouton actif par dfaut

vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4

0 256 512 768

Premier bouton Deuxime bouton Troisime bouton Quatrime bouton

Si v ous souhaitez, par e xemple, af ficher une bote de dialogue contenant le symbol "Question", dans laquelle lutilisateur pourra rpondre la question pose par "Oui" ou "Non", largument buttons sera gal 36 : 4 (pour les boutons) + 32 (pour le symbole). Les trois instructions suivantes sont quivalentes et entranent laffichage de la bote d dialogue reprsente la Figure 7.16. La troisime formule est cependant plus comprhensible.
rponse = MsgBox("Autre recherche?", 36, "Recherche") rponse = MsgBox("Autre recherche?", 32+4, "Recherche") rponse = MsgBox("Autre recherche?", vbYesNo+vbQuestion, "Recherche")

Figure 7.16 Une bote de dialogue affi he laide de linstruction MsgBox.

ce Astu

Lorsque vous insrez la fonction MsgBox dans une procdure, placez le curseur sur la fonction, puis tapez sur la touche F1 afin den activer la rubrique daid . Vous pourrez ainsi consulter le tableau rpertoriant les constantes attacher largument buttons.

Si vous souhaitez afficher une bote de dialogue dans le seul objectif da ficher une info mation lattention de lutilisateur (ne comportant quun bouton OK), il est inutile daffecter une variable la fonction MsgBox. Cependant, une fonction ne peut tre utilise que dans une instruction daf fectation. Vous devez alors utiliser linstruction MsgBox. Sa syntaxe est la mme que celle de sa sur fonction, la dif frence prs que ses arguments

238

Excel et VBA

ne sont pas encadrs par des parenthses. Linstruction MsgBox suivante affiche la bote d dialogue prsente la Figure 7.17.
MsgBox "Les documents sont en cours dimpression.", vbInformation

Figure 7.17 Pour affi her un simple message informatif, utilisez une instruction plutt quune fonction.

Par dfaut, le premier bouton est le bouton actif (celui qui sera v alid si lutilisateur appuie sur la touche Entre). Si une rponse positive de la part de lutilisateur peut tre lourde de consquences, vous pouvez dfinir le deuxime ou le troisime bouton comme bouton pa dfaut. Linstruction suivante affiche la bote de dialogue prsente la Figure 7.18
rponse = MsgBox("Supprimer toutes les informations?", _ vbYesNoCancel+vbCritical+vbDefaultButton2)

La valeur renvoye par la fonction MsgBox varie en fonction du bouton cliqu par lutilisateur, selon la rgle suivante :
Bouton OK Annuler Abandonner Ressayer Ignorer Oui Non Constante Valeur 1 2 3 4 5 6 7

vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo

Une instruction conditionnelle est utilise pour interroger la v aleur de la v ariable 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

Chapitre 7

Contrler les programmes VBA

239

la constante vbNo sera retourne ; enfin, sil choisit le bouton Annuler cest la v aleur 2, assimilable la constante vbCancel, qui sera renvoye.
Figure 7.18 Si lutilisateur appuie sur la touche Entre du clavier, cest la rponse "Non" qui sera valide.

Le programme suivant reprend lexemple donn prcdemment pour InputBox. Une fonction MsgBox a t utilise afin de proposer lutilisateur de dfinir une autre date, en cas dpassement dchance. Sil ny a pas de dpassement dchance, une autre bote de dialogue sera affiche pour en informer lutilisateu .
1: Sub VerifierEcheances() 2: Dim ZoneATester As String 3: ZoneATester = ActiveWindow.RangeSelection.Address 4: If ZoneATester = Null Then 5: MsgBox "Slectionnez la plage de cellules tester.", _ vbOKOnly & vbInformation 6: Exit Sub 7: End If 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: Dim DateEcheance As Variant DateEcheance = InputBox("Indiquez la date dchance.", _ "Echance des oprations en cours", Date+30) DateEcheance = CDate(DateEcheance) 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 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

25: 26:

240

Excel et VBA

27: 28: 29: 29:

Call VerifierEcheances End If Else MsgBox "Pas de problme dchance.", _ vbOKOnly+vbInformation, "Echancier respect" 30: End If 31: End Sub

Lignes 12 et 13, la v ariable DatesHorsEcheance de type Boolean est dclare et se v oit affecter la valeur False. Ligne 18, une instruction lui affecte la valeur True. Cette instruction ne sera excute que si une date suprieure la date spcifie par lutilisateur est trouve La mise en v aleur des v entuelles cellules hors chance termine, une instruction conditionnelle If...Then...Else est utilise pour af ficher un message lattention d lutilisateur (lignes 22 30). Si la v ariable DateHorsEcheance renvoie la v aleur True (si des cellules contenant des dates au-del de la date spcifie par lutilisateur sont trouves) les instructions des lignes 23 28 sont e xcutes. La bote de dialogue reprsente la Figure 7.19 est alors af fiche. La aleur renvoye par la fonction MsgBox est stocke dans la variable RedfinirLaDate. Une structure conditionnelle imbrique teste ensuite la valeur de cette v ariable. Si la v ariable renvoie vbYes (lutilisateur a cliqu sur le bouton Oui), la couleur dintrieur des cellules de la zone slectionne est supprime (ligne26), et la fonction sappelle elle-mme (ligne 27). Si DateHorsEcheance renvoie False, une bote de dialogue est affiche (ligne 29) afin dinformer lutilisateur quil ny a pas de problm dchance.
Figure 7.19 Lutilisateur peut redfinir une date dchance.

ition Dfin

Une procdure qui sappelle elle-mme est une procdure rcursive.

Chapitre 7

Contrler les programmes VBA

241

Afchage de botes de dialogue Excel


Il peut tre utile daf ficher des botes de dialogue Excel un moment spcifique lexcution dun programme. Vous pouv ez, par e xemple, af ficher la bote de dialogu Enregistrer sous, afin que lutilisateur indique le dossier denr gistrement dun classeur.

Les botes de dialogue prdnies dExcel


Les botes de dialogue sont des objets Dialog. Pour afficher une bote de dialogue Excel faites appel la collection Dialogs et appliquez la mthode Show ou Display lobjet dfini selon la synta e suivante :
Application.Dialogs(xlDialog).Show Application.Dialogs(xlDialog).Display

xlDialog est une constante Excel qui indique la bote de dialogue de Linstruction suivante affiche la bote de dialogue Ouvrir
Application.Dialogs(xlDialogOpen).Show

vant tre af fiche

Lorsquune bote de dialogue Excel est affiche 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 vec linstruction situe derrire celle qui a appel la bote de dialogue. Vous pouv ez videmment af fecter un objet Dialog une v ariable de type Object ou Variant, et f aire appel cet objet pour af ficher la bote en question. Les instruction suivantes affichent la bote de dialogue Enr gistrer sous.
Dim BoteEnregistrerSous as Dialog Set BoteEnregistrerSous = Application.Dialogs(xlDialogSaveAs) BoteEnregistrerSous.Show

Vous trouverez une liste des constantes xlDialog dans laide de VBA pour Excel. Rfrezvous la rubrique Rfrences pour Microsoft Excel/Objets/Dialogs.

Les mthodes GetOpenFilename et GetSaveAsFilename


Les mthodes GetOpenFilename et GetSaveAsFilename dExcel permettent daf ficher le botes de dialogue standard Ouvrir et Enre gistrer sous afin de rcuprer le nom dun fichi . Celles-ci sont plus souples et plus fonctionnelles que les objets Dialogs correspondants.
ntion Atte

Contrairement ce qui se passe lor sque vous appliquez la mthode Show un objet Dialog, quand une bote de dialo gue est af fi he laide de lune des mthodes GetOpenFilename ou GetSaveAsFilename, aucune action nest

242

Excel et VBA

excute lorsque lutilisateur clique sur le bouton de validation de la bote de dialogue. Ces mthodes permettent simplement de rcuprer un nom de fi hier. Ce fi hier doit ensuite tre manipul par programmation. Utilisez les mthodes GetOpenFilename et GetSaveAsFilename, selon la syntaxe suivante :
Application.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText) expression.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

Tableau 7.4 : Arguments des mthodes GetOpenFilename et GetSaveAsFilename

Argument

Description Argument facultatif de type Variant. Le nom de chier 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. Argument facultatif de type Variant. Les critres de ltrage des chiers. Chaque critre doit apparatre sous la forme dune paire compose du ltre de chier, suivi de la spcication de son extension, tels quils apparaissent dans la zone Type de chier. Les paires sont galement spares par des virgules. Si plusieurs extensions sont associes un type de chier, elles doivent tre spares par un point-virgule. Par exemple la valeur suivante : "Classeur Microsoft Excel (*.xls),*.xls,PageWeb (*.htm; *.html),*.htm;*.html" pour largument FileFilter laissera apparatre deux types de chiers dans la zone Type de chier de la bote de dialogue afche. Argument facultatif de type Variant. Lindex du critre de ltrage par dfaut. Spciez la valeur 1 pour que le premier critre de ltrage apparaisse comme type de chier par dfaut, la valeur 2 pour que le deuxime critre de ltrage soit le type de chier par dfaut, etc. Le premier ltre de chier est utilis si largument na pas t spci ou sil est suprieur au nombre de ltres disponibles. 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. Argument facultatif de type Variant. Sur Macintosh uniquement. Le libell du bouton Ouvrir. 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 chier. Si plusieurs chiers sont slectionns, la valeur est renvoye sous forme de tableau et doit donc tre stocke dans une variable de type Variant ou Array.

InitialFilename

FileFilter

FilterIndex

Title

ButtonText MultiSelect

Chapitre 7

Contrler les programmes VBA

243

Utilisez linstruction ChDir pour modifier le dossier propos par d aut dans la bote de dialogue affiche
Figure 7.20 La mthode GetOpenFileName permet daffi her une bote de dialogue Ouvrir personnalise.

Figure 7.21 Les fi hiers slectionns sont rcuprs dans une variable de matrice.

Lexemple suivant affiche la bote de dialogue reprsente la Figure 7.20, puis affiche un bote de dialogue indiquant la liste des fichiers choisis par lutilisateur ( oir Figure 7.21).
1: Sub OuvertureDeFichiers() 2: Dim OuvrirFichiers As Variant 3: modification du chemin par dfaut 4: ChDir ("c:\Documents and settings\ Administrateur\bureau\") 5: affichage de la bote de dialogue Ouvrir 6: OuvrirFichiers = Application.GetOpenFilename(filefilter: ="Classeur Microsoft Excel (*.xls),*.xls,PageWeb (*.htm; *.html), *.htm;*.html", filterindex:=2, Title:="Ouverture des fichiers ventes", MultiSelect:=True) 7: si lutilisateur a slectionn plusieurs fichiers 8: If UBound(OuvrirFichiers) > 1 Then 9: Dim rep As Long 10: Dim Liste As String 11: Dim compteur As Byte

244

Excel et VBA

12: 13: 14: 15: 16:

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

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

La v ariable OuvrirFichiers dclare ligne 2 servira stock er le(s) fichier(s) slec tionn(s) par lutilisateur. Ligne 4, le chemin par df aut est modifi laide de linstruc tion ChDir, de f aon que le dossier propos par df aut lors de laf fichage de la bote d dialogue soit le Bureau Windows. Ligne 6, la bote de dialogue Ouvrir est af fiche. Le rsultat de la slection opre pa lutilisateur est affect la variable OuvrirFichiers. Largument filefilter est dfin de faon que les types de fichiers apparaissant dans la liste Type de fichier soient le fichiers portant l xtension .xls et .htm ou .html. L argument filterindex dfinit l deuxime type de fichier (.htm et .html) comme type par d aut. Enfin, le titre de l bote de dialogue est dfini Ou erture des fichiers entes et la slection multiple est autorise. Lignes 8 29, une instruction conditionnelle If...Then...Else sert vrif er si plusieurs fichiers ont t slectionns. Si tel est le cas (la condition pose ligne 8 est vrifie) les instructions des lignes 8 26 sexcutent. Lignes 9 11, les v ariables rep, Liste et Compteur sont dclares. Lignes 12 14, une instruction For...Each...Next sert stock er la liste des fichiers slectionns dans l variable Liste. La valeur initiale du compteur est 1, et elle est incrmente de 1 chaque passage de la boucle jusqu atteindre la v aleur limite de la v ariable de matrice [UBound(OuvrirFichiers)]. A chaque passage, la v ariable Liste reoit sa v aleur + un retour chariot ( & vbCr) + la valeur stocke dans la v ariable OuvrirFichiers, la position correspondant la valeur de Compteur [OuvrirFichiers(compteur)]. Les lignes 16 18, une instruction MsgBox est utilise pour aff cher la liste des f chiers slectionns par

Chapitre 7

Contrler les programmes VBA

245

lutilisateur et lui proposer de les ouvrir (voir Figure 7.21). Lignes 21 25, une instruction conditionnelle imbrique sert v aluer la rponse de lutilisateur . Une instruction For...Next ouvre les fichiers en cas de rponse posit ve. Si un seul fichier a t slec tionn (ligne 27), il est ouvert (ligne 28). Si lun des classeur s slectionns ne saf fi he pas, cest quil est masqu. Utilisez la commande Affi her pour en for cer laf fi hage. Si vous utilisez Excel 2007, cette fonction est accessible via longlet Affi hage du ruban ; avec une version ultrieure, utilisez la commande Affi her du menu Fentre.

Info

Figure 7.22 Lannulation de louverture est maintenant gre par le programme.

Tel quil se prsente ici, ce programme gnrera une erreur si lutilisateur clique sur le bouton Annuler ou sur la croix de fermeture de la bote de dialogue. Ajoutez les instructions apparaissant en gras dans le programme suivant pour rsoudre ce problme. Si aucun fichier nest slectionn, le message de la Figure 7.22 sa fiche et la procdure prend fi
Sub OuvertureDeFichiers() Dim OuvrirFichiers As Variant ChDir ("c:\Documents and settings\Administrateur\bureau\") OuvrirFichiers = Application.GetOpenFilename(filefilter: ="Classeur Microsoft Excel (*.xls),*.xls,PageWeb (*.htm; *.html), *.htm;*.html", filterindex:=2, Title:="Ouverture des fichiers ventes", MultiSelect:=True) If OuvrirFichiers = False Then MsgBox "Aucun fichier n a t slectionn. Fin de la procdure", _ VbOKOnly+vbCritical, "Fin de la procdure" Exit Sub End If If UBound(OuvrirFichiers) > 1 Then Dim rep As Long Dim Liste As String Dim compteur As Byte For compteur = 1 To UBound(OuvrirFichiers) Liste = Liste & vbCr & OuvrirFichiers(compteur) Next compteur rep = MsgBox("Lutilisateur a slectionn plusieurs fichiers. En voici la liste." & _ Liste & vbCr & "Voulez-vous les ouvrir?", vbYesNo+vbQuestion, _ "Ouvrir les fichiers?")

246

Excel et VBA

If rep = vbYes Then For compteur = 1 To UBound(OuvrirFichiers) Workbooks.Open Filename:=OuvrirFichiers(compteur) Next compteur End If Else Workbooks.Open Filename:=OuvrirFichiers(1) End If End Sub

Utiliser les oprateurs logiques


Visual Basic propose des oprateurs logiques, qui permettront doptimiser les instructions conditionnelles While...Wend et If...Then...Else. Ils permettent en ef fet de combiner plusieurs conditions et, ainsi, de simplifier les instructions conditionnelle dans bien des cas. Linstruction conditionnelle suivante utilise loprateur logique And pour vrifier que la aleur de la cellule A3 est infrieure 1 000 et suprieure 2 000 :
If Range("A3").Value < 1000 and Range("A3").Value > 2000 Then....

Les conditions tablies laide doprateurs logiques sont proches dune condition exprime dans un lang age courant, ce qui en f acilite considrablement la comprhension. Les instructions disponibles pour utiliser les oprateurs logiques sont prsentes dans le Tableau 7.5.
Tableau 7.5 : Les oprateurs logiques

Oprateur

Description Contrle que lune des conditions spcies est vrie. Si cest le cas, la condition renvoie True. Contrle que toutes les conditions spcies sont vries. Si cest le cas, lexpression conditionnelle renvoie True. Ou restrictif. Si lune ou lautre des conditions est respecte, lexpression conditionnelle renvoie True. Si plus dune condition est vrie, lexpression conditionnelle renvoie False. Cet oprateur nie lexpression devant laquelle il est situ. La structure conditionnelle If Not condition Then... est vrie si la condition nest pas respecte.

Or And Xor

Not

Chapitre 7

Contrler les programmes VBA

247

ce Astu

Vous pouvez employer les oprateurs Or et And un nombre de fois indtermin dans une mme expression. Cependant, pour combiner ces opr ateurs dans une mme e xpression, vous devez utiliser des parenthses, afin de spcifier quels sont les apports 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 e xpression, la Srie dinstructions ne ser a excute que si lune des deux pr emires conditions (ou les deux) est vrifi , et si la Condition3 est aussi vrifi .

Trier des donnes


Trier et rechercher des donnes est une opration courante pour lutilisateur dExcel. La recherche tant en gnral subordonne au tri des donnes, cette question est fondamentale pour le dv eloppeur dapplications pour Excel. Un programme VBA peut trier une zone dfinie dune feuille Excel comme un utilisateur le ferait via la commande Trier du menu Donnes, en faisant appel la mthode Sort. Vous serez cependant amen trier des donnes stockes dans une variable et non sur une feuille Excel. Par ailleurs, si un programme effectue de nombreuses oprations danalyse, de traitement et de tri sur des donnes, vous gagnerez en rapidit dexcution en travaillant sur ces donnes en mmoire plutt qu mme la feuille Excel. La mthode la plus simple consiste alors stocker les donnes de la feuille dans une v ariable tableau et travailler sur cette variable. Les techniques de tri des variables tableau sont nombreuses. Nous vous proposons ici une mthode simple et efficace qui consiste comparer des lments adjacents dans le tablea et les interv ertir si ncessaire. On utilise pour cela une boucle For...Next imbrique. Considrez la fonction suivante :
1: Public Function TriTableau(MaVar()) 2: Dim i As Long 3: Dim j As Long 4: Dim temp 5: For i = LBound(MaVar) To UBound(MaVar) - 1 6: For j = i + 1 To UBound(MaVar) 7: If MaVar(i) > MaVar(j) Then 8: temp = MaVar(i) 9: MaVar(i) = MaVar(j) 10: MaVar(j) = MaVar(i) 11: End If 12: Next j 13: Next i 14: TriTableau = MaVar 15: End Function

248

Excel et VBA

Linstruction de dclaration de notre fonction indique quelle attend la v ariable de tableau MaVar en argument. Lignes 2 4, les variables sont dclares. i et j sont les compteurs de nos boucles For...Next, tandis que la v ariable temp servira simplement stock er provisoirement des donnes. Lignes 5 13 se trouv ent les boucles For...Next imbriques qui assurent le tri de notre variable. La boucle principale se xcute autant de fois que la v ariable contient despaces de stockage 1. Elle permet ainsi def fectuer un tri de la v ariable indice par indice, du premier au dernier. La boucle imbrique (lignes 6 12) effectue le tri proprement parler. La valeur traite est compare toutes les valeurs qui sont stockes aprs elle dans la variable tableau ( j = i + 1 To UBound(MaVar)). Lors de chaque comparaison, si la valeur traite est suprieure la valeur laquelle elle est compare (ligne 7), les deux valeurs sont interverties (lignes 8 10). On stocke pour cela la valeur de mavar(i) dans la variable temp, puis on lui substitue la v aleur de mavar(j). On remplace ensuite la v aleur de mavar(j) par la v aleur de mavar(i) prcdemment mmorise dans la variable temp. Une fois la boucle imbrique e xcute, la valeur stocke lindice i de notre v ariable est plus petite que toutes celles qui la sui vent. La structure For...Next principale reprend alors la main et passe lindice suivant de la variable tableau. Une fois lopration mene pour lensemble des indices de la v ariable, les valeurs sont stockes par ordre croissant. Notre fonction reoit alors la v aleur de MaVar (ligne 14) et prend f n, retournant la variable maintenant trie. Pour un tri dcr oissant, remplacez simplement le signe > de la ligne 7 par le signe <.

ce Astu

Dans lexemple suivant, on utilise la mme mthode de comparaison pour trier les feuilles de travail du classeur actif. Cette fois-ci les donnes ne sont pas stockes dans une v ariable tableau, mais les feuilles sont directement tries sur le classeur.
1: Sub TriFeuilles() 2: Dim I As Integer 3: Dim J As Integer 4: Dim Min As Integer 5: Dim ModeCalcul As Integer 6: ModeCalcul = Application.Calculation 7: Application.Calculation = xlCalculationManual 8: Application.ScreenUpdating = False 9: With ActiveWorkbook.Worksheets 10: For I = 1 To .Count - 1 11: Min = I 12: For J = I + 1 To .Count

Chapitre 7

Contrler les programmes VBA

249

13: 14: 15: 16: 17: 18: 19: 20: End

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 lignes 7 et 8 sont destines optimiser le temps dexcution de la macro. Le classeur est ainsi pass en mode de calcul manuel ligne 7 afin dempcher un entuel recalcul des v aleurs des cellules chaque dplacement dune feuille. Ligne 8, la v aleur False est affecte la proprit ScreenUpdating de lobjet Application afin de ne pas mettre jour la fichage lcran lors d lexcution de la macro. Lignes 9 17, une structure With...End With est utilise a vec lobjet ActiveWorkbook.Worksheets afin de simplifier lcriture du code. Lignes 10 16, deux boucl For...Next imbriques assurent le tri des feuilles. La premire boucle sexcute autant de fois quil y a de feuilles dans le classeur 1. A chaque passage, la v ariable Min reoit pour v aleur lindex de la feuille en cours de traitement. La boucle imbrique (lignes 12 14) compare alors le nom stock dans la v ariable Min avec le nom de chaque feuille situe aprs elle.A chaque comparaison, si un nom infrieur (alphabtiquement antrieur) est trouv, la variable Min reoit pour valeur lindex de la feuille portant ce nom. A la fin de cette boucle, la ariable Min contient donc la valeur dindex de la feuille portant le nom le plus petit parmi celles qui ont t compares. Ligne 15, on vrifie si on a trouv une feuille portant un nom plus petit lors des comparaisons (If Min <> I). Si cest le cas, cette feuille est place de vant la feuille en cours de traitement ( .Item(Min).Move before:=Worksheets(I)). La boucle principale reprend alors la main et la feuille sui vante est traite selon le mme principe. Une fois les feuilles du classeur tries par ordre croissant de nom, le mode de calcul du classeur est redfini son tat initial (ligne 18) et la mise jour de laf fichag cran est ractive (ligne 19). Notez que, dans lexemple prcdent, on vite des oprations inutiles de dplacement de feuilles en mmorisant la donne la plus petite lor s des compar aisons (ligne 13) et en nef fectuant quune seule substitution de position si ncessaire la fin du pass ge de la boucle imbrique (ligne 15). Exercez-vous modifier la fonction TriTableau prsente plus avant selon le mme principe.

eil Cons

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

252

Excel et VBA

Si les fonctions sont un lment cl du dv eloppement dapplications, quels que soient le langage et len vironnement de programmation, cest particulirement vrai pour Excel, dont lactivit principale consiste effectuer des calculs. Vos projets VBA peuvent ainsi exploiter des fonctions Excel comme des fonctions VBA, mais vous pouvez galement crer vos propres fonctions afin de complter celles qui son proposes par dfaut dans le tableur.

Utiliser les fonctions Excel dans VBA


Excel offre un nombre impressionnant de fonctions intgres. De la simple addition aux fonctions de calculs avancs, les fonctions dExcel permettent de raliser nombre 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 fonctionsVisual Basic. Si de nombr euses fonctions mathmatiques Excel ont leur quivalent Visual Basic, Excel propose des fonctions avances (statistiques, financi es, etc.) qui sont bel et bien des fonctions Excel et non Visual Basic. Un programme exploitant ces fonctions ne pourr a donc pas tr e excut dans une application hte autre quExcel.

Pour utiliser une fonction Excel dans un programme VBA, v ous ferez appel lobjet Application qui reprsente lapplication hte (en loccurrence Excel) qui contient ces fonctions. Dans le xemple sui vant, la fonction QuelEstLeMax e xploite la fonction Max dExcel qui renvoie la valeur la plus forte dans une liste darguments. Si vous ne faites pas prcder la fonction Max du mot cl Application, la fonction ne sera pas reconnue et une erreur sera gnre.
Public Sub QuelEstLeMax() MsgBox "Le plus grand des chiffres reus est " _ & Application.Max(1, 2, 3, 4), vbInformation + vbOKOnly, _ "Utiliser les fonctions Excel dans VB" End Sub

Crer des fonctions Excel personnalises


Vous serez probablement amen utiliser des fonctions quExcel ne prendra pas en char ge. Le dveloppement de procdures de type Function permet de remdier ce problme. Les fonctions personnalises que v ous crez dans Visual Basic Editor peuv ent tre utilises dans Excel comme nimporte quelle fonction intgre. Elles apparaissent alors dans

Chapitre 8

Fonctions Excel et VBA

253

la liste des fonctions dExcel et peuvent tre employes dans un classeur Excel laide de la commande F onction du menu Insertion. Crez la fonction sui vante dans Visual Basic Editor :
Function Agessa(SalaireBrut) Agessa = (SalaireBrut * 0.95) * 0.0085 End Function

Cette fonction calcule les AGESSA (cotisation sur les droits dauteur). Les AGESSA se calculent sur une base de 95 % du salaire brut, au taux de 0,85 %. La fonction Agessa tant cre, retournez dans Excel. Choisissez la commande F onction du menu Insertion et slectionnez la catgorie F onctions personnalises. La fonction apparat dans la liste Nom de la fonction, prcde du nom du classeur dans lequel elle est stocke. Les arguments sont aussi visibles (voir Figure 8.1).
Figure 8.1 Les fonctions cres dans Visual Basic Editor peuvent tre exploites dans Excel, comme des fonctions intgres.

Les fonctions cres dans Visual Basic Editor sont gres dans Excel comme nimporte quelle fonction intgre du tableur. Si vous cliquez sur le bouton OK de la bote de dialogue Coller une fonction, v ous serez invit prciser les cellules correspondant aux ar guments de la fonction (v oir Figure 8.2). La fonction apparatra ensuite dans la barre de formule.

254

Excel et VBA

Figure 8.2 Vous tes invit spcif er les cellules correspondant aux arguments de la fonction.

Figure 8.3 La fonction personnalise est affi he dans la barre de formule.

eil Cons

Affectez des noms r eprsentatifs aux ar guments des fonctions que vous crez, afin quils soient comprhensibles pour les aut es 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 synta e et les ar guments de lensemble de ces fonctions. LExplorateur dobjets est alors la solution. Il recense en ef fet les fonctions Excel et VBA intgres comme personnalises et en dtaille lusage et la syntaxe.

Insrer une fonction VBA dans votre code


Pour insrer une fonction VBA dans votre code partir de lExplorateur dobjets, 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. 3. Dans la zone Classes, slectionnez la catgorie de fonctions v DateTime, Financial, Math, Strings, etc.). oulue ( Conversions,

Chapitre 8

Fonctions Excel et VBA

255

4. Dans la zone Membres de, slectionnez la fonction voulue. Les dtails de la fonction apparaissent dans la zone infrieure de lExplorateur dobjets. Si v ous souhaitez consulter laide en ligne pour la fonction choisie, cliquez sur le bouton Aide.
Figure 8.4 LExplorateur dobjets permet daccder lensemble des 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 est affiche

Insrer une fonction Excel dans votre code


Pour insrer une fonction Excel dans votre code, procdez comme suit : 1. Lancez lExplorateur dobjets. 2. Dans la liste Projet/Bibliothque, choisissez Excel. Dans la zone Classes, choisissez WorksheetFunction. Les fonctions Excel disponibles dans VBA apparaissent dans la zone Membres de.

256

Excel et VBA

Figure 8.5 Les fonctions Excel sont accessibles via lobjet WorksheetFunction.

3. Slectionnez la fonction voulue, puis copiez-la. 4. Placez ensuite le curseur lendroit o vous souhaitez faire apparatre la fonction dans la fentre Code. 5. Saisissez Application.WorksheetFunction., puis collez la fonction.
Plutt que de passer par lExplor ateur dobjets, vous pouvez simplement sa isir Application.WorksheetFunction. dans votr e code pour fair e 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 naffi hera pas daide lcriture de code lors de la saisie dans la fentre Code.

ce Astu

Recommandations pour lcriture de fonctions Excel


Les limites de la cellule
Noubliez pas que v os fonctions serviront en gnral insrer des donnes dans une cellule. Elles doivent donc prsenter les mmes limites que celles qui sappliquent aux cellules. Veillez donc ce que vos fonctions ne retournent jamais une chane suprieure 255 caractres. Si ctait le cas, le rsultat retourn et insr dans la cellule serait tronqu au-del de cette limite.

Chapitre 8

Fonctions Excel et VBA

257

Prcisez le type du rsultat


Veillez toujours prciser le type de donnes renvoy par une fonction, afin que le rsulta saffiche correctement dans la cellule. Ceci est particulirement vrai dans le cas dun fonction renvoyant un rsultat de type Date. Excel nappliquera en effet le format de date la cellule que si la fonction a t dclare comme retournant une valeur de type Date.

Des fonctions toujours jour


Par dfaut, Excel met jour le rsultat dune fonction personnalise dans une cellule de la mme f aon quil le f ait pour les fonctions Excel. Vous pouvez cependant dclarer une fonction volatile de faon quExcel calcule ou recalcule le rsultat dune fonction chaque fois que le contenu dune cellule de la feuille est modifi Pour marquer une fonction personnalise comme v olatile, insrez simplement linstruction suivante immdiatement aprs linstruction de dclaration de la fonction :
Application.Volatile

Considrez la fonction CalculTauxBenefice suivante. Elle retourne le taux de bnfic ralis partir du chiffre daffaires et des cots :
Public Function TauxBenefice(CA As Currency, Couts As Currency) As Long Application.Volatile TauxBenefice = ((CA - Couts) / CA) * 100 End Function

Notre fonction reoit les ar guments de type Currency CA (pour Chif fre dAf faires) et Couts. La premire instruction de la fonction la dclare comme volatile. La fonction calcule ensuite le taux de bnfice ralis en pourcentage

Principales fonctions VBA


Cette section prsente les fonctions de calcul VBA les plus couramment utilises dans le cadre de la programmation Excel. Elles sont classes selon les catgories suivantes :

fonctions mathmatiques ; fonctions de conversion de donnes ; fonctions de conversion de types de donnes ; fonctions de date et dheure ; fonctions financires

Pour obtenir une aide plus dv eloppe concernant lutilisation de ces fonctions, consultez laide en ligne de VBA.

258

Excel et VBA

Info

Les fonctions de tr aitement des c hanes de car actres constituant une question cl de la programmation, le chapitre suivant leur est entirement consacr. Notez que les ar guments 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.

Info

Dans le Tableau 8.1, largument nomm Number reprsente une v aleur numrique passe en argument.
Tableau 8.1 : Fonctions mathmatiques

Fonction

Description Retourne la valeur absolue de Number.

Type de donnes renvoy Mme type que Number

Abs(Number) Atn(Number)

Retourne larctangente de Number, sous la forme dun angle Double exprim en radians. Pour convertir des degrs en radians, multipliez-les par pi/180. Inversement, pour convertir des radians en degrs, multipliez-les par 180/pi. Retourne le cosinus de langle Number (exprim en radians). Retourne la valeur de la constante e leve la puissance Number. La constante e est la base des logarithmes npriens, et est peu prs gale 2,718282. Renvoie la partie entire dun nombre. Si Number est ngatif, Fix renvoie le premier entier ngatif suprieur ou gal Number.

Cos(Number) Exp(Number)

Double Double

Fix(Number)

Mme type que Number

Int(Number)

Comme la fonction Fix, la fonction Int renvoie la partie entire Mme type dun nombre. Par contre, si Number est ngatif, Int renvoie que Number le premier entier ngatif infrieur ou gal Number. Retourne le logarithme nprien de Number.

Log(Number) Rnd(Number)

Double

Retourne une valeur alatoire. Largument Number est facultatif Single et dnit le comportement de la fonction Rnd. Notez que la fonction Rnd gnre la mme srie de nombres alatoires chaque appel, car elle rutilise le nombre alatoire prcdent comme valeur initiale pour le calcul du nombre suivant. Utilisez linstruction Randomize pour initialiser le gn-rateur de nombres alatoires partir dune valeur initiale tire de lhorloge systme.

Chapitre 8

Fonctions Excel et VBA

259

Tableau 8.1 : Fonctions mathmatiques (suite)

Fonction

Description

Type de donnes renvoy

Mme type Round(Number, Retourne la valeur arrondie de Number. NumDigitsAfter- Largument facultatif NumDigitsAfterDecimal indique le nombre que Number de chiffres conserver aprs la virgule dans le nombre retourn. Decimal) Si cet argument est omis, Round renvoie la valeur entire arrondie.

Sgn(Number)

Retourne une valeur reprsentant le signe de Number: 1 si Number est infrieur zro. 0 si Number est gal zro. 1 si Number est suprieur zro. Retourne le sinus de langle Number exprim en radians. Retourne la racine carre de Number. Retourne la valeur de la tangente de langle Number exprime en radians.

Integer

Sin(Number) Sqr(Number) Tan(Number)

Double Double Double

Le Tableau 8.2 prsente les fonctions de con version de donnes de VBA. Ces fonctions traitent la valeur reue en argument et renvoient le rsultat de ce traitement. Les fonctions de conversion de type de donnes sont prsentes dans le Tableau 8.3.
Tableau 8.2 : Fonctions de conversion des donnes

Fonction

Description Renvoie une valeur reprsentant le code de caractres du premier caractre de la chane de caractres String. Renvoie le caractre dont le code de caractres est CharCode. CharCode est de type Long.

Type de donnes renvoy

Asc(String) Chr(CharCode) Format(Expression, Format)

Integer Integer

Renvoie Expression sous forme de chane formate String selon le Format dni. Vous pouvez ainsi dnir le format dune date, ou modier une chane pour afcher le symbole de la monnaie et placer des sparateurs entre les milliers. Retourne la valeur hexadcimale de Number sous forme de chane. Si Number nest pas un nombre entier, il est arrondi lentier le plus proche. Retourne la valeur octale de Number sous forme de chane.

Hex(Number)

String

Oct(Number)

String

260

Excel et VBA

Tableau 8.2 : Fonctions de conversion des donnes (suite)

Fonction

Description

Type de donnes renvoy

RGB(Red, Green, Retourne un entier reprsentant la valeur RGB. Blue) Les arguments Red, Green et Blue sont de type Integer et correspondent chacun la valeur de la couleur associe (rouge, vert, bleu), comprise entre 0 et 255. Str(Number)
Renvoie Number sous forme de chane de caractres. Number peut tre nimporte quelle valeur numrique que lon souhaite traiter comme une chane. Retourne String sous forme de valeur numrique de type appropri. Si String ne peut tre converti en valeur numrique, une erreur est gnre.

Long

String

Val(String)

Type appropri la valeur retourne

Contrairement aux fonctions prsentes dans le tableau prcdent, les fonctions dcrites dans le Tableau 8.3 ne renvoient pas les donnes reues en argument sous une forme diffrente, mais en modifient le type. La co version de donnes dans le type appropri est souvent ncessaire au bon droulement dun programme VBA. P ar e xemple, tenter dexcuter une fonction mathmatique sur une chane de caractres (mme si celle-ci nest compose que de chiffres) gnrera une erreur. Vous devrez alors faire appel la fonction de conversion numrique approprie afin que la gument pass la fonction soit reconnu comme une valeur et non plus comme une suite de caractres.
Tableau 8.3 : Fonctions de conversion des types de donnes

CBool(MaVar)

Convertit MaVar en une valeur boolenne. Renvoie True si MaVar est une valeur numrique diffrente de 0 ; False si MaVar est gale 0. Une erreur est gnre si MaVar nest pas une valeur numrique. Convertit MaVar en une variable de type Byte. Convertit MaVar en une variable de type Currency (montaire). Convertit MaVar en une variable de type Date. Convertit MaVar en une variable de type Double. Convertit MaVar en une variable de type Decimal. Convertit MaVar en une variable de type Integer. Convertit MaVar en une variable de type Long. Convertit MaVar en une variable de type Single.

CByte(MaVar) CCur(MaVar) CDate(MaVar) CDbl(MaVar) CDec(MaVar) CInt(MaVar) CLng(MaVar) CSng(MaVar)

Chapitre 8

Fonctions Excel et VBA

261

Tableau 8.3 : Fonctions de conversion des types de donnes (suite)

CStr(MaVar)

Convertit MaVar en une variable de type String. Si MaVar est une valeur de type 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. 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.

CVar(MaVar)

Le Tableau 8.4 prsente les fonctions de date et dheure. Largument nomm date dsigne toute expression valide qui renvoie une valeur de type Date.
Tableau 8.4 : Fonctions de date et dheure

Fonction

Description Retourne la date en cours partir de lhorloge systme de votre ordinateur. Vous pouvez galement utiliser linstruction Date pour dnir la date de lhorloge systme. Retourne lheure en cours partir de lhorloge systme. Utilisez linstruction Time pour rednir lheure systme. Retourne la date et lheure en cours. Retourne lanne correspondant Date sous la forme dun nombre entier. Retourne le mois correspondant Date sous la forme dun entier compris entre 1 (janvier) et 12 (dcembre). Retourne le jour correspondant Date sous la forme dun nombre entier compris entre 1 et 31.

Type de donnes renvoy

Date

Date

Time Now Year(Date) Month(Date) Day(Date)

Date Date Integer Integer Integer

Weekday(Date, Retourne un entier compris entre 1 et 7, qui reprsente Integer le jour de la semaine correspondant la date Date. FirsFirstDayOfWeek dnit le jour considr comme le tDayOfWeek) premier jour de la semaine. Il peut sagir dune valeur comprise entre 0 et 7 ou de lune des huit constantes vbDayOfWeek: vbUseSystem, vbMonday, vbTuesday, vbWednesday, vbThursday, vbFriday, vbSaturday et vbSunday. Si largument Firstdayofweek est omis, la valeur par dfaut est vbUseSystem et dpend donc du systme sur lequel est excute la macro. En France, le premier jour de la semaine par dfaut est le lundi, tandis quaux tats-Unis il sagira du dimanche. Il est donc recommand de prciser largument Firstdayofweek an dviter des diffrences de comportements du programme dun ordinateur lautre.

262

Excel et VBA

Tableau 8.4 : Fonctions de date et dheure (suite)

Fonction

Description

Type de donnes renvoy

WeekdayName(WeekDay, Abbreviate, FirstDayOfWeek)

Retourne une chane qui reprsente le nom du jour de la semaine String WeekDay. WeekDay peut tre une valeur num-rique 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. Largument nomm Abbreviate est facultatif et dnit si le jour est renvoy sous une forme abrge (lun. pour lundi). Sa valeur par dfaut est False. FirstDayOfWeek dnit quel est le jour considr comme le premier jour de la semaine. Notez que la fonction Weekday peut tre utilise comme argument de WeekdayName: ... WeekDayName(WeekDay(Date)) 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. 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. 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.

Hour(Date)

Integer

Minute(Date)

Integer

Second(Date)

Integer

DateSerial Retourne une date prcise (jour, mois et anne), fonction (Year, Month, des arguments Year, Month et Day reus. Day) TimeSerial Retourne une heure prcise (heures, minutes et secondes), (Hour, Minute, fonction des arguments reus. Second) DateValue (Date) TimeValue (Date) Timer
Renvoie la date reue en argument. Largument Date peut tre une chane de caractres, un nombre, une constante ou nimporte quelle expression renvoyant une date. Renvoie lheure reue en argument. Largument Date peut tre une chane de caractres, un nombre, une constante ou nimporte quelle expression renvoyant une heure. Renvoie le nombre de secondes coules depuis minuit (daprs lhorloge systme de votre ordinateur).

Date

Date

Date

Date

Single

Chapitre 8

Fonctions Excel et VBA

263

Le Tableau 8.5 prsente les fonctions financires de VBA.


Tableau 8.5 : Fonctions nancires

Fonction

Description

Type de donnes renvoy

Fonctions de calcul damortissement Retourne la valeur de lamortissement dun bien au cours DDB(Cost, Double Salvage, Life, dune priode dnie, en utilisant la mthode damortissement Period,) dgressif taux double ou toute autre mthode prcise. Les arguments nomms reus sont : Cost: cot initial du bien. Salvage: valeur du bien la n 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). Retourne lamortissement linaire dun bien sur une priode dnie. Double SLN(Cost, Salvage, Life) Les arguments nomms sont les mmes que pour la fonction DDB(). Retourne la valeur de lamortissement global dun bien sur une Double SYD(Cost, Salvage, Life, priode donne. Les arguments nomms sont les mmes que pour Period) la fonction DDB(). Fonctions de calcul de valeur future

FV(Rate, NPer, Retourne le futur montant dune annuit base sur des versements Double Pmt, PV, Type) constants et priodiques et sur un taux dintrt xe. Les arguments nomms reus sont : Rate: taux dintrt par chance. Pour un prt dont le taux annuel serait 5 %, avec des chances mensuelles, le taux par chance serait de 0,05/12, soit 0,0042. NPer: nombre dchances de lemprunt ou du placement. Pmt: montant du paiement effectuer chaque chance. PV: facultatif. Valeur actuelle (ou somme globale) dune srie de paiements devant tre effectus dans le futur. La valeur par dfaut est 0. Type: facultatif. Date dchance des paiements. Indiquez la valeur 0 si les paiements sont dus terme chu, ou la valeur 1 si les paiements sont dus terme choir. Si largument est omis, la valeur par dfaut est 0.

264

Excel et VBA

Tableau 8.5 : Fonctions nancires (suite)

Fonction

Description

Type de donnes renvoy

Fonctions de calcul de taux dintrt

Rate(NPer, Pmt, Retourne le taux dintrt par chance pour une annuit. Double PV, FV, Type, Les arguments nomms NPer, Pmt, PV et Type sont les mmes Guess) que pour la fonction FV() dcrite ci-dessus. FV: facultatif. Valeur future ou solde que vous souhaitez obtenir aprs avoir effectu le dernier paiement. Si vous souhaitez pargner 10 000 , la valeur future est de 10 000. Si largument est omis, la valeur par dfaut est 0 (qui est la valeur future dun emprunt). Guess: facultatif. Valeur qui devrait tre renvoye par la fonction Rate. Sil est omis, Guess prend la valeur 0,1 (10 pour cent).
Fonctions de calcul de taux de rendement interne

IRR(Values(), Guess)

Retourne le taux de rendement interne dune srie de mouvements Double de trsorerie priodiques (paiements et encaissements). Les arguments nomms sont les suivants : Values(): tableau de donnes indiquant les valeurs des mouvements de trsorerie. Le tableau doit contenir au moins une valeur ngative (un paiement) et une valeur positive (un encaissement). Guess: facultatif. Valeur qui devrait tre renvoye par la fonction IRR. Sil est omis, largument Guess prend pour valeur 0,1 (10 pour cent).

MIRR(Values(), Retourne le taux de rendement interne modi dune srie Finance_Rate, de mouvements de trsorerie priodiques Reinvest_Rate) (paiements et encaissements). Values() : idem que pour la fonction IRR dcrite ci-dessus. Finance_Rate: taux dintrt pay pour couvrir le cot du nancement. Reinvest_Rate: taux dintrt peru sur les gains tirs des sommes rinvesties.
Fonctions de calcul de nombre dchances

Double

NPer(Rate, Pmt, Retourne le nombre dchances dune annuit PV, FV, Type) base sur des versements constants et priodiques et sur un taux dintrt xe. Les arguments nomms sont les mmes que pour les fonctions FV et Rate dcrites plus avant dans ce tableau.

Double

Chapitre 8

Fonctions Excel et VBA

265

Tableau 8.5 : Fonctions nancires (suite)

Fonction

Description

Type de donnes renvoy

Fonctions de calcul de montant de versements

IPmt(Rate, per, Renvoie une valeur de type Double indiquant le NPer, PV, FV, montant, sur une priode donne, dune annuit base Type) sur des versements constants et priodiques et sur un taux dintrt xe. Les arguments nomms sont les mmes que pour les fonctions FV et Rate dcrites plus avant dans ce tableau. Pmt(Rate, NPer, Retourne le montant dune annuit base sur des PV, FV, Type) versements constants et priodiques et sur un taux dintrt xe. Les arguments nomms sont les mmes que pour les fonctions FV et Rate dcrites plus avant dans ce tableau.

Double

Double

Double PPmt(Rate, per, Retourne la valeur du remboursement du capital, NPer, PV, FV, pour une chance donne, dune annuit base sur Type) des versements constants et priodiques et sur un taux dintrt xe. Les arguments nomms sont les mmes que pour les fonctions FV et Rate dcrites plus avant dans ce tableau.
Fonctions de calcul de montant de valeur actuelle

NPV(Rate, Values())

Retourne la valeur nette actuelle dun investissement, Double calcule en fonction dune srie de mouvements de trsorerie priodiques (paiements et encaissements) et dun taux descompte. Les arguments nomms sont les suivants : Rate: taux descompte sur la priode, exprim sous la forme dun nombre dcimal. Values(): tableau de donnes indiquant les valeurs des mouvements de trsorerie. Le tableau doit contenir au moins une valeur ngative (un paiement) et une valeur positive (un encaissement).

PV(Rate, NPer, Retourne le montant actuel dune annuit base sur Pmt, FV, Type) des chances futures constantes et priodiques, et sur un taux dintrt xe. Les arguments nomms sont les mmes que pour les fonctions FV et Rate dcrites plus avant dans ce tableau.

Double

9
Manipulation des chanes de caractres
Au sommaire de ce chapitre

Modif er des chanes de caractres Comparer des chanes de caractres Rechercher dans les chanes de caractres

268

Excel et VBA

La manipulation de chanes de caractres est un aspect cl de la programmation, quel que soit le langage de programmation. La manipulation de chanes permet par e xemple daffiche des messages lattention de lutilisateur pour linformer ou pour interagir avec lui. Dans ce cadre, les valeurs numriques doivent souvent tre traites et formates comme des chanes de caractres afin den xtraire les informations pertinentes. P ar ailleurs, les informations retournes par la fonction InputBox ou via un contrle TextBox sont des chanes de caractres et devront tre traites comme telles.

Modier des chanes de caractres


Les chanes de caractres peuv ent tre modifies d peu prs toutes les aons. Vous pouvez bien sr ajouter des lments une chane de caractres en la concatnant a vec dautres chanes de caractres, mais vous pouvez aussi extraire une partie dune chane de faon nen conserver que linformation pertinente.

Concatner des chanes


Concatner des chanes consiste les "accoler", cest--dire assembler plusieurs chanes de caractres pour en crer une seule. Vous pouvez galement concatner lensemble des lments dune variable de matrice, de f aon obtenir une chane qui en reprenne toutes les valeurs.

Concatner des chanes simples


La concatnation des chanes est ralise laide des oprateurs & et +. Il est cependant conseill de pri vilgier loprateur &, qui ne fonctionne qua vec les chanes, et de conserver loprateur + pour les additions. Votre code sera ainsi sans ambigut. Vous pouv ez concatner toute e xpression qui ren voie une chane de caractres. Il peut sagir dune v ariable de type String comme dune fonction ren voyant une chane, ou encore dune chane de caractres entoure de guillemets.
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 con vertir la valeur numrique en une c hane de caractres, dans linstruction de concatnation.

Considrez lexemple suivant :


1: Sub ConcatenerDesChanes() 2: Dim MonNom As String 3: Dim MonBenefice As Long 4: Dim MonMessage As String

Chapitre 9

Manipulation des chanes de caractres

269

5: 6: 7:

MonNom = ActiveWorkbook.ActiveSheet.Cells(1, 2) MonBenefice = ActiveWorkbook.ActiveSheet.Cells(1, 3).Value MonMessage = "La prime de " & MonNom & " est de " & Str(Int(MonBenefice / 20)) & " euros." 8: MsgBox MonMessage 9: End Sub

Lignes 2 4, les v ariables sont dclares. Notez que la v ariable MonBenefice est de type Long et ne peut donc tre concatne telle quelle. Lignes 5 et 6, les v ariables MonNom et MonBenefice reoivent respectivement pour valeur le contenu des cellules A2 et A3. Ligne 7 a lieu la concatnation des dif frentes chanes de faon gnrer le message af fic par la fonction MsgBox la ligne suivante. Les lments concatns sont les suivants :

"La prime de" est une simple chane de caractres, entoure de guillemets. MonNom est une v ariable de type String et peut donc tre concatne sans quil soit ncessaire deffectuer une conversion de type de donnes. "est de" est une simple chane de caractres. Notez que nous a vons fait prcder et suivre le texte despaces, de manire gnrer une chane lisible. Str(Int(MonBenefice / 20)) est une expression renvoyant une chane de caractres. Tout dabord, la v aleur numrique MonBenefice est divise par 20, de faon obtenir la valeur de la prime (5 % du bnfice). La fonction Int renvoie la valeur entire de la Str con vertit le rsultat numrique ainsi somme ainsi obtenue. Enfin, la fonction obtenu en une chane de caractres qui peut ainsi tre concatne a vec les autres chanes.

"euros" est une simple chane de caractres.

On obtient ainsi le message affich dans la bote de dialogue de la Figure 9.1


Figure 9.1 La concatnation de chanes permet daffi her des messages lattention de lutilisateur.

Concatner les valeurs dune variable de matrice


Si vous souhaitez crer une seule chane de caractres partir des dif frentes valeurs dune variable de matrice (ou variable tableau), utilisez la fonction Join selon la syntaxe suivante :
Join(SourceArray, Delimiter)

270

Excel et VBA

o largument nomm SourceArray est la v ariable de matrice dont on souhaite runir les donnes en une chane, et Delimiter (facultatif) la chane de caractres qui sera utilise comme sparateur entre les dif frentes donnes extraites de la v ariable. Si Delimiter est omis, les lments du tableau sont concatns sans sparateur.
JoursDans le xemple sui vant, les jours de la semaine sont stocks dans le tableau Semaine. La bote de dialogue reprsente la Figure 9.2 est ensuite affiche. Notez quo utilise une virgule suivie dun espace comme sparateur, et que lon ajoute un point la fi de la chane.
Sub ConcatenerUnTableau() Dim JoursSemaine(1 To 7) Dim n as Byte For n = 1 To 7 JoursSemaine(n) = WeekdayName(Weekday:=n, abbreviate:=False, _ firstdayofweek:=vbMonday) Next n MsgBox "Les jours de la semaine sont: " & Join(JoursSemaine, ", ") & "." End Sub

Figure 9.2 Utilisez la fonction Join pour concatner les espaces de stockage dune variable tableau.

Insrer des caractres non accessibles au clavier


Pour insrer, dans des chanes, des caractres qui ne peuvent tre saisis dans le code VBA laide du clavier tels quun saut de paragraphe ou un retour la ligne , on fait appel la fonction Chr() qui renvoie le caractre dont le code est prcis entre parenthses. Utilisez la fonction Chr() selon la syntaxe suivante :
Chr(CharCode)

o largument nomm CharCode (de type Long) est le code ASCII du caractre que lon souhaite insrer . Dans le xemple sui vant, on utilise la fonction Chr() pour insrer un retour chariot (Chr(13)) et une puce ( Chr(149)) devant chaque jour de la semaine, afin d gnrer le message ensuite affich dans une bote de dialogue ( oir Figure 9.3).
Sub UtiliserChr() Dim n As Byte Dim Message As String Message = "Les jours de la semaine sont:" For n = 1 To 7

Chapitre 9

Manipulation des chanes de caractres

271

Message = Message & Chr(13) & Chr(149) & " " & WeekdayName(Weekday: =n, abbreviate:=False, firstdayofweek:=vbMonday) Next n MsgBox Message End Sub

Figure 9.3 Utilisez la fonction Chr() pour insrer des caractres non accessibles au clavier.

Afin damliorer la lisibilit de otre code, prfrez les constantes Visual Basic la fonction Chr() quand cela est possible. Le Tableau 9.1 prsente les constantes Visual Basic les plus communment employes pour crer des chanes de caractres.
Tableau 9.1 : Constantes Visual Basic renvoyant un caractre

Constante

Valeur Saut de paragraphe Saut de ligne Retour chariot + saut de ligne Saut de ligne spcique la plate-forme : quivaut vbCrLf pour Windows et vbCr sur un Macintosh Tabulation

Equivalent avec Chr()

vbCr vbLf vbCrLf vbNewLine

Chr(13) Chr(10) Chr(13) & Chr(10) Chr(13) & Chr(10) Windows Chr(13) Macintosh Chr(9)

vbTab

Rpter une srie de caractres


Utilisez la fonction String() pour renvoyer une chane compose dun caractre rpt un nombre dfini de fois, selon la synta e suivante :
String(Number, Character)

o les arguments nomms Number et Character reprsentent respectivement le nombre de rptitions et le caractre rpter. Lexpression suivante insre dans une chane la valeur

272

Excel et VBA

de la cellule A1 laquelle sont ajouts six zros. La v aleur, exprime en millions dans la cellule, est ainsi rcupre sous forme dunits :
MsgBox Str(ActiveWorkbook.ActiveSheet.Range("A1").Value) & String(6, "0")

ce Astu

Vous pouvez utiliser la fonction Chr() pour lar gument 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 despace , selon la syntaxe suivante :
Space(Number)

o largument nomm Number est le nombre despaces renvoyer.

Supprimer les espaces superus dune chane


Traiter les espaces dune chane est une opration souv ent 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 o lautre des extrmits de la chane retourne avant de traiter ces donnes. Visual Basic propose trois fonctions permettant de supprimer les espaces superflus dun chane :

LTrim(String): retourne une chane de caractres partir de la chane String reue en argument, dont les espaces situs gauche ont t supprims. RTrim(String): retourne une chane de caractres partir de la chane String reue en argument, dont les espaces situs droite ont t supprims. Trim(String): retourne une chane de caractres partir de la chane String reue en argument, dont les espaces situs droite et gauche ont t supprims.

Largument nomm String est une chane de caractres. Linstruction suivante stock e les donnes saisies par lutilisateur dans la v ariable MaVar aprs avoir pris soin de supprimer les ventuels espaces saisis par erreur :
MaVar = Trim(InputBox("Veuillez saisir votre nom:"))

Extraire une partie dune chane


Les fonctions Left(), Right() et Mid() permettent de rcuprer une partie dune chane de caractres. Combines aux fonctions de recherche dans une chane (prsentes plus loin

Chapitre 9

Manipulation des chanes de caractres

273

dans ce chapitre), elles permettent de xtraire des informations prcises dune chane. La fonction Len() qui renvoie la longueur dune chane, cest--dire le nombre de caractres qui la composent est souvent employe comme argument de ces fonctions. Utilisez ces fonctions selon la syntaxe suivante :

Len(String) retourne une v aleur de type Double qui reprsente le nombre de caractres prsents dans la chane String. Left(String, Lenght) retourne les Lenght premiers caractres situs g auche de la chane String reue en ar gument. Si Lenght est suprieur ou g al la longueur d e la chane String, la totalit de la chane est retourne. Right(String, Lenght) retourne les Lenght premiers caractres situs droite de la chane String reue en ar gument. Si Lenght est suprieur ou g al la longueur de la chane String, la totalit de la chane est retourne. Mid(String, Start, Length) retourne une chane compose des Lenght caractres situs dans la chane String partir du caractre dont la position est Start. Le caractre situ la position Start est g alement retourn. Largument Lenght est facultatif. Sil est omis ou sil est suprieur au nombre de caractres prsents aprs la position Start, tous les caractres situs partir de la position Start et jusqu la fin de la chane sont retourns

Considrez les trois instructions suivantes :


1: MonTexte = Left(MonTexte, Len(MonTexte) - 1) 2: MonTexte = Right(MonTexte, Len(MonTexte) - 1) 3: Trim(Mid(ActiveWorkbook.ActiveSheet.Range("A1").Value, InStr (ActiveWorkbook.ActiveSheet.Range("A1").Value, Chr(34)) + 1))

La premire instruction modifie la ariable MonTexte en supprimant le dernier caractre ( droite). On utilise pour cela la fonction Len() qui retourne la longueur de la chane laquelle on retire 1. Ligne 2, on modifie la ariable MonTexte en supprimant le premier caractre ( g auche). Len() pour retourner la Comme dans linstruction prcdente, on utilise la fonction longueur de la chane laquelle on enlve 1. Enfin, linstruction de la ligne 3 retourne le contenu de la cellule A1 partir du premier InStr() guillemet (non inclus) prsent dans la chane. On utilise pour cela la fonction prsente plus loin dans ce chapitre, qui retourne la position du caractre recherch (ici Chr(34), soit un guillemet). On utilise cette valeur laquelle on ajoute 1 pour commencer la chane partir du caractre qui suit le guillemet. Notez que lon emploie la fonction Trim() afin de supprimer les entuels espaces prsents aux e xtrmits de la chane retourne par la fonction Mid().

274

Excel et VBA

Effectuer des remplacements au sein dune chane


Utilisez la fonction Replace() pour effectuer des remplacements au sein dune chane de caractres selon la syntaxe suivante :
Replace(Expression, Find, Replace, Start, Count, Compare)

o Expression est une expression valide qui renvoie la chane de caractres traiter. Find est la chane recherche et est remplace par Replace. Les trois ar guments suivants sont facultatifs :

Start prcise la position de caractres partir de laquelle doi vent sef fectuer les remplacements dans Expression. Si cet argument est omis, lensemble de la chane est trait. Count indique le nombre de remplacements ef fectuer. Sil est omis, sa v aleur par dfaut 1 est utilise, et toutes les occurrences de Find sont remplaces.

Enfin, Compare prcise le type de comparaison effectue. Il peut sagir de lune des valeurs suivantes :

vbUseCompareOption ou 1 : cest la valeur de loption Option Compare prcise dans len-tte du module dans lequel se trouve linstruction qui est utilise pour dfinir le typ de comparaison. vbBinaryCompare ou 0 : ef fectue une comparaison binaire. La recherche se f respectant la casse de Find.

ait en

vbTextCompare ou 1 : effectue une comparaison de te xte. La recherche se f ait sur le texte, sans prendre en considration la casse des occurrences trouves. vbDatabaseCompare ou 2 : effectue une comparaison sappuyant sur des informations contenues dans une base de donnes Microsoft Access seulement.

Dans lexemple suivant, lignes 7 9, les donnes de la feuille acti ve sont stockes dans la variable de matrice MesValeurs, tout en remplaant au passage les ";" par des ",".
1: Sub UtiliserReplace() 2: Dim MaCellule As Range 3: Dim n As Long 4: Dim MesValeurs() 5: ReDim MesValeurs(1 To ActiveWorkbook.ActiveSheet .UsedRange.Cells.Count) 6: n = 0 7: For Each MaCellule In ActiveWorkbook.ActiveSheet.UsedRange.Cells 8: n = n + 1 9: MesValeurs(n) = Replace(MaCellule.Value, ";", ",") 10: Next MaCellule 11: End Sub

Chapitre 9

Manipulation des chanes de caractres

275

ce Astu

Affectez une c hane nulle lar gument Replace pour supprimer toutes les occurrences de Find dans la chane traite.

Modier la casse des chanes de caractres


Les fonctions suivantes permettent de formater une chane :

StrConv(String, Conversion) convertit les majuscules et minuscules de la chane String selon la valeur de Conversion:

vbUpperCase ou 1 convertit la chane en majuscules. vbLowerCase ou 2 convertit la chane en minuscules. vbProperCase ou 3 convertit les lettres de la chane en minuscules et applique une majuscule la premire lettre de chaque mot.

UCase(String) retourne la chane String en convertissant toutes les lettres minuscules en majuscules. Equi vaut utiliser la fonction StrConv() en af fectant la v aleur 1 ou vbUpperCase largument Conversion. LCase(String) retourne la chane String en convertissant toutes les lettres majuscules en minuscules. Equivaut utiliser la fonction StrConv() en affectant la valeur 2 ou vbLowerCase largument Conversion.

Comparer des chanes de caractres


Comme vous le verrez en dveloppant vos programmes VBA, la comparaison de chanes de caractres est souv ent utilise dans des structures de contrle pour rpter une opration jusqu ce quune condition soit remplie. La mthode la plus simple pour comparer des chanes consiste emplo yer les oprateurs arithmtiques =, < et >. Vous pouvez galement utiliser la fonction StrComp(), en respectant la syntaxe suivante :
StrComp(String1, String2, Compare)

o String1 et String2 sont les chanes comparer. Largument facultatif Compare dfinit le type de comparaison effectuer et peut prendre les valeurs suivantes :

vbUseCompareOption ou 1 : cest la valeur de loption Option Compare prcise dans len-tte du module dans lequel se trouve linstruction qui est utilise pour dfinir e type de comparaison.

276

Excel et VBA

vbBinaryCompare ou 0 : ef fectue une comparaison binaire. La recherche se f respectant la casse de Find.

ait en

vbTextCompare ou 1 : effectue une comparaison de te xte. La recherche se f ait sur le texte, sans prendre en considration la casse des occurrences trouves. vbDatabaseCompare ou 2 : effectue une comparaison sappuyant sur des informations contenues dans une base de donnes Microsoft Access seulement.

La fonction StrComp() peut renvoyer les valeurs suivantes :


1 : String1 est infrieur String2. 0 : String1 est gal String2. 1 : String1 est suprieur String2. Null : String1 ou String2 est de type Null.

Pour comparer des chanes de caractres, la fonction StrComp() compare les codes ANSI des caractres qui les composent par ordre de position. Lorsque le code de deux caractres compars est diffrent, la comparaison sarrte et la fonction ren voie la valeur correspondante. Si les deux caractres compars sont identiques, les caractres sui vants des deux chanes sont leur tour compars, etc. Le tableau sui vant prsente quelques e xemples de comparaisons de chanes en mode de comparaison vbTextCompare:
String1
a abc ab abc

String2
A AbC ba a

Rsultat de la comparaison Les deux chanes sont identiques Les deux chanes sont identiques

String1 est infrieur String2 String1 est suprieur String2

La procdure sui vante fait appel la fonction InputBox() pour af ficher deux reprise une bote de saisie dans laquelle lutilisateur est in vit entrer une chane de caractres. Les deux chanes sont ensuite compares et le rsultat de la comparaison est af fich dan une bote de dialogue grce linstruction MsgBox.
1: Sub ComparerDesChanes() 2: Dim MaChane1 As String 3: Dim MaChane2 As String 4: MaChane1 = InputBox("Veuillez entrer la valeur de la chane 1:", "Comparaison de chanes") 5: Do Until MaChane1 <> ""

Chapitre 9

Manipulation des chanes de caractres

277

6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:

MaChane1 = InputBox("Vous devez prciser une chane comparer!" & _ vbCr & "Entrez une valeur pour la chane 1:", "Comparaison de chanes") Loop MaChane2 = InputBox("Veuillez entrer la valeur de la chane 2:", "Comparaison de chanes") Do Until MaChane2 <> "" MaChane2 = InputBox("Vous devez prciser une chane comparer!" & _ vbCr & "Entrez une valeur pour la chane 2:", "Comparaison de chanes") Loop Select Case StrComp(MaChane1, MaChane2, vbTextCompare) Case -1 MsgBox "La chane 1 est infrieure la chane 2." Case 0 MsgBox "La chane 1 et la chane 2 sont identiques." Case 1 MsgBox "La chane 1 est suprieure la chane 2." End Select End Sub

Lignes 5 8 pour la premire chane et 10 13 pour la seconde, une structure Do Until...Loop est employe pour afficher de nou eau une bote de saisie si lutilisateur a valid avec une zone de saisie vide. On utilise ici loprateur <> pour comparer deux chane s (la variable et une chane vide) afin de dfinir si la boucle doit tre xcute. Lignes 14 21, une structure Select Case...End Select est utilise pour dfinir la aleur renvoye par linstruction StrComp(MaChane1, MaChane2, vbTextCompare) et affiche le message adquat.

Rechercher dans les chanes de caractres


La recherche de chanes dans des chanes de caractres est lune des oprations les plus courantes du traitement de chanes. VBA permet de rechercher une chane de caractres au sein dune autre chane, mais aussi de rechercher des chanes de caractres dans des variables de matrice.

Rechercher une chane dans une chane


Pour rechercher une chane au sein dune autre chane, f aites appel la fonction InStr(). Elle renvoie la position dans une chane de la premire occurrence de la chane qui y est recherche. InStr() est utilise selon la syntaxe suivante :
InStr(start, string1, string2, compare)

278

Excel et VBA

o string1 et string2 sont respectivement la chane dans laquelle seffectue la recherche et la chane rechercher . Largument start est f acultatif et indique la position du caractre partir duquel la chane doit tre recherche. Sil est omis, la recherche commence ds le premier caractre. L argument facultatif compare dfinit le type de comparaison effectuer. Il peut prendre lune des valeurs suivantes :

vbUseCompareOption ou 1 : cest la valeur de loption Option Compare prcise dans len-tte du module dans lequel se trouv e linstruction qui est utilise pour dfinir l type de comparaison. vbBinaryCompare ou 0 : ef fectue une comparaison binaire. La recherche se f respectant la casse de Find.

ait en

vbTextCompare ou 1 : effectue une comparaison de te xte. La recherche se f ait sur le texte, sans prendre en considration la casse des occurrences trouves. vbDatabaseCompare ou 2 : effectue une comparaison sappuyant sur des informations contenues dans une base de donnes Microsoft Access uniquement.

Dans lexemple suivant la procdure MaMacro appelle la fonction VerifierEnregistrement pour sassurer que le document actif est enregistr avant de sexcuter. Si ce nest pas le cas, la fonction ren voie False, et linstruction End met fin l xcution du programme aprs avoir affich un message lattention de lutilisateu .
1: Sub MaMacro() 2: If VerifierEnregistrement(ActiveDocument) = False Then 3: MsgBox "Cette commande ne peut tre excute que sur un fichier enregistr.", _ 4: vbOKOnly + vbCritical, "Excution impossible" 5: End 6: End If 7: suite des instructions de la macro 8: End Sub 9: Function VerifierEnregistrement(MonDoc As Document) As Boolean 10: If InStr(MonDoc.FullName, Application.PathSeparator) = 0 Then 11: VerifierEnregistrement = False 12: Else 13: VerifierEnregistrement = True 14: End If 15: End Function

La fonction VerifierEnregistrement est appele ligne 2 et reoit en ar gument le document actif. Ligne 10, on recherche le sparateur propre au systme sur lequel se xcute le programme (Application.PathSeparator) au sein du nom complet du document, chemin inclus (proprit FullName). Si le fichier na pas t enr gistr, la chane retourne par la proprit FullName est la mme que celle qui serait retourne par la proprit Name et ne contient pas de sparateur ; la fonction InStr() renvoie donc la v aleur 0 et notre f onction

Chapitre 9

Manipulation des chanes de caractres

279

reoit la valeur False. Dans le cas contraire, cest la v aleur True qui est affecte la fonction VerifierEnregistrement. Dans le xemple sui vant, la fonction ScinderChaine est appele par MaMacro et reoit en arguments deux chanes de caractres : la chane scinder en plusieurs parties et le sparateur utiliser pour ef fectuer cette opration. Elle ren voie ensuite une v ariable de matrice dont les zones de stockage contiennent les diffrentes chanes extraites de la chane reue en argument. Celles-ci sont ensuite traites de faon tre affiches
1: Sub MaMacro() 2: Dim n As Long 3: Dim MonResultat() 4: Dim Exemple As String 5: Dim Message As String 6: Exemple = "Transports:Maritimes:Bateaux:A voile" 7: MonResultat = ScinderChaine(Exemple, ":") 8: For n = 1 To UBound(MonResultat) 9: Message = Message & vbCr & Chr(149) & _ " " & MonResultat(n) 10: Next n 11: MsgBox "La chane a t scinde en " & UBound(MonResultat) & _ " parties:" & Message 12: End Sub 13: Function ScinderChaine (machane As String, separateur As String) 14: Dim pos As Long 15: Dim mavar 16: ReDim mavar(1) 17: pos = InStr(machane, separateur) 18: Do While pos <> 0 19: mavar(UBound(mavar)) = Left(machane, pos - 1) 20: machane = Mid(machane, pos + Len(separateur)) 21: pos = InStr(machane, separateur) 22: ReDim Preserve mavar(UBound(mavar) + 1) 23: Loop 24: mavar(UBound(mavar)) = machane 25: ScinderChaine = mavar 26: End Function

Ligne 7, la fonction ScinderChaine est appele et reoit en arguments la chane affecte la variable Exemple la ligne prcdente, ainsi que le sparateur utiliser, en loccurrence deux-points. La fonction ScinderChaine prend alors la main. La variable de matrice mavar est dclare puis initialise la ligne suivante. Ligne 17, pos reoit en valeur le rsultat de la recherche du sparateur au sein de la chane. Lignes 18 23, une structure de contrle Do While...Loop est employe afin de rpter l recherche tant quelle aboutit, cest--dire tant que la fonction InStr() renvoie une valeur diffrente de 0. A chaque nouvelle recherche, on affecte au dernier espace de stockage de mavar la chane prcdant la position du sparateur trouv ( Left(machane, pos 1)).

280

Excel et VBA

La valeur de machane est ensuite redfinie de aon en supprimer la partie e xtraite, ainsi que le sparateur recherch (ligne 20). On utilise pour cela les fonctions Mid() et Len() afi de dfinir la position de dpart de la nou elle chane immdiatement aprs le sparateur (pos + Len(separateur)). La comparaison est alors de nouv eau effectue sur la nouvelle chane (ligne 21) et la variable de mavar reoit un espace de stockage supplmentaire. Notez lutilisation du mot cl Preserve afin de prser er les valeurs dj stockes dans mavar. Enfin, ligne 24, le dernier espace de stockage de mavar reoit la valeur de machane quand la recherche na pas abouti. La procdure appelante reprend alors la main et le message reprsent la Figure 9.4 est affich
Figure 9.4 Utilisez la fonction InStr() pour scinder une chane fonction dun sparateur.

Rechercher une chane dans une variable de matrice


Visual Basic propose deux fonctions pour rechercher une chane au sein de tous les espaces de stockage dune variable de matrice : Filter() et Split(). La fonction Filter() renvoie un tableau de base zro dont les espaces de stockage sont les mmes que ceux de la variable traite, dans lesquels la recherche a abouti. Si la recherche na pas russi, la fonction ren voie 1. Utilisez la fonction Filter() en respectant la syntaxe suivante :
Filter(sourcearray, match, include, compare)

o sourcearray reprsente la variable de matrice une dimension dans laquelle seffectue la recherche, et match la chane recherche. include et compare sont facultatifs. Si include est dfini True (valeur par df aut), les contenus des zones de stockage o a abouti la recherche sont retourns. Si include est dfini False, ce sont les zones de stockage dans lesquelles na pas abouti la recherche qui sont renvoyes. Dans lexemple suivant, on affecte les noms des jours de la semaine aux dif frents espaces de stockage dune v ariable de matrice. On ef fectue ensuite quatre recherches distinctes au sein de la variable et on en affiche les rsultats
1: Sub RechercherDansUnTableau() 2: Dim n As Long 3: Dim JoursSemaine(1 To 7) 4: Dim MaRecherche1 5: Dim MaRecherche2

Chapitre 9

Manipulation des chanes de caractres

281

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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:

MaRecherche3 MaRecherche4 Message As String n = 1 To 7 JoursSemaine(n) = WeekdayName(Weekday:=n, abbreviate:=False, firstdayofweek:=vbMonday) Next n MaRecherche1 = Filter(sourcearray:=JoursSemaine(), match:="M", include:=True, Compare:=vbBinaryCompare) MaRecherche2 = Filter(sourcearray:=JoursSemaine(), match:="M", include:=False, Compare:=vbBinaryCompare) MaRecherche3 = Filter(sourcearray:=JoursSemaine(), match:="M", include:=True, Compare:=vbTextCompare) MaRecherche4 = Filter(sourcearray:=JoursSemaine(), match:="M", include:=False, Compare:=vbTextCompare) If Not UBound(MaRecherche1) = -1 Then Message = "- Rsultat de la recherche avec include:=True et Compare:=vbBinaryCompare:" & vbCr 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

Dim Dim Dim For

282

Excel et VBA

Lignes 9 11, le nom des jours de la semaine est af ect aux sept espaces de stockage de la f variable de matrice JoursSemaine. On f ait pour cela appel la fonction WeekdayName() prsente au chapitre prcdent. Lignes 12 15, on recherche quatre reprises la chane "M" dans la variable avec, chaque fois, des valeurs diffrentes pour les arguments include et compare. Les mmes instructions sont ensuite appliques aux quatre v ariables ayant reu pour valeur les rsultats des recherches, afin de crer le message qui sera afich (lignes 16 23, 24 31, 32 39 et 40 47). On utilise pour cela une structure If...Then...Else afin d For...Next est utilise pour savoir si la recherche a abouti. Si cest le cas, une boucle concatner le contenu des espaces de stockage de la variable tableau ayant reu le rsultat de la fonction. Enfin, on a fiche le message reprsent la Figure 9.5
Figure 9.5 La fonction Filter() permet deffectuer des recherches inclusives ou exclusives.

Considrez les rsultats de la recherche :

Dans le premier cas, la recherche ne renvoie aucun rsultat, car largument Compare est dfini vbBinaryCompare et sef fectue donc en respectant la casse (M majuscule et non minuscule). Largument Compare de la deuxime recherche est g alement dfini vbBinaryCompare. P ar contre, la fonction ren voie toutes les v aleurs de la v ariable JoursSemaine puisque cette fois-ci largument include a t dfini False (tous les espaces de stockage o la recherche na pas abouti sont renvoys). Pour la troisime recherche, les arguments include et compare ont respectivement t dfi nis True et vbTextCompare. La recherche sapplique donc sans respecter la casse et toutes les zones de stockage contenant la lettre m (minuscule ou majuscule) sont retournes. Enfin, la quatrime recherche est e fectue en mode vbTextCompare, mais cette fois-ci largument include a t dfini False. Ce sont donc tous les espaces de stockage ne contenant pas la lettre M (majuscule) ou m (minuscule) qui sont retourns.

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

284

Excel et VBA

Il arri vera immanquablement que des erreurs surviennent lors de le xcution dun programme VBA ou que le rsultat dun programme ne soit pas celui qui tait escompt. Vous devrez alors dterminer lorigine de lerreur et tester de nouv le programme. VBA eau 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 a voir t test a vec succs au moment de sa cration et gnrer des erreurs lors de son excution dans un contexte diffrent. La gestion des erreurs consiste rendre un programme aussi fiable que possible, cest--dire sexcutant correctement dans des contextes diffrents.

Les tapes et les outils du dbogage


Le dbogage consiste donc rgler les erreurs directement lies au code du programme et indpendantes de len vironnement dans lequel se xcute le programme. Trois types derreurs peuvent affecter un programme VBA :

Erreurs de compilation. Ce type derreur survient lorsque VBA rencontre une instruction quil ne reconnat pas ; par e xemple, lorsquun mot cl contient une f aute dorthographe (voir Figure 10.1).

Figure 10.1 Les erreurs de compilation sont les plus faciles reprer.

Erreurs dexcution. Une erreur de xcution survient aprs que la compilation du programme a t ralise a vec succs. Une erreur de xcution peut, par e xemple, tre lie lutilisation de donnes incompatibles. Ce sera le cas si le programme ef fectue une opration arithmtique sur une variable de chane (voir Figure 10.2). Erreurs logiques. Les erreurs logiques sont les plus dif ficiles redresse . Contrairement aux erreurs de compilation et de xcution, elles laissent le programme sexcuter. Le rsultat obtenu ne sera pas celui que v ous escomptiez. Les sections suivantes prsentent les outils de dbog age qui permettront de dtecter lorigine de lerreur.

Chapitre 10

Dbogage et gestion des erreurs

285

Figure 10.2 Une valeur et un message dfinissent le type der eur reconnue par Visual Basic.

Afficher la rubrique d'aide associe l'erreur reconnue

Terminer l'excution du programme

Tenter de rsoudre l'erreur

eil Cons

Lactivation de loption Vrification automatique de la syntaxe (voir Chapi tre 5) de Visual Basic Editor permet de r eprer les err eurs de syntaxe ds ltape de la saisie du code. Il est r ecommand de for cer la dclar ation explicite des variables laide de linstruction Option Explicit. Vous viterez ainsi tout risque derr eur li une faute de fr appe lors de la saisie dun nom de variable . Pour plus dinfor mations reportez-vous au Chapitre 6.

eil Cons

Test du projet
Il est dusage de tester tout nouveau programme lors du dveloppement. Le premier test consiste compiler le projet, afin de dtecter les entuelles erreurs de xcution. Lors de la compilation, Visual Basic Editor teste chaque instruction du projet. Pour compiler un projet, choisissez la commande Compiler du menu Dbog age. Si une e rreur est mise en vidence, remdiez-y. Et recommencez jusqu ce que la compilation se droule normalement. Lorsque la compilation sef fectue correctement, testez le projet partir de Editor : cliquez sur le bouton Excuter de la barre doutils Standard. Visual Basic

eil Cons

Ne testez pas un pr ogramme dont vous ntes pas certain sur un document sensible. Il est prfr able deffectuer les tests sur une copie . Vous serez ainsi assur de ne pas endomma ger des donnes prcieuses si le pr ogramme ne sexcute pas correctement, ou sil produit des donnes errones.

286

Excel et VBA

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 de xcution disparat. Excutez nouv eau la procdure, et ce jusqu ce que le programme se xcute normalement. Lorsque survient une erreur de compilation ou dexcution, il est ais de reprer linstruction errone. Si le projet a t compil partir de Visual Basic Editor, linstruction incrimine est mise en vidence. Si le programme est e xcut partir de lapplication hte, la bote de dialogue de la Figure 10.2 saf fiche. Un clic sur le bouton Dbo age ouvre Visual Basic Editor (si ncessaire) et af fiche la procdure dans laquelle se trou e linstruction ayant gnr lerreur. P ar df aut, celle-ci apparat en jaune et est signale par un indi cateur de marge (voir Figure 10.3).
Figure 10.3 Linstruction ayant gnr lerreur est mise en vidence dans Visual Basic Editor.

Il est cependant plus dif ficile de reprer les erreurs logiques. Les outils de dbobage d Visual Basic Editor sont alors dun grand secours. Ils sont accessibles via le menu Dbogage et, pour les plus usits, via la barre doutils Dbogage.
Figure 10.4 La barre doutils Dbogage.
Basculer le point d'arrt Arrt Pas pas principal Fentre Variables locales Fentre Espions Pile des appels

Mode Cration

Espion Excuter / Pas pas Pas pas sortant Express Continuer dtaill Fentre Rinitialiser Excution

Chapitre 10

Dbogage et gestion des erreurs

287

Excuter pas pas


Lorsquun programme ne produit pas le rsultat escompt sans gnrer derreur , le premier test consiste excuter la procdure pas pas, afin den xaminer le droulement et les consquences sur le document, instruction aprs instruction. Pour excuter un programme VBA pas pas : 1. Placez le curseur dans la procdure excuter, puis rduisez la fentre de Visual Basic Editor afin de visualiser la fois la fentre de lapplication hte et la fentre Code de l procdure tester. 2. Cliquez sur le bouton Pas pas dtaill de la barre doutils Dbogage ; ou choisissez la commande Pas pas dtaill du menu Dbog age, ou appuyez sur la touche F8. La premire instruction de la procdure est mise en vidence dans la fentre Code, tandis que le bouton Arrt de la barre doutils Standard apparat estomp, indiquant que la procdure est interrompue en cours dexcution. 3. Tapez de nouveau sur la touche F8. Linstruction prcdemment mise en vidence dans la fentre Code se xcute, tandis que linstruction sui vante est son tour mise en vidence (voir Figure 10.5).
Figure 10.5 Excutez les procdures pas pas pour visualiser les consquences de chacune des instructions.

4. Rptez lopration de faon visualiser lincidence de chacune des instructions sur le document. 5. Vous pouv ez aussi "lcher" le xcution de la procdure en cliquant sur le bouton Continuer de la barre doutils Standard. L excution du programme se poursuit alors normalement partir de linstruction suivant la dernire instruction excute.

288

Excel et VBA

Info

Vous pouvez aussi e xcuter le code pr ocdure par procdure, afin dtudier l faon dont les procdures sappellent dans le programme. Utilisez pour cela la commande P as pas principal. La commande P as pas sortant permet dexcuter tout le code r estant dans la pr ocdure en cour s. L excution est alors interrompue sur linstruction suivant linstruction dappel de la pr ocdure appelante.

La fentre Variables locales


Lorsque vous excutez une procdure pas pas, elle est en mode Arrt. Vous pouvez alors visualiser la v aleur des v ariables et des constantes aux dif frents stades de le xcution du programme.
ition 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 Figure 10.6).
Figure 10.6 Les info-bulles automatiques permettent de connatre la valeur des variables un moment prcis de lexcution dun programme.

La fentre Variables locales permet dobtenir des informations prcises sur toutes les variables visibles un moment donn de le xcution du programme nom, type et valeur des variables. Choisissez pour cela Affichage, Variables locales, ou cliquez sur le bouton Variables locales de la barre doutils Dbog age. La liste des v ariables visibles est affiche ( oir Figure 10.7). Dans le haut de la fentre, le nom de la procdure en cours de xcution est affich ici, la procdure Testdedeprocdure1, stocke dans le module Module1 du projet VBAProject.

Chapitre 10

Dbogage et gestion des erreurs

289

Figure 10.7 La fentre Variables locales fournit des informations compltes sur les variables.

Les v ariables de ni veau module apparaissent sous le nom du module ici sous Module1 , tandis que les v ariables de niveau procdure sont af fiches telles quelles ici TypePres et CodePostal. Si la procdure en cours a t appele, v ous pouvez visualiser les variables des procdures appelantes. Cliquez sur le bouton Pile des appels. La fentre Pile des appels souvre et af fiche les appels de procdure actifs. Cliquez sur la procdure dont ous souhaitez visualiser les valeurs, puis sur Affiche . Vous pouvez voir la Figure 10.8 que Testdeprocdure2 en cours a t appele par la procdure la procdure Testdeprocdure1, elle-mme appele par la procdure Testdeprocdure. Lorsquune procdure appele rend la main la procdure appelante, elle disparat de la pile des appels.
Figure 10.8 La pile des appels affi he les appels de procdure actifs.

Vous pouv ez modifier la aleur des v ariables dans la fentre Variables locales, afin d tester le comportement du programme dans dautres circonstances. Double-cliquez sur la valeur modifie , puis saisissez la valeur voulue. Si la valeur choisie est incompatible avec le type de la v ariable, un message derreur est af fich et la aleur de la v ariable reste inchange.

290

Excel et VBA

Les points darrt


Les points darrt permettent dinterrompre le xcution dun programme sur une instruction prcise. Cette possibilit est particulirement intressante lorsque v ous souponnez lorigine dune erreur. Vous pouvez ainsi excuter normalement toutes les instructions ne posant pas de problme et dfinir un point darrt pour une instruction dont ous ntes pas sr. Une fois le xcution interrompue, v ous pouvez la poursui vre pas pas, e xaminer la valeur des variables, etc. Pour placer un point darrt, placez le curseur sur linstruction v oulue et choisissez la commande Basculer le point darrt du menu Dbog age, ou cliquez sur le bouton Point darrt de la barre doutils, ou appuyez sur la touche F9. Vous pouvez aussi cliquer dans la marge de la fentre Code, en f ace de linstruction v oulue. P ar df aut, linstruction sur laquelle un point darrt a t dfini apparat sur un arrire-plan de couleur bordeaux et u indicateur est plac en marge (voir Figure 10.9).
Figure 10.9 Les points darrt permettent de dfinir des inte ruptions dans lexcution du code.

Vous pouvez placer plusieurs points darrt dans le code, afin de vrifier ltat des ariables 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.

Chapitre 10

Dbogage et gestion des erreurs

291

eil Cons

Lorsque vous quittez Visual Basic Editor, les points darrt ne sont pas enregistrs. Pour conserver des points dinterruption du pr ogramme lors de la fermeture de Visual Basic Editor, utilisez linstruction Stop, qui entrane le passage de lexcution dune procdure en mode Arrt.

Modier lordre dexcution des instructions


En mode Arrt, vous pouvez tout moment dfinir linstruction su vante excuter dans une procdure. Il peut sagir dune instruction prcdant linstruction actuelle ou au contraire dune instruction v enir. Pour modifier linstruction su vante, placez le curseur dans linstruction e xcuter et slectionnez la commande Dfinir linstructio suivante du menu Dbog age, ou f aites glisser lindicateur de mar ge v ers linstruction voulue. Le code intermdiaire est alors ignor et la procdure se poursuit partir de linstruction dfinie Vous pouvez ainsi ignorer une srie dinstructions ne vous intressant pas dans le cadre du dbobage, ou au contraire viter les instructions gnrant une erreur , pour tudier le comportement du programme dans dautres circonstances. Vous pouv ez alors utiliser la fentre Excution pour excuter des instructions napparaissant pas dans v otre code, mais que vous envisagez de substituer aux instructions ignores. Linstruction suivante ne peut tr e dfinie qu lintrieur de la p ocdure en cours.

Info

La fentre Excution
En mode Arrt, la fentre Excution permet de xcuter tout type dinstruction qui ne se trouve pas dans le code du programme. Il suf fit dy crire linstruction xcuter et dappuyer sur Entre. Linstruction sexcute alors comme si elle f aisait partie intgrante du code. Vous pouv ez ainsi interroger ou modifier la aleur dune v ariable ou dune proprit, excuter une instruction, etc. Pour afficher la fentre Excution, choisissez la commande Fentre Excution, ou clique sur le bouton Fentre Excution de la barre doutils Dbog age, ou encore saisissez le raccourci clavier Ctrl + G. A la Figure 10.10, la valeur indique par lutilisateur et affecte la v ariable DateEcheance a gnr une erreur . Nous a vons plac un point darrt sur linstruction ayant gnr une erreur , afin dy r venir par la suite. Nous a vons utilis la commande Dfinir linstruction su vante du menu Dbog age pour passer linstruction

292

Excel et VBA

suivante et poursuivre lexcution du code. Enfin, nous vons redfini la aleur de DateEcheance "01/04/98" et nous avons excut de nouveau linstruction ayant gnr lerreur dans la fentre Excution.
Figure 10.10 La fentre Excution permet dexcuter une instruction comme si elle faisait partie intgrante du code.

Les espions
Les espions permettent despionner les v aleurs de v ariables ou de toute e xpression renvoyant une valeur dans un contexte dtermin. Pour crer un espion, procdez ainsi : 1. Choisissez la commande Ajouter un espion du menu Dbog age. La bote de dialogue Ajouter un espion saffiche lcran ( oir Figure 10.11).
Figure 10.11 La bote de dialogue Ajouter un espion.

2. Dans la zone de texte Expression, saisissez lexpression dont vous souhaitez espionner la valeur.

Chapitre 10

Dbogage et gestion des erreurs

293

3. Dans la zone Contexte, dterminez le contexte dans lequel lexpression sera espionne. Par dfaut les zones Procdure et Module affichent respect vement la procdure et le module en cours. Vous pouvez choisir despionner la valeur dune expression dans une procdure dun module, dans toutes les procdures dun module, ou encore dans tous les modules. Il suffit en gnral, de limiter la porte des espions la porte des expressions espionnes. 4. Dans la zone Type despion, choisissez lune des trois options disponibles : Expression espionne. En mode Arrt, la valeur en cours de lexpression est affich e dans la fentre Espions. Arrt si la v aleur est vraie. La procdure passe en mode lexpression est dfinie True. Arrt si la v aleur de aleur de

Arrt si la v aleur change. L excution du code sinterrompt si la v lexpression est dfinie True. 5. Cliquez sur OK pour valider.

Vous pouvez aussi crer des espions en slectionnant la variable ou lexpression voulue et en la faisant glisser dans la fentre Espions. Pour afficher la fentre Espions, slectionnez la commande Fentre Espions du menuAffi chage ; ou cliquez sur le bouton Fentre Espions de la barre doutils Dbog age. Sept espions ont t placs dans la fentre Espions reprsente la Figure 10.12.
Figure 10.12 Placez des espions dans votre code...

La fentre Espions contient quatre champs :

Expression. Affiche l xpression espionne. Il peut sagir dun nom de v ariable ou de toute expression renvoyant une valeur. Valeur. Affiche la aleur actuelle de lexpression espionne en mode Arrt. Dans le cas dune expression de ni veau procdure, cette zone af fiche <Hors du contexte> si la procdure ne f ait pas partie des appels de procdure actifs (elle napparat alors pas dans la pile des appels). Vous pouvez modifier la aleur dune expression dans la fentre Espions, afin de tester l comportement du programme dans dautres circonstances. Double-cliquez sur la v aleur

294

Excel et VBA

modifie , puis saisissez la v aleur v oulue. Si la v aleur choisie est incompatible a vec lexpression, un message derreur est affich et la aleur de lexpression reste inchange.

Type. Affiche le type de la ariable ou de la v aleur ren voye par le xpression. Si linstruction en cours est hors du conte xte despionnage, cette zone af fiche Empty ou Variant/Empty. Contexte. Affiche le cont xte dfini pour l xpression espionne. A la Figure 10.12, vous pouvez constater que la premire e xpression espionne est dfinie pour toutes le procdures du module Module1, tandis que les autres espions sont limits une procdure spcifique du module

Pour supprimer un espion, f aites un clic droit dans la fentre Espions et choisissez la commande Supprimer un espion du menu contextuel, ou slectionnez-le et appuyez sur Suppr. Si vous souhaitez interroger la v aleur dune e xpression pour laquelle v ous navez pas plac despion, v ous pouvez faire appel lEspion e xpress. Slectionnez le xpression voulue, puis choisissez la commande Expression e xpress du menu Dbog age. Vous pouvez aussi cliquer sur le bouton Espion e xpress de la barre doutils Dbog age, ou encore utiliser Maj + F9. La bote de dialogue Espion express vous renseigne alors sur le contexte de le xpression slectionne et sur sa v aleur (voir Figure 10.13). Pour intgre r cette expression la fentre Espions, cliquez sur Ajouter.
Figure 10.13 LEspion express : toujours prt.

La pile des appels


La bote de dialogue Pile des appels recense les appels de procdure actifs en mode Arrt. Lorsquune procdure est excute, elle est ajoute la liste des appels de procdures actifs. Chaque fois quune procdure en appelle une autre, cette dernire est ajoute en haut de la liste. Lorsquune procdure appele sachve, elle est supprime de la pile des appels. La pile des appels recense donc toutes les procdures en cours dexcution, selon leur ordre dappel. Il peut tre intressant de visualiser la pile des appels lors du dbog age dun programme VBA. Vous avez ainsi une ide prcise des procdures en cours de xcution et des appels successifs. Pour af ficher la pile des appels, choisissez la commande Pile des appels d

Chapitre 10

Dbogage et gestion des erreurs

295

menu Affichage, ou cliquez sur le bouton Pile des appels de la barre doutils Dbo age, ou encore tapez le raccourci clavier Ctrl + L. Vous pouvez voir la Figure 10.14 que la procdure en cours de xcution est Procdure3, qui a t appele par Procdure2, elle-mme appele par AppelsDeProcdures.
Figure 10.14 La bote de dialogue Pile des appels.

Exemple de dbogage
Nous allons crer ici un programme que nous dboguerons jusquau moment o nous atteindrons une v ersion fiable. Supposons que ous possdez un classeur Excel contenant de nombreuses donnes, mais dans lequel certaines lignes sont vides. Vous dcidez donc dcrire une macro VBA ayant pour fonction de supprimer les lignes vides. Nous supposons ici que lorsquune cellule de la colonne A ne contient pas de donnes, la ligne est vide et doit tre supprime. Ainsi, les lignes 7, 10, 11 et 16 du classeur reprsent la Figure 10.15 doivent tre supprimes.
Figure 10.15 Le programme devra supprimer les lignes ne contenant pas de donnes.

296

Excel et VBA

Une dmarche logique consiste commencer par dfinir la zone d vant tre traite (de la cellule A1 la dernire cellule de la colonne A ne contenant pas de donnes) par la macro et af fecter celle-ci une v ariable objet. Nous utiliserons ensuite une structure For Each...Next pour vrifier la aleur de chacune des cellules de la zone pralablement dfinie, et supprimer la ligne correspondante chaque fois quune cellule ne contient pas d donnes. Le programme correspondant se prsente ainsi :
1: Sub SupprLignesVidesBogue() 2: Dfinir la plage devant tre teste 3: On commence par dfinir la dernire cellule 4: de la colonne A contenant des donnes 5: Dim MaPlage As Range 6: Set MaPlage = Range("A1") 7: While Range(MaPlage.End(xlDown).Address(rowabsolute:=False, columnabsolute:=False)).Value <> "" 8: Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute: =False, columnabsolute:=False)) 9: Wend 10: Set MaPlage = Range("A1:" & MaPlage.Address(rowabsolute: =False, columnabsolute:=False)) 11: 12: Supprimer les lignes ne contenant pas de donnes 13: Dim Cellule As Range 14: For Each Cellule In MaPlage 15: If Cellule.Value = "" Then 16: Rows(Cellule.Row).Delete 17: End If 18: Next Cellule 19: End Sub

Lignes 5 10, la plage de cellules de vant tre testes est dfinie et a fecte la v ariable MaPlage de type Range. On commence par dclarer la variable MaPlage et par lui affecter la cellule A1 (lignes 5 et 6). Lignes 7 9, une structure While...Wend sert dfinir l dernire cellule de la colonne A contenant des donnes. MaPlage se voit affecter la cellule renvoye par la proprit End (ligne 8), tant que celle-ci nest pas vide (ligne 7). Lorsque la fecte MaPlage est la proprit End ren voie une cellule vide, cest que la cellule af dernire cellule contenant des donnes. La boucle While...Wend prend alors fin. Ligne 10, MaPlage reoit la plage de cellules allant de la cellule A1 la dernire cellule non vide de la colonne A, prcdemment dfinie Lignes 14 18, une instruction For Each...Next est utilise pour tester chacune des cellules de MaPlage. Une instruction conditionnelle sert vrifier si la cellule est vide. S tel est le cas, la ligne correspondante est supprime (ligne 16).

Chapitre 10

Dbogage et gestion des erreurs

297

Recherche du bogue
Figure 10.16 Excutez la macro pas pas et observez attentivement ses effets sur les macros, ainsi que les valeurs que prennent les variables.

Excutez le programme sur un classeur Excel contenant des lignes vides. Vous constatez que, sil e xiste deux lignes vides conscuti ves, la deuxime nest pas supprime. Pour comprendre do vient le problme, procdez comme suit : 1. Placez un point darrt avant la partie du programme qui semble gnrer lerreur. Le problme ne vient visiblement pas de la premire partie du programme, puisque la plage de cellules tester est correctement dfinie. Placez donc un point darrt d vant linstruction de la ligne 14, afin dinterrompre l xcution du programme a vant quil ne commence supprimer les lignes. 2. Excutez ensuite la macro. Lorsque linstruction de la ligne 14 est atteinte, la macro sinterrompt et Visual Basic Editor passe au premier plan. L instruction contenant le point darrt est en surbrillance, et le bouton Arrt de la barre doutils Standard est estomp, indiquant que la macro est en mode Arrt. 3. Rduisez la fentre de Visual Basic Editor de f aon v oir le classeur Excel au second plan. Poursui vez ensuite linstruction de la macro pas pas (touche F8). Utilisez la barre de dfilement dExcel pour a ficher les parties du classeur masque par la fentre de Visual Basic Editor chaque fois que cela semble ncessaire. F aites ensuite repasser la fentre de Visual Basic Editor au premier plan laide des touches Alt + Tab.

298

Excel et VBA

4. Observez attentivement leffet de chaque instruction sur le classeur , ainsi que les v aleurs que prennent les dif frentes variables et e xpressions du programme. Placez pour cela le curseur au-dessus des e xpressions Cellule.Value et Cellule.Row de f aon af ficher le info-bulles automatiques. Soyez particulirement attentif lorsquune cellule vide est teste. 5. Vous devriez vous rendre compte que, lorsque la ligne 10 est supprime, la ligne 11 prend sa place et que la cellule suivante teste est la cellule A11. La boucle For Each...Next traite les cellules de la plage MaPlage une une. La cellule A1 est teste, puis la cellule A2, etc., jusqu atteindre la dernire cellule de la plage de cellules MaPlage. Lorsquune ligne est supprime, la ligne sui vante prend sa place ; elle est donc ignore par la procdure. Dans le cas du classeur reprsent la Figure10.15, les cellules A10 et A11 sont vides. Les lignes correspondantes doi vent donc tre supprimes. Lorsque la procdure atteint la cellule A10, celle-ci est supprime. Cela a pour consquence de dcaler toutes les cellules vers le haut. La cellule A11 passe alors en A10, la cellule A12 en A11, etc. La boucle For Each...Next traite alors la cellule suivante, soit la cellule A11. Le contenu de la cellule prcdemment en A11 ne sera donc pas trait, puisque celle-ci est passe en A10.

Rsolution du bogue
Plusieurs solutions permettent de rgler ce problme. 1. Vous pouvez intgrer une instruction contrlant de nouv eau le contenu de la cellule teste lorsquune ligne est supprime. Remplacez pour cela les instructions conditionnelles des lignes 15 17 par les instructions suivantes :
If Cellule.Value = "" Then Dim LigneSuppr As Long LigneSuppr = Cellule.Row Rows(Cellule.Row).Delete If Range("A" & LigneSuppr) = "" Then Rows(Range("A" & LigneSuppr).Row).Delete End If End If

Avant de supprimer une ligne, le numro de la ligne est stock dans la v ariable LigneSuppr. La ligne est ensuite supprime. Une instruction conditionnelle imbrique supprime nouveau cette ligne si la cellule de la colonne A correspondante est encore vide. Le problme est ainsi rgl si deux lignes conscuti ves sont vides. Mais le bogue persiste ds quil existe plus de deux lignes conscutives vides. 2. Vous pouvez galement utiliser une structure For...Next la place de la structure For Each...Next. Lutilisation dune procdure For...Next permettra de dfinir un drou lement de la boucle commenant par la dernire cellule plutt que par la premire. Le programme se prsente alors ainsi (les modifications apparaissent en gras)

Chapitre 10

Dbogage et gestion des erreurs

299

Sub SupprLignesVidesVersion2() Dim MaPlage As Range Set MaPlage = Range("A1") While Range(MaPlage.End(xlDown).Address(rowabsolute: =False, columnabsolute:=False)).Value <> "" Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute: =False, columnabsolute:=False)) Wend Dim DerLigne As Long DerLigne = MaPlage.Row Supprimer les lignes ne contenant pas de donnes Dim Compteur As Long For Compteur = DerLigne To 1 Step -1 If Range("A" & Compteur).Value = "" Then Range("A" & Compteur).Delete End If Next Compteur End Sub

3. On pourra galement stocker la liste des cellules vides dans une variable de matrice, et ne procder la suppression des lignes vides quune fois la liste des lignes supprimer dfinie. On d vra l aussi supprimer les cellules en partant de la dernire jusqu atteindre la premire.
Option Base 1 1: Sub SupprLignesVidesVersion3() 2: Cration dune variable de matrice redimensionnable 3: Dim MonTableau() 4: 5: Dfinir la plage devant tre teste 6: Dim MaPlage As Range 7: Set MaPlage = Range("A1") 8: While Range(MaPlage.End(xlDown).Address(rowabsolute: =False, columnabsolute:=False)).Value <> "" 9: Set MaPlage = Range(MaPlage.End(xlDown).Address(rowabsolute: =False, columnabsolute:=False)) 10: Wend 11: Set MaPlage = Range("A1:" & MaPlage.Address(rowabsolute: =False, columnabsolute:=False)) 12: 13: On stocke dans la variable de matrice les valeurs 14: de toutes les lignes devant tre supprimes 15: Dim Cellule As Range 16: For Each Cellule In MaPlage 17: If Cellule.Value = "" Then 18: Une erreur sera gnre lappel de la fonction 19: UBound si le tableau na encore reu aucune valeur 20: On Error Resume Next 21: ReDim Preserve MonTableau(UBound(MonTableau)+1) 22: Linstruction conditionnelle suivante gre cette erreur 23: If Err.Number = 9 Then

300

Excel et VBA

24: ReDim MonTableau(1) 25: Err.Clear 26: End If 27: MonTableau(UBound(MonTableau)) = Cellule.Row 28: End If 29: Next Cellule 30: 31: Suppression des lignes vides 32: Dim Compteur As Single 33: For Compteur = UBound(MonTableau) To LBound(MonTableau) Step -1 34: Rows(MonTableau(Compteur)).Delete 35: Next Compteur 36: End Sub

Linstruction Option Base 1 a t place dans la zone de dclarations du module, de f on a que la premire valeur dindex des tableaux soit 1 et non 0. Ligne 3, une variable tableau redimensionnable est dclare. Elle servira stock er les numros des lignes supprimer. Lignes 6 11, la zone traiter est dfinie et a fecte la MaPlage, de la mme faon que dans les versions prcdentes du programme. Lignes 15 29, les numros des lignes supprimer sont dfinis et stocks dans MonTableau. La variable Cellule de type Range est tout dabord dclare. Une structure For Each...Next sert ensuite tester lensemble des cellules de MaPlage (lignes 16 29). A chaque passage de la boucle, une structure conditionnelle (lignes 17 28) v alue la valeur de la cellule teste et stock e le numro de la ligne la v ariable de matrice MonTableau si la cellule est vide. La v ariable est tout dabord redimensionne (ligne 21). On se sert pour cela de la fonction UBound qui renvoie la taille du tableau, laquelle on ajoute 1. Ligne 27, le dernier espace de stockage de MonTableau MonTableau(UBound(MonTableau)) reoit le numro de la ligne de la cellule teste. Notez lutilisation du mot cl Preserve lor s du r edimensionnement du tableau (ligne 21). Celui-ci est indispensable pour que le tableau ne soit pas rinitialis.

pel Rap

Lignes 20 26, un gestionnaire derreur a t mis en place. En ef fet, la premire fois que la fonction UBound est utilise (ligne 21), une erreur est gnre. Linstruction Resume Next de la ligne 20 force le passage linstruction suivante en cas derreur. Ligne 23, on interroge la valeur de la proprit Number lobjet Err pour vrifier si une erreur a t gnre. Si te est le cas (si le tableau na pas encore t dimensionn), MonTableau est dimensionn a vec un espace de stockage et lobjet Err est rinitialis laide de la mthode Clear. Pour connatre le numro dune erreur (la valeur de la proprit Number de lobjet Err), gnrez volontairement cette err eur et r elevez le numr o derreur indique dans la bote de dialogue Visual Basic affi he au moment o lerreur survient.

eil Cons

Chapitre 10

Dbogage et gestion des erreurs

301

Lignes 32 35, les lignes vides sont supprimes. On utilise pour cela une boucleFor...Next dont le compteur commence la v aleur dinde x la plus importante de MonTableau pour atteindre la valeur la plus basse, et est dcrment de 1 chaque passage. A chaque passage de la boucle, linstruction de la ligne 34 supprime la ligne dont le numro correspond la valeur stocke dans lespace de stockage dindex Compteur de MonTableau.
Info

Lintrt de cette ver sion du pr ogramme est de permettr e de stoc ker les lignes supprimes dans une variable . Placez les instructions suivantes en fin d programme pour affi her le nombre de lignes supprimes ainsi que la liste de ces dernires :
Dim Message As String Message = UBound(MonTableau) & " lignes ont t supprimes:" For Compteur = 1 to UBound(MonTableau) Message = Message & vbCr & MonTableau(Compteur) Next Compteur MsgBox Message, vbOKOnly+vbInformation

Figure 10.17 Cette version du programme permet de connatre les lignes supprimes.

Une telle mthode se rvlera particulirement intressante si v ous crez une procdure destine supprimer des lignes contenant des informations, mais que v ous souhaitiez rcuprer ces informations dans un autre classeur Excel. On utilisera alors une v ariable de matrice dynamique multidimensionnelle. Celle-ci aura deux dimensions : lune correspondant aux lignes du classeur, lautre correspondant aux colonnes. La taille de la premire dimension (le nombre de lignes supprimer ou le nombre de colonnes du classeur contenant des donnes conserv er) devra tre dfinie vant de stocker les donnes dans la variable seule la dernire dimension pouv ant tre redfinie en conser ant les valeurs de la variable.

Gestion des erreurs et des exceptions


Un programme VBA peut se xcuter correctement dans la plupart des cas et gnrer des erreurs de xcution dans des conte xtes spcifiques. Une erreur peut, par xemple, tre gnre si lutilisateur nentre pas le type dinformation attendue dans une bote de dialogue. Une erreur sera g alement gnre si le format dune cellule ne correspond pas au

302

Excel et VBA

type de donnes quun programme tente de xploiter, ou encore si un programme tente de modifier un classeur Excel en cours dutilisation. Nombre derreurs de ce type, lies u code crit pour un conte xte particulier , sont susceptibles daf fecter une macro. Il est important de prvoir ce type derreur et de mettre en place un gestionnaire derreur, afi que la procdure contourne lerreur et sexcute normalement. Un gestionnaire derreur est un ensemble dinstructions qui est cens permettr e la poursuite de le xcution dune pr ocdure. En gnr al, il est appel par un dtecteur derreur, dont la fonction est de reprer lerreur lorsquelle survient.

ition Dfin

Pour dtecter une v entuelle erreur, placez une instruction On Error devant linstruction susceptible den gnrer une :

On Error Resume Next ignore linstruction ayant gnr une erreur et passe linstruction suivante. On Error GoTo tiquette permet dappeler un gestionnaire derreur repr par ltiquette.

Une technique courante consiste placer le gestionnaire derreur la fin de la procdure e glisser une instruction Exit avant ltiquette le dlimitant :
Sub MaProcdure() ... On Error GoTo GestionnaireErreur Instruction susceptibles de gnrer une erreur ... Exit Sub GestionnaireErreur: Instructions de gestion des erreurs Resume End Sub

Ainsi, ds quune erreur est dtecte, le gestionnaire derreur sera appel. L instruction Resume ne peut tre place que dans un gestionnaire derreur. Elle rend la main 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 v oit af fecter une valeur identifiant le type derreur sur enu. Aprs gestion de lerreur , il est important de redfinir cette proprit 0 (pas derreur), afin que les entuelles autres erreurs puissent tre dtectes. Utilisez alors linstruction daffectation Err.Number = 0.

Chapitre 10

Dbogage et gestion des erreurs

303

Exemple de gestion derreur


La procdure sui vante tudie au Chapitre 7 gnrera une erreur si lutilisateur nentre pas une date au format valide dans la bote de dialogue affiche par la fonction InputBox (voir Figure 10.15).
Sub VerifierEcheances() Vrifier quil existe une plage de cellules est slectionne Dim ZoneATester As String ZoneATester = ActiveWindow.RangeSelection.Address If ZoneATester = Null Then MsgBox "Slectionnez la plage de cellules tester.", _ vbOKOnly & vbInformation Exit Sub End If Demander lutilisateur la date dchance Dim DateEcheance As Variant DateEcheance = InputBox("Indiquez la date dchance.", _ "Echance des oprations en cours", Date+30) If DateEcheance = "" Then Exit Sub End if DateEcheance = CDate(DateEcheance) Tester toutes les cellules de la slection Dim CellTest As Range For Each CellTest In Range(ZoneATester) If IsDate(CellTest) = True Then If CellTest.Value > DateEcheance Then CellTest.Interior.ColorIndex = 6 End If End If Next End Sub

Figure 10.18 Cette erreur peut tre gre par le programme.

La procdure suivante gre cette erreur en faisant appel un gestionnaire derreur qui affi che une nouv elle bote de dialogue dans laquelle lutilisateur est in vit entrer une date dans un format v alide. L instruction ayant gnr lerreur est alors rpte et le programme se droule normalement, jusqu linstruction Exit Sub qui entrane la sortie

304

Excel et VBA

de la procdure. Si lutilisateur clique sur le bouton Annuler, la v ariable DateEcheance renverra Empty et linstruction Exit Sub entranera la sortie du programme.
Sub VerifierEcheances() Dim ZoneATester As String ZoneATester = ActiveWindow.RangeSelection.Address If ZoneATester = Null Then MsgBox "Slectionnez la plage de cellules tester.", _ vbOKOnly & vbInformation Exit Sub End If Dim DateEcheance As Variant DateEcheance = InputBox("Indiquez la date dchance.", _ "Echance des oprations en cours", Date+30) If DateEcheance = "" Then Exit Sub End if On Error GoTo GestionnaireErreur DateEcheance = CDate(DateEcheance) Dim CellTest As Range For Each CellTest In Range(ZoneATester) If IsDate(CellTest) = True Then If CellTest.Value > DateEcheance Then CellTest.Interior.ColorIndex = 6 End If End If Next Exit Sub GestionnaireErreur: Err.Number = 0 DateEcheance = InputBox("Format de date non valide." & _ Chr(10) & "Entrez une date au format jj/mm/aa", "Erreur gre", _ "jj/mm/aa") If DateEcheance = Empty Then Exit Sub Resume End Sub

Figure 10.19 Lerreur est dtecte et lutilisateur est invit entrer une information valide ou annuler lopration.

11
Intgrer des applications VBA dans linterface dExcel
Au sommaire de ce chapitre

Affecter une macro un raccourci clavier Affecter une macro un bouton Affecter une macro une commande de menu Supprimer une commande de menu Modif er limage et/ou le nom dune commande Affecter une macro un objet

306

Excel et VBA

Vous pouvez trs simplement amliorer laccessibilit dune macro en lui af fectant un raccourci clavier, une ligne de commande dans un menu ou encore un bouton de barre doutils. Si vous nutilisez que rarement une macro, contentez-v ous de le xcuter par la bote de dialogue Macros. Cependant, la nature des macros ou la frquence de leur utilisation peuvent justifier un accs plus rapide. Une macrocommande r groupant quelques commandes ne prsente quun intrt limit si elle ne peut tre e xcute rapidement, par un raccourci clavier ou une icne (ou les deux). Il sera par contre prfrable daffecter une ligne de commande un programme aux consquences plus lar ges et dune utilisation moins frquente.

Affecter une macro un raccourci clavier


Si vous navez pas af fect de raccourci cla vier une macro au moment de sa cration, vous pouvez trs simplement le faire aprs coup : 1. Choisissez la commande Outils, Macro. Dans Excel 2007, cliquez sur le bouton Macros de longlet Dveloppeur.
7 200

2. Dans la bote de dialogue Macro, slectionnez la macro v bouton Options.

oulue puis cliquez sur le

La bote de dialogue Options de macro saffiche lcran ( oir Figure 11.1). 3. Indiquez le raccourci de v otre choix en saisissant une lettre dans la zone conue cet effet. Vous pouvez aussi ajouter une description la macro, si v ous avez omis de le faire lors de la cration. 4. Cliquez sur OK pour valider les modifications
Figure 11.1 Vous pouvez aisment affecter un raccourci clavier une macro.

Chapitre 11

Intgrer des applications VBA dans linterface dExcel

307

Personnaliser la barre doutils Accs rapide dExcel 2007


Dans Excel 2007, les onglets du ruban ne peuv ent tre personnaliss. Seule la barre doutils Accs rapide peut tre modifie. Procdez comme suit 1. Cliquez sur le bouton Personnaliser la barre doutils Accs rapide et choisissez Autres commandes (voir Figure 11.2). 2. Dans la zone de liste des catgories, choisissez Macros. Lensemble des macros accessibles saffiche 3. Slectionnez la macro de votre choix, puis cliquez sur Ajouter. La macro apparat dans la liste de droite, qui rpertorie les commandes de la barre doutils Accs rapide. 4. Cliquez sur le bouton Modifier afin de choisir un bouton et de modifier le nom de commande (celui-ci apparatra lorsque lutilisateur placera le curseur sur le bouton). 5. Enfin, utilisez les flches situes sur la droite de la fentre pour dfinir la position votre commande sur la barre doutils, puis validez.
Figure 11.2 Dans Excel 2007, vous pouvez personnaliser la barre doutils Accs rapide.

Info

Pour supprimer un bouton de la barre doutils Accs rapide, cliquez du bouton droit sur celle-ci et choisissez la commande Supprimer dans le menu contextuel qui saffi he.

308

Excel et VBA

Figure 11.3 Choisissez un bouton et un nom parlant pour votre commande.

Figure 11.4 La macro est maintenant accessible via la barre doutils Accs rapide.

Chapitre 11

Intgrer des applications VBA dans linterface dExcel

309

Affecter une macro un bouton


Pour affecter un bouton de barre doutils une macro avec une version dExcel antrieure 2007, procdez ainsi : 1. Choisissez la commande Personnaliser du menu Outils et acti vez longlet Commandes de la bote de dialogue Personnaliser. 2. Dans la liste Catgories, choisissez Macros. La liste Commandes de la bote de dialogue Personnaliser af fiche deux options : Elment de menu personnalis et Bouton personnalis. 3. Slectionnez Bouton personnalis et maintenez le bouton de la souris enfonc. Un rectangle apparat sur le pointeur , tandis quun indique que lemplacement du curseu r ne permet pas de crer une commande (voir Figure 11.5).
Figure 11.5 Faites glisser la macro laquelle vous souhaitez affecter un bouton de barre doutils.

4. Tout en maintenant le bouton de la souris enfonc, placez le pointeur sur la barre doutils voulue. Une barre verticale indique o sera place la commande, tandis que le se transforme en un + (voir Figure 11.6).
Figure 11.6 Une barre verticale indique o sera place la commande.

310

Excel et VBA

5. Relchez le bouton de la souris. Une icne reprsentant un Smile barre doutils.

y saffiche dans l

6. Cliquez droit sur le nouv eau bouton et choisissez la commande Affecter une macro. Dans la bote de dialogue Affecter une macro qui saf fiche, slectionnez la macro oulue et cliquez sur le bouton OK (voir Figure 11.7). 7. Reportez-vous la section Modifier limage et/ou le nom dune commande pour terminer licne af fecter au raccourci ainsi cr, puis cliquez sur le bouton Fermer de la bote de dialogue Personnaliser.
Figure 11.7 Slectionnez la macro affecter au nouveau bouton.

eil Cons

Lorsque vous ajoutez un bouton une barr e doutils Excel, ouvr ez le menu contextuel du bouton personnalis et affectez-lui un nom reprsentatif. Lorsque le pointeur est plac au-dessus du bouton, son nom est af fi h dans une infobulle.

Affecter une macro une commande de menu


La procdure permettant daffecter une commande de menu une macro avec une version dExcel antrieure 2007 sapparente lajout dun bouton sur une barre doutils. Procdez ainsi : 1. Rptez les tapes 1 3 de la section prcdente, en choisissant Elment de menu personnalis ltape 3. 2. Tout en maintenant le bouton de la souris enfonc, placez le pointeur sur le nom du menu dans lequel vous souhaitez placer la commande. Le menu se droule. 3. Placez le curseur lendroit o v ous souhaitez dposer la commande. Une barre horizontale vous indique prcisment lemplacement quelle prendra (voir Figure 11.8).

Chapitre 11

Intgrer des applications VBA dans linterface dExcel

311

Figure 11.8 Une barre horizontale symbolise lemplacement que prendra la commande.

4. Relchez le bouton de la souris. Le libell Elment de menu personnalis apparat dans le menu (voir Figure 11.9). 5. Reportez-vous la section Modifier limage et/ou le nom dune commande pour modi fier le nom de la commande et dterminer entuellement licne af fecter au raccourci ainsi cr. Cliquez ensuite sur le bouton Fermer de la bote de dialogue Personnaliser.
Figure 11.9 Il ne vous reste qu affecter un nom reprsentatif la nouvelle commande.

ce Astu

Il peut tre judicieux de r egrouper vos macros dans des menus qui leur soient propres. P our crer un nouveau menu, slectionnez Nouveau menu dans la zone Catgories de la bote de dialo gue Personnaliser, puis faites glisser la commande Nouveau menu lemplacement voulu sur la barre de menus.

312

Excel et VBA

Supprimer une commande de menu


Pour supprimer un bouton de barre doutils ou une commande de menu, procdez ainsi : 1. Activez la bote de dialogue Personnaliser comme indiqu dans les sections prcdentes. 2. Faites un clic droit sur llment supprimer ou cliquez sur le bouton Modifier l slection de la bote de dialogue Personnaliser. Dans le menu contextuel qui saffiche slectionnez la commande Supprimer (v oir Figure 11.10). Vous pouv ez aussi f aire glisser llment supprimer sur la bote de dialogue Personnaliser.
Figure 11.10 Ce menu contextuel permet de personnaliser les commandes de Visual Basic Editor.

Info

Pour rtablir un menu, slectionnez ce menu, puis c hoisissez la commande Rtablir du menu conte xtuel qui lui est attac h. Vous lui r estituerez ainsi son image, son texte, ses commandes et ses sous-menus dorigine. Pour dplacer des icnes ou des commandes de menu sans activer la bote de dialogue Personnaliser, maintenez la touche Alt enfonce, puis faites glisser les lments voulus lemplacement de votre choix.

ce Astu

Chapitre 11

Intgrer des applications VBA dans linterface dExcel

313

Modier limage et/ou le nom dune commande


Vous pouvez dterminer le type daf fichage souhait pour une commande de menu ou u bouton de barre doutils cr selon les procdures dcrites prcdemment. Procdez ainsi : 1. Activez la bote de dialogue Personnaliser dExcel. 2. Slectionnez la commande dont vous souhaitez modifier la fichage 3. Faites un clic droit sur llment v oulu ou cliquez sur le bouton Modifier la slectio de la bote de dialogue Personnaliser. Dans le menu contextuel qui saffiche, slectionn z les options correspondant laffichage souhait ( oir Figure 11.10) : Par dfaut. Sil sagit dune commande sur une barre doutils, seule licne est affiche ; sil sagit dune commande de menu, licne et le t xte sont affichs Texte seul pour ce bouton. Affiche uniquement le nom de la commande Masquer les images sur les menus. Masque licne de la commande de menu slectionne. Si llment slectionn est un bouton de barre doutils, cette option est sans effet. Image et texte. Affiche la fois licne et le nom du bouton de llment slec tionn. 4. Pour modifie , le cas chant, laffichage du t xte attach la commande, slectionnez le te xte de la zone Nom du menu conte xtuel et saisissez-y le te xte v oulu (v oir Figure 11.11). Tapez ventuellement un "&" devant la lettre devant servir de raccourci clavier pour la commande slectionne. 5. Pour modifier limage a fecte un bouton, utilisez lune des options suivantes : Modifier limage du bouton. Dans la fentre qui souvre, slectionnez limage de votre choix (voir Figure 11.12). Rtablir limage du bouton. Cette option rtablit limage attribue par dfaut la commande slectionne. Copier-Coller limage du bouton. Utilisez la commande Copier limage du bouton pour envoyer dans le Presse-papiers une icne que v ous souhaitez rcuprer. Faites un clic droit sur la commande de v otre choix, puis slectionnez la commande Coller limage du bouton pour lui attribuer licne du Presse-papiers. Editeur de boutons Ouvre lEditeur de boutons reprsent la Figure 11.13. Testez les dif frentes possibilits puis, quand v ous tes satisf ait, cliquez sur le bouton OK.

314

Excel et VBA

Figure 11.11 Saisissez dans cette zone le nom que vous souhaitez affecter la commande.

Le texte de la zone Nom...

... est affect la commande slectionne

Figure 11.12 Si vous tes un pitre dessinateur, slectionnez lune des images mises votre disposition.

Figure 11.13 Vous pouvez dessiner vos propres boutons dans lEditeur de boutons.

Chapitre 11

Intgrer des applications VBA dans linterface dExcel

315

Info

Vous pouvez aussi modifier lun des boutons qui vous sont p oposs. Slectionnez-le dans la zone Bouton de la bote de dialo gue Bouton per sonnalis, puis cliquez sur le bouton Modifie . Apportez ensuite les modifications souhaite dans lEditeur de boutons, puis cliquez sur OK. Pour rtablir le te xte et/ou licne par dfaut pour la commande slectionne, c hoisissez la commande Rinitialiser du menu conte xtuel qui lui est attach.

Info

Affecter une macro un objet


Une macro peut galement tre affecte un objet tel quun graphique Excel ou un dessin de la couche Dessin des applications Office. Pour cela, aites un clic droit sur lobjet voulu et choisissez la commande Affecter une macro du menu contextuel. Lorsquune macro est af fecte un objet, le curseur se transforme en main lorsquil est plac au-dessus de lobjet en question. Un clic sur celui-ci dclenche la macro. Pour manipuler les commandes de menu et les barr es doutils Excel par programmation par e xemple, ajouter ou supprimer des commandes selon le contexte , utilisez la pr oprit CommandBars. P our plus de prcisions, consultez laide en ligne.

Info

Partie

III

Dvelopper des interfaces utilisateur


CHAPITRE 12. Crer des interfaces utilisateur CHAPITRE 13. Exploiter les proprits des contrles ActiveX CHAPITRE 14. Programmer les interfaces utilisateur

12
Crer des interfaces utilisateur
Au sommaire de ce chapitre

Les phases de dveloppement de feuilles Crer une feuille Les contrles de la bote outils Placer des contrles sur une feuille Mise en forme des contrles Personnaliser la bote outils Afficher/masquer une feuill

320

Excel et VBA

Les feuilles constituent un lment essentiel de la programmation Visual Basic. Les feuilles sont des zones sur lesquelles v ous placez des contrles ActiveX tels que des cases cocher , des boutons doption, des zones de te xte, des boutons de commande, etc. Ils forment une interface graphique permettant une interaction simple et intuiti ve entre lutilisateur final et l programme. Les vnements utilisateur , tels quun clic de souris ou une modification de la aleur dun contrle, qui touchent les contrles sont automatiquement reprs par le programme. Il v ous suffit dassocier du code un vnement donn pour que celui-ci s xcute lorsque lvnement est repr. On parle alors de procdure vnementielle ou procdure dvnement. Les contrles prennent une v aleur, dtermine par leur tat (case coche ou non coche, te xte dune zone de te xte, etc.). Lexploitation des feuilles consiste gnralement passer les infor mations entres par lutilisateur sur la feuille (les v aleurs des dif frents contrles) une procdure de code lorsque lutilisateur valide les informations fournies en cliquant sur un bouton libell OK, par exemple. Ces donnes sont ensuite exploites par le programme.
Figure 12.1 Les feuilles constituent linterface graphique de vos projets VBA.

Les phases de dveloppement de feuilles


Les feuilles permettent de ramener des tches comple xes la simple information des champs dune bote de dialogue pour lutilisateur final La cration de feuilles VBA se ralise en trois phases :

Dtermination des besoins. Avant de vous lancer dans la cration dune feuille, rfl chissez aux fonctions que devra jouer linterface dveloppe. Quels doivent en tre les diffrents contrles ? Comment seront-ils organiss sur la feuille ? Quel type dinteraction

Chapitre 12

Crer des interfaces utilisateur

321

entre les contrles ? A quels vnements utilisateur de vront-ils rpondre ? Nous v ous conseillons de raliser sur papier un dessin approximatif de la f euille et de noter les informations essentielles sur les dif frents contrles la composant avant dentamer la deuxime phase.

Cration visuelle de la feuille. Durant cette phase, vous allez dessiner votre feuille dans Visual Basic Editor . Vous crerez la feuille et y placerez les contrles v oulus (cases cocher, boutons doption). Vous paramtrerez les proprits de la feuille et des contrles qui la composent, afin den dterminer lapparence (couleu , taille, texte par dfaut) et le comportement (accessibilit, nombre de caractres autoriss, etc.). Ecriture du code attach la feuille. Sans code affect aux diffrents lments qui la composent, une feuille nest quune jolie bote de dialogue sans fonctionnalit. Durant cette phase, vous dterminerez le comportement de la feuille face aux diffrents vnements utilisateur pouv ant laf fecter et crirez le code permettant de xploiter les donnes fournies par lutilisateur.

Ce chapitre prsente la cration de feuilles. Vous y dcouvrirez les dif frents contrles votre disposition, apprendrez les placer sur une feuille et utiliser les outils deVBA pour crer des interfaces lapparence professionnelle. Les outils de dv eloppement visuel de feuilles de Visual Basic permettent de crer simplement et rapidement des interf aces compltes, semblables aux botes de dialogue des applications Office

Crer une feuille


Le dveloppement de feuilles se fait dans la fentre UserForm de Visual Basic Editor. Pour accder la fentre UserForm, vous devez crer une nouvelle feuille ou ouvrir une feuille existante. Pour crer une nouvelle feuille : 1. Ouvrez lExplorateur de projet et slectionnez le projet dans lequel v crer une feuille. ous souhaitez

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 f aites un clic droit sur nimporte quel lment du projet dans lExplorateur de projet et, dans le menu contextuel qui saffiche, slectionnez Insertion, User orm. 3. Une fentre UserForm souvre (voir Figure 12.2). La feuille et la bote outils y sont affiches. ar dfaut, la feuille est intitule UserForm1, UserForm2 sil existe dj une feuille UserForm1, etc. La nouvelle feuille apparat dans le dossier Feuilles de lExplorateur de projet.

322

Excel et VBA

Figure 12.2 Votre feuille encore vierge de tout contrle.

4. Ouvrez la fentre Proprits de la feuille (F4) et attribuez-lui une proprit Name et une proprit Caption. La proprit Name est le nom qui sera utilis dans le code pour f aire rfrence cette feuille. La proprit Caption correspond au libell de la feuille qui apparat dans sa barre de titre. La Figure 12.3 prsente une feuille dont la proprit Caption a t dfini "Exemple de feuille UserForm".
Figure 12.3 Dfinissez les p oprits Name et Caption de la feuille.
La proprit Caption correspond au titre de la feuille

Utilisez les poignes de redimensionnement pour modifier la taille de votre feuille

5. Vous pouvez tout moment utiliser les poignes de redimensionnement pour modifier a taille de la feuille. 6. Cliquez sur le bouton Enre gistrer de la barre doutils Standard pour enre gistrer votre projet. Pour ouvrir la fentre UserF orm dune feuille e xistante, ouvrez lExplorateur de projet (Ctrl + R) et double-cliquez sur celle-ci.

Chapitre 12

Crer des interfaces utilisateur

323

Les contrles de la bote outils


La bote outils contient les contrles que v ous pouvez placer sur votre feuille. Au mme titre que la feuille elle-mme, les contrles sont des objets. Vous navez pas vous soucier de la f aon dont les contrles fonctionnent. Il v ous suf fit den connatre les mthodes proprits et vnements membres pour pouvoir les exploiter. Pour afficher ou masquer la bote outils, cliquez sur le bouton Bote outils de l barre doutils Standard ou slectionnez la commande Bote outils du menu Affichage
Figure 12.4 La bote outils contient des contrles Windows usuels.
Outil Slection Contrle TextBox Contrle ListBox Contrle OptionButton Contrle Frame Contrle TabStrip Contrle ScrollBar Contrle Picture Contrle Label Contrle ComboBox Contrle CheckBox Contrle ToggleButton Contrle CommandButton Contrle MultiPage Contrle SpinButton

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 attrib ut ( ct dune zone de te xte par e xemple), afin de permettre lutilisateur den identifier fonction.

324

Excel et VBA

Figure 12.5 Le contrle Label permet dattacher un libell un contrle nen possdant pas.

Contrle Label

Contrle TextBox
Le contrle TextBox permet de placer une zone de texte sur la feuille, dans laquelle lutilisateur pourra saisir des informations. Les proprits dun contrle TextBox permettent de contrler le nombre de caractres maximum que pourra entrer lutilisateur , laffichage su plusieurs lignes du te xte ou encore le type dalignement du te xte dans la zone de te xte. Elles sont tudies dans le chapitre suivant.
Figure 12.6 Le contrle TextBox est lun des contrles les plus utiliss.

Chapitre 12

Crer des interfaces utilisateur

325

Contrle ComboBox
Le contrle ComboBox, ou zone de liste modifiable, est une zone de t xte permettant lutilisateur de saisir une v aleur manuellement ou de la slectionner dans la liste qui se droule lorsquil clique sur le bouton prvu cet effet. Un contrle ComboBox peut permettre lutilisateur de saisir une valeur ne figurant pas dans la liste, ou nautoriser quune de valeurs de la liste.
Figure 12.7 Le contrle ComboBox permet lutilisateur de slectionner une valeur dans la liste ou de saisir une valeur de son choix.

Contrle Frame
Le contrle Frame ou cadre permet de placer un cadre prsentant un intitul sur une feuille, afin dy placer des contrles. Il est gnralement utilis pour distinguer aisment les cat gories de contrles dune feuille. Les cadres serv ent aussi associer des contrles OptionButton: il suffit de placer les boutons doption sur un mme cadre pour que ceux ci soient associs (voir la section "Contrle OptionButton", ci-aprs).
Figure 12.8 Un contrle Frame permet de lgender un ensemble de contrles.

Contrle ListBox
Le contrle ListBox, ou zone de liste, est une zone af fichant des options parmi lesquelle lutilisateur peut oprer des slections. Les proprits dun contrle ListBox permettent dautoriser la slection dun seul ou de plusieurs lments de la liste. Lorsque la hauteur dune zone de liste ne permet pas den af ficher tous les lments, une barre de dfileme verticale lui est associe.

326

Excel et VBA

Figure 12.9 Une zone de texte peut tre associe une zone de liste afin den a fi her 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 alider ou non une option. Les proprits dun contrle CheckBox permettent aussi de lui f aire accepter un troisime tat, Null (ni coch, ni dcoch). La case cocher apparat alors grise.
Figure 12.10 Les cases cocher permettent de valider ou non une option.

Chapitre 12

Crer des interfaces utilisateur

327

Contrle OptionButton
Les contrles OptionButton ou boutons doption permettent de proposer lutilisateur un choix parmi plusieurs options. Lorsque plusieurs contrles OptionButton sont associs, seul un deux peut tre acti v. Lactivation dun bouton doption entrane la dsacti vation des autres boutons doption associs.
Figure 12.11 Un seul bouton doption peut tre slectionn.

Contrle ToggleButton
Le contrle ToggleButton, ou bouton bascule, permet lutilisateur dactiver ou de dsactiver une option, v oire de choisir ltat Null si les proprits du contrle ly autorisent. Ce contrle offre en fait les mmes fonctionnalits quune case cocher, avec lapparence dun bouton de commande. Lorsquun bouton bascule est activ, il semble enfonc sur la feuille ; lorsquil est dsactiv, il est saillant ; ltat Null, il apparat estomp. La Figure 12.12 prsente les trois tats possibles pour un contrle ToggleButton.
Figure 12.12 Le contrle ToggleButton est assez rarement utilis dans les interfaces de programme.

Contrle CommandButton
Le contrle CommandButton ou bouton de commande est un bouton associ une action. Il peut, par exemple, servir valider les informations entres dans la feuille (bouton OK) afi de passer ltape sui vante du programme, ou au contraire interrompre le programme (bouton Annuler).

328

Excel et VBA

Figure 12.13 Les boutons de commande figu ent parmi les contrles les plus courants.

Contrle TabStrip
Le contrle TabStrip, ou onglet, permet de crer une feuille dont laffichage ariera selon longlet slectionn. Tout se passe comme si laccs plusieurs feuilles tait dirig partir dune seule feuille. Les onglets permettent de rsoudre des problmes despace en 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 peuv ent tre associs un onglet dun contrle TabStrip, ce contrle ne possdant pas un espace propre chaque onglet. Les contrles sont placs sur la feuille et leur mise jour lie la slection dun onglet ne peut tre ef fectue que par lexcution de code prcdemment crit.

Contrle MultiPage
Le contrle MultiPage est semblable au contrle TabStrip, en ce sens quil permet dconomiser de lespace en associant dif frents affichages une mme feuille. A la diffrence du contrle TabStrip, les pages constituant le contrle MultiPage sont autonomes de la feuille. Autrement dit, lorsque vous placez des contrles sur une page dun contrle MultiPage, ceux-ci ne safficheront que si la page en question est slec tionne. Vous naurez donc pas crire de code pour f aire v arier laf fichage de l feuille, mais simplement placer les contrles v oulus sur les pages constituant le contrle.

Chapitre 12

Crer des interfaces utilisateur

329

Figure 12.14 Plusieurs contrles MultiPage peuvent tre placs sur une feuille, chacun pouvant prsenter un nombre variable donglets.

Contrle ScrollBar
Le contrle ScrollBar, ou barre de dfilement, o fre lutilisateur une zone lui permettant de se dplacer dans un en vironnement. Une barre de dfilement peut tre horizontale o verticale. Pour dterminer la position dune barre de dfilement, redimensionnez-la e utilisant ses poignes de slection. Le dplacement laide dune barre de dfilement peu seffectuer par un clic sur lune des touches flches de la barre, un clic lintrieur de l barre (entre le curseur de dfilement et lune des touches flches), ou encore par un glisse dplacer du curseur de dfilement sur la barre Un contrle ScrollBar est automatiquement af fect un contrle ListBox lorsque la hauteur de ce dernier ne permet pas laffichage de tous les lments de la liste
Figure 12.15 Un contrle ScrollBar permet lutilisateur de se dplacer dans une zone de texte trop petite pour affi her la totalit de son contenu.

Contrle ScrollBar

330

Excel et VBA

Contrle SpinButton
Un contrle SpinButton, ou bouton toupie, est compos de deux flches permettant lutilisateur de slectionner une v aleur en cliquant sur lune ou lautre des flches. Le boutons toupies sont gnralement associs une zone de te xte dans laquelle est af fich la valeur slectionne. Les proprits de la zone de te xte peuvent tre dfinies pour qu lutilisateur puisse y entrer une valeur saisie au clavier ou pour que la valeur ne puisse tre dfinie qu laide du bouton toupie
Figure 12.16 Un contrle TextBox est gnralement associ un contrle SpinButton af n daffi her la valeur choisie laide de ce dernier.

Placer des contrles sur une feuille


Pour placer un contrle sur une feuille : 1. Dans la bote outils, cliquez sur le contrle v oulu. Le contrle prend lapparence dun bouton enfonc. 2. Dplacez le pointeur au-dessus de la feuille. Le pointeur se transforme en croix et une image reprsentant le type de contrle slectionn lui est accole (voir Figure 12.17). 3. Placez la croix lendroit o v ous souhaitez v oir apparatre langle suprieur g auche du contrle et cliquez. Le contrle apparat sur la feuille (v oir Figure 12.18) et loutil Slection est activ dans la bote outils. 4. Pour dplacer le contrle, slectionnez-le si ncessaire. Placez le curseur sur la bande grise reprsentant la slection, de f aon quil prenne la mme forme qu la Figure 12.19, et effectuez un glisser-dplacer jusqu lemplacement voulu. 5. Pour redimensionner le contrle, slectionnez-le si ncessaire, puis utilisez les poignes de redimensionnement situes autour du cadre de slection (voir Figure 12.20).

Chapitre 12

Crer des interfaces utilisateur

331

Figure 12.17 Une image accole au pointeur indique le type de contrle slectionn.

Figure 12.18 Le contrle OptionButton dpos sur la feuille.

Figure 12.19 Cette forme de pointeur indique que vous pouvez dplacer le contrle.

Figure 12.20 Utilisez les poignes de redimensionnement pour ajuster la taille du contrle.

332

Excel et VBA

eil Cons

Ds que vous avez plac un contrle sur une feuille , dfinissez sa p oprit 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.

ce Astu

Ce chapitre traite du dv eloppement de feuilles VBA. De la mme f aon, des contrles ActiveX peuvent tre placs sur une feuille de calcul Excel. Les procdures dexploitation de ces contrles sont les mmes que pour une feuille UserF orm dveloppe dans Visual Basic Editor. Lobjet correspondant la feuille UserF orm et dans lequel sont stockes les procdures vnementielles des contrles est lobjet Feuille portant le nom de la feuille, situ dans le module Objets Microsoft Excel. Pour placer des contrles ActiveX sur une feuille de calcul plutt que sur une feuille User Form, affichez la barre doutils Visual Basic dans Excel et cliquez sur le bouton Cration. Cliquez ensuite sur le bouton Bote outils Contrles, afin da ficher les contrle disponibles. Pour quitter le mode Cration, cliquez nouveau sur le bouton Cration.
Figure 12.21 Vous pouvez aussi placer des contrles sur une feuille de calcul Excel.

Copier-coller des contrles


Si vous souhaitez placer plusieurs contrles identiques sur une feuille, v pouvez rpter ous la procdure indique prcdemment. Cependant, il est plus rapide de placer un contrle sur la feuille, de le dimensionner votre convenance et den dterminer les proprits (voir section suivante), puis de le copier et de le coller sur la feuille. Le contrle ainsi dupliqu hritera des proprits du contrle stock dans le Presse-papiers, et v ous viterez ainsi davoir les redfini .

Chapitre 12

Crer des interfaces utilisateur

333

Pour copier et coller un contrle : 1. Slectionnez le contrle sur la feuille, puis copiez-le afin de le placer dans le Presse papiers. Vous pouvez pour cela utiliser le bouton Copier de la barre doutils, slectionner la commande Copier du menu Edition ou du menu conte xtuel (clic droit sur le contrle), ou encore le raccourci clavier Ctrl + C. 2. Collez ensuite le contenu du Presse-papiers (bouton Coller, commande Coller du menu Edition ou du menu contextuel, ou encore le raccourci clavier Ctrl + V). 3. Dplacez si ncessaire le nouveau contrle sur la feuille. 4. Ouvrez ensuite la fentre Proprits du contrle en appuyant sur F4 ou en f aisant un clic droit sur le contrle et en choisissant la commande Proprits du menu conte xtuel. Dfinissez sa proprit Name.
Figure 12.22 La copie du contrle hrite des proprits du contrle source.

ce Astu

Pour copier -coller un contrle , vous pouvez aussi fair e un clic dr oit 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 saffi he, slectionnez Copier ici. Pour dupliquer plusieur s contrles en une seule opr ation, slectionnez les contrles voulus sur la feuille.

ce Astu

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.

334

Excel et VBA

Pour slectionner des contrles non contigus, slectionnez le premier contrle. Appuyez ensuite sur la touche Ctrl et, tout en la maintenant enfonce, slectionnez successivement les contrles voulus.

Figure 12.23 Pour slectionner plusieurs contrles sur une feuille, utilisez les touches Maj et Ctrl.

Info

Lorsque vous slectionnez plusieur s 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 particulir ement utile pour mettr e en forme vos feuilles. Vous pouvez ainsi appliquer certaines pr oprits du contrle actif telles que sa taille ou sa position aux autr es contrles slectionns.

Supprimer des contrles


Pour effacer des contrles dune feuille, slectionnez les contrles v oulus et tapez sur la touche Suppr pour les supprimer sans les stocker dans le Presse-papiers. Si vous souhaitez coller les contrles dans une autre feuille, tapez Ctrl + X afin de placer les contrle supprims dans le Presse-papiers. Activez ensuite la feuille de vant recevoir les contrles et tapez Ctrl + V afin de coller ces derniers dans la feuille act ve.

Mise en forme des contrles


Le simple dplacement des contrles sur une feuille laide de la souris nest pas assez prcis pour atteindre une mise en forme parf aite des contrles. Un certain nombre doutils sont votre disposition pour peaufiner la mise en forme des contrles sur une feuille. Vous obtiendrez ainsi des contrles parf aitement aligns et de dimensions proportionnes. La mise en forme des contrles sur la feuille peut se f aire laide de la grille, des commandes du menu Format ou de la barre doutils UserForm (voir Figure 12.24).
Figure 12.24 La barre doutils UserForm.

Chapitre 12

Crer des interfaces utilisateur

335

La grille
La grille dsigne les points quadrillant une feuille dans une fentre UserF orm. Ces points napparaissent quen phase de conception et ont pour fonction de faciliter la mise en place des contrles sur la feuille. Lorsque lalignement des contrles sur la grille est acti v, langle suprieur g auche des contrles est automatiquement plac sur le point de la grille le plus proche et les contrles ne peuvent tre placs ou dplacs que sur lun des points de la grille. Les contrles acceptent alors autant de positions quil e xiste 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 acti vez la page Gnral de la bote de dialogue qui saf fiche. La zone aramtres de grille de la feuille (voir Figure 12.25) permet de dfinir les options dutilisation de la grille 2. Cochez les cases Afficher la grille afin de aire apparatre les points de quadrillage su r la feuille, et dterminez la prcision de la grille en spcifiant des aleurs de largeur et de hauteur. 3. Cochez la case Aligner les contrles sur la grille, puis cliquez sur OK.
Figure 12.25 Paramtrez lutilisation de la grille.

Info

La commande Ajuster la grille du menu F ormat ajuste la hauteur et la largeur des contrles slectionns aux lignes de grille les plus proches.

336

Excel et VBA

Figure 12.26 Lalignement des contrles sur la grille rend ais lalignement des contrles les uns par rapport aux autres.

Aligner les contrles


Pour aligner des contrles sur une feuille : 1. Slectionnez les contrles aligner en prenant soin de f aire du contrle qui servira de rfrence pour lalignement le contrle actif (celui dont les poignes de slection apparaissent en blanc). Pour modifier le contrle actif dune slection, maintenez la tou he Ctrl enfonce et cliquez deux reprises sur le contrle que vous souhaitez rendre actif. Le premier clic dslectionnera le contrle, le second le slectionner a nouveau en le rendant actif.

ce Astu

2. Choisissez la commande Aligner du menu Format ou cliquez sur la flche de drouleme t du bouton Aligner de la barre doutils UserForm (voir Figure 12.27). 3. Choisissez lalignement voulu parmi les sept types dalignement proposs. Les contrles slectionns salignent sur le contrle actif.
Figure 12.27 Slectionnez un type dalignement.

Info

Un mauvais choix peut entraner la juxtaposition des contrles. Cliquez alors sur le bouton Annuler de la barr e doutils Standar d ou tapez le r accourci Ctrl + Z pour ramener les contrles leur position prcdente.

Chapitre 12

Crer des interfaces utilisateur

337

Figure 12.28 Lalignement des contrles se fait sur le contrle actif de la slection.

Uniformiser la taille des contrles


Pour donner la mme taille diffrents contrles dune feuille : 1. Slectionnez les contrles dont vous souhaitez uniformiser la taille, en prenant soin de faire du contrle qui servira de rfrence le contrle actif. 2. Choisissez la commande Uniformiser la taille du menu Format ou cliquez sur la flch de droulement du bouton Egaliser de la barre doutils UserForm. 3. Choisissez duniformiser la hauteur des contrles, leur largeur ou encore les deux. Les contrles slectionns prennent tous la taille du contrle actif.
Figure 12.29 Une mme largeur et une mme hauteur ont t afectes f 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 v ous souhaitez uniformiser lespace de sparation, en prenant soin de faire du contrle qui servira de rfrence le contrle actif. 2. Choisissez la commande Espacement horizontal ou Espacement v Format, en fonction des positions rciproques des contrles. ertical du menu

338

Excel et VBA

3. Choisissez lune des commandes du menu qui saffiche Egaliser. Lespacement entre les contrles slectionns sera le mme. Augmenter. Lespacement entre les contrles slectionns augmentera dune unit de grille, soit dune distance g ale lespace sparant deux points adjacents de la grille. Diminuer. Lespacement entre les contrles slectionns diminuera dune unit de grille, soit dune distance gale lespace sparant deux points adjacents de la grille. Supprimer. Lespace sparant les contrles slectionns sera supprim. Pour autant , les contrles ne seront pas juxtaposs, mais accols.
Figure 12.30 Un mme espacement vertical a t appliqu aux contrles slectionns.

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 F ormat ou cliquez sur la flch de droulement du bouton Centrer de la barre doutils UserForm. 3. Choisissez un centrage horizontal ou vertical, en fonction de la position des contrles sur la feuille. Les contrles slectionns sont centrs sur la feuille.

Chapitre 12

Crer des interfaces utilisateur

339

Figure 12.31 Les contrles ont t centrs horizontalement sur la feuille.

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. A droite. Les boutons seront placs droite et en haut de la feuille et spars par un mme espace.
Figure 12.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 ver s lequel sont envoys les boutons, ces dernier s les recouvriront.

340

Excel et VBA

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 Figure 12.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.
Figure 12.33 Un clic sur un contrle appartenant un groupe slectionne le groupe entier.

Grouper les contrles prsente plusieurs avantages :

Les contrles peuv ent tre slectionns en un seul clic. Vous pouvez ainsi les dplacer simultanment en dplaant le cadre de slection du groupe. Vous pouvez redimensionner les contrles simultanment, en redimensionnant simplement le cadre de slection du groupe. Les modifications de taille du cadre seront applique lidentique chacun des contrles du groupe. Lorsquun groupe de contrles est slectionn, la fentre Proprits affiche les propri ts communes aux contrles du groupe. La redfinition de la aleur dune proprit affecte alors tous les contrles. On ne peut slectionner quun contrle la fois lintrieur dun gr oupe. 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.

Info

Pour grouper des contrles : 1. Slectionnez les contrles que vous souhaitez grouper. 2. Choisissez la commande Grouper du menu F ormat 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.

Chapitre 12

Crer des interfaces utilisateur

341

Personnaliser la bote outils


Les contrles prsents prcdemment sont les contrles standard, disponibles par df aut 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 nouv elle page, ou en en supprimant.

Ajouter/supprimer un contrle
Dans cet exemple, nous ajouterons le contrle Calendar aux contrles de la bote outils. Le contrle Calendar fait partie des composants dAccess 97. Pour exploiter ce contrle, vous de vez donc possder la ver sion Professional dOffice 97. Il est par contr e intgr dans toutes les ver sions dOf fice postrieu es (2000, XP , 2003, 2007). Si vous possdez Office 97 P ofessional et si le contrle Calendar napparat pas, vous de vrez r elancer linstallation et slectionner la case cocher Contrle Calendar des composants Access.

Info

Pour ajouter un contrle la bote outils, procdez ainsi : 1. Faites un clic droit sur la bote outils et slectionnez la commande Contrles supplmentaires du menu contextuel ou choisissez la commande Contrles supplmentaires du menu Outils. La bote de dialogue Contrles supplmentaires saf fiche ( oir Figure 12.34). La zone de liste Contrles disponibles recense les contrles pouvant tre exploits et placs sur la bote outils.
Figure 12.34 La bote de dialogue Contrles supplmentaires.

342

Excel et VBA

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 Calendrier 11.0. 3. Cliquez sur OK. Le contrle Calendar est maintenant disponible dans la bote outils (voir Figure 12.35).
Figure 12.35 Le contrle Calendar a t ajout la bote outils.

Figure 12.36 La bote de dialogue Personnaliser un contrle.

4. Pour personnaliser le contrle dans la bote outils, f aites un clic droit sur celui-ci et slectionnez Personnaliser contrle. La bote de dialogue Personnaliser un contrle saffiche ( oir Figure 12.36). 5. Vous pouvez : Modifier le t xte 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 cha geant un fichier image (bouton Cha ger une image) ou en dessinant v ous-mme limage qui sera affiche dans la bote outils (Editer une image). Cette dernire possibi lit ouvrira la fentre Editer une image. L utilisation de lditeur dimage est prsente au Chapitre 11.

Chapitre 12

Crer des interfaces utilisateur

343

ce Astu

Pour supprimer des contrles partir de la bote de dialogues Contrles supplmentaires, cochez la case Affi her lments slectionns seulement. Seuls les contrles disponibles sur la bote outils seront affi hs 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. F aites un clic droit sur le contrle supprimer et slectionnez la commande Supprimer contrle.

La Figure 12.37 prsente une feuille sur laquelle un contrle Calendar a t plac.
Figure 12.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 re grouper les contrles par catgories que vous placerez sur des pages distinctes de la bote outils. Pour ajouter une page la bote outils : 1. Cliquez sur longlet Contrles de la bote outils et slectionnez la commande Nouvelle page. Une nouvelle page apparat sur la bote outils (voir Figure 12.38). Par dfaut, le libell de son onglet est Nouvelle page, et loutil Slection y est disponible. Loutil Slection est toujours prsent sur les pages de la bote outils et ne peut tre supprim.

Info

2. Faites un clic droit sur longlet de la nouvelle page et choisissez la commande Renommer. La bote de dialogue Renommer saffiche ( oir Figure 12.39). Indiquez le nom de la page qui apparatra sur son onglet et, v entuellement, le texte dinfo-bulle. Cliquez sur OK.

344

Excel et VBA

Figure 12.38 Une nouvelle page ajoute la bote outils.

Figure 12.39 La bote de dialogue Renommer.

3. Pour ajouter ou supprimer des contrles sur la nouv elle page, acti vez-la, puis procde z 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 le haut et Vers le bas de la bote de dialogue Ordre des pages (v oir Figure 12.40) pour modifier lordre des onglets sur la bote outils
Figure 12.40 Lemplacement des onglets de la bote outils se dtermine dans cette bote de dialogue.

Pour supprimer une page, f aites un clic droit sur son onglet et choisissez la commande Supprimer la page.

Chapitre 12

Crer des interfaces utilisateur

345

Afcher/masquer une feuille


Une feuille ne peut se xcuter delle-mme. Son af fichage doit tre command parti Show, dune procdure dun module de code du projet. On utilise pour cela la mthode selon la syntaxe suivante :
NomFeuille.Show

o NomFeuille est le nom de la feuille af fiche , tel quil apparat dans lExplorateur de projet. La procdure suivante affiche une bote de dialogue i vitant lutilisateur indiquer sil souhaite que linterf ace soit af fiche. Si celui-ci rpond posit vement, la feuille nomme MaFeuille est af fiche. Dans le cas contraire, le programme se poursuit vec 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

Figure 12.41 Si lutilisateur clique sur Oui, la mthode Show sera applique la feuille afin de la fi her.

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 af fecte au bouton de validation de la feuille. Les v aleurs entres par lutilisateur dans la feuille sont alors passes une autre procdure qui les e xploitera, 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

346

Excel et VBA

Ici, arg1, arg2, , argn reprsentent les ar guments passs la procdure SuiteDuProgramme.

ce Astu

La proprit Me renvoie la feuille active . Elle peut tr e 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 pr oprit Name de la feuille (Me.Hide).

Info

Laffectation de pr ocdures vnementielles aux contrles est tr Chapitres 13 et 14.

aite aux

13
Exploiter les proprits des contrles ActiveX
Au sommaire de ce chapitre

Proprit Name Apparence Comportement Dfilemen Divers Emplacement Image Police

348

Excel et VBA

Au cours des chapitres prcdents, v ous a vez dcouv ert les dif frents 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 dtermious ner la valeur de la proprit Name des contrles au fur et mesure que v 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 aites un clic dro it 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-v fentre Proprits" du Chapitre 4. ous la section "La

ce Astu

Pour modifier simultanment la valeur dune p oprit de plusieurs contrles, slectionnez ces contrles sur la feuille . La fentre Proprits affi he alors les proprits communes aux contrles slectionns. Les pr oprits dfinies l seront pour tous les contrles slectionns.

Il existe videmment des proprits spcifiques pour chaque contrle et dautres com unes presque tous les contrles. Les sections qui sui vent v ous prsentent les proprits essentielles, classes par catgories. Dans la ralit, v ous nutiliserez que trs peu de ces proprits, car , pour nombre dentre elles, la v aleur par df aut 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 Pour affi her la rubrique daide dune pr oprit, slectionnez le nom de la proprit dans la fentre Proprits et tapez sur la touc he F1. Vous pouvez aussi slectionner le contrle sur la feuille , puis tapez sur F1 pour ouvrir la rubrique daide du contrle . Le lien Pr oprits situ dans le haut de la

ce Astu

Chapitre 13

Exploiter les proprits des contrles ActiveX

349

fentre ouvre une bote de dialo gue Rubriques trouves, listant les proprits du contrle (voir F igure 13.1). Slectionnez la pr oprit dont vous souhaitez consulter la rubrique daide et cliquez sur Affi her.
Figure 13.1 Accdez en un clin dil aux rubriques daide des proprits dun contrle.

Proprit Name
La proprit Name est e xploite par le programme, et reste in visible 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 modifie 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 d aut en une chane compose du nom de la classe de lobjet sui i dun nombre entier. Par exemple, v lorsque v ous placez un contrle OptionButton (bouton doption) sur une feuille, sa proprit Name est dfinie OptionButton1, OptionButton2 sil e xiste dj un contrle OptionButton1, etc. Affectez des noms r eprsentatifs aux contrles de votr e feuille. Il vous ser a ainsi facile de savoir quel contrle fait rfrence une instruction dans le code.

eil Cons

Linstruction If...End If suivante interroge la proprit Value dune zone de te xte (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

350

Excel et VBA

ce Astu

Si une zone de texte est destine recevoir un mot de passe, affectez un caractre tel que lastrisque sa pr oprit PasswordChar, afin de masquer le mo de passe saisi. Le car actre affect la proprit PasswordChar sera affi h 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 d la procdure pour y lir e le mot de passe . Pour protger par mot de passe un projet VBA, faites un clic dr oit sur le projet dans la fentre Proprits et choisissez la commande Pr oprits de NomPr ojet. Activez longlet Pr otection et cochez la case Verrouiller le projet pour laffi hage. 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.

Figure 13.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 v aleur lune des constantes fmalignment:

fmalignmentright (par dfaut). Place le libell droite du contrle. fmalignmentleft. Place le libell gauche du contrle.

Figure 13.3 La lgende dun contrle CheckBox ou RadioButton peut tre aligne droite ou gauche du contrle.

BackColor
Cette proprit dtermine la couleur de fond du contrle. Elle prend pour valeur une variable de type Long reprsentant une couleur . Lorsque v ous modifiez la aleur de cette proprit dans la fentre Proprits, une palette saf fiche ( oir Figure 13.4). Vous pouvez

Chapitre 13

Exploiter les proprits des contrles ActiveX

351

slectionner une couleur sur longlet P alette 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.
Figure 13.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 v constantes fmBackStyle:

aleur lune des

fmBackStyleOpaque (par dfaut). Dtermine un fond opaque. Les v entuels 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.

BorderStyle
Cette proprit dtermine laf fichage ou non dune bordure pour le contrle. Elle pren pour valeur lune des constantes fmBorderStyle:

fmBorderStyleNone. Indique quaucune bordure nest affiche pour le contrle fmBorderStyleSingle. Indique quune bordure est affiche

352

Excel et VBA

Caption
La proprit Caption dtermine le te xte descriptif dun contrle et accepte une v aleur de type String (chane de caractres). L emplacement de ce libell v arie selon le contrle. Par e xemple, 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 df aut) ou g auche du contrle, selon la valeur de sa proprit Alignment. La Figure 13.5 prsente deux boutons de commande dont les proprits Caption ont t dfinies OK et Annuler.
Figure 13.5 La proprit Caption sert affecter une lgende un contrle.

Il peut tre utile de f aire varier la proprit Caption dun contrle en fonction des vnements utilisateur . Dans le xemple sui vant, lorsque lutilisateur clique sur le bouton de commande dont la proprit Name est dfinie "JoueurSu vant", la proprit Caption du contrle MonLibell bascule entre "Joueur 1" et "Joueur 2".
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

La premire ligne est une instruction de procdure dvnement (traites dans le 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 Instrucction tions se xcutent. La procdure appelante reprend ensuite la main. Enfin, linstr If...End If modifie la proprit Caption du contrle MonLibell: si sa proprit Caption est "Joueur 1", elle est redfinie "Joueur 2", et i versement.

Chapitre 13

Exploiter les proprits des contrles ActiveX

353

ntion Atte

Ne confondez pas le libell dun contrle (pr oprit 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 l pointeur au-dessus du contrle sans cliquer . La proprit ControlTipText accepte une valeur de type String (chane de caractres), et sa v aleur par df aut est une chane vide. Nhsitez pas utiliser cette proprit pour affecter des info-bulles dcrivant brivement la fonction des contrles dune feuille. A la Figure 13.6, le pointeur a t plac au-dessus dun contrle dont la proprit ControlTipText a t dfinie afin de renseigner lutilisateur sur sa fonctio
Figure 13.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.

SpecialEffect
Cette proprit dtermine lapparence du contrle sur la feuille. La v aleur 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;

354

Excel et VBA

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 conser er les valeurs attribues par dfaut. Pour plus dinformations sur les ef fets 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 f aon dont la slection sef fectue dans un contrle ComboBox. Lutilisateur peut ou non tre autoris saisir une v aleur ne figurant pas dans la liste a fecte au contrle. La proprit Style accepte pour valeur lune des deux constantes fmStyle:

fmStyleDropDownCombo (par dfaut). Lutilisateur peut slectionner une v aleur dans la zone de liste droulante ou saisir manuellement une v aleur de son choix. Cest, par exemple, le cas de la zone de liste Zoom de la barre doutils Standard dExcel. fmStyleDropDownList. Lutilisateur ne peut saisir de v aleur dans la zone ddition du contrle. Les seules v aleurs autorises sont celles figurant dans la liste attache a contrle. Cest le cas des zones de listes droulantes dalignement de la bote de dialogue Cellules dExcel. Lorsque lutilisateur saisit un caractre au cla vier, le premier 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 valeur s dans la zone ddition dun contrle ComboBox, assurez-vous que lutilisateur ne pourr a y saisir une valeur non valide , qui gnrerait une erreur ou aboutir ait un mauvais fonctionnement du pr ogramme. Affectez pour cela une pr ocdure lvnement Change du contrle , qui sassur era de la validit de la valeur saisie (voir lexemple donn pour le contrle TextBox, au chapitre suivant).

Value
Cette proprit dtermine la v aleur dun contrle. La proprit Value accepte des v aleurs qui varient dun contrle lautre. La valeur dun contrle peut en effet correspondre un tat (le f ait quune case soit ou non coche) ou un contenu (le te xte saisi dans la zone ddition dune zone de te xte), et peut donc accepter une v aleur numrique ou de type String.

Chapitre 13

Exploiter les proprits des contrles ActiveX

355

Le tableau suivant prsente les valeurs acceptes par la proprit Value des contrles standard :
Contrle Valeur accepte par la proprit Value

Valeur de type Boolean, indiquant ltat du contrle : True sil est activ et CheckBox, OptionButton False sil est dsactiv. Les contrles CheckBox (case cocher) et OptionButton ou ToggleButton (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 dnie 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 ComboBox et ListBox

Valeur de type String reprsentant le texte apparaissant dans la zone ddition du contrle. 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. 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 dlement. Elle vaut Min lorsque le curseur est tout en haut (barre de dlement horizontale) ou tout gauche (barre de dlement 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 che de dlement Haut ou Gauche du contrle, sa proprit Value se rapproche de la valeur de Min. Lorsquil clique sur la che de dlement Bas ou Droite, la proprit Value se rapproche de la valeur de Max. Voir aussi les proprits Min et Max. 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 entre 0 et le nombre de pages moins 1.

ScrollBar et SpinButton

MultiPage

356

Excel et VBA

La procdure suivante se dclenche lorsque lutilisateur clique sur le bouton de commande btnOK. Elle teste la v aleur de la proprit Value du contrle txtMotdeP asse, 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 g ale une chane vide), la bote de dialogue de la Figure 13.7 est affiche
If txtMotDePasse.Value = "" Then MsgBox "Vous devez indiquer un mot de passe.", VBOKOnly, "Mot de passe requis" Else Instructions End If

Figure 13.7 Value est lune des pr oprits les plus utilises.

Visible
Cette proprit dtermine la visibilit dun contrle pour lutilisateur . Un contrle peut ainsi tre rendu in visible lutilisateur tout moment de le xcution 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 appa ence 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 conte xte. Vous pouvez ainsi naf ficher les contrles dune feuille qu sils doivent tre renseigns par lutilisateur. La Figure 13.8 prsente la feuille Nouveau salari, en phase de conception dans Visual Basic Editor. Outre le se xe et la situation, lutilisateur est in vit entrer un prnom et un nom pour le nouveau salari. Une zone de texte et un libell Nom de jeune fille permettent aussi dindi quer 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

Chapitre 13

Exploiter les proprits des contrles ActiveX

357

Figure 13.8 La feuille Nouveau salari en phase de conception.

Proprit Name Contrles OptionButton

Proprit Caption Masculin Fminin Mari(e) Clibataire Vie maritale Prnom(s) : Nom : Nom de jeune lle

optMasculin OptFminin optMari optClibataire optMaritale


Contrles Label

lbPrnom lbNom lbNomJF


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 xte 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 df nie True afin que ce bouton soit coch par d aut. Le code sui vant 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

358

Excel et VBA

lbJF.Visible = True Else 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 f aon 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 sui vantes 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.

Chapitre 13

Exploiter les proprits des contrles ActiveX

359

Figure 13.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 a fiche son contenu. Le contenu dun contrle dsigne la v aleur 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 fi e.

Info

Lorsque vous dfinissez la p oprit AutoSize dun contrle durant la phase de conception, il se redimensionne automatiquement, en fonction de son contenu. Vous pouvez si vous le souhaitez df nir une taille suprieure pour le contrle. En phase de xcution, le contrle conserver a la taille ainsi df nie, tant que celle-ci suffi a en affi her tout le contenu.

La Figure 13.10 prsente deux contrles TextBox dont les proprits AutoSize sont respectivement dfinies sur True et False. Lun sest redimensionn automatiquement pour faire apparatre le te xte saisi par lutilisateur , tandis que le te xte saisi dans le contrle dont la taille est fi e est rogn.
Figure 13.10 La proprit AutoSize permet dviter que le texte ne soit rogn.

360

Excel et VBA

eil Cons

Ne dfinissez la p oprit 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 dfi nie, la proprit AutoTab spcifie si une ta ulation automatique se dclenche lorsque le nombre de caractres maximal autoris dans le contrle est atteint. Si tel est le cas, lefocus est pass au contrle suivant dans lordre de tabulation.
Info

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 e xemple, taper sur la touc he Entre alor s quun bouton de commande a le focus revient cliquer sur ce bouton. La fr appe de la touche Entre naura aucun effet si le focus corr espond une case coc her, alor s que c haque fr appe de la touche Tab le fera passer dun tat lautre.

ition Dfin

Lordre de tab ulation dsigne lor dre dans lequel le focus est tr ansmis 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 sui vant 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 fi e, comme un mot de passe ou un code produit. Le contrle suivant sera ainsi slectionn automatiquement sans que lutilisateur ait quitter le clavier.

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 est slectionn et la slection se fait ensuite mot par mot. False. La slection se fait caractre par caractre, quelle que soit son tendue.

Chapitre 13

Exploiter les proprits des contrles ActiveX

361

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 Echap 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 d dialogue demandant la confirmation de labandon. La procdure su vante affiche la bot de dialogue prsente la Figure 13.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

Figure 13.11 Protgez lutilisateur dun abandon involontaire de la pr ocdure par laffi hage dun message de confirmation

Info

Sur une mme feuille, un seul bouton de commande peut tr e le bouton Annuler. Lorsque vous dfinissez la p oprit Cancel dun bouton de commande sur True, cette proprit est automatiquement dfinie False pour tous les autres boutons de commande de la feuille.

362

Excel et VBA

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 df aut, 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 Default accepte une de la touche Entre lorsque le contrle a le focus. La proprit 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 tr e le bouton par dfaut. Lorsque vous dfinissez la p oprit Default dun bouton de commande sur True, cette pr oprit 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 a voir 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 v aleur de type Boolean:

True(par dfaut). Le contrle est accessible. False. Le contrle nest pas accessible.

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 nou eau 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 nouv eau salari est une femme. Nous avons ajout deux instructions (en gras, dans le listing) afin de dsact ver 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

Chapitre 13

Exploiter les proprits des contrles ActiveX

363

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

Figure 13.12 La proprit Enabled permet de dterminer laccessibilit dun contrle en fonction du contexte.

Info

Notez quun contrle peut tr e accessible et non modifiabl . Pour plus de prcisions, voyez la proprit Locked.

364

Excel et VBA

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 pr oprit MultiLine dun contrle CheckBox est dfinie sur False, le contrle nautorise quune ligne , et une pr ession sur la touc he Entre entr anera 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.

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 spcifiqu du contrle ayant le focus.

Locked
Cette proprit dtermine si un contrle peut ou non tre modifi ou act sateur. La proprit Locked accepte une valeur de type Boolean:

v par lutili-

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 pr oprit Enabled afin, ar 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 e xemple, un contrle TextBox af fichant le t xte slectionn dans le document ou le rsultat dun calcul.

Chapitre 13

Exploiter les proprits des contrles ActiveX

365

Info

Lorsque la proprit Locked dun contrle est dfinie True, le contenu de ce contrle ne peut tr e modifi di ectement sur la feuille dur ant la phase Conception. Si vous souhaitez modifier sa p oprit 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 v aleur de type Integer, correspondant au nombre de caractres autoriss. Par dfaut, la proprit MaxLenght est dfinie sur 0, lutilisateur tant alors autoris entrer un nombre de caractres indtermin. Lorsque le nombre de caractres maximal est atteint, les frappes de cla vier restent sans effet. Vous pouvez aussi choisir que le focus soit pass au contrle sui vant dans lordre de tabulation en dfinissant la proprit AutoTab sur True.
eil Cons

Affectez une valeur MaxLenght aux contrles TextBox destins r ecevoir un nombre de caractres constant (saisie dun mot de passe ou dun code produit, par exemple), ou lorsque la limitation du nombr e de caractres est une ncessit du programme.

Voir aussi AutoTab.

MultiLine
Cette proprit dtermine si le te xte saisi dans un contrle TextBox saf fiche sur la lign suivante lorsquil arrive en bout de ligne. Si tel est le cas, le te saffiche sur la ligne su vante xte tant que les dimensions du contrle le permettent. La proprit MultiLine accepte une valeur de type Boolean:

True (par dfaut). Le te xte est af fich sur plusieurs lignes lorsque cela est nces saire. False. Le texte est affich sur une seule ligne

SelectionMargin
Cette proprit dtermine si lutilisateur peut ou non slectionner une ligne de te xte 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 ers le haut et droite lorsquil est plac

366

Excel et VBA

gauche de la ligne slectionner (v oir Figure 13.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.

Figure 13.13 Le curseur prend la forme dune fl he indiquant quun clic entranera la slection de la ligne entire.

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. Lutilisateur peut saisir une v aleur 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. L utilisateur peut alors accepter le complment propos ou saisir une valeur diffrente. fmStyleDropDownList. Le contrle se comporte comme une zone de liste. L utilisateur ne peut slectionner quune des options de la liste. Il est impossible de saisir une v aleur diffrente dans la zone ddition du contrle. Si lutilisateur saisit une lettre au cla vier alors que le contrle a le focus, loption de la liste la plus proche de la lettre saisie est slectionne.

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.

Chapitre 13

Exploiter les proprits des contrles ActiveX

367

TabKeyBehavior
Cette proprit dtermine si lutilisateur peut ou non saisir une tab ulation dans la zone ddition dun contrle TextBox. La proprit TabKeyBehavior accepte une valeur de type Boolean:

True. Lutilisateur peut saisir une tab ulation dans la zone ddition. La touche Tab ne peut donc pas tre utilise pour passer le focus au contrle sui ant dans lordre de tabuv lation. False (par dfaut). La touche Tab entrane le passage du focus au contrle sui vant dans lordre de tabulation.

eil Cons

Ne dfinissez cette p oprit sur True que si le xploitation des donnes du contrle par le programme prvoit la gestion des tabulations.

TextAlign
Cette proprit dtermine la f aon dont le libell dun contrle Label, ou le te xte 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 acti v ni dsactiv). Une case cocher ou un bouton doption ltat null apparat estomp et contient une marque dacti vation (v oir Figure 13.14). Sa proprit Value renvoie alors la v aleur 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.

Voir aussi Value.

368

Excel et VBA

Figure 13.14 Un contrle CheckBox peut accepter trois tats.

WordWrap
Cette proprit dtermine si un contrle autorise un changement de ligne afin da ficher l 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 changements 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 suppl mentaire. Si tel nest pas le cas, aucun changement de ligne ne sef fectue et le te xte se poursuit sur la mme ligne. La Figure 13.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.
Figure 13.15 La proprit WordWrap permet de visualiser la totalit du contenu du contrle, en autorisant laffi hage sur plusieurs lignes.

Info

Si la pr oprit MultiLine dun contrle TextBox est dfinie sur False, une seule ligne est autorise dans la zone ddition, et la pr oprit WordWrap est sans effet.

Chapitre 13

Exploiter les proprits des contrles ActiveX

369

Dlement
ScrollBars
Cette proprit dtermine laffichage dune ou de plusieurs barres de dfilement pour l feuilles, les contrles TextBox et Frame. Ces contrles peuv ent possder une barre de dfilement horizontale, une barre de dfilement erticale, ou les deux. Les barres de dfilement sa fichent lorsque les dimensions du contrle ne permettent pas da ficher l ScrollBars accepte lune des constantes totalit de leur contenu. La proprit fmScrollBars:

fmScrollBarsNone. Aucune barre de dfilement nest a fiche pour le contrle fmScrollBarsHorizontal. Le contrle possde une barre de dfilement horizontale fmScrollBarsVertical. Le contrle possde une barre de dfilement erticale. fmScrollBarsBoth. Le contrle possde des barres de dfilement horizontale et cale.

erti-

Info

Les contrles ListBox ne gr ent pas la pr oprit ScrollBars. Ils af fi hent toujours une barr e de dfilement verticale lo sque cela est ncessair e, afi que lutilisateur puisse slectionner les lments de son choix dans la liste.

Un contrle TextBox dont la proprit MultiLine est dfinie False ne peut af ficher d barre de dfilement erticale, puisque son contenu est toujours affich sur une seule ligne Un contrle TextBox dont la proprit WordWrap est dfinie True ne peut afficher de barr de dfilement horizontale, puisque, chaque fois que la limite da fichage lie aux dimen sions du contrle est atteinte, le contenu est affich sur la ligne su vante.
MultiPage permet Une barre de dfilement place sur une feuille ou sur un contrle laffichage dune zone suprieure la taille relle de la feuille ou du contrle. Lorsqu vous placez une barre de dfilement sur un contrle MultiPage ou sur une feuille, v ous devez donc spcifier la taille totale de la zone pou ant tre affiche laide des barres d 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, relati ement 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 le contrles MultiPage, reportez-vous lAide Visual Basic.

370

Excel et VBA

eil Cons

Lorsque vous dfinissez True les pr oprits MultiLine et WordWrap dun contrle TextBox, af fectez la valeur fmScrollBarsVertical sa pr oprit ScrollBars. Une barre de dfilement se a ainsi af fi he lorsque les capacits daffi hage du contrle seront dpasses. Lorsque vous affectez une barre de dfilement un contrl , assurez-vous que le contrle dispose dassez despace pour affi her ces barres.

eil Cons

KeepScrollsVisible
Cette proprit dtermine si les barres de dfilement dun contrle sont ou non visible lorsquelles nont aucune utilit, cest--dire lorsque la totalit du contenu du contrle est affiche. La proprit ScrollBars accepte lune des constantes fmScrollBars:

fmScrollBarsNone. Les barres de dfilement ne sont a fiches que lorsque les dimensio s du contrle ne permettent pas den visualiser le contenu. fmScrollBarsHorizontal. La barre de dfilement horizontale est toujours a quel que soit le contenu du contrle. fmScrollBarsVertical. La barre de dfilement que soit le contenu du contrle.

fiche

erticale est toujours af fiche, que erticale sont toujours

fmScrollBarsBoth. Les barres de dfilement horizontale et 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 mainti 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 est 50. Pour vous dplacer laide dune barre de dfilement ou modifier une aleur 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 se xcute en boucle interv alle rgulier jusqu ce que v ous 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 se xcute lorsque lutilisateur

Chapitre 13

Exploiter les proprits des contrles ActiveX

371

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 p oprit Delay. Elle corr espond au comportement habituel des barres de dfilement et des boutons toupies en e vironnement Windows. Une valeur trop importante diminue lefficacit du contrle en augmentant le dla entre c haque vnement dclenc h en srie . Une valeur tr op petite risque de dclencher une srie dvnements au moindr e clic, alor s que lutilisateur ne souhaite dclencher quun simple vnement.

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 v aleur de type Integer. Lorsque vous dplacez le curseur de dfilement dun contrle ScrollBar ou lorsque v ous cliquez sur lune des flches de dfilement dun contrl 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 erticale) 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 s 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 propri 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 conjug aison de ces trois proprits qui dtermine le nombre de v aleurs 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] plus 1. Si les proprits Min et Max du contrle sont respecti vement dfinies 0 et 100, et l aleurs (0, 10, , 100). proprit SmallChange, 10, le contrle peut prendre onze v Chaque clic sur la flche de dfilement Bas ou Droit du contrle incrmentera sa aleur de 10, jusqu atteindre la v aleur de Max. Les clics resteront alors sans ef fet. De la mme

372

Excel et VBA

faon, chaque clic sur la flche de dfilement Haut ou Gauche du contrle tera 10 valeur, jusqu atteindre la valeur de Min. Les clics resteront alors sans effet.
Les valeur s par dfaut des pr oprits Min et Max dun contrle ScrollBar sont respectivement 0 et 32 767. La valeur de ses pr oprits SmallChange et LargeChange tant dfinie par dfaut 1, le contrle ainsi dtermin accepte 32 768 positions. Les valeurs par dfaut des pr oprits Min et Max dun contrle SpinButton sont respectivement 0 et 100. La valeur de sa pr oprit SmallChange tant dfinie pa dfaut 1, le contrle ainsi dfini accepte 101 positions

Info

SmallChange
Cette proprit spcifie la aleur dincrmentation de la proprit Value dun contrle ScrollBar ou SpinButton lors des vnements SpinDown ou SpinUp. La proprit SmallChange accepte une valeur de type Integer. Chaque fois que lutilisateur clique sur la flche de dfilement Bas (contrle ertical) ou Droite (contrle horizontal) du contrle, sa v aleur est incrmente de la v aleur de SmallChange, 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 contrle, sa v aleur est dcrmente de la v aleur 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 e xemple dexploitation de ces proprits, reportez-v ous la section consacre lexploitation des objets SpinButton dcrite dans le chapitre suivant.

LargeChange
Cette proprit spcifie la aleur dincrmentation de la proprit Value dun contrle ScrollBar lorsque lutilisateur clique dans la barre de dfilement, entre le curseur et lun des flches de dfilement. La proprit LargeChange accepte une valeur de type Integer. Sa valeur par dfaut est 1. Chaque fois que lutilisateur clique dans la barre de dfilement, entre le curseur et la flc de dfilement Bas (contrle ertical) ou Droite (contrle horizontal) du contrle, sa valeur

Chapitre 13

Exploiter les proprits des contrles ActiveX

373

est incrmente de la v aleur de LargeChange, jusqu atteindre la v aleur 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 flc Haut ou Gauche du contrle, sa v aleur est dcrmente de la v aleur 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 gnrale ment un dplacement suprieur un clic sur la flche de dfilement. ar exemple, un clic sur la flche de dfilement erticale dune fentre Excel gnre un dfilement dune ligne tandis quun clic dans la barre de dfilement gnre un dfilement dun cra Pour un e xemple dutilisation de la proprit LargeChange, voyez la section consacre lexploitation des objets ScrollBar, dans le chapitre suivant.

Divers
Accelerator
Cette proprit permet de dfinir un raccourci cl vier pour un contrle. Elle accepte une valeur de type String correspondant au raccourci cla vier du contrle. Pour attrib uer un raccourci clavier un contrle, af fectez un des caractres formant le te xte 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 af fecte 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 df aut du contrle est lvnement Clik (pour un bouton de commande ou une case cocher , par exemple), alors celui-ci est excut. La Figure 13.16 prsente une feuille dont tous les contrles ont t af raccourci clavier. fects un

Lorsquune touche de raccourci est affecte un contrle Label, elle entrane le passage du focus au contrle sui vant dans lordre de tabulation. Cette fonction est particulirement intressante pour af fecter un raccourci cla vier permettant dacti ver un contrle TextBox. Il suf fit en e fet dattrib uer une touche de raccourci au contrle Label le lgendant et de sassurer que ce dernier prcde le contrle TextBox dans lordre de tabulation.

374

Excel et VBA

Figure 13.16 Nhsitez pas affecter des touches de raccourci aux contrles dune feuille af n den optimiser lutilisation.

ntion Atte

Veillez ne pas attrib uer un mme raccourci clavier des contrles dif frents sur une feuille . Lorsquune mme touc he de r accourci est af fecte plusieur s 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 n 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 GroupName respectives. Cette seconde possibilit permet de gagner de la place sur la feuille, en y plaant un contrle de moins, et of fre plus de libert puisque les boutons doption peuvent tre placs nimporte o sur la feuille. L utilisation dun cadre est cependant souvent visuellement plus efficace, surtout lorsque la feuille propose plusieurs groupes de boutons doption. La distinction des dif frents groupes est ainsi rendue vidente par la dlimitation quoffre le cadre. Pour dfinir lidentique la p oprit GroupName dun ensemble de boutons doptions, slectionnez dabor d 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 af fects par cette modification

ce Astu

Chapitre 13

Exploiter les proprits des contrles ActiveX

375

HelpContextID
Cette proprit sert spcifier une rubrique daide pour le contrle. Elle accepte un valeur de type Long correspondant lidentificateur de cont xte 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 audessus du contrle. Pour que cette proprit ait un ef fet, la proprit MousePointer doit tre dfinie fmMousePointerCustom. Pour af fecter une icne personnalise un contrle partir de la fentre Proprits : 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 alide qui sera utilis comme icne souris pour le contrle (lextension de fichier la plus courante est .ico), puis cliquez sur Ouvri . Vous pouv ez aussi crire du code permettant daf fecter une icne personnalise un contrle en cours dexcution dun programme. Faites pour cela appel la fonction LoadPicture, selon la syntaxe suivante :
Contrle.MouseIcon = LoadPicture(NomIcne)

o Contrle est le contrle et NomIcne, le chemin et le nom de licne personnalise.


Figure 13.17 La proprit MouseIcon permet daffecter des icnes personnalises aux contrles.

ntion Atte

Pour af fecter un cur seur per sonnalis un contrle , vous de vez galement affecter la valeur fmMousePointerCustom sa proprit MousePointer que le curseur soit affect au contrle lor s de la phase de conception de la feuille ou lors de lexcution du code laide de la fonction LoadPicture.

376

Excel et VBA

MousePointer
Cette proprit permet de dterminer lapparence du pointeur de souris du contrle. La proprit MousePointer accepte pour v aleur lune des dix-sept constantes fmMousePointer. Les seize premires correspondent un type de pointeur particulier, et la dixseptime, fmMousePointerCustom, permet daf fecter un pointeur personnalis au contrle (voir section prcdente). Pour visualiser les dif frents types de pointeurs de souris disponibles, placez sur une feuille un contrle ComboBox et un contrle CommandButton et dfinissez leurs proprit comme indiqu dans le tableau suivant :
Proprit Feuille Valeur

Name
Contrle ComboBox

fmTestPointeur

Name Locked
Contrle CommandButton

cboConstantes

True

Name Value

cmdQuitter 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 di frentes

Chapitre 13

Exploiter les proprits des contrles ActiveX

377

options de la zone de liste droulante et placez le pointeur sur le bouton pour chaque slection, afin de visualiser les di frents types de pointeurs disponibles. Cliquez sur le bouton Quitter pour fermer le programme et retourner Visual Basic Editor.
Lorsque vous modifiez la p oprit MousePointer dun objet UserForm (feuille), le pointeur de souris dtermin af fecte toutes les feuilles, quel que soit le contrle audessus duquel se trouve le pointeur. Pour le vrifie , remplacez linstruction
cmdQuitter.MousePointer = cboConstantes.ListIndex

Info

par
fmTestPointeur.MousePointer = cboConstantes.ListIndex

Figure 13.18 Vous pouvez modif er lapparence dun pointeur tout moment de lexcution du programme.

TabIndex
Cette proprit dtermine la position du contrle dans lordre de tab ulation de la feuille. Elle accepte une valeur de type Integer, comprise entre 0 et le nombre de contrles de la feuille moins 1. (La v aleur de la proprit TabIndex du premier contrle dans lordre de tabulation est gale 0.) Pour un rappel des notions de focus et dordre de tabulation, reportez-vous la section dcrivant la proprit AutoTab, plus haut dans ce chapitre.

Info

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 actif plus 1. Sil utilise la combinaison Maj + Tab, le focus est pass au contrle dont la v aleur de la proprit TabIndex est gale celle du contrle actif moins 1. Si la proprit Enabled du contrle de vant rece voir le focus est dfinie False, il est ignor, et le focus est pass au contrle sui vant, dans lordre de tabulation de la feuille. Si vous souhaitez quun contrle soit ignor dans lordre de tab ulation tout en restant accessible lutilisateur, dfinissez sa proprit TabStop False.

378

Excel et VBA

Pour dfinir lordre de ta ulation dune feuille en phase de conception, il est plus simple dutiliser la bote de dialogue Ordre de tab ulation que de dfinir une une les proprit TabIndex des contrles : 1. Faites un clic droit sur la feuille (pas sur un contrle) et, dans le menu conte xtuel qui saffiche, choisissez la commande Ordre de ta ulation. La bote de dialogue Ordre de tabulation saffiche ( oir Figure 13.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).
Figure 13.19 La bote de dialogue Ordre de tabulation.

2. Pour dplacer un contrle dans lordre de tab ulation 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.
Figure 13.20 Dplacez simultanment les contrles dont vous souhaitez modifier la position dans lo dre de tabulation, tout en leur conservant leurs positions relatives.

3. Vous pouv ez dplacer simultanment plusieurs contrles dans la bote de dialogue Ordre de tabulation, afin de modifier leur emplacement dans lordre de t ulation de la feuille, tout en conservant leurs positions relatives.

Chapitre 13

Exploiter les proprits des contrles ActiveX

379

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 v oulus tout en maintenant la touche Ctrl enfonce.

TabStop
Cette proprit dtermine si un contrle peut ou non rece voir le focus lorsque lutilisateur tape sur la touche Tab ou sur la combinaison Maj + Tab. La proprit TabStop accepte une valeur de type Boolean:

True (par dfaut). Si sa position dans lordre de tabulation le justifie, le contrle reoi 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 conserv e 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 respecti vement la hauteur et la lar geur dun contrle. Les proprits Height et Width acceptent une v aleur 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 v ous redimensionnez le contrle dans Visual Basic Editor. Pour dterminer la taille de v os contrles, prfrez donc les mthodes de dimensionnement prsentes dans le chapitre prcdent.

Left et Top
Ces proprits dterminent respecti vement 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.

380

Excel et VBA

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 v os contrles sur la feuille, prfrez donc les mthodes de mise en forme prsentes dans le 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. Ce StartUpPosition de la feuille est proprits ne sont considres que si la proprit dfinie 0 (manuel)

StartUpPosition
Cette proprit dtermine la position de la feuille sur lcran lors de laf fichage de l 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 est affiche dans langle suprieur auche de lcran. Utilisez cette v aleur lorsque v ous souhaitez que la feuille af fiche masque le moin possible le document actif.

Figure 13.21 Vous pouvez choisir de toujours affi her 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

381

Figure 13.22 Laffi hage 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 daf fecter une image un contrle ou une feuille. Pour af fecter une image un objet : 1. Affichez sa fentre Proprits et cliquez sur le bouton arcourir () de la proprit Picture. La bote de dialogue Charger une image saffiche ( oir Figure 13.23).
Figure 13.23 Slectionnez le f chier image que vous souhaitez affecter au contrle.

382

Excel et VBA

2. Slectionnez un fichier de format alide qui sera utilis comme image pour le contrle ou la feuille (.bmp et .ico sont des formats valides), puis cliquez sur Ouvrir. Vous pouv ez aussi crire du code permettant daf fecter une image un objet en cours dexcution dun programme. F aites 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.


Figure 13.24 Vous pouvez donner un peu de fantaisie vos feuilles en leur affectant des images.

Pour supprimer une image dun contrle, slectionnez la v aleur 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 v aleur lune des constantes fmPictureAlignment:

fmPictureAlignmentTopLeft. Limage est place dans langle suprieur g auche de lobjet. fmPictureAlignmentTopRight. L image est place dans langle suprieur droit de lobjet. fmPictureAlignmentCenter (par dfaut). Limage est centre sur lobjet. fmPictureAlignmentBottomLeft. Limage est place dans langle infrieur g auche de lobjet. fmPictureAlignmentBottomRight. Limage est place dans langle infrieur droit de lobjet.

Chapitre 13

Exploiter les proprits des contrles ActiveX

383

Pour les contrles CommandButton, la proprit PictureAlignment est remplace par la proprit PicturePosition. Utilisez cette proprit pour af fecter une image un bouton de commande sans en masquer le libell. Une image a t af fecte la proprit Picture des trois contrles CommandButton de la Figure 13.25. Leur proprit PicturePosition a t dfinie sur fmPicturePositionLeftCenter afin de ne pas masque leur libell. Notez le contrle (et non la proprit) Picture reprsentant une imprimante.
Figure 13.25 Laffectation dune image la proprit Picture des boutons de commande de vos feuilles leur donnera un peu de gaiet.

ce Astu

Ralisez une captur e dcr an dune fentr e dont vous souhaitez e xploiter les icnes. Dtourez ensuite ces dernires dans un lo giciel de dessin tel que P aint Shop Pro et enregistrez-les au format BMP. Vous pourrez ensuite les e xploiter dans vos feuilles VBA comme contrle Picture ou comme pr oprit Picture dun contrle CommandButton.

PictureSizeMode
Cette proprit dtermine de quelle f aon limage dun contrle ou dune feuille est af fi che si sa taille dif fre de celle de lobjet conteneur . Elle nest pas gre par le contrle CommandButton. La proprit PictureSizeMode accepte pour v aleur lune des mthodes PictureSizeMode:

fmPictureSizeModeClip (par dfaut). Si la taille de limage est suprieure celle du contrle, seule la partie tenant dans le contrle est affiche. La partie rogne ariera en fonction de lalignement de limage, dtermin par la proprit PictureAlignment.

384

Excel et VBA

fmPictureSizeModeStretch. Limage est redimensionne afin quelle soit prcismen 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 af fiche en mosaque sur une feuille o un contrle. La proprit PictureTiling accepte une valeur de type Boolean:

True. Si limage est plus petite que lobjet conteneur, elle est affiche en mosaque su la page (voir Figure 13.26). Pour que laffichage en mosaque se fectue correctement, la proprit PictureSizeMode doit tre dfinie fmPictureSizeModeClip. False (par dfaut). Limage nest pas affiche en mosaque

Figure 13.26 Une image affi he en mosaque sur une feuille.

Info

Une ima ge af fi he en mosaque sur une feuille ou un contrle risque dtr e rogne sur le bor d suprieur ou infrieur de lobjet, ainsi que sur son bor d 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 lar geur de lima ge. Les bords de lobjet prsentant des ima ges rognes dpendront de lalignement de limage sur lobjet (proprit PictureAlignment).

Chapitre 13

Exploiter les proprits des contrles ActiveX

385

Police
Font
Cette proprit dtermine la police de caractres af fecte laf fichage du contenu du contrle. La police par df aut est la police Tahoma Re gular, corps 9. Pour modifier l proprit Font dun contrle, cliquez sur le bouton du v olet droit de la fentre Proprits. Dans la bote de dialogue qui saf fiche, dterminez la police de caractres et les attri uts voulus, puis cliquez sur OK.

14
Programmer les interfaces utilisateur
Au sommaire de ce chapitre

Crer des procdures vnementielles Exemples dexploitation des contrles Exploiter les informations dune feuille VBA

388

Excel et VBA

Ce chapitre vous propose de dcouvrir comment tirer vraiment parti des interfaces utilisateur en leur ajoutant de linteracti vit grce aux procdures vnementielles. Il v ous 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 af fectent. Vous pouvez ainsi crer des procdures dites vnementielles, qui se dclencheront lorsque lvnement correspondant (un clic de souris, par e xemple) sera repr. Une procdure vnementielle peut a voir des fonctions trs v ariables, telles que vrifier la alidit dune information, modifier lapparence de la feuille, ouvrir une autre feuille, fermer la feuille e passer les valeurs quelle contient une procdure du module de code, etc.

Crer une procdure


Une procdure vnementielle peut tre gnre de dif frentes 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 pr ve. 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 v aleur 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 aleur du contrle. Le nom du contrle et celui de lvnement sont toujours spars par un trait de soulignement. Dans le cas de pr ocdures vnementielles af fectes 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 lobje concern par la pr ocdure. Linstruction de dclar ation dune pr ocdure vnementielle de feuille rpond la syntaxe suivante :
Private Sub UserForm_Evnement()

Info

Chapitre 14

Programmer les interfaces utilisateur

389

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 peuv ent cependant tre gnres automatiquement partir de la feuille. Pour af fecter 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 Figure 14.1), ou slectionnez le contrle sur la feuille, puis choisissez la commande Code du menu Affichage
Figure 14.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 Figure 14.2). Lvnement affect la procdure est lvnement par df aut du contrle. Celui-ci varie dun contrle lautre. Il sagit par e xemple de lvnement Click (clic de souris) pour un contrle CommandButton et de lvnement Change (modification de la aleur) pour un contrle TextBox. 3. Si lvnement nest pas celui pour lequel v ous souhaitez crer une procdure, v ous pouvez modifier au cl vier le nom de lvnement gnr, ou drouler la zone de liste droulante Procdure et y choisir lvnement v oulu (v oir Figure 14.3). Tous les vnements pouvant tre dtects sur le contrle y sont lists.

390

Excel et VBA

Figure 14.2 Les instructions de dclaration de la procdure sont automatiquement gnres.

Figure 14.3 La zone de liste droulante Procdure liste lensemble des vnements pouvant tre dtects sur le contrle affi h dans la zone Objet.

Cette dernire solution gnre les instructions de dclaration de la procdure vnementielle slectionne. Supprimez alors les dclarations de procdure initialement gnres. 4. Saisissez le code de la procdure entre les instructions de dclaration. Si la pr ocdure vnementielle gnre e xiste dj, le cur seur est plac sous son instruction de dclaration.

Info

Chapitre 14

Programmer les interfaces utilisateur

391

Pour raliser le xemple suivant, crez une feuille et placez-y un contrle Label, un contrle TextBox, quatre contrles OptionButton et trois contrles CommandButton, en dfinissa t leurs proprits dcrites dans le tableau suivant.
Proprit Feuille Valeur

Name Caption
Contrle Label

fmTestEvnements
Test des procdures vnementielles

Name Value
Contrle TextBox

lbTexte
Entrez le texte de votre choix

Name
Value Contrle OptionButton

txtTexte

Name Value Caption


Contrle CommandButton

De optOption1 optOption4

True pour lun des boutons ; False pour les autres


De Bouton doption 1 Bouton doption 4

Name Caption Figure 14.4 La feuille Test des procdures vnementielles ralise.

Respectivement cmdBouton, cmdTexte et cmdQuitter Respectivement Bouton actif, Zone de texte et Quitter

392

Excel et VBA

Enfin, a fectez les procdures vnementielles sui vantes 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 UserF orm et cliquez sur le bouton Excuter de la barre doutils Standard. La feuille saf fiche lcran. Testez le comportement de la feuille. Lorsque les vnements af fects une procdure vnementielle sont dtects, cette dernire sexcute :

La modification de la aleur de la zone de te xte est interprte comme lvnement AfterUpdate af fectant le contrle txtTexte lors du passage du focus un autre contrle. La procdure correspondante est e xcute 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 e xcute et la bote de dialogue de la Figure 14.6 saffiche Un clic sur le bouton libell Zone de texte est dtect comme lvnement Click affectant le contrle cmdTexte. La procdure correspondante est e xcute et la bote de dialogue de la Figure 14.7 saffiche

Chapitre 14

Programmer les interfaces utilisateur

393

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.

Figure 14.5 Dclenchement de la procdure txtTexte_AfterUpdate.

Figure 14.6 Dclenchement de la procdure cmdBouton_Click.

Figure 14.7 Dclenchement de la procdure cmdTexte_Click.

394

Excel et VBA

Les vnements
Les vnements sont nombreux et v arient 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 contrle CommandButton, 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 Evnements situ dans le haut de la rubrique daide . Une fentr e listant les vnements grs par le contrle est af fi he, permettant daf fi her 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.

Evnement AfterUpdate. Dtect lorsque la v aleur du contrle est modifie, a moment du passage du focus un autre contrle. Cet vnement survient aprs lvnement BeforeUpdate. Evnement BeforeDragOver. Dtect lorsquun glisser-dplacer est effectu. Evnement BeforeDropOrPaste. Dtect lorsque des donnes sont dposes ou colles sur un objet. Lvnement survient avant que laction ne soit valide. Evnement BeforeUpdate. Dtect lorsque la v aleur du contrle est modifie, a moment du passage du focus un autre contrle. Lvnement BeforeUpdate survient avant que la modification des donnes ne soit alide et donc a vant lvnement AfterUpdate. Cela permet de refuser la mise jour ef fectue. 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 v aleur valide naura pas t affecte au contrle.

Chapitre 14

Programmer les interfaces utilisateur

395

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 v aleur 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 lignes 2 10) vrifie si la aleur entre est une valeur numrique. Si tel nest pas le cas (ligne 2), un message est affich (ligne 3) et la modification est refuse (ligne 4), interdisant lutilisateur de passer le focus un autre contrle. Si la v aleur entre est de type numrique (ligne 5), une instruction If...End If imbrique (des lignes 6 9) vrifie que la aleur est comprise entre 50 et 250. Si tel nest pas le cas, un message est af fich (ligne 7), et la modification es refuse (ligne 8), interdisant lutilisateur de passer le focus un autre contrle.

Evnement Change. Dtect lors de la modification de la aleur (proprit Value) dun contrle. La modification peut tre e fectue 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 aleur. 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 te xte (sil saisit le mot "Bonjour" dans la zone de texte, la procdure se dclenchera sept fois). Il est frquent dutiliser une zone de te xte pour af ficher llment slectionn pa 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 zon de liste ZoneDeListe:
Private Sub ZoneDeListe_Change() txtSlListe.Value = ZoneDeListe.Value End Sub

Evnement Click. Dtect lorsque lutilisateur clique sur un contrle. Notez que lv-nement Click est aussi dtect si lqui valent clavier dun clic de souris est

396

Excel et VBA

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. L vnement Click survient aprs les vnements MouseDown et MouseUp. Ainsi, lorsque vous cliquez sur un contrle, trois vnements sont successivement dtects : MouseDown; MouseUp; MouseClick.

Evnement dblClick. Dtect lorsque lutilisateur double-clique sur un contrle. Click. Lorsque v ous doubleLvnement dblClick survient aprs lvnement cliquez sur un contrle, quatre vnements sont donc successivement dtects : MouseDown; MouseUp; MouseClick; dblClick.

Evnement DropButtonClick. Dtect chaque fois que lutilisateur droule ou ferme la liste droulante dune zone de liste modifiable Evnement Enter. Dtect juste a vant quun contrle reoi ve le focus. L vnement Enter est toujours li un vnement Exit quivalent, qui affecte le contrle qui avait le focus prcdemment. Evnement Exit. Dtect juste a vant quun contrle ne perde le focus. L vnement 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, af fectez la v aleur True lar gument Annulation dans une instruction de la procdure vnementielle (v oir le xemple donn pour lvnement BeforeUpdate).

Evnement Initialize. Dtect lorsquune feuille est charge. La procdure affecte cet vnement se xcute avant laffichage de la feuille et sutilise selon la synta e suivante :
Private Sub UserForm_Initialize() Instructions End Sub

Chapitre 14

Programmer les interfaces utilisateur

397

Notez que, dans le cas de la procdure Initialize dune feuille, le nom de la feuille nest pas utilis pour spcifier lobjet auquel est a fecte la procdure. On utilise toujours le mot cl UserForm. Cest une procdure essentielle de la programmation VBA. Elle permet en ef fet deffectuer des rglages de la feuille, impossibles dans une fentre UserF orm. Vous utiliserez, par e xemple, une procdure vnementielle Initialize pour af fecter une liste dlments un contrle ListBox ou ComboBox de la feuille. Pour un e xemple dutilisation de la mthode Initialize, reportez-vous la section "ComboBox", plus loin dans ce chapitre.
ntion Atte

Lorsque vous utilisez la mthode Hide pour masquer une feuille affi he laide de la mthode Show, les r essources mmoire quelle occupe ne sont pas libres. Si, par la suite , vous appelez de nouveau laf fi hage de la feuille , lvnement Initialize ne ser a pas reconnu, car la feuille ne ser a pas c harge une nouvelle fois. Par consquent, les diffrents contrles de la feuille auront les mmes valeurs que lorsquelle a t masque . Pour librer les r essources mmoire dune feuille Userform, vous devez lui appliquer la mthode Unload, selon la syntaxe suivante :
Unload NomFeuille

La mthode Load, elle, char ge une feuille, dclenchant la procdure vnementielle Initialize sans pour autant laf fiche . Notez que pour pouv oir manipuler une feuille par programmation, il faut que celle-ci soit charge ( laide de la mthode Show ou de la mthode Load). Evnement KeyDown. Dtect lorsquune touche du cla vier est enfonce. L vnement KeyDown rpond la syntaxe suivante :
Private Sub Contrle_KeyUp(ByVal CodeTouche As MSForms.ReturnInteger, ByVal EtatMaj As Integer)

o CodeTouche est une v ariable 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 valeur 0. Si la touche Maj est enfonce, EtatMaj prend la valeur 1 ; sil sagit de la touche Ctrl, la v aleur 2 est af fecte EtatMaj; si la touche Alt est enfonce, EtatMaj prend la valeur 4. Ces valeurs sadditionnent si plusieurs de ces touches sont enfonces. Lvnement KeyDown alterne a vec llment KeyPress. Lorsque lutilisateur enfonce une touche, les vnements KeyDown et KeyPress sont successi vement dtects. Sil maintient la touche enfonce, ces vnements sont nouveau dtects en srie, le processus refltant la priodicit dinsertion ducaractre lorsque sa touche est maintenue enfonce.

398

Excel et VBA

Evnement KeyPress. Cet vnement est dtect lorsque lutilisateur appuie sur une touche ANSI et intervient immdiatement aprs lvnement KeyDown. Si la touch e 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.

Evnement 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 v ariables 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" 18: Case 7 19: EtatTouches = "Maj, Ctrl et Alt" 20: End Select 21: 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

Chapitre 14

Programmer les interfaces utilisateur

399

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 saf fiche. Testez diffrentes combinaisons clavier dans la zone de te xte 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 Figure 14.8.
Figure 14.8 Les vnements clavier peuvent tre prcisment dtects par un programme VBA.

La premire procdure est dclenche lorsque lvnement KeyDown est dtect sur le contrle txtTexte. La variable EtatTouches est dclare de type String en ligne 2. Une instruction Select Case...End Case teste ensuite la v aleur de la v ariable EtatMaj (lignes 3 20) renvoye par lvnement KeyDown. Une chane de caractres est af fecte EtatTouches en fonction du rsultat. Linstruction de la ligne 21 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 (ligne 24). La troisime procdure est dclenche lorsque lvnement KeyPress est dtect sur le contrle txtTexte. Linstruction de la ligne 27 insre dans la fentre Excution un e

400

Excel et VBA

chane suivie de la valeur de la variable codeANSI renvoye par KeyPress. Le caractre correspondant est ensuite insr laide de la fonction Chr.

Evnement 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.
KeyDown et La v aleur af fecte EtatMaj est la mme que pour les vnements KeyUp. Si le bouton g auche est enfonc, Bouton prend la v aleur 1. La v aleur 2 est affecte Bouton si le bouton droit est enfonc et la v aleur 4, sil sagit du bouton central. Dans le cas o plusieurs boutons sont enfoncs, ces valeurs sadditionnent.

Evnement MouseMove. Dtect lorsque lutilisateur dplace la souris. La syntax e de lvnement MouseMove est la mme que pour MouseDown. Evnement MouseUp. Dtect lorsque lutilisateur relche un bouton de souris. La syntaxe de cet vnement est la mme que pour MouseDown. Evnement SpinDown. Dtect lorsquun clic est ef fectu sur le bouton infrieur ou gauche dun contrle SpinButton. Lorsquun vnement SpinDown est dtect, la proprit Value du contrle est dcrmente de la v aleur de la proprit SmallChange, condition que la nouv elle valeur du contrle soit suprieure la v aleur minimale du contrle, dtermine par sa proprit Min. Dans le cas contraire, le contrle prend la valeur de la proprit Min. Evnement SpinUp. Dtect lorsquun clic est effectu sur le bouton suprieur ou droit dun contrle SpinButton. Lorsquun vnement SpinUp est dtect, la proprit Value du contrle est incrmente de la v aleur 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 otre disposition dans la bote outils et les mthodes permettant de les exploiter pleinement.

Chapitre 14

Programmer les interfaces utilisateur

401

Contrle Label
Le texte dun contrle Label ne peut tre modifi par lutilisateu . Il peut cependant tre utile de modifier la aleur dun contrle Label afin de crer une inter ace utilisateur dynamique. Il suf fit pour cela de placer des instructions redfinissant la aleur Caption du contrle lorsquun vnement spcifique survient. Vous pouv ez ainsi placer un seul contrle sur une feuille, destin remplir une fonction v ariable selon les informations entres par lutilisateur. Cest alors le contrle Label identifiant ce contrle qui permettr lutilisateur den distinguer la fonction. Dans lexemple suivant, un contrle Label est affect une zone de texte, destine recevoir le nom dun nouv eau membre. Deux boutons doption, respecti vement libells "Masculin" et "Fminin", permettent lutilisateur de spcifier le s xe 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 lact vation de lun ou lautre des boutons doption modifie la proprit Caption du contrle Label. Pour raliser cet e xemple, crez une nouv elle 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
Proprit Feuille Valeur

Name Caption
Contrle Frame

fmLabel
Modication dun contrle Label

Name Caption
Contrle OptionButton

frSexe
Sexe du nouveau membre

Name Caption Value


Contrle OptionButton

optMasculin
Masculin

True

Name Caption Value

optFminin
Fminin

False

402

Excel et VBA

Proprit Contrle Label

Valeur

Name Caption
Contrle TextBox

lbPrnom
Prnom

Name Value
Contrle Label

txtPrnom

Name Caption
Contrle TextBox

lbNom
Nom

Name Value
Contrle CommandButton

txtNom

Name Caption
Contrle CommandButton

cmdOK
OK

Name Caption

cmdAnnuler
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 saf fiche lcran. Lorsque ous cliquez sur lun des boutons

Chapitre 14

Programmer les interfaces utilisateur

403

doption, le libell du contrle Label, lbNom, varie en fonction de loption slectionne (voir Figure 14.9).
Figure 14.9 Faites varier le libell dun contrle Label de faon reflter linformation attendue.

ntion Atte

Lorsque vous crivez du code modifiant la valeur Caption dun contrle Label, veillez ce que la taille du contrle permette laf fi hage complet du nouveau libell.

Contrle TextBox
Lorsque v ous utilisez un contrle TextBox destin rece voir une information bien spcifique, vrifiez que lutilisateur entre une aleur v alide, afin dviter que l programme ne gnre une erreur. Par exemple, si vous crez une zone de te xte dont la fonction est de rece voir 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 aleur affecte au contrle entre dans celles-ci. Pour vrifier la aleur dun contrle TextBox au moment o lutilisateur entre une infor mation dans la zone ddition du contrle, attachez du code lvnement Change de ce contrle. Il est parfois aussi ncessaire de vrifier quune aleur 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.

404

Excel et VBA

pel Rap

Pour un r appel des fonctions Visual Basic de contrle de types de donnes, reportez-vous au Tableau 6.3. Pour vrifier quune valeur est une hane de car actres, utilisez la fonction IsNumeric qui doit alors renvoyer la valeur False.

ce Astu

Pour raliser le xemple sui vant, crez une feuille prsentant un contrle Label, un contrle TextBox et un contrle CommandButton (v oir Figure 14.10). Dfinissez ains leurs proprits :
Proprit Feuille Valeur

Name Caption
Contrle Label

fmMaFeuille
Vrication des donnes

Name Caption
Contrle TextBox

lbValeur
Entrez la somme traiter :

Name Value
Contrle CommandButton

txtValeur

Name Caption Figure 14.10 Votre feuille termine.

cmdOK
OK

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.

Chapitre 14

Programmer les interfaces utilisateur

405

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

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 est afiche latten f tion de lutilisateur (voir Figure 14.11), et la proprit Value du contrle est affecte une chane vide.
Figure 14.11 Une valeur non valide a t saisie dans la zone de texte.

La procdure cmdOK_Clik vrifie quune aleur a bien t entre dans la zone de te xte. Si tel nest pas le cas, une bote de dialogue est af fiche lattention de lutilisateur ( oir Figure 14.12). Si, au contraire, la zone de texte contient une valeur, alors la mthode Hide est applique la feuille afin de la masque .
Figure 14.12 Une valeur doit tre saisie dans la zone de texte.

406

Excel et VBA

Info

Notez que la pr ocdure Cmd_Clik ne vrifie pas que la valeur de la zone d texte est valide (de type numrique), mais uniquement quelle est dif frente 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.

Contrle ComboBox
Les contrles ComboBox sont parmi les plus utilises dans les interf aces utilisateur de la plupart des logiciels. Ils prsentent en effet lavantage de permettre laffichage dun gran 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 v aleur ne figurant pas parmi les option 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 nouv elles valeurs dans la zone ddition du contrle. Dfinissez pour cela la proprit Style d u c ontrle fmStyleDrop-DownList (voir la section ddie cette proprit, dans le chapitre prcdent).

Ajout dlments la liste dun contrle ComboBox


La mthode AddItem La liste af fecte un contrle ComboBox est gnralement dtermine dans le code du programme, laide de la mthode AddItem. Cette mthode sutilise selon la syntax e 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 v aleur dinde x 0, le second a la v aleur dindex 1, etc. Ce dernier ar gument est gnralement omis, llment ajout est alors plac en dernire position dans la liste. Lorsque largument Index est omis, lar gument ElementAjoutALaListe peut tre plac directement derrire AddItem, en ignorant les parenthses.

Info

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

Chapitre 14

Programmer les interfaces utilisateur

407

Pour raliser le xemple sui vant, placez un contrle Label, un contrle ComboBox et un contrle CommandButton sur une feuille et dfinissez ainsi leurs proprits
Proprit Feuille Valeur

Name Caption
Contrle Label

fmComboBox
Utilisation dun contrle ComboBox

Name Caption
Contrle ComboBox

lbComboBox
Slection dune valeur :

Name Value
Contrle CommandButton

cbComboBox

Name Value

cmdQuitter
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 saf fiche. Droulez la liste de la zone de t xte modifiable pour visualiser les options disponibles ( oir Figure 14.13). Pour fermer la feuille, cliquez sur le bouton Quitter. La procdure fmComboBox_Initialize est e xcute a vant laf fichage de la feuille. L boucle For...Next sexcute alors, ajoutant dix lments la liste du contrle cbComboBox.

408

Excel et VBA

Figure 14.13 La liste est affecte au contrle laffi hage de la feuille.

Info

Utilisez la mthode RemoveItem pour supprimer des lments dune liste.

La proprit RowSource Les lments de la liste peuv ent aussi tre af fects 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 af fect un document contenant des donnes v ariables. La liste reflte ainsi toujours les donnes de l feuille lorsque celles-ci sont modifies Dans lexemple suivant, une feuille VBA est cre afin de permettre lutilisateur dentre des informations sur les chiffres des diffrents vendeurs dune socit. Un contrle ComboBox est plac sur la feuille afin de permettre lutilisateur de slectionner le endeur de son choix. Pour raliser cet exemple, crez une feuille de calcul Excel et saisissez-y les donnes apparaissant la Figure 14.14.
Figure 14.14 Les vendeurs sont rpertoris dans la colonne A.

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 leur proprits :

Chapitre 14

Programmer les interfaces utilisateur

409

Proprit Feuille

Valeur

Name Caption
Contrle Label

fmRowSource
Utilisation de la proprit RowSource

Name Caption
Contrle ComboBox

lbComboBox
Slectionnez un vendeur

Name Value RowSource


Contrle CommandButton

cbComboBox

A2:A6

Name Value

cmdQuitter
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 UserF orm et cliquez sur le bouton Excuter de la barre doutils Standard. Droulez la liste pour en visualiser le contenu (v oir Figure 14.15), puis cliquez sur la case de fermeture de la fentre.
Figure 14.15 La liste droulante reflte le contenu des cellules A2 A6.

410

Excel et VBA

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 f aut dfinir une procdure qui a fecte la proprit RowSource une plage de cellules variable, reflet des cellules contenant de informations. Redfinissez la proprit RowSource du contrle ComboBox une chane vide, puis ajoutez la procdure sui vante 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 a 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 af fecte la RowSource du contrle variable DerCell prcdemment dclare. Enfin, la proprit cbComboBox est affecte A2:DerCell, cest--dire une plage de cellules allant de la cellule A2 la dernire cellule de la colonne A contenant des informations. Ajoutez de nouveaux noms la liste des v endeurs, puis excutez nouveau la feuille. La liste droulante affiche la totalit des endeurs (voir Figure 14.16).
Figure 14.16 La liste affi he toujours la liste de tous les vendeurs.

Valeur renvoye par un contrle ComboBox


La v aleur slectionne par lutilisateur dans un contrle ComboBox est dfinie par s proprit Text ou sa proprit Value. La proprit Text renvoie une chane correspondant au libell apparaissant dans la zone ddition du contrle. La v aleur ren voye par la

Chapitre 14

Programmer les interfaces utilisateur

411

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 proprit Value prendra la v aleur 0 si le premier lment de la liste est slectionn, 1 si le deuxime lment est slectionn, etc., n 1 si llment n est slectionn. Dans le cas dun contrle ComboBox plusieurs colonnes, la v aleur de la proprit BoundColumn dtermine la colonne dont le contenu sera af fect 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. Utilisez la pr oprit ControlSource pour af fecter la valeur slectionne par lutilisateur dans un contrle ComboBox une cellule dune feuille de classeur . Par exemple, dfinir la p oprit ControlSource dun contrle ComboBox D4 insrera la valeur slectionne par lutilisateur dans la liste dans la cellule D4, lor s du passage du focus un autre contrle.

Info

Contrle ListBox
Les contrles ListBox et ComboBox partagent nombre de proprits ( RowSource, ControlSource, BoundColumn, etc.) et de mthodes communes ( AddItem et RemoveItem, par ListBox, utilisez lune des mthodes exemple). Pour af fecter une liste un contrle 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 peuv ent tre slectionns a vec 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 peuv ent 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 lment de la liste.

412

Excel et VBA

Figure 14.17 Une zone de liste nautorisant quune slection unique.

Figure 14.18 Une zone de liste autorisant des slections multiples.

Valeur renvoye par un contrle ListBox


A 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 ren voient une chane vide. Pour dterminer les lments slectionns dune zone de liste autorisant de multiples slections, v ous 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 Feuille Valeur

Name Caption

fmListBox
Valeurs slectionnes dans la liste

Chapitre 14

Programmer les interfaces utilisateur

413

Proprit Contrle Label

Valeur

Name Caption
Contrle ListBox

lbMembres
Membres prsents

Name Value MultiSelect


Contrle CommandButton

cbMembres

fmMultiSelectMulti

Name Caption

cmdValider
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. L procdure cmdValider_Click se dclenche lorsque lutilisateur clique sur le bouton Valider de la feuille. Elle utilise les proprits du contrle ListBox suivantes :

ListCount. Renvoie le nombre dlments de la liste.

414

Excel et VBA

Selected(index). Renvoie une valeur boolenne indiquant si llment dindex index est slectionn. List(index). Ren voie la chane de caractres correspondant llment dinde 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 index 0, lindex du dernier lment est gal au nombre total dlments de la liste, moins 1. La boucle sexcute donc sur un compteur allant de 0 au nombre dlments, moins 1. A 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 ferme . Slectionnez la feuille dans la fentre UserF orm et cliquez sur le bouton Excuter de la barre doutils Standard. Slectionnez les lments de v otre choix dans la liste, puis cliquez sur le bouton Valider. La feuille se ferme. Affichez la fentre Excution d Visual Basic Editor (Ctrl + G). Les lments slectionns dans la liste y sont inscrits (voir Figure 14.19).
Figure 14.19 Interrogez un un les lments dune liste slection multiple, afin de dtermi ner 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 entre par lutilisateur. Vous pouvez aussi modifier la proprit Caption dun contrle CheckBox, afin den aire varier la fonction. Pour un e xemple dutilisation de ce contrle, reportezvous la section consacre la proprit Enabled, plus haut dans le chapitre prcdent. Pour associer des contrles OptionButton, v ous pouv ez 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, reportez-vous la section consacre la proprit Visible.

Chapitre 14

Programmer les interfaces utilisateur

415

Contrle ScrollBar
Lexemple sui vant utilise un contrle TextBox et un contrle ScrollBar pour permettre lutilisateur de rechercher les annes bisse xtiles comprises entre lan 0 et lan 3000. Afi dacclrer la recherche dune anne bisse xtile, lutilisateur pourra se dplacer par cent annes en cliquant dans la barre de dfilement. Pour raliser cet xemple, placez un contrle TextBox et un contrle ScrollBar sur une feuille et dfinissez leurs proprits ainsi
Proprit Feuille Valeur

Name Caption
Contrle TextBox

fmAnnesBissextiles
Les annes bissextiles

Name Value Locked


Contrle ScrollBar

txtAnne
Lan 2000 est une anne bissextile True

Name Value Min Max SmallChange LargeChange

scrAnne
2000 0 3000 4 100

Ajoutez ensuite le code sui vant 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 modifier lemplacement du curseur sur le contrle ScrollBar nomm "scrAnne". Cette procdure

416

Excel et VBA

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 a fi che la chane "L an varAnne est une anne bisse xtile.", o varAnne est la v aleur de la variable varAnne. Slectionnez la feuille et cliquez sur le bouton Excuter de la barre doutils Standard afi dexcuter la feuille. La feuille prsente la Figure 14.20 saffiche. La barre de dfil ment permet de modifier lanne a fiche dans la zone de t xte. Lorsque vous cliquez sur lune des flches de dfilement, la aleur du contrle est incrmente ou dcrmente de 4 (la valeur de SmallChange). Lorsque vous cliquez dans la barre, entre le curseur et une des flches de dfilement, la aleur du contrle est incrmente ou dcrmente de 100 (la valeur de LargeChange).
Figure 14.20 Pour atteindre une anne loigne de la valeur actuelle, dplacez-vous 100 ans par 100 ans, en cliquant lintrieur de la barre plutt que sur les fl hes 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 dpla le curseur en faisant glisser le curseur sur la barre de dfilement, la aleur 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 dfilemen Partant du constat que toute anne bisse xtile divise par 4 est gale un nombre entier, et que tout nombre multiple de 4 correspond une anne bisse xtile, vous pouvez exploiter cette condition pour vrifier que la aleur du contrle correspond une anne bisse xtile. La condition ncessaire et suffisante pour que la aleur 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 v aleur renvoye par la di vision de scrAnne par 4 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

Chapitre 14

Programmer les interfaces utilisateur

417

scrAnne.Value = scrAnne.Value - 1 Wend Dim varAnne As Single varAnne = scrAnne.Value txtAnne.Value = "Lan " & varAnne & " est une anne bissextile." End Sub

La boucle While...Wend dcrmente la v aleur 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 assur que la v aleur de scrAnne sera modifie si ncessaire, afin de correspondre une ann bissextile.

Contrle SpinButton
Dans lexemple suivant, un contrle SpinButton est plac ct dun contrle TextBox, et permet de slectionner sept v aleurs. Un jour de la semaine est af fect chacune des sept valeurs possibles et af fich dans la zone de t xte. Pour raliser cet e xemple, placez un contrle TextBox et un contrle SpinButton, une feuille et attrib uez-leur les proprits suivantes :
Proprit Feuille Valeur

Name Caption
Contrle TextBox

fmJour
Choix du jour

Name Value
Locked Contrle SpinButton

txtJour
Lundi

True

Name Value Min Max SmallChange

spbJour
7 1 7 1

418

Excel et VBA

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 :
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 afi dexcuter la feuille. La feuille prsente la Figure 14.21 saf fiche. Le bouton toupi permet de modifier le jour a fich dans la zone de t xte. Lorsque Dimanche est affich dan la zone de texte, la flche de dfilement Bas du bouton toupie est sans fet. Lorsque Lundi est affich dans la zone de t xte, la flche de dfilement Haut est sans fet.
Figure 14.21 Un clic sur une f che de dfi lement du contrle augmente ou diminue sa valeur de 1 et affi he le jour correspondant.

aleur du contrle La procdure spnJour_Change se dclenche chaque fois que la v spnJour est modifie, cest--dire chaque fois que lutilisateur clique sur lune de flches de dfilement du bouton toupie. La ariable varBoutonToupie est alors dclare (ligne 2) et la v aleur du contrle SpinButton spbJour lui est af fecte. A la ligne 4, la TextBox txtJour est af fecte le xpression proprit Value du contrle

Chapitre 14

Programmer les interfaces utilisateur

419

QuelJour(VarBoutonToupie), qui appelle la fonction varBoutonToupie.

QuelJour en lui passant lar gument

La fonction QuelJour dtermine le texte afficher dans la zone ddition du contrle. De lignes 7 22, une instruction de contrle Select Case...End Select est utilise pour interroger la v aleur de varBoutonToupie. Pour chacune des v aleurs possibles pour varBoutonToupie, une chane de caractres est affecte la fonction. La fonction QuelJour termine, la procdure appelante reprend la main, et linstruction de la ligne 4 peut sexcuter. La valeur de la fonction QuelJour est alors affiche dans la zon de texte. Nous allons maintenant modifier ce programme afin que les flches de dfilement Hau Bas du bouton toupie permettent de passer de Lundi Dimanche, et in versement. Une technique courante pour quun bouton toupie gnre des valeurs en boucle consiste autoriser une valeur minimale et une v aleur 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 a 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 redf nition de la valeur de lune de ces proprits dans la fentre Proprits entrane aussi la redfinition de la p oprit Value. Dans le cas prsent, laffectation de la valeur 8 la proprit Max redfini a aussi la pr oprit Value du contrle 8. Vous de vez par consquent r edfinir 7 la proprit Value, aprs avoir modifi la valeur de la p oprit Max.

La structure conditionnelle ajoute interroge la v aleur du contrle spbJour. Si lutilisateur clique sur la flche de dfilement Haut du bouton toupie alors que sa aleur est 1 (la zone de texte affiche Lundi), sa aleur passe 0 ( Min) et la structure conditionnelle (lignes 2 et 3) la redfinit 7 ( Max moins 1). Si lutilisateur clique sur la flche de dfilement Bas du bout

420

Excel et VBA

toupie alors que sa valeur est 7 (la zone de texte affiche Dimanche), sa aleur passe 8 (Max) et la structure conditionnelle (lignes 4 et 5) la redfinit 1 Min plus 1).
La procdure conditionnelle gr ant les valeur s 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

Info

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 v ous suf fit dappeler l procdure qui rcuprera et traitera ces informations en spcifiant les aleurs des contrles comme arguments passs. Les appels de procdure et le passage darguments la procdure appele ont t traits au Chapitre 5.

pel Rap

Lorsque v ous souhaitez dv elopper une interf ace 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, cri vez une procdure qui af fichera la feuill (NomFeuille.Show). Vous pourrez ventuellement affecter par la suite cette procdure un bouton de barre doutils ou une commande de menu (voir Chapitre 11), de faon simplifier l xcution du programme. 3. Votre feuille contiendra probablement un bouton de validation (OK). Crez une procdure vnementielle pour lvnement Click de ce bouton. Cette procdure devra : vrifier que les informations entres par lutilisateur sont alides ; masquer la feuille (Me.Hide) ; appeler la procdure qui traitera les informations.

Chapitre 14

Programmer les interfaces utilisateur

421

La procdure vnementielle suivante appelle la procdure ValidationConditions, en lui passant pour ar guments les v aleurs 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 trouv er dans un module de code standard. Son instruction de dclaration comprendra les ar guments correspondant aux valeurs passes par la procdure appelante. Elle pourra par e xemple 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. Affi hage de la premire feuille. 2. Stockage des donnes de la feuille dans des variables dun module de code. 3. Masquage de la feuille 4. Affi hage 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.

Partie

IV

Notions avances de la programmation Excel


CHAPITRE 15. Programmer des vnements utilisateur CHAPITRE 16. Protger et authentif er des projets VBA CHAPITRE 17. Bonus : exemple complet dapplication Excel

15
Programmer des vnements utilisateur
Au sommaire de ce chapitre

Lobjet Application Lobjet ThisWorkbook Lobjet Worksheet

426

Excel et VBA

Vous a vez dcouv ert, au cours de cet ouvrage, len vironnement de Visual Basic Editor, les techniques de programmation en VBA et les outils daide au dv eloppement de projet. Ce chapitre v ous apprendra grer prcisment les vnements utilisateur susceptibles daf fecter les objets Excel au cours dune utilisation clas sique du logiciel. Vous verrez quil est possible de dtecter les actions de lutilisateu r 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 v ous pouv ez af fecter des procdures vnementielles. Vous pouv ez ainsi grer des vnements tels que la cration dun nouv eau classeur, la modification dune cellule, lact vation dune feuille, etc.

Lobjet Application
Au sommet du modle dobjets dExcel se trouv e 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 dv eloppeur. Il intgre en effet la gestion dvnements de niveau application, susceptibles dintervenir lors dune utilisation courante dExcel : cration dun nouv eau classeur , ouv erture ou fermeture dun classeur , etc. Vous pouv ez ainsi crer des procdures vnementielles destines grer lesdits vnements. Les sections sui vantes v ous indiquent la procdure sui vre pour crer des procdures vnementielles pour lobjet Application.

Dclaration et instanciation de lobjet Application


Les procdures destines grer les vnements utilisateur de ni veau application ne peuvent tre crites que dans un module de classe. Pour crire des procdures VBA destines grer des vnements de ni veau application, vous devez crer un module de classe et y dclarer une v ariable 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 proje et, dans le menu contextuel qui saffiche, choisissez Insertion, Module de classe 2. Par dfaut, le nouv eau module est nomm Class1 (Class2 si le module Class1 e xiste 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 :

Chapitre 15

Programmer des vnements utilisateur

427

Public WithEvents MaVarApplication As Application

Le mot cl WithEvents nest valide que dans un module de classe.


Info

Notre projet intgre maintenant un module de classe dans lequel nous a vons dfini un obje MaVarApplication de type Application, capable de grer les vnements. Pour pouv oir 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 v ous souhaitez que la gestion des vnements de ni veau application soit active ds louverture dExcel. Il vous suffit dcrire linstruction dinstanciation de la ariable dans une procdure vnementielle, affecte louverture du classeur Perso.xls. Procdez comme suit : 1. Dans lExplorateur de projet, double-cliquez sur lobjet ThisWorkbook du dossier Microsoft Excel Objets. Sa fentre Code saf fiche. Dans la section Dclaration de l fentre Code, placez linstruction de dclaration suivante :
Dim MonInstance As New ModuleGestionEvt

o ModuleGestionEvt est le nom af fect 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 af fecte 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 ni veau application seffectue de la mme faon que les procdures vnementielles de contrles ActiveX. 1. Ouvrez la fentre Code du module de classe ModuleGestionEvt.

428

Excel et VBA

2. Dans la zone Objet, choisissez la variable MaVarApplication. Les instructions dencadrement dune procdure vnementielle de type NewWorkbook (vnement nouv eau classeur) sont automatiquement insres. Placez une instruction daffichage de bote d 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 v ariable dans v otre procdure pour interroger et manipuler le classeur cr. Linstruction suivante affi che 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 nouv eau classeur . La bote de dialogue prsente la Figure 15.1 saffiche
Figure 15.1 Une procdure peut tre affecte la cration dun nouveau classeur.

La reconnaissance de lvnement NewWorkbook permet de crer des procdures destines aider lutilisateur dans ses tches courantes. Vous pouvez par exemple affiche une feuille UserF orm contenant une liste doptions de classeurs. L utilisateur sera alors in vit indiquer le type de classeur quil souhaite raliser (V entes du mois, Reprsentants, (Autre), etc.). La procdure appele pourra insrer les donnes essentielles, crer le nombre de feuilles v oulues, enre gistrer le classeur dans le bon dossier, etc. 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 a vant lexcution dune Before impression. Plus gnralement, les vnements dont le nom contient la chane surviennent avant lexcution dune tche. Ces vnements intgrent gnralement un ar gument Cancel permettant dannuler la tche. Vous pouv ez ainsi crer une procdure qui sassurera que les conditions requises par une tche sont remplies a vant de xcuter cette

Chapitre 15

Programmer des vnements utilisateur

429

tche. Les vnements dont le nom contient la chane After surviennent aprs le xcution dune tche. Pour des informations supplmentaires sur les vnements de lobjet Application, choisissez lvnement v oulu 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 propri ts de nimporte quel objet. Le Tableau 15.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.
Tableau 15.1 : Les proprits essentielles de lobjet Application

Proprit

Description Renvoie lobjet Workbook correspondant au classeur actif (en lecture seule). Renvoie lobjet Worksheet correspondant la feuille active du classeur spci (en lecture seule). Renvoie lobjet Range correspondant la cellule active de la feuille de classeur spcie (en lecture seule). Renvoie le nom de lapplication, qui apparat dans la barre de titre. La valeur par dfaut est "Microsoft Excel". La Figure 15.2 reprsente une session Excel dans laquelle nous avons redni la valeur de la proprit Caption de lobjet Application (Application.Caption = ChaneTitre). Permet de paramtrer lapparence du curseur au cours des diffrentes phases dune macro. Quatre constantes correspondent aux quatre curseurs disponibles. Si vous modiez lapparence du curseur au cours dune macro, noubliez pas de rednir la proprit Cursor xlDefault la n de lexcution de la macro. Sinon, le curseur conservera lapparence qui lui a t affecte. Permet dviter lafchage de messages Excel au cours de lexcution dune macro. Paramtrez cette proprit sur False pour viter lafchage de messages Excel. Nomettez pas de rednir la proprit Display Alerts sur True en n de macro.

ActiveWorkbook ActiveSheet ActiveCell Caption

Cursor

DisplayAlerts

DisplayFormulaBar, Dterminent respectivement si la barre de formule, les barres de dfilement DisplayScrollBars et et la barre dtat sont affiches ( True) ou non (False). DisplayStatusBar

430

Excel et VBA

Tableau 15.1 : Les proprits essentielles de lobjet Application (suite)

Proprit

Description 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, dnissez cette proprit sur xlDisabled ou sur xlErrorHandler. 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). Dtermine si lafchage cran est mis jour ( True) ou non (False) lors de lexcution dune macro. Ne pas mettre jour lafchage 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 rednie True lorsque la macro sachve. Renvoie le classeur contenant le code de la macro qui sexcute. Il ne sagit pas forcment du classeur actif ( ActiveWorkbook). Dtermine le nom dutilisateur. Il sagit par dfaut du nom apparaissant dans longlet Gnral de la bote de dialogue Options.

EnableCancelKey

PathSeparator

ScreenUpdating

ThisWorkbook UserName

ntion Atte

Lorsque vous modifiez les p oprits de lobjet Application au cour s dune macro, pensez les redfinir la fin de la ma o. Si vous dfinissez la p oprit EnableCancelKey False, vous de vez tre certain que votre macro nest pas bogue et gre les exceptions. Si, par exemple, elle excute une boucle linfini, vous nau ez aucun moyen de linterrompre.

Figure 15.2 Vous pouvez modif er le titre de la session Excel.

Chapitre 15

Programmer des vnements utilisateur

431

Mthodes de lobjet Application


Le Tableau 15.2 prsente les mthodes les plus intressantes de lobjet Application.
Tableau 15.2 : Les mthodes essentielles de lobjet Application

Mthode

Description 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). Excute une procdure lorsquune combinaison de touches est active. Pour plus dinformations, consultez laide en ligne de VBA. Programme lexcution dune procdure un moment prcis (ce soir 20h30 par exemple). Pour plus dinformations, consultez laide en ligne de VBA. Dnit le texte plac derrire la commande Annuler du menu Edition et la procdure excute lorsque lutilisateur slectionne cette commande. Pour plus dinformations, consultez laide en ligne de VBA.

Calculate

OnKey OnTime OnUndo

Lobjet ThisWorkbook
Disponible dans le dossier Microsoft Excel Objets de lExplorateur de projet, lobjet ThisWorkbook reprsente le classeur correspondant au projet affich dans lExplorateur d projet (voir Figure 15.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 lacti vation dune autre feuille de calcul du classeur . Certains de ces vnements prennent des ar guments permettant de connatre prcisment laction ef fectue par lutilisateur . P ar e xemple, lvnement SheetActivate prend pour argument un objet Worksheet qui correspond la feuille active.
Workbook, Pour une liste dtaille des proprits, mthodes et vnements des objets saisissez Workbook dans une fentre Code. Slectionnez ensuite ce mot et appuyez sur la

432

Excel et VBA

Figure 15.3 Les objets du dossier Microsoft Excel Objets correspondent au classeur et ses feuilles de calcul.

Les Feuilles de calcul Le classeur

touche F1. Vous accdez la rubrique daide de lobjet Workbook. Les liens Proprits, Mthodes et Evnements 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 saf fiche chaque fois que ous acti vez 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 lutilisateu 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.", _ "Mot de passe requis") If Not MotDePasse = "jk85m" Then MsgBox "Le mot de passe saisi est incorrect.", _

Chapitre 15

Programmer des vnements utilisateur

433

vbOKOnly+vbInformation, "Mot de passe incorrect" ThisWorkbook.Sheets("Feuil2").Activate End If Windows("Representants par clients.xls").Visible = True End If End Sub

Notez que nous a vons dfini la proprit EnableCancelKey de lobjet Application xlDisabled, de f aon que lutilisateur ne puisse pas interrompre la macro. La proprit Visible de lobjet ActiveWindow (la fentre acti ve) est dfinie False de manire masquer la feuille de classeur tant que lutilisateur na pas entr le mot de passe. Si lutilisateur saisit un mauv ais mot de passe, la feuille Feuil2 du classeur est acti ve. Enfin, l proprit Visible de la fentre correspondant au classeur est dfinie True de f aon afficher de nou eau le classeur.
Figure 15.4 Vous pouvez protger laccs aux donnes dune feuille de calcul Excel.

pel Rap

Pour empcher lutilisateur de lir e 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.

Lobjet Worksheet
Le dossier Microsoft Excel Objets contient aussi des objets correspondant aux feuilles du classeur (v oir Figure 15.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

434

Excel et VBA

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.
Tableau 15.3 : Evnements grs par les objets Worksheet

Evnement

Description Survient lorsque la feuille de calcul est active.

Activate

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. 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 modie. Si Excel est paramtr pour un calcul manuel, lvnement survient lorsque lutilisateur force le calcul. Survient lorsque la valeur dune cellule est modie. La valeur dune cellule est considre comme modie aprs que lutilisateur a slectionn une autre cellule. La procdure reoit lobjet Range correspondant la cellule dont la valeur a t change. Survient lorsque la feuille de calcul est dsactive, cest--dire lorsque lutilisateur slectionne une autre feuille de calcul. Survient lorsque lutilisateur modie la cellule ou la plage de cellules slectionne. La procdure reoit lobjet Range correspondant la plage slectionne.

Calculate

Change

Deactivate SelectionChange

La procdure suivante affiche une bote de dialogue i vitant lutilisateur mettre jour les classeurs lis sil modifie la aleur de la cellule B5 de la feuille de classeur. Sil clique sur le bouton Oui, la procdure ProcdureMiseAJour est appele et la v aleur 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")

Chapitre 15

Programmer des vnements utilisateur

435

If MiseAJour = vbYes Then Call ProcdureMiseAJour(Target.Value) End If End If End Sub

Figure 15.5 Sil modifie la valeur de la cellule B5, lutilisateur est invit mettre jour les classeurs lis.

ntion Atte

Notez que les fentr es Code des objets Workbook et Worksheet ne peuvent contenir que des procdures vnementielles. Les procdures appeles doivent se trouver dans des modules de code.
Worksheet,

Pour une liste dtaille des proprits, mthodes et vnements des objets 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 Evnements affichent une liste de membres correspondants de lobjet Sheet.

16
Protger et authentier des projets VBA
Au sommaire de ce chapitre

Les virus macros Se protger des virus macros Protger laccs aux macros Authentif er ses macros

438

Excel et VBA

Les virus macro


Les virus macros font partie des virus les plus frquents. Il sagit en gnral de macros conues pour se xcuter louv erture 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 de fichiers indispensables au bon fonctionnement dune application, oire 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 version 97 dOffice, la seule option de protection contre les virus macros consis tait prvenir lutilisateur de la prsence de macros dans un document au moment de son ouverture, et lui proposer dacti ver ou de dsactiver les macros contenues dans le document. Cependant, si lon dsactivait les macros, le document tait ouv ert en lecture seule, et il tait alors impossible dy apporter des modifications Depuis la version 2000 dOffice, Microsoft a introduit deux nou eauts ddies la scurit et la protection contre les virus macros : la possibilit de dfinir des n veaux de scurit, comparables ceux qui e xistaient dj dans Internet Explorer et la signature lectronique des macros VBA.

Dnir un niveau de scurit dans Excel 2007


Les options de scurit ont sensiblement t modifies dans la ersion 2007 dExcel. Pour dfinir les options de scurit, procdez comme suit 1. Cliquez sur le bouton Office puis, dans le olet 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 sa fiche ( oir Figure 16.1). 3. Cliquez sur le bouton Paramtres de gestion du centre de confidentialit. La fentre Centre de gestion de la confidentialit contient huit onglets. Ceux-ci son prsents sommairement ci-aprs (pour plus dinformations, consultez laide dExcel) :

Chapitre 16

Protger et authentier des projets VBA

439

Editeurs approuvs. Il sagit des diteurs dont v ous reconnaissez les signatures numriques dignes de confiance. Les macros des documents signs par ces diteur seront actives. Emplacements appr ouvs. Vous trouv erez ici la liste des dossiers approuvs. Les macros des documents placs dans ces dossiers seront acti ves. Vous pouvez ajouter des dossiers la liste par dfaut. Complments. Vous pouvez dfinir dans cette fentre les options dact vation des complments Excel des modules qui ajoutent des fonctions aux programmes Office. Excel est l vr avec un certain nombre de complments, tels que le Solv eur ou lAssistant Somme conditionnelle. Pour connatre les complments installs, en ajouter ou en supprimer , retournez la fentre Options Excel et acti vez le v olet Complments. Contrles ActiveX. Il sagit des options dactivation des contrles ActiveX. Paramtres des macros. Dfinissez ici les rgles dact vation des macros : Dsacti ver toutes les macros sans notification : les macros attaches aux documents qui ne se trouv ent pas un emplacement approuv seront dsacti ves sans que lutilisateur en soit averti.

Figure 16.1 Dfinissez les options de scurit dExcel dans cette fentre.

440

Excel et VBA

Dsactiver toutes les macros a vec notification ( aleur par df aut) : les macros des documents situs hors dun emplacement approuv seront dsacti ves, et lutilisateur en sera a verti par un message af fich dans la barre de message ( oir Figure 16.2). Le bouton Options de cette barre af fiche une fentre partir d laquelle lutilisateur peut acti ver les macros du document pour la session en cours (voir Figure 16.3).

Figure 16.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 v ous avez approuv (v oir ci-dessus) seront automatiquement acti ves. Dans le cas contraire, lutilisateur pourra choisir dactiver ou non les macros. Activer toutes les macros : les macros seront acti ves sans aucun contrle du Centre de confidentialit. Pratique lorsque ous dveloppez des projets VBA et ne souhaitez pas avoir activer les macros manuellement, cette option est dconseille a vec les documents provenant de sources extrieures. Pour accder dir ectement aux options de scurit des macr os, cliquez sur le bouton Scurit des macros de longlet Dveloppeur.

ce Astu

Dnir un niveau de scurit avec Excel 2000, XP et 2003


Les ni veaux de scurit permettent de dfinir les conditions dans lesquelles les macro contenues dans un document seront actives ou dsactives. Vous pouvez ainsi dfinir d s niveaux de scurit adapts aux dif frents utilisateurs, en leur laissant ou non dcider de la fiabilit des macros contenues dans un document Excel 2003 permet de choisir parmi quatre ni veaux de scurit tandis que les v ersions antrieures proposent trois options. Pour dfinir un n veau de scurit, procdez comme suit : 1. Choisissez Outils, Macro, Scurit afin da ficher la bote de dialogue Scurit ( Figure 16.4). oir

Chapitre 16

Protger et authentier des projets VBA

441

Figure 16.4 Dfinissez un niveau de scurit dans la bote de dialogue Scurit.

2. Activez longlet Ni veau de scurit si ncessaire et cochez lune des options de scurit disponibles : Niveau de scurit trs le v (Office 2003 seulement). Cest le lieu de stockage des macros qui en dfinit la fiabilit. Seules les macros de documents stock da des emplacements dfinis comme fiables seront xcutes. Niveau de scurit le v. Seules les macros signes numriquement, cest--dire authentifies par leur d eloppeur, et dont la signature a t ajoute la liste des sites dignes de confiance seront act ves. L utilisateur choisira dacti ver 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 dsacti ves sans que lutilisateur en soit prvenu. Niveau de scurit moy en. Les macros signes seront traites de la mme f aon que dans le cas dun ni veau de scurit haut. P ar contre, lutilisateur sera a verti de la prsence de macros non signes et in vit acti ver ou dsacti ver ces macros (voir Figure 16.5). Niveau de scurit bas. Toutes les macros seront acti ves, quelles soient signes ou non.
Figure 16.5 Le niveau de scurit moyen laisse lutilisateur le soin dactiver ou de dsactiver les macros non identif es comme provenant dune source fiabl .

442

Excel et VBA

3. Validez en cliquant sur OK. Lorsque des macros sont dsacti ves (de f aon automatique dans le cas dun ni veau de scurit haut, ou par choix de lutilisateur dans le cas dun ni veau de scurit mo yen), 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 (v oir Figure 16.6). Pour pouv oir excuter les macros, vous devez alors fermer le document, redfinir un n veau de scurit mo yen ou bas si ncessaire, puis rouvrir le document.
Figure 16.6 Pour excuter une macro pralablement dsactive, vous devez fermer le document et louvrir de nouveau en activant les macros.

Si vous avez dfini un n veau de scurit haut ou mo yen et si v ous ouvrez un document contenant des macros signes numriquement mais ne f aisant pas partie de la liste des sources fiables, une fentre ous informe du contenu de la signature (le nom de la personne ou de la socit ayant dvelopp les macros) et vous propose :

de dsactiver les macros ; dactiver les macros ; dactiver les macros et dajouter la signature numrique aux sites rputs fiables

Figure 16.7 Les signatures numriques permettent leurs auteurs de certifier la p ovenance des macros quils distribuent.

Lorsque vous ajoutez une signature numrique la liste des sources fiables, toutes le macros portant cette signature sont considres comme fiables. Elles sont donc act ves

Chapitre 16

Protger et authentier des projets VBA

443

sans que vous soyez prvenu de leur e xistence, et ce quel que soit le ni veau de scurit choisi. Pour consulter la liste des sources fiables, choisissez Outils, Macro, Scurit, puis act vez longlet Sources fiables de la bote de dialogue Scurit ( oir Figure 16.8). Vous pouvez tout moment supprimer une signature de la liste des sources fiables en slectionnant l signature voulue et en cliquant sur le bouton Supprimer. Cocher la case Faire confiance tous les modles et tous les complments installs r vient considrer comme source fiable les modles installs sur otre machine.
Figure 16.8 Les signatures numriques considres comme sources fiables appa aissent ici.

eil Cons

Choisissez un niveau de scurit adapt vos utilisateur s et votre utilisation des macros. Si vous travaillez dans une entreprise qui dveloppe ses propres macros et nutilise a priori pas de macr os issues de sour ces e xtrieures, la signatur e des macros de la socit associe un niveau de scurit haut constituer a un c hoix adapt. Le niveau de scurit le v constitue galement le bon c hoix pour des utilisateurs qui ne sont pas conscients des dangers lis aux virus macros. Par contre, si vous utilisez des macr os provenant de sources extrieures variables, le niveau de scurit le v entr anera la dsactivation de toutes les macr os non signes, et ce sans que lutilisateur ne soit prvenu de lexistence de ces macros. Le niveau de scurit moyen se rvlera alors plus adapt, condition de sensibiliser les utilisateurs aux dangers des virus macros et de f xer des rgles pour lactivation ou la dsactivation des macros. Le niveau de scurit bas ne de vrait tre appliqu que dans des conditions e xceptionnelles. Par exemple, si vous dveloppez un nombr e important de macr os, que vous ne disposiez pas dune signatur e numrique, et que vous souhaitiez que les

444

Excel et VBA

macros des documents que vous ouvrez soient toujours actives, vous pourrez activer le niveau de scurit bas. Il est alor s r ecommand de tr availler sur une machine communiquant le moins possible avec le xtrieur, quipe dun antivirus rcent, et deffectuer des sauvegardes quotidiennes de vos donnes. Si la dfinition dun niveau de scurit adapt constitue une barri e de scurit importante, il est fortement r ecommand de complter cette pr otection par lutilisation dun antivirus. Depuis la ver sion 2000, Office intg e une nouvelle tec hnologie qui permet aux antivirus de fonctionner depuis Of fic . Les antivirus compatibles Office peuvent ainsi vrifier si un document contient des virus avant son ouvert e.

Effectuer des sauvegardes des macros


Vous pouvez prendre toutes les prcautions imaginables, dfinir le n veau de scurit le plus lev et installer le tout dernier anti virus compatible Of fice, ous 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 v ous vous retrouvez du jour au lendemain sans la moindre ligne de code, vous risquez fortement de dtruire votre ordinateur. Ne prenez pas de risques inutiles et respectez cette rgle incontournable : effectuez des sauvegardes rgulires de v os donnes sensibles. En sauv egardant les classeurs et les modles auxquels sont attaches vos macros, vous sauvegarderez galement le projet VBA correspondant. Le classeur Perso.xls contiendra probablement lessentiel de v os macros Excel. Une autre solution consiste e xporter les modules et les feuilles et sauv egarder les fichiers ainsi gnrs en lieu s . 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 conte xtuel qui saffiche, slectionnez Expo ter un fichie . 3. La bote de dialogue Exporter un fichier sa fiche ( oir Figure 16.9). Le type du fichie export varie selon llment supprim : Les modules standard ou modules de code sont e xports sous la forme de fichier Basic portant le xtension .bas. Les fichiers .bas sont des fichiers xte, et peuv ent donc tre consults et modifis dans un diteur de t xte tel que le Bloc-notes de Windows. Les feuilles sont exportes sous la forme de deux fichiers Feuille portant les xtensions .frm et .frx. Le premier est un fichier t xte contenant quelques donnes propres la feuille (telles que son nom, sa taille, sa position lors de laf fichage) ainsi que le code qui lui est attach. Le second ne peut tre lu dans un diteur de

Chapitre 16

Protger et authentier des projets VBA

445

texte et contient toutes les autres informations (essentiellement les donnes propres aux diffrents contrles de la feuille). Les modules de classe sont e lextension .cls. xports sous la forme de fichiers Classe portan

4. Indiquez le rpertoire et le nom denregistrement, puis cliquez sur le bouton Enregistrer.


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

Une fois un fichier xport, v ous pouv ez limporter dans nimporte quel projet. Pour importer les modules et les feuilles dans un projet, af fichez la fentre de lExplorateur d projet, cliquez droit sur lun des lments du projet et choisissez la commande Importer un fichie . 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 prserv er 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, ous pouvez simplement protger laccs au code du projet par mot de passe. Pour v errouiller un projet, procdez comme suit : 1. Affichez lExplorateur de projet de aon 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 ( oir Figure 16.10).

446

Excel et VBA

4. Dans les zones dfinies cet e fet, saisissez deux reprises le mot de passe qui sera ensuite demand pour accder au projet, puis validez.
Figure 16.10 Protgez votre projet par un mot de passe.

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 Figure 16.11).
Figure 16.11 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 ver ouillage du pr ojet, vous naur ez aucun moyen daccder au code de ce pr ojet. 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.

Chapitre 16

Protger et authentier des projets VBA

447

Limiter les droits dexcution dune macro


Il est parfois ncessaire de dfinir des autorisations pour l xcution dune macro. Une macro Excel peut par e xemple permettre daccder des informations financires conf dentielles. 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 le xcution 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 vant dexcuter le code. Le projet de vra videmment tre protg contre laf fichage, afin q lutilisateur ne puisse pas consulter le mot de passe dans le code de la feuille. Voici une f aon dcrire le code de vrification du mot de passe. Crez une feuille Use Form et placez sur celle-ci un contrle Label, un contrle TextBox et deux contrles CommandButton (votre feuille doit ressembler celle qui est prsente la Figure 16.12). Dfinissez-en les proprits comme indiqu ci-aprs
Proprit Feuille Valeur

Name Caption
Contrle Label

fmMotDePasse
Entrez le mot de passe

Name Caption
Contrle TextBox

LbMotdePasse
Entrez ci-aprs le mot de passe requis pour lexcution de cette commande

Name PasswordChar
Contrle CommandButton 1

TxtMotDePasse
*

Name Caption Default


Contrle CommandButton 2

CmdOK
OK

True

Name Caption Cancel

CmdAnnuler
Annuler

True

448

Excel et VBA

Figure 16.12 La feuille fmMotDePasse en mode Excution.

Insrez 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() txtMotDePasse.Value = "" txtMotDePasse.SetFocus End Sub Private Sub cmdAnnuler_Click() Unload Me 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() On vrifie si le mot de passe entr est bon. If txtMotDePasse.Text = "ftg87" Then Unload Me Else MsgBox "Le mot de passe fourni nest pas correct.", _ vbOKOnly + vbExclamation, "Mot de passe incorrect" txtMotDePasse.Value = "" txtMotDePasse.SetFocus End If End Sub

Pour tester ce programme, insrez la procdure sui vante 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 (fmMotDe asse). Elle ne reprendra la main si le mot de passe entr dans la feuille est correct, et af fichera alors u message indiquant que le code se poursuit. La premire procdure (lignes 1 4) sexcute chaque affichage de la feuille. Elle a fecte une chane vide la zone de texte et lui passe le focus.

Chapitre 16

Protger et authentier des projets VBA

449

La procdure sui vante (lignes 6 11) se xcute lorsque lutilisateur clique sur le bouton libell Annuler ou tape sur la touche Echap. La feuille est alors dchar ge et un message informe lutilisateur que la commande prend fin. instruction End met fin l xcution 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). Lignes 15 22, une structure conditionnelle If...Then...Else vrifie que le mot d passe entr est correct, cest--dire que lutilisateur a saisi ftg87 (ligne 15) dans la zone de texte. Si tel est le cas, la feuille est dcharge et la procdure ayant appel laffichage de l feuille reprend la main. Dans le cas contraire, un message indique lutilisateur que le mot de passe entr est incorrect. La zone de te xte est alors vide de la v aleur prcdemment entre et reprend le focus.
ntion Atte

Unload et non Hide pour fair e Lignes 7 et 16, nous avons utilis le mot cl disparatre la feuille. Rappelez-vous que Hide masque la feuille mais ne libr e pas les r essources mmoir e quelle e xploite. Si vous r emplacez linstruction Unload Me de la ligne 16 par linstruction Me.Hide, la pr ochaine fois que la feuille sera affi he au cour s de la session, le mot de passe ser a dj af fi h dans la zone de texte. Il suffi a 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 tentati ve 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 v ous ne prcisez pas largument CloseMode pour lequel vous souhaitez que la procdure sexcute, elle sexcutera dans nimporte quel conte xte, y compris lorsque la mthode Unload sera utilise dans le code. Dans ce cas, si lutilisateur clique sur le bouton Annuler, le message

450

Excel et VBA

linformant que le programme prend fin sera a fich deux reprises dans le cadre des procdures vnementielles cmdAnnuler_Click et UserForm_QueryClose. Dans ce premier e xemple, la feuille reste af fiche jusqu ce que lutilisateur entre l 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 aon que le programme prenne fin aprs troi tentatives infructueuses de saisie du mot de passe (les modifications apparaissent en gra dans le code). Nous a vons g alement redfini la proprit Caption de la feuille "Entrez le mot de passe. Tentative 1 sur 3" et modifi le code de manire que cette info mation soit mise jour dans la barre de titre de la fentre chaque nouvelle tentative.
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: Private Sub cmdOK_Click() La variable compteur servira compter le nbre de tentatives. Static compteur As Byte compteur = compteur + 1 If txtMotDePasse.Text = "ftg87" Then Unload Me Else Si cest la 3e fois que lutilisateur entre un mot de passe incorrect, le programme prend fin If compteur = 3 Then MsgBox "Echec dans la saisiedu mot de passe." & _ vbCr & "La commande ne peut tre excute", _ vbOKOnly + vbExclamation, "Mot de passe incorrect" End End If MsgBox "Le mot de passe fourni vbOKOnly + vbExclamation, "Mot txtMotDePasse.Value = "" txtMotDePasse.SetFocus Me.Caption = "Entrez le mot de compteur + 1 & " nest pas correct.", _ de passe incorrect"

passe. Tentative " & _ sur 3"

End If 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 f aon reflter le nombre de tentat ves (voir Figure 16.13). 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 ( oir Figure 16.14).

Chapitre 16

Protger et authentier des projets VBA

451

Figure 16.13 Le nombre de tentatives est affi h dans la barre de titre de la fentre.

La barre de titre indique le nombre de tentatives effectues

Figure 16.14 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 entr e les dif frents appels dune pr ocdure. Une variable statique au sein dun module de feuille conserve sa valeur tant que la feuille est affi he.

Lignes 11 17, une structure If...Then...Else a t imbrique la structure conditionnelle initiale. Elle vrifie si compteur est al 3, cest--dire si cest la troisime fois que lutilisateur propose un mot de passe erron. Si tel est le cas, un message est af fich e linstruction End de la ligne 16 interrompt le programme. Enfin, lignes 23 et 24, nous avons ajout une instruction qui met jour le te affich dan xte la barre de titre de la fentre. Pour dfinir quel sera le numro de la prochaine tenta ive, on incrmente la v aleur de Compteur (le nombre de tentati ves effectues, y compris celle en cours) de 1. Telle quelle se prsente dans les deux v ersions du programme que nous a vons donnes ici, la feuille fmMotDeP asse permet de xiger 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 tentati es, toutes deux dfinies dans le cod v

452

Excel et VBA

de la feuille. Vous souhaiterez en ef fet probablement dfinir des mots de passe di pour diffrents programmes, dont lutilisation sera limite diffrents utilisateurs.

frents

La solution consiste appeler une procdure de v alidation en lui passant les v aleurs "mot de passe" et "nombre de tentati ves" comme arguments. Celle-ci stockera ces valeurs dans des variables publiques de niveau module (donc accessibles lensemble des modules du projet) auxquelles les procdures de la feuille pourront accder. Crez un nouv eau module de code et af fectez-lui un nom reprsentatif, par e xemple 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 v ariables de ni veau module v arMotDePasse et v arNumTentatives sont dclares publiques. La procdure ControleMotDePasse (lignes 4 8) pourra tre appele par nimporte quelle procdure en lui passant les ar guments requis (le mot de passe et le nombre de tentati ves), afin de subordonner la poursuite de l xcution du programme en cours la prsentation de ce mot de passe par lutilisateur . Cette procdure af fecte les valeurs quelle reoit comme ar guments aux variables varMotDePasse et varNumTentatives, et appelle ensuite la feuille fmMotDePasse. Modifiez ensuite le code de la feuille de la aon suivante (les modifications apparaissen en gras) :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 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.

Chapitre 16

Protger et authentier des projets VBA

453

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:

Static compteur As Byte compteur = compteur + 1 If txtMotDePasse.Text = varMotDePasse Then Unload Me Else Si cest la Ne fois que lutilisateur entre un mot de passe incorrect, le programme prend fin If compteur = varNumTentatives Then MsgBox "Echec dans la saise du mot de passe." & _ vbCr & "La commande ne peut tre excute", _ vbOKOnly + vbExclamation, "Mot de passe incorrect" End End If MsgBox "Le mot de passe fourni vbOKOnly + vbExclamation, "Mot txtMotDePasse.Value = "" txtMotDePasse.SetFocus Me.Caption = "Entrez le mot de compteur + 1 & " nest pas correct.", _ de passe incorrect"

passe. Tentative " & _ sur " & varNumTentatives

End If End Sub 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

Partout dans le code o il tait f ait rfrence au nombre de tentati ves ou au mot de passe, nous avons remplac les v aleurs fi es par des rfrences aux v ariables varMotDePasse et varNumTentatives. Nous avons ajout une instruction dfinissant le titre de la fentre dan la procdure Initialize de la feuille (lignes 4 et 5), afin que le texte affich dans la barre de titre ref te le nombre de tentatives autorises ds laff chage de la feuille. Ce titre est ensuite mis jour chaque passage de la fentre (ligne 38). 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 ligne 26, la variable Compteur est maintenant compare la v aleur de v arNumTentatives, afin de dfinir si toutes l tentatives autorises ont chou.

454

Excel et VBA

Pour appeler le programme mot de passe, il suf suivante lendroit voulu :

fit maintenant de placer linstructio

Call ControleMotDePasse(MotDePasse, NumTentatives)

o MotDeP asse est le mot de passe attendu, et NumT entatives le nombre de tentati ves autorises. Pour tester ce programme, placez la procdure sui vante dans nimporte quel module du projet et excutez-la (voir Figure 16.15).
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 ligne 3 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 enre gistr pour lapplication soit fourni et autorise 5 tentati ves. Enfin ligne 11, le mot de passe pass correspond aux initiales enre gistres pour lutilisateur en cours, suivies de -vba, et autorise six tentati ves. Chaque fois que le bon mot de passe est fourni par lutilisateur , la procdure TestControleMotDePasse reprend la main et un message est affich (lignes 5, 9 et 12)
Figure 16.15 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

Protger et authentier des projets VBA

455

ce Astu

Vous pouvez galement limiter le nombr e de car actres autoriss dans la zone de texte de la feuille fmMotDeP asse au nombr e de car actres composa nt le mot de passe. Insr ez pour cela linstruction suivante dans la pr ocdure 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 v ous dfinissez un mot d passe par "groupe dutilisateurs". Vous pouv ez par e xemple 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 pa macro deviendra rapidement ingrable, pour v ous comme pour les utilisateurs finaux. Il es alors conseill de dfinir un mot de passe par groupe. Si une macro est accessible aux deu 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 d passe. Modifiez le code du module MotDe asse 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 16: varMotDePasse3 = MotDePasse1 17: Else 18: varMotDePasse3 = MotDePasse3 19: End If 20: fmMotDePasse.Show 21: End Sub

456

Excel et VBA

Ligne 1, nous avons cr trois variables destines recevoir les 3 mots de passe autoriss. Nous a vons ensuite modifi la dclaration de la procdure ControleMotDe asse (ligne 4) 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 (lignes 10 14 et lignes 15 19) vrifient ensuite s les mots de passe optionnels ont t passs. Si largument correspondant au deuxime mot de passe valide a t pass, la v ariable varMotDePasse2 se voit affecter la valeur de cet argument. Si largument na pas t pass, la variable varMotDePasse2 reoit la valeur de lar gument MotDeP asse1 qui, lui, est oblig atoire. Le mme traitement est appliqu la v ariable v arMotDePasse3, fonction du passage ou non de lar gument MotDePasse3. Le mot cl Optional indique quun ar gument nest pas obligatoir e. La fonction IsMissing peut tre utilise pour vrifier si la gument a t pass ou non. La fonction IsMissing ne fonctionne corr ectement quavec des ar guments de type Variant. Si vous dclarez les arguments MotDePasse2 et MotDePasse3 de type String, la fonction IsMissing renverra toujour s False, que les ar guments soient passs ou non. En consquence , les variables varMotDePasse2 et varMotDeP asse3 se verr ont af fecter une c hane vide , qui sera reconnue comme mot de passe valide.

pel Rap

ntion Atte

Modifiez ensuite linstruction


If txtMotDePasse.Text = varMotDePasse Then

de la procdure cmdOK_Click de f aon 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

Info

Les instructions des lignes 10 19 permettent que les variables varMotDePasse2 et varMotDePasse3 ne soient jamais vides, et ce mme si les ar guments MotDePasse2 et/ou MotDeP asse3 nont pas t passs la pr ocdure ControleMotDePasse. Ce traitement est ncessaire pour quune err eur ne soit pas gnre lors de la vrif cation de la comparaison du texte saisi par lutilisateur dans la feuille aux valeurs contenues dans les variables varMotDePasse2 et varMotDePasse3.

Chapitre 16

Protger et authentier des projets VBA

457

Pour appeler le programme mot de passe, il suf suivante lendroit voulu :

fit maintenant de placer linstructio

Call ControleMotDePasse(NumTentatives, MotDePasse1, MotDePasse2, MotDePasse3)

o NumTentatives est le nombre de tentati ves autorises et MotDePasse1, MotDePasse2 et MotDePasse3 sont les mots de passe valides. MotDePasse2 et MotDePasse3 sont optionnels. Pour tester ce programme, placez la procdure sui vante 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 5 tentatives. Lors du premier appel, seul le mot de passe Bonjour est pass comme argument. Le deuxime appel passe g alement la v aleur 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 a guments 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 est affich (lignes 3 et 9)

Authentier ses macros


Dans les v ersions antrieures dOf fice, le d eloppement des virus macros associ limpossibilit dauthentifier lorigine des macros posait un vrai problme pour les utilisa teurs amens dv elopper des macros ncessaires lutilisation de documents quils distribuaient. En effet, lorsquun utilisateur ouvrait un document qui lui avait t communiqu et v oyait saf ficher un message lui conseillant de dsact ver les "dangereuses" macros contenues dans ce document, il choisissait a vec 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 v ersion 2000 dOf fice. Les signatures numriques identifient la source du

458

Excel et VBA

macro (le nom de la personne ou de la socit ayant dv elopp les macros). Lorsque vous ouvrez un document contenant des macros signes numriquement, le dtail de la signature de ces macros est affich lcran Le fait que des macros soient numriquement signes ne vous garantit pas de leur fiabilit. Un dveloppeur malhonnte peut se p ocurer une signatur e lectronique pour signer des virus macr os. Ne vous fiez aux signatu es lectroniques q ue si elles authentifient une pe sonne ou une socit de votr e connaissance.

eil Cons

Obtenir une authentication


Afin de pou oir authentifier os macros, vous devez vous procurer une signature lectronique auprs du service appropri. Un certificat authentifi peut tre achet aupr de socits reconnues, telles VeriSign ( http://www.verisign.com) ou Thawte ( http:// www.thawte.com). Vous pouv ez g alement crer v os propres certificats numrique (non authentifis) en utilisant lutilitaire de certification fourni vec Microsoft Of fice Ouvrez le menu Dmarrer , puis choisissez Programmes, Microsoft Of fice, Outil Microsoft Office, Certificat numrique pour les projet VBA (voir Figure 16.16).
Figure 16.16 Vous pouvez crer vos propres certificats numriques.

Chapitre 16

Protger et authentier des projets VBA

459

Info

Si la commande Certificat numrique nappa at pas dans le gr oupe Microsoft Offic , recherchez le fi hier Selfcert.exe sur les CD-ROM dOffic .

Pour une liste e xhaustive des or ganismes de certification, consultez laide en lign dOffice ou, dans la bote de dialogue reprsente la Figure 16.16, cliquez sur le lien

Authentier une macro


Lorsque vous avez obtenu une signature lectronique, il ne v ous reste qu "signer" v os 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 Figure 16.17). 3. Cliquez sur le bouton Choisir et, dans la fentre qui saf fiche, choisissez la signatur lectronique que vous souhaitez affecter votre projet.
Figure 16.17 La bote de dialogue Signature numrique permet de grer les signatures affectes vos projets.

17
Bonus : exemple complet dapplication Excel
Au sommaire de ce chapitre

Prsentation dun projet dapplication Excel Cration du modle Excel Cration des interfaces utilisateur Ecriture des procdures ddition de documents

462

Excel et VBA

Ce chapitre constitue un rcapitulatif de lensemble des connaissances acquises au long de votre lecture. Nous v ous proposons dy crer un programme complet, tape par tape, de sa dfinition son intgration linter ace dExcel, qui mette en pratique lensemble des connaissances acquises au cours de cet ouvrage.

Prsentation dun projet dapplication Excel


Le programme que nous allons crire ici aura pour fonction de gnrer des f actures de droits dauteur et de mettre jour un tableau Word. La Figure 17.1 prsente une f acture type.
Figure 17.1 Une facture droits dauteur type.

Afin de simplifier et de scuriser cette tche, nous crerons des inte aces utilisateur adaptes, dans lesquelles il suf fira dentrer les donnes ncessaires au programme. L programme aura pour fonction de gnrer les feuilles de paie, de les enre gistrer et den imprimer un nombre de xemplaires dfini par lutilisateu . Il mettra g alement jour un tableau dans un document Word rpertoriant les informations essentielles concernant le contrat. Pour les besoins du programme, crez un fichier Word semblable celui reprsent la Figure 17.2 et enre gistrez-le sous le nom Contrats Auteurs.doc dans le dossier C:\Mes documents\.

Chapitre 17

Bonus : exemple complet dapplication Excel

463

Figure 17.2 Chaque fois quun contrat est dit, les donnes sont intgres dans un fi hier Word.

Identication 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 ( oir 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 Le contrat pourra tre tabli au nom dune personne physique ou celui dune socit. Dans le premier cas, un prnom devra tre fourni.

Figure 17.3 La liste des auteurs est stocke dans un fi hier Excel.

Info

Pour les besoins du programme, crez un fi hier Excel semblable celui de la Figure 17.3 et enr egistrez-le sous le nom Classeur Auteurs.xls dans le dossier C:\Mes documents.

464

Excel et VBA

Ouvrage. Titre de louvrage et ISBN ( International Standard Book Number , numro identifiant louvrage de aon unique). LISBN sera toujours format de la f aon 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 fi e ou variable (par exemple, 6 % sur les 3 000 premiers livres, puis 8 %). Lavance sur droits dauteur est f acultative. Dans le cas dune a vance, celle-ci pourra tre v erse 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 de vra toujours tre postrieure la date de remise. P ar ailleurs, si moins de 40 jours sparent la date de remise de la date de parution, une confirmatio sera demande lutilisateur.

Options dimpression. Lutilisateur pourra choisir dimprimer ou non les documents dits. Il pourra g alement dfinir le nombre d xemplaires imprims pour le courrier et pour les feuilles de paie.

Dnition de la structure du programme


Afin dassurer une bonne lisibilit au programme et de pou oir rutiliser les procdures dans dautres conditions (par e xemple, pour un programme qui valent 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 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 manipule . Il sagit de crer les liaisons a vec le rpertoire des auteurs et le document complter. 2. Affichage des inter aces utilisateur. Word

Chapitre 17

Bonus : exemple complet dapplication Excel

465

On commence par se procurer lensemble des informations requises. Pour chaque interface : a. Chargement des feuilles (procdures Initialize). Les interfaces sont appeles partir de la procdure principale. b. Vrification des informations fournies par lutilisateu . Les procdures vnementielles des feuilles vrifient la alidit des donnes. c. Stockage des donnes dans des variables. Lorsque les donnes sont valides, les valeurs entres par lutilisateur sont affectes aux v ariables appropries, afin de pou oir tre ensuite e xploites par le programme. d. Masquage de linterface. 3. Edition, 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. 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 nouv eau 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 v ariables, la procdure principale et les procdures spcifiques au contrat dauteu . Les variables devront tre publiques

466

Excel et VBA

afin de pou oir tre manipules partir de nimporte quel module, et notamment partir des interfaces, afin de leur a fecter les valeurs donnes entres par lutilisateur.

ContratsDivers. Ce module re groupera les procdures susceptibles dtre rutilises par dautres programmes (par e xemple un programme de contrat de traduction), telles que limpression, lenregistrement, etc. RepertoireAuteurs. Ce module re groupera 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 interf aces utilisateur.

Le dossier Modules de lExplorateur de projet doit tre semblable celui de la Figure 17.4.
Figure 17.4 LExplorateur de projet ce stade de la cration du programme.

Le stockage des informations fournies par lutilisateur


Les informations fournies par lutilisateur au tra vers des interf aces quil sera in vit complter seront stockes dans des types de donnes personnaliss afin de permettre u regroupement des informations de mme type :

Le type Auteur contiendra les donnes relati ves lauteur (nom et adresse) prnom, adresse, code postal, ville, pays, socit.

: nom,

Le prnom, le nom, ladresse, le code postal, la ville et le pays seront des v aleurs de type String (chane de caractres). La socit sera une v aleur boolenne (contrat au nom dune socit = True, contrat au nom dune personne physique = False).

Chapitre 17

Bonus : exemple complet dapplication Excel

467

Le type ConditionsAuteur rassemblera les donnes relati ves louvrage et aux droits dauteur (titre, ISBN, taux v ariable ou non, taux initial des droits dauteur sous forme numrique et sous forme de chane, nombre de xemplaires affects par le taux initial, taux au-del de x e xemplaires sous forme numrique et sous forme de chane, a vance 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 v aleurs de type String. Le taux initial et le taux sui vre, ainsi que le nombre de paiements sur lequel sera ef fectue 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 v aleurs numriques de type Integer. Le taux v ariable sera une valeur boolenne (taux variable = True, taux fi e = False). Avance ou non correspond galement une v aleur boolenne (avance = True, pas davance = False). La date de remise et la date de parution seront des valeurs de type Date.

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 de xemplaires du courrier imprimer et nombre de xemplaires 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 v aleurs 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

468

Excel et VBA

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 ImprimerPaie As Boolean nbreCourrier As Variant nbrePaie As Variant End Type

La Figure 17.5 prsente le module ContratAuteur tel quil doit se prsenter ce stade.
Figure 17.5 Le module ContratAuteur contient les dclarations de types et le corps de la procdure principale.

Chapitre 17

Bonus : exemple complet dapplication Excel

469

Ajoutez sous les dclarations de type, la dclaration des variables publiques dans lesquelles seront stockes les donnes. Ces dclarations doi vent se trouv er dans la zone d e 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 v ariables 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.
ntion Atte

Pour pouvoir manipuler des fi hiers Word, vous devez crer une rfrence la bibliothque dobjets de Word. Choisissez la commande Rfr ences du menu Outils de Visual Basic Editor et coc hez la case Microsoft Word Object Library (voir Figure 17.6). Si vous omettez de le faire, linstruction de dclaration de la variable MonTableauWord gnrera une erreur.

Figure 17.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.xls") Set MonTableauWord = GetObject(, "Word.Application") If Err.Number <> 0 Then Err.Clear

470

Excel et VBA

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

Cration du modle Excel


Nous allons maintenant crer le modle Excel quutilisera le programme pour gnrer les feuilles de paie.
Figure 17.7 Le modle FeuillePaieAuteur complt.
=F20*0,5% =F18*7,5% =F15*0,85% =F15*0,8% =F15*95%

=F15+F16-F17-F19-F21

=F15*4,7%

=F15*1%

=F18

Crez un nouveau classeur Excel. Supprimez les feuilles 2 et 3, et renommez la feuille 1 en "Auteur". Entrez ensuite les donnes fi es, puis les formules comme indiqu la Figure 17.7. Formatez les cellules (bordures, polices, formats, etc.). Dfinissez un forma

Chapitre 17

Bonus : exemple complet dapplication Excel

471

numrique deux dcimales pour les cellules de vant recevoir une valeur montaire, et un format de date pour les cellules de vant rece voir des donnes de type date. Enre gistrez ensuite le classeur en tant que modle (e xtension .xlt), sous le nom FeuillePaieAuteur, puis fermez-le. 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.

eil Cons

Nous nentrerons pas ici dans le dtail des formules et la f aon 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 (lignes 26 et 27) sont des taxes dues par lditeur. Le Tableau 17.1 prsente les informations qui de vront tre compltes par le programme dans la feuille de paie.
Tableau 17.1 : Dnition des cellules qui devront tre renseignes par le programme

Cellule C2 C3 C4 C6 C7 C9 C10 C11 C12 F15 F30 B32 F32 F33 G32 G33

Contenu Auteur (Prnom + Nom) ou Socit Titre de louvrage ISBN Date de remise Date de parution Adresse Code postal Ville Pays Montant de lavance sur droits payer Date de rglement Nombre dexemplaires touchs par le taux 1 Taux 1 sous forme de valeur numrique Taux 2 sous forme de valeur numrique Taux 1 sous forme de chane Taux 2 sous forme de chane

472

Excel et VBA

Cration des interfaces


Le programme proposera cinq interf aces qui permettront de rassembler les dif informations requises pour diter le contrat :

frentes

La feuille fmContratAuteur permettra de choisir un auteur dans la liste des auteurs (extraite du fichier Excel) La feuille fmContratConditions permettra de fournir les informations concernant louvrage (titre et ISBN) et les conditions du contrat (taux des droits dauteur et avance). La feuille fmContratDates permettra de prciser la date de remise et la date de parution. La feuille fmContratImpression permettra de dfinir les documents imprimer et l nombre dexemplaires. La feuille fmContratFin indiquera lutilisateur que les informations ncessaires ldition du contrat ont t recueillies.

Toutes les feuilles, le xception de la premire, proposeront un bouton de commande permettant de raf ficher 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 slec tionner le nom de lauteur dans la liste des auteurs (stocke dans le classeur Excel Rper toire Auteurs.xls) qui sera char ge laf fichage de la feuille. Elle contiendra alement cinq zones de te xte qui permettront respecti vement 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 Figure 17.8 prsente la feuille fmContratAuteur en mode Conception. Afin de mett e en valeur les dif frentes phases dcritur e des pr ocdures vnementielles dune feuille , nous dtaillerons les procdures de la feuille fmContratAuteur pour c haque contrle . Pour les feuilles suivantes, nous prsenterons lensemble des procdures en un seul listing que nous commenterons.

Info

Chapitre 17

Bonus : exemple complet dapplication Excel

473

Figure 17.8 La feuille fmContratAuteur en mode Conception.

Crez la feuille fmContratAuteur en vous fondant sur la Figure 17.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). Placez trois contrles CommandButton hors du contrle Frame. Affectez les proprits suivantes aux contrles :
Proprit Feuille Valeur

Name Caption
Contrle Frame

fmContratAuteur
Contrat auteur

Caption

Auteur :

474

Excel et VBA

Proprit Contrle ComboBox

Valeur

Name Style MatchEntry


Contrle TextBox 1

cboNom 0- fmStyleDropDownCombo 1 - fmMatchEntryComplete

Name
Contrle TextBox 2

txtPrenom

Name
Contrle TextBox 3

txtAdresse

Name
Contrle TextBox 4

txtCodePostal

Name
Contrle TextBox 5

txtVille

Name
Contrle Label 1

txtPays

Name Caption
Contrle Label 21

lbNom
Nom

Name Caption
Contrle CheckBox

lbPrenom
Prnom

Name Caption
Contrle CommandButton 1

chkSociete
Contrat au nom dune socit

Name Caption Cancel


Contrle CommandButton 2

cmdAnnuler
Annuler

True

Name Caption

CmdAjouterAuteur
Ajouter auteur

Chapitre 17

Bonus : exemple complet dapplication Excel

475

Proprit Contrle CommandButton 3

Valeur

Name Caption Default


1

CmdSuite
Suite

True

Il nest pas ncessaire de dfinir les proprits Name des autres contrles Label, car ils ne seront pas manipuls.

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 af ficher un message dans la barre dtat d lapplication afin dinformer lutilisateur de la procdure en cours. Ligne 3, le curseur est transform en sablier . Ligne 4, la procdure MiseAjourListeDeroulante est appele. Aprs que celle-ci sest excute, la procdure appelante reprend la main, et le message de

476

Excel et VBA

la barre dtat est effac tandis que le curseur reprend sa forme normale. Enfin, ligne 7, la zone de liste modifiable reoit le focus
ntion Atte

La variable ClasseurA uteurs doit avoir t dclare et un classeur doit lui tr e affect avant que la feuille ne soit affi he. Si tel nest pas le cas, linstruction de la ligne 23 gnrera une erreur au moment de laffi hage de la feuille.

La procdure MiseAjourListeDeroulante a pour fonction dajouter les noms des auteurs la zone de liste modifiable. Les instructions des lignes 11 19 suppriment les lments de la liste si celle-ci nest pas vide. Nous y re viendrons plus tard. Lignes 20 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].
A ce stade , vrifiez que la mise jour de la zone de liste modifiable s fectue correctement. Excutez pour cela la pr ocdure EditionContratAuteur, aprs avoir pris soin dy ajouter linstruction daf fi hage de la feuille . Celle-ci doit se prsenter comme suit :
Sub EditionContratAuteur() Set ClasseurAuteurs = GetObject("C:\Mes documents\Classeur Auteurs.xls") Set MonTableauWord = GetObject(, "Word.Application") If Err.Number <> 0 Then Err.Clear FmContratAuteur.Show End Sub

eil Cons

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 slecti dun nom dans la liste ou par la saisie dun nouv eau nom). La v ariable LigneSel sert

Chapitre 17

Bonus : exemple complet dapplication Excel

477

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 ligne 2 et la premire valeur dindex dun contrle ComboBox est 0. Lignes 4 8, la v aleur 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 v aleur 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 e xiste dans la liste (car la proprit MatchEntry a t dfinie 1- fmMatchEntryComplete) et que les zones de te xte sont automatiquement mises jour a vec les valeurs correspondant ce nom. Si lutilisateur saisit un nom qui ne f ait 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 ligne 1, soit le titre des colonnes (v oir Figure 17.9).
Figure 17.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.

478

Excel et VBA

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 (ligne 2), le contrle Label lbNom v oit sa proprit Caption redfinie Socit et les contrles lbPrenom e 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 ( oir Figure 17.10).
Figure 17.10 Les libells Nom et Prnom, ainsi que la zone de texte Prnom sont affects par ltat de la case cocher Socit.

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

Chapitre 17

Bonus : exemple complet dapplication Excel

479

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 Cancel du lie un clic sur le bouton ou la frappe de la touche Echap (la proprit 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 Figure 17.11 est affiche. Si lutilisateur clique sur le bouton Oui, l procdure ContratFin est appele et linstruction End met fin au programme Placez la procdure ContratFin dans le module ContratsDivers. Elle est dclare publique de faon pouv oir tre appele partir de nimporte quel module du projet. Elle a pour fonction de librer la variable objet ClasseurAuteurs et de redfinir le curseu .
Figure 17.11 Demandez toujours une confirmation afin dvite une annulation du programme par erreur.

5. Code du bouton Ajouter Auteur


1: Private Sub CmdAjouterAuteur_Click() 2:

480

Excel et VBA

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

Chapitre 17

Bonus : exemple complet dapplication Excel

481

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 = "") 60: 61: ClasseurAuteurs.Sheets(1).Range("A" & Ligne).Value = Nom 62: ClasseurAuteurs.Sheets(1).Range("B" & Ligne).Value = Prenom 63: ClasseurAuteurs.Sheets(1).Range("C" & Ligne).Value = Adresse 64: ClasseurAuteurs.Sheets(1).Range("D" & Ligne).Value = Ville 65: ClasseurAuteurs.Sheets(1).Range("E" & Ligne).Value = CodePostal 66: ClasseurAuteurs.Sheets(1).Range("F" & Ligne).Value = Pays 67: 68: 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 (lignes 45 56) et RemplacerEntreeAuteur (lignes 58 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 xiste dj une entre dans le classeur a vec le mme nom et la mme adresse (lignes 3 24). En fonctio n du CreerEntreeAuteur ou Remplacerrsultat du contrle lune des deux procdures EntreeAuteur est appele. Le contrle seffectue laide dune boucle For...Next (lignes 7 24) qui contrle les entres du classeur de la ligne 2 la dernire ligne contenant des donnes. Le curseur est pralablement transform en sablier et un message est affich dans la barre dtat (lignes 5 et 6)

482

Excel et VBA

A chaque passage de la boucle, le programme contrle si les colonnes A et B de la ligne teste nont pas les mmes v aleurs que les noms et prnoms fournis dans les contrles cboNom et txtPrenom de linterface (ligne 8). Si tel est le cas, la barre dtat et le curseur retrouvent leurs v aleurs par df aut et lutilisateur se v oit proposer le remplacement des coordonnes de lauteur par celles entres dans la feuille (ligne 12), comme prsent la Figure 17.12. Si lutilisateur choisit le bouton Annuler, linstruction Exit de la ligne 14 entrane la sortie de la procdure. Sil rpond Oui, un message est nouv eau affich dan 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 v aleurs par dfaut, puis une instruction Exit entrane la sortie de la procdure.
Figure 17.12 Le programme vrifie quil nexiste pas dj une entre pour lauteur.

Si aucune entre semblable na t trouve, le programme atteint la ligne 25 sans que rien ne se soit pass. Le nouvel auteur est alors ajout sans quune interv ention de lutilisateur ne soit requise. La procdure CreerEntreeAuteur est appele ligne 31. Une fois lauteur ajout, la procdure appelante reprend la main et le classeur est tri et sauv egard (lignes 34 et 35). La zone de liste modifiable est ensuite mise jour (ligne 39). La procdure MiseAjourListeDeroulante qui prend en char ge la mise jour de liste droulante a t prsente plus haut (v oir 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, lignes 40 et 41, la barre dtat et le curseur retrou ent leur aspect par dfaut. 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, lignes 18 et 31, et les dclarations, lignes 45 et 58). Tandis que la proc-

Chapitre 17

Bonus : exemple complet dapplication Excel

483

dure CreerEntreeAuteur ajoute le nouvel auteur sur une ligne vide, la procdure RemplacerEntreeAuteur 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 10: MsgBox "Vous devez indiquer un prnom pour lauteur." & Chr(13) & _ 11: "Sil sagit dun contrat au nom dune socit, cochez la case correspondante", _ 12: vbOKOnly+vbInformation, "Informations incompltes" 13: txtPrenom.SetFocus 14: Exit Sub 15: ElseIf txtAdresse.Value = "" Then 16: MsgBox "Vous devez indiquer une adresse.", _ 17: vbOKOnly+vbInformation, "Informations incompltes" 18: txtAdresse.SetFocus 19: Exit Sub 20: ElseIf TxtCodePostal.Value = "" Then 21: MsgBox "Vous devez indiquer code postal.", _ 22: vbOKOnly+vbInformation, "Informations incompltes" 23: TxtCodePostal.SetFocus 24: Exit Sub 25: ElseIf TxtVille.Value = "" Then 26: MsgBox "Vous devez indiquer une ville.", _ 27: vbOKOnly+vbInformation, "Informations incompltes" 28: TxtVille.SetFocus 29: Exit Sub 30: End If 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

484

Excel et VBA

La procdure CmdSuite_Click vrifie la alidit des informations fournies par lutilisateur et af fecte ces v aleurs aux v ariables appropries. Lignes 3 30, une instruction conditionnelle est utilise pour vrifier que chaque zone de t xte a t complte. Si tel nest pas le cas, un message est af fich lattention de lutilisateur ( oir Figure 17.13), le focus est pass au contrle non renseign, et une instruction Exit entrane la sortie de la procdure. Notez le xpression conditionnelle de la ligne 9 qui vrifie si le prnom nes pas fourni ET si la case Socit nest pas coche.
Figure 17.13 Les donnes sont vrif es avant dtre affectes aux variables.

Si les donnes fournies sont v alides, la structure With...End With des lignes 33 43 affecte les v aleurs fournies aux espaces de stockage appropris de la v ariable publique MonAuteur. Notez que si le champ pays nest pas renseign (sil sagit de la France), lespace MonAuteur.Pays ne reoit pas de valeur. Sil est renseign, il reoit la valeur fournie prcde dun retour chariot. Vous verrez plus tard pourquoi. En ligne 44, 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 te xte 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 v ariable et quels sont le taux initial et lventuel deuxime taux, et au-del de combien de xemplaires celui-ci sapplique. Le cadre Avance devra permettre de prciser sil y a ou non une avance sur droits dauteur et, dans laffirmat ve, quelle est la valeur de cette avance. Enfin, lutilisateur d vra prciser si lavance sera opre en un ou en deux v ersements. Outre les boutons Annuler et Suite, un bouton Retour permettra de revenir la feuille prcdente.

Chapitre 17

Bonus : exemple complet dapplication Excel

485

La Figure 17.14 prsente la feuille fmContratConditions en mode Conception.

Figure 17.14 La feuille fmContratConditions en mode Conception.

Crez la feuille fmContratConditions en v ous fondant sur la Figure 17.14. Commencez par placer les deux contrles Frame principaux. A lintrieur du premier (Ouvrage), placez deux contrles TextBox et un contrle Label au-dessus de chacun de ceux-ci afin de 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 Spinaleurs. A droite du premier contrle TextBox, Button qui permettront den modifier les placez deux contrles Label sui vis dun autre contrle TextBox et dun dernier contrle Label. Enfin, placez un contrle Label droite de la seconde zone de te xte destine recevoir le taux des droits dauteur . Appuyez-vous sur la Figure 17.15 et sur le tableau sui vant pour dfinir les proprits Name de ces contrles. Notez que nous a vons spar le libell "%

486

Excel et VBA

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.
Figure 17.15 Le cadre Droits dauteur de la feuille fmContratAuteur.
chkTauxVariable txtTaux1 txtTaux2 spinTaux1 lbLabel lbVar1

txtNumEx

lbVar3 spinTaux2

lbVar2

Dans le cadre Avance, placez un contrle CheckBox sui vi 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 Feuille Valeur

Name Caption
Contrle Frame 1

fmContratConditions
Contrat dauteur

Caption
Contrle Frame 2

Ouvrage

Caption
Contrle Frame 2.1

Conditions de rmunration

Caption
Contrle Frame 2.2

Droits dauteur

Caption
Contrles du Frame 1 Contrle TextBox 1

Avance

Name
Contrle TextBox 2

txtTitre

Name

txtISBN

Chapitre 17

Bonus : exemple complet dapplication Excel

487

Proprit Contrle Label 1

Valeur Titre de louvrage

Caption
Contrle Label 2

Caption
Contrles du Frame 2.1 Contrle CheckBox

ISBN

Name Caption Value


Contrle TextBox 1

chkTauxVariable
Taux variable

False

Name Value
Contrle TextBox 2

txtTaux1
8

Name Value
Contrle TextBox 3

txtTaux2
8

Name Value Enabled


Contrle SpinButton 1

txtNumEx
4000

False

Name Value Min Max


Contrle SpinButton 2

spinTaux1
8 1 20

Name Value Min Max Enabled

spinTaux2
8 1 20

False

488

Excel et VBA

Proprit Contrle Label 1

Valeur

Name Caption Enabled


Contrle Label 2

Label1
% du prix public HT

True

Name Caption Enabled


Contrle Label 3

lbVar1
sur

False

Name Caption Enabled


Contrle Label 4

lbVar2
sur

False

Name Caption Enabled


Contrles du Frame 2.2 Contrle CheckBox

lbVar3
% du prix HT sur les ex. suivants

False

Name Caption Value


Contrle TextBox 1

chkAvance
Avances sur droit dauteur

True

Name Value
Contrle Label 1

txtAvance
10000

Name Caption
Contrle Label 2

lbAvance1
de

Name Caption

lbAvance2
F.

Chapitre 17

Bonus : exemple complet dapplication Excel

489

Proprit Contrle OptionButton 1

Valeur

Name Caption Value


Contrle OptionButton 2

optUnVersement
Un versement (parution)

False

Name Caption Value


Boutons de commande Contrle CommandButton 1

optDeuxVersements
Deux versements (parution et remise)

True

Name Caption Cancel


Contrle CommandButton 2

cmdAnnuler
Annuler

True

Name Caption
Contrle CommandButton 3

cmdRetour
Retour

Name Caption Default

CmdSuite
Suite

True

Placez ensuite le code suivant dans la fentre Code de la feuille :


1: Private Sub UserForm_Initialize() 2: TxtTitre.SetFocus 3: End Sub 4: 5: Private Sub chkTauxVariable_Click() 6: If chkTauxVariable.Value = True Then 7: LbVar1.Enabled = True 8: lbVar2.Enabled = True 9: lbVar3.Enabled = True 10: TxtTaux2.Enabled = True 11: SpinTaux2.Enabled = True 12: TxtNumEx.Enabled = True

490

Excel et VBA

13: Else 14: LbVar1.Enabled = False 15: lbVar2.Enabled = False 16: lbVar3.Enabled = False 17: TxtTaux2.Enabled = False 18: SpinTaux2.Enabled = False 19: TxtNumEx.Enabled = False 20: End If 21: End Sub 22: 23: Private Sub TxtTaux1_Change() 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

Chapitre 17

Bonus : exemple complet dapplication Excel

491

63: 64: Private Sub chkAvance_Click() 65: If chkAvance.Value = True Then 66: lbAvance1.Visible = True 67: lbAvance2.Visible = True 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 111: If TxtTitre.Value = "" Then 112: MsgBox "Vous devez indiquer un titre douvrage.", _

492

Excel et VBA

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: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164:

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 = "" TxtNumEx.SetFocus Exit Sub End If If txtAvance.Value = "" And chkAvance = True Then MsgBox "Vous devez indiquer une somme pour lavance sur droits dauteur.", _ vbOKOnly+vbInformation, "Informations incompltes" txtAvance.SetFocus Exit Sub End If

Chapitre 17

Bonus : exemple complet dapplication Excel

493

165: 166:

167: 168: 169: 170: 171: 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

If IsNumeric(txtAvance.Value) = False And chkAvance = True Then MsgBox "Lavance sur droits dauteur doit tre une valeur numrique.", _ vbOKOnly+vbInformation, "Informations incompltes" txtAvance.Value = "" txtAvance.SetFocus Exit Sub End If

La procdure dinitialisation (lignes 1 3) a pour seule fonction de passer le focus au contrle txtTitre. La procdure chkTauxVariable_Click (lignes 5 21) gre lvnement clic surv enant sur la case cocher Taux variable. Si la case est coche, les trois libells txtV txtVar2 ar1, et txtVar3 deviennent disponibles. Il en est de mme pour les zones de te xte txtTaux2 et le bouton toupie qui lui est attach (spinT aux2), ainsi que pour la zone de te xte txtNumEx (lignes 7 12). Si la case est dcoche, tous ces contrles sont dsacti vs (v oir Figure 17.16). Les procdures txtTaux1_Change et txtTaux2_Change (lignes 23 54) grent de f aon identique les modifications apportes aux zones de t xte destines rece voir les droits dauteur. Lignes 24 29 et 40 45, on vrifie que la aleur entre est une v aleur numrique. Dans le cas contraire, un message est affich lattention de lutilisateu , la valeur du contrle rinitialise et le focus lui est pass. Une instruction Exit entrane la sortie de la

494

Excel et VBA

Figure 17.16 Laccessibilit des contrles du cadre Droits dauteur dpend de ltat de la case cocher Taux variable.

procdure. Lignes 30 34 et 46 51, les mmes instructions sont appliques si la v aleur saisie nest pas comprise entre 1 et 20. Enfin, si la aleur entre est valide, les instructions des lignes 36 et 53 affectent la valeur entre par lutilisateur dans lune des zones de te xte au bouton toupie associ. Cela est indispensable pour que, lorsque lutilisateur clique sur le bouton toupie, la v aleur affiche dans la zone de t xte soit toujours en rapport a vec la valeur de cette zone au moment du clic.
Figure 17.17 La validit des taux de droits dauteur est contrle.

Les procdures des lignes 56 62 affectent la valeur des boutons toupie aux zones de texte associes lorsque lutilisateur clique sur lun deux. La procdure chkAvance_Click (lignes 64 78) gre les clics sur la case cocher Avance sur droits dauteur. Si la case est coche, les libells lbAvance1 et lbAvance 2 sont visibles (lignes 66 et 67). Il en est de mme pour la zone de te xte txtAvance. Enf n, les deux

Chapitre 17

Bonus : exemple complet dapplication Excel

495

boutons doption de viennent accessibles (lignes 69 et 70). Si la case est dcoche, le traitement inverse est appliqu ces contrles (voir Figure 17.18).
Figure 17.18 Ltat de la case cocher Avance sur droits dauteur inf ue 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. La procdure CmdRetour_Click des lignes 104 106 gre les clics sur le bouton Retour . Elle affiche la feuille fmContratAuteur. Notez que la feuille fmContratConditions nest pas masque. Si v ous souhaitez la masquer , ajoutez simplement linstruction Me.Hide devant linstruction fmContratAuteur.Show. Enfin, la procdure CmdSuite_Click gre les clics sur le bouton Suite. Lignes 110 171, la validit des donnes entres est contrle. Le reste de la procdure v alide les donnes en les affectant la variable MesConditionsAuteur. Lignes 111 123, on vrifie que les zones de t xte Titre et ISBN contiennent des informations. Si tel nest pas le cas, un message est affich lattention de lutilisateu , le focus est pass au contrle vide et une instruction Exit entrane la sortie de la procdure. Ligne 124 129, on vrifie que lISBN entr contient six caractres. Lignes 131 136, on vrifi quun taux a t prcis pour les droits dauteur dans le contrle txtT aux1. Linstruction conditionnelle des lignes 138 143 vrifie que si la case Taux v ariable est coche le second taux a bien t entr. Lignes 145 150, on contrle que si la case Taux variable est coche, le nombre de xemplaires touchs par le taux initial a t fourni. On vrifi ensuite si ce taux est une v aleur numrique (lignes 151 157). Enfin, lignes 159 170,

496

Excel et VBA

on vrifie que si la case Avance est coche, une v aleur a t fournie (lignes 159 164) et que cette valeur est une valeur numrique (lignes 165 171).
Figure 17.19 La validit des donnes est contrle.

Si les donnes fournies sont valides, la procdure atteint la ligne 173 sans quune instruction Exit nen ait entran la sortie. Les donnes sont alors af fectes aux diffrents soustypes de la v ariable MesConditionsAuteur laide dune structure With...End With. Remarquez linstruction conditionnelle utilise lignes 185 189 pour af fecter la valeur 1 ou 2 MesConditionsAuteur, selon que lun ou lautre des boutons doption est coch. Lignes 191 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 ren voyer la v aleur qui lui est passe sous forme de chane de caractres, pour les besoins du contrat. Placez la fonction RenvoyerChane dans le module ContratsDivers. 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"

Chapitre 17

Bonus : exemple complet dapplication Excel

497

Case 4 RenvoyerChaneValeur Case 5 RenvoyerChaneValeur Case 6 RenvoyerChaneValeur Case 7 RenvoyerChaneValeur Case 8 RenvoyerChaneValeur Case 9 RenvoyerChaneValeur Case 10 RenvoyerChaneValeur Case 11 RenvoyerChaneValeur Case 12 RenvoyerChaneValeur Case 13 RenvoyerChaneValeur Case 14 RenvoyerChaneValeur Case 15 RenvoyerChaneValeur Case 16 RenvoyerChaneValeur Case 17 RenvoyerChaneValeur Case 18 RenvoyerChaneValeur Case 19 RenvoyerChaneValeur Case 20 RenvoyerChaneValeur End Select End Function

= "quatre" = "cinq" = "six" = "sept" = "huit" = "neuf" = "dix" = "onze" = "douze" = "treize" = "quatorze" = "quinze" = "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

A ce stade , placez linstruction daf fi hage de la feuille fmContratConditions dans la procdure EditionContratAuteur et excutez cette dernire afin de vri fier que vot e programme ne contient pas derr eurs. Testez les dif frentes conditions en entr ant des donnes variables dans les interfaces. La pr ocdure EditionContratAuteur doit maintenant se prsenter comme suit :
Sub EditionContratAuteur() Set ClasseurAuteurs = GetObject("C:\Mes documents\Classeur Auteurs.xls") Set MonTableauWord = GetObject(, "Word.Application") If Err.Number <> 0 Then Err.Clear fmContratAuteur.Show fmContratConditions.Show End Sub

498

Excel et VBA

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 slectionne la date que lutilisateur v eut 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 retro erons les mmes boutons de commande que pour la feuille fmContratConditions, sa voir un bouton Annuler, un bouton Retour et un bouton Suite. La Figure 17.20 reprsente la feuille fmContratDates en mode Conception.

Figure 17.20 La feuille fmContratDates en mode Conception.

Chapitre 17

Bonus : exemple complet dapplication Excel

499

pel Rap

Le contrle Calendar ne fait pas partie des contrles standar d de la bote outils de Visual Basic Editor . P our un r appel de la pr ocdure permettant dajouter un contrle la bote outils, consultez la section "P ersonnaliser la bote outils" du Chapitre 12.

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. Dpo sez et dimensionnez le contrle Calendar. Dposez lextrieur du cadre les trois boutons de commande. Copiez les boutons de la feuille fmContratConditions et collez-les sur la feuille fmContratDates. Ainsi vous naur ez pas en r edfinir le proprits. Vous pouvez galement copier -coller les pr ocdures cmdAnnuler_Click et UserForm_QueryClose puisque celles-ci sont identiques dune feuille lautre.

ce Astu

Dfinissez les proprits des contrles comme indiqu dans le tableau su vant :
Proprit Feuille Valeur

Name Caption
Contrle Frame

fmContratDates
Dates de remise et de parution

Caption
Contrle TextBox 1

Indiquez la date valider et slectionnez-la sur le calendrier

Name Enabled
Contrle TextBox 2

txtRemise False

Name Enabled
Contrle ComboBox

txtParution False

Name Style

cboDateAValider 2 - fmStyleDropDownList

500

Excel et VBA

Proprit Contrle Label 1

Valeur

Caption
Contrle Label 2

Date de remise :

Caption
Contrle Label 3

Date de parution :

Caption
Contrle Calendar

Date valider :

Name
Contrle CommandButton 1

Calendrier

Name Caption Cancel


Contrle CommandButton 2

cmdAnnuler
Annuler

True

Name Caption
Contrle CommandButton 3

cmdRetour
Retour

Name Caption Default

CmdSuite
Suite

True

Ouvrez ensuite la fentre Code de la feuille et placez-y les procdures vnementielles reproduites ci-aprs :
1: Private Sub UserForm_Initialize() 2: cboDateAValider.AddItem ("Date de remise") 3: cboDateAValider.AddItem ("Date de parution") 4: cboDateAValider.ListIndex = 0 5: Calendrier.Value = Date+30 6: Calendrier.SetFocus 7: End Sub 8: 9: Private Sub Calendrier_Click() 10: If cboDateAValider.ListIndex = 0 Then

Chapitre 17

Bonus : exemple complet dapplication Excel

501

11: txtRemise.Value = Calendrier.Value 12: cboDateAValider.ListIndex = 1 13: Else 14: TxtParution.Value = Calendrier.Value 15: End If 16: End Sub 17: 18: Private Sub CmdAnnuler_Click() 19: Dim rep As Byte 20: rep = MsgBox("Etes-vous sr de vouloir annuler ldition du contrat en cours?", _ 21: vbYesNo+vbQuestion, "Annuler ldition de contrat?") 22: If rep = vbNo Then 23: Exit Sub 24: End If 25: Me.Hide 26: Call ContratFin 27: End 28: End Sub 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 40: End Sub 41: 42: Private Sub CmdRetour_Click() 43: fmContratConditions.Show 44: End Sub 45: 46: Private Sub CmdSuite_Click() 47: 48: Vrifier la validit des informations 49: If txtRemise.Value = "" Then 50: MsgBox "Vous devez spcifier une date de remise.", _ 51: vbOKOnly+vbCritical, "Contrat dauteur" 52: Exit Sub 53: ElseIf TxtParution.Value = "" Then 54: MsgBox "Vous devez spcifier une date de parution.", _ 55: vbOKOnly+vbCritical, "Contrat dauteur" 56: Exit Sub 57: ElseIf DateValue(TxtParution) - DateValue(txtRemise) <= 0 Then 58: MsgBox "Vous devez spcifier une date de remise antrieure la date de parution.", _ 59: vbOKOnly+vbCritical, "Contrat dauteur" 60: Exit Sub 61: ElseIf DateValue(TxtParution) - DateValue(txtRemise) < 40 Then 62: Dim continuer As Integer

502

Excel et VBA

63: 64: 65:

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

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

La procdure dinitialisation (lignes 1 7) ajoute les entres Date de remise et Date de parution la zone de liste modifiable (lignes 2 et 3), puis acti ve le premier lment de la liste (ligne 4). Ligne 5 et 6, la v aleur du calendrier est dfinie 30 jours de la date courant renvoye par la fonction Date, et le calendrier reoit le focus. La procdure Calendrier_Click (lignes 9 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 date choisie dans la zone de te xte correspondante (lignes 11 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 (ligne 12). Ainsi, lutilisateur na pas modifier lentre slectionne dan 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 (lignes 42 44) gre les clics sur le bouton Retour. Elle affiche la feuille fmContratConditions. Enfin, la procdure CmdSuite_Click (lignes 46 75) vrifie la alidit des dates indiques (lignes 48 68) et affecte ces valeurs aux variables appropries. Une seule instruction conditionnelle est utilise pour vrifier la alidit des dates. Lignes 49 56, on vrifie quune date de remise et une date de parution ont t prcises Si tel nest pas le cas, un message est affich lattention de lutilisateur et une instructio Exit entrane la sortie de la procdure (voir Figure 17.21). Lignes 57 60, on vrifie que la date de parution est postrieure la date de remise. O 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 est affich lattention de lutilisateur et une instruction Exit entrane la sortie de la procdure.

Chapitre 17

Bonus : exemple complet dapplication Excel

503

Figure 17.21 Les dates de remise et de parution doivent tre prcises.

Lignes 61 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 valider les Exit dates ou cliquer sur le bouton Non. Dans ce second cas de figure, une instruction (ligne 67) entrane la sortie de la procdure.
Figure 17.22 Les dates proposes sont compares laide de la fonction DateValue.

Ligne 70, la feuille est masque. Les dates fournies sont ensuite af fectes aux espaces de stockage appropris de la variable MesConditionsAuteur.
eil Cons

Placez linstruction daf fi hage de la feuille fmContratDates dans la pr ocdure EditionContratAuteur et e xcutez cette dernir e afin de vrifier que vo e programme ne contient pas derr eurs. La procdure EditionContratAuteur doit maintenant se prsenter comme suit :
Sub EditionContratAuteur() Set ClasseurAuteurs = GetObject("C:\Mes documents\Classeur Auteurs.xls") Set MonTableauWord = GetObject(, "Word.Application") If Err.Number <> 0 Then Err.Clear fmContratAuteur.Show fmContratConditions.Show fmContratDates.Show End Sub

504

Excel et VBA

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 te xte et un bouton toupie permettront de prciser le nombre de copies souhaites pour chaque impression. Enfin, nou retrouverons les trois boutons de retour, dannulation et de validation des feuilles prcdemment cres. La Figure 17.23 prsente la feuille fmContratImpression en mode Conception.

Figure 17.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 co her.

Chapitre 17

Bonus : exemple complet dapplication Excel

505

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 proprit des contrles comme indiqu dans le tableau suivant.
Proprit Feuille Valeur

Name Caption
Contrle Frame

fmContratImpression
Impression du contrat

Caption
Contrle CheckBox 1

Options dimpression

Name Caption Value


Contrle CheckBox 2

chk Imprimer
Imprimer les contrats

True

Name Caption Value


Contrle CheckBox 3

chkImprimessionContrat
Contrat auteur en

True

Name Caption Value


Contrle TextBox 1

chkImprimessionPaie
Fiches de paie en

True

Name Value
Contrle TextBox 2

txtQteContrat
2

Name Value

txtQtePaie
1

506

Excel et VBA

Proprit Contrle SpinButton 1

Valeur

Name Value Min Max


Contrle SpinButton 2

spinContrat
2 1 10

Name Value Min Max


Contrles Label 1 et 2

spinPaie
1 1 10

Caption
Contrle CommandButton 1

Exemplaires

Name Caption Cancel


Contrle CommandButton 2

cmdAnnuler
Annuler

True

Name Caption
Contrle CommandButton 3

cmdRetour
Retour

Name Caption Default

CmdTerminer
Terminer

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

Chapitre 17

Bonus : exemple complet dapplication Excel

507

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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:

ChkImpressionPaie.Enabled = False TxtQtePaie.Enabled = False SpinPaie.Enabled = False End If End Sub Private Sub ChkImprimer_Click() If ChkImprimer.Value = False Then ChkImpressionPaie.Enabled = False 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 Private Sub SpinPaie_Change() TxtQtePaie.Value = SpinPaie.Value End Sub

508

Excel et VBA

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:

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?", _ vbYesNo+vbQuestion, "Annuler ldition de contrat?") If rep = vbNo Then Exit Sub Me.Hide End End Sub

97: 98: 99: 100: 101: 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

Chapitre 17

Bonus : exemple complet dapplication Excel

509

111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127:

End End Sub Private Sub CmdRetour_Click() fmContratConditions.Show End Sub Private Sub CmdSuite_Click() With MonImpression .Imprimer = ChkImprimer.Value .ImprimerCourrier = ChkImpressionContrat.Value .ImprimerPaie = ChkImpressionPaie.Value .nbreCourrier = TxtQteContrat.Value .nbrePaie = TxtQtePaie.Value End With Me.Hide End Sub

La procdure dinitialisation de la feuille (lignes 1 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 ph ysiques. On interroge pour cela la v aleur de la variable MonAuteur.Societe qui a reu la v aleur True ou False lorsque lutilisateur a v alid la feuille fmContratAuteur. Si la v ariable ren voie la v aleur True, la case cocher chkImpressionPaie est dcoche (ligne 3), puis rendue inaccessible (ligne 4). La zone de te xte et le bouton toupie associs sont galement rendus inaccessibles (lignes 5 et 6). La procdure ChkImprimer_Click modifie ltat des contrles permettant de dfinir l lments imprimer et le nombre de copies raliser . Si le bouton est dcoch, les deux autres cases cocher sont dsactives (lignes 12 et 13), les deux zones de texte correspondantes sont verrouilles (lignes 14 et 15) et les deux boutons toupie associs ces dernires rendus inaccessibles (lignes 16 et 17). Dans le cas contraire, les instructions des lignes 19 29 se xcutent. Lignes 19 24, une structure conditionnelle imbrique acti ve les contrles permettant de dfinir le nombre dimpression des feuilles de paie, si l contrat nest pas tabli au nom dune socit. Les contrles serv ant dfinir limpression u contrat sont activs (lignes 25 28). Lignes 32 40, la procdure chkImpressionContrat_Click gre les clics sur la case correspondante. Elle acti ve ou dsacti ve laccs la zone de te xte et au bouton toupie correspondant, selon que la case est coche ou dcoche. Lignes 42 50, la procdure ChkImpressionPaie_Click ef fectue les mmes oprations pour la case cocher libelle Fiches de paie. Les deux procdures des lignes 52 58 af fectent la v aleur du bouton toupie la case SpinContrat ou correspondante lorsque lutilisateur clique sur lun des contrles spinPaie.

510

Excel et VBA

Lignes 60 75 et lignes 77 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 v aleurs 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 fmContrat-Dates. La procdure CmdRetour_Click des lignes 114 116 affiche la feuille fmContratDates. Enfin la procdure CmdSuite_Click des lignes 118 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 v a tre dit. Elle contient un seul bouton et un contrle Label. Ralisez cette feuille en v ous appuyant sur sa reprsentation Picture du de la Figure 17.24 (nous a vons af fect une image bitmap la proprit contrle). Dfinissez la proprit Caption du bouton de commande cmdOK.
Figure 17.24 Ouf !

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.

Chapitre 17

Bonus : exemple complet dapplication Excel

511

A 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.xls") 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

Ecriture des procdures ddition de documents


Les interfaces sont maintenant dv eloppes, les donnes stockes dans des v ariables. 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.

Edition 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.xls") 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

512

Excel et VBA

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 11: .Range("C2").Value = MonAuteur.Nom 12: End If 13: 14: .Range("C3").Value = MesConditionsAuteur.Titre 15: .Range("C4").Value = MesConditionsAuteur.ISBN 16: .Range("C6").Value = MesConditionsAuteur.remise 17: .Range("C7").Value = MesConditionsAuteur.Parution 18: .Range("C9").Value = MonAuteur.Adresse 19: .Range("C10").Value = MonAuteur.CodePostal 20: .Range("C11").Value = MonAuteur.Ville 21: .Range("C12").Value = MonAuteur.Pays 22: .Range("F15").Value = _ 23: MesConditionsAuteur.AvanceSurDroits / MesConditionsAuteur .NumPaiements 24: 25: If MesConditionsAuteur.NumPaiements = 1 Then 26: .Range("F30").Value = MesConditionsAuteur.Parution 27: Else 28: If feuillnum = 1 Then 29: .Range("F30").Value = MesConditionsAuteur.remise 30: Else 31: .Range("F30").Value = MesConditionsAuteur.Parution 32: End If 33: End If 34: If MesConditionsAuteur.TauxVariable = True Then 35: .Range("B32") = "Pour les " & _ 36: MesConditionsAuteur.NumExemplairesTaux1 & _ 37: " premiers ouvrages"

Chapitre 17

Bonus : exemple complet dapplication Excel

513

38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:

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

56: 57: 58: 59: enregistrement du classeur 60: ActiveWorkbook.SaveAs Filename:="C:\Mes Documents\" & _ 61: MesConditionsAuteur.ISBN & " " & MonAuteur.Nom & " " & _ 62: "Paie" & feuillnum & ".xls", FileFormat:=xlNormal 63: ActiveWorkbook.Close 64: Next feuillnum 65: End Sub

impression du classeur If MonImpression.Imprimer = True And MonImpression.ImprimerPaie = True Then ActiveWorkbook.PrintOut copies:=MonImpression.nbrePaie End If

Cette procdure utilise une boucle For...Next pour diter le nombre de feuilles de paie appropri, soit MesConditionsAuteur.NumPaiements. A chaque passage de la boucle, un classeur fond sur le modle P aiement.xlt est cr (ligne 6). 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. Lignes 7 34 une structure With...End With est utilise pour insrer les donnes appropries dans les cellules du classeur. Ligne 22, lavance sur droits dauteur est divise par le nombre de paiements. Lignes 25 33, une structure conditionnelle sert dfinir les dates de rglement : si un seul paiement est ef fectu, le rglement sopre la parution (ligne 26). Si le rglement est effectu en deux versements (lignes 27 33), le premier rglement est v ers lors de la remise (ligne 29) et le second lors de la parution (ligne 31). Lignes 35 50, une structure conditionnelle sert complter les informations concernant les taux des droits dauteur. Ligne 52, le calcul est forc sur les calculs ouverts. Lignes 55 57 le classeur est imprim. Les lignes 60 62 correspondent une seule instruction denregistrement. Le classeur est enregistr dans le dossier C:\Mes documents et a pour nom ISBN Nom Paie1.xls ou ISBN Nom Paie2.xls o ISBN est lISBN de louvrage, et Nom le nom de lauteur. Ligne 63, le classeur est ferm.

514

Excel et VBA

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.xls") 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 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 .AvanceSurDroits 18: .Cell(derligne, 6).Range.InsertAfter Date

Chapitre 17

Bonus : exemple complet dapplication Excel

515

19: 20: 21: 22: 23: 24:

.Cell(derligne, 7).Range.InsertAfter MesConditionsAuteur.remise .Cell(derligne, 8).Range.InsertAfter MesConditionsAuteur .Parution End With MonTableauWord.Save MonTableauWord.Close End Sub

Ligne 3, la v ariable MonTableauWord se v oit af fecter un document Word. Ligne 4, une ligne est ajoute au premier tableau de ce document, et le numro de cette ligne est stock dans la v ariable DerLigne la ligne sui vante. Lignes 6 21, une structure With...End With sert complter les cellules du tableau avec les valeurs appropries. Lignes 22 et 23, le tableau est enregistr puis ferm.
Telle quelle se prsente, cette application fonctionne. Pour la scuriser, vous devez cependant la tester dans des conditions dif frentes et mettre en place des g estionnaires derreur. De multiples conditions peuvent gnr er une err eur. Ce ser a par exemple le cas si un document utilis (le modle P aiement.xlt ou le document Contrats Auteur.doc par exemple) nest pas disponible, ou est en cours dutilisation par un autre utilisateur.

eil Cons

Annexe
Manipulation des chiers et des dossiers
Cette annexe prsente les mots cls ddis la gestion de fichiers et de dossiers. Manipu lez-les avec prudence afin de ne pas supprimer malencontreusement des fichiers imp tants !
Mots cls pour la manipulation des chiers et des dossiers

Mot cl

Description Change de dossier. Notez que le lecteur courant nest pas modi. Change de lecteur.

Exemple

ChDir path

ChDir "C:\Mes documents". Fait de C:\Mes documents le dossier actif. ChDrive "D:" Fait du lecteur D: le lecteur actif. CurDir.

ChDrive drive

Retourne le chemin du dossier en cours.

518

Excel et VBA

Mots cls pour la manipulation des chiers et des dossiers (suite)

Mot cl

Description Retourne le nom des chiers 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 chiers que lon veut retourner. Additionnez les valeurs suivantes pour dnir la valeur de attributes: vbNormal ou 0 : Fichiers sans attributs (valeur par dfaut). vbReadOnly ou 1 : Fichiers accessibles en lecture seule et chiers sans attributs. vbHidden ou 2 : Fichiers cachs et chiers sans attributs. vbSystem ou 4 : Fichiers systme et chiers 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 chiers sans attributs. Copie un chier un autre emplacement. source est le chier copier et destination lendroit o il doit tre copi. Notez que le nom du chier copi peut tre diffrent de celui du chier source. Attention : une erreur est gnre si vous tentez de copier un chier ouvert.

Exemple

Dir (pathname, attributes)

MyFile = Dir("*.doc", vbHidden). Retourne le premier chier possdant lextension .doc et lattribut "Fichier cach".

FileCopy source, destination

FileCopy "C:\toto.doc", "A:infos.doc" Copie le chier toto.doc sur le lecteur a: et sous le nom infos.doc.

FileDateTime (pathname) FileLen (pathname) FullName

Retourne les informations de date et dheure dun chier. Retourne la taille dun chier en octets. Retourne le nom complet dun chier (avec son chemin).

FileDateTime("C:\toto.doc") Retourne la date et lheure du chier toto.doc. FileLen("C:\toto.doc") Retourne la taille de toto.doc. ActiveDocument.FullName Retourne le nom complet du document actif.

Annexe Annexe

Manipulation des chiers et des dossiers

519

Mots cls pour la manipulation des chiers et des dossiers (suite)

Mot cl

Description Renvoie une valeur reprsentant les attributs dun chier, dun dossier ou dun volume. La valeur retourne est la rsultante de laddition de ces valeurs : 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 modi depuis la dernire sauvegarde (non disponible sur Macintosh). Cre un nouveau dossier. Retourne le nom dun chier (sans son chemin). Supprime un dossier.

Exemple

GetAttr (pathname)

MkDir path Name

MkDir "C:\MonDossier" Cre le dossier C:\MonDossier. ActiveDocument.Name Retourne le nom du document actif. RmDir "C:\MonDossier" Supprime le dossier C:\MonDossier. SetAttr "C:\toto.doc", vbHidden + vbReadOnly Affecte les attributs Fichier cach et Lecture seule au chier toto.doc.

RmDir Path

SetAttr pathname, attributes

Modie les attributs dun chier. Utilisez les mmes valeurs que pour la fonction GetAttr() pour dnir les attributs du chier. Si le chier est ouvert, une erreur est gnre.

Index

Symboles
&, oprateur de concatnation 172 *, oprateur arithmtique 179 +, oprateur arithmtique 179 -, oprateur arithmtique 179 /, oprateur arithmtique 179 =, oprateur relationnel 207 >, oprateur relationnel 207 >=, oprateur relationnel 207

Afficher barre doutils 120 bote outils 102 Explorateur dobjets 94 de projet 90 fentre Code 104 Proprits 116 UserForm 102 feuille 345 AfterUpdate, vnement 394 Aide VBA 96 touche F1 348 Ajouter un module 148 une procdure, bote de dialogue 152 Alignement, proprit 350 Aligner les contrles, commande 336 Ancrage des fentres 123 And, oprateur logique 246 Annuler une opration 431 Apparence des contrles Voir Proprits des contrles 350

A
Abs, fonction 258 Accelerator, proprit 373 Activate, vnement 434 Activation dune feuille de calcul 434 ActiveCell, proprit 69, 429 ActiveSheet, proprit 429 ActiveWorkbook, proprit 429

522

Excel et VBA

Appels de procdures 131, 161 Property Get 144 Property Let 147 Appels, pile (des) 289, 294 Application cration de procdures vnementielles de niveau 427 hte 5, 16, 86 objet 18, 426 dclaration et instanciation 426 mthodes 431 proprits 429 Arguments des fonctions 29 facultatifs 137 nomms 164 passage (d) 137 passer une procdure 163 passs 131 Arrt de lenregistrement, barre doutils 67 afficher/masquer 40 Excel 39 Arrt, mode 288 As, mot cl 138 Asc, fonction 259 Atn, fonction 258 Authentification Voir Scurit 438 Automation 17, 200 AutoSize, proprit 359 AutoTab, proprit 360 AutoWordSelect, proprit 360

de dfilement 429 Voir aussi ScrollBar 329 Barre de formule 429 BeforeDragOver, vnement 394 BeforeDropOrPaste, vnement 394 BeforeRightClick, vnement 434 BeforeUpdate, vnement 394 Bibliothque dobjets 17, 93 Excel 95 MSForms 95 Office 95 rfrencer 200 VBA 95 Bote outils 89, 323 afficher 102 ajouter des contrles 341 une page 343 contrle CheckBox 326 ComboBox 325 CommandButton 327 Frame 325 Label 323 ListBox 325 MultiPage 328 OptionButton 327 ScrollBar 329 SpinButton 330 TabStrip 328 TextBox 324 ToggleButton 327 personnaliser 341

B
BackColor, proprit 350 BackStyle, proprit 351 Barre dtat 429 doutils affecter une macro un bouton 309 afficher/masquer 120 Arrt de lenregistrement 39 Visual Basic Editor 119

Botes de dialogue afficher 229 InputBox 230, 234 MsgBox 236 dvelopper Voir Feuilles 319 Enregistrer sous 241 Enregistrer une macro 48 Excel 241 Macro 48 Ouvrir 241

Index

523

Boolean, type 23 BorderColor, proprit 351 BorderStyle, proprit 351 Boucles 206 Do Loop 210 For Each_Next 219 For_Next 214 imbriques 218 While_Wend 206 Boutons bascule Voir ToggleButton 327 doption Voir OptionButton 327 de commande Voir CommandButton 327 rorganiser 339 toupie Voir SpinButton 330 ByRef, mot cl 138 Byte, type de donnes numriques 178 ByVal, mot cl 138, 140

CDbl, fonction 197, 260 Cells, proprit 69

CDate, fonction 197, 260

CDec, fonction 197, 260 Cellule active 66, 429 modification dune valeur 434 Centrer les contrles 338 Chane de caractres comparer 275 concatner 268 les variables tableau 269 extraire une partie (dune) 272 longueur 273 manipuler 267 modifier 268 la casse 275 rechercher (au sein dune) 277 remplacer (au sein dune) 274 supprimer les espaces superflus 272 type de donnes 22 variables (de) 176 Change, vnement 395, 434 ChDir, instruction 517 CheckBox, contrle 326, 364, 414 valeur 355 CInt, fonction 197, 260 Chr, fonction 231, 259, 270 ChDrive, instruction 517

C
Cadre Voir Frame 325 Calcul forc 431 sur une feuille de calcul 434 Calculate vnement 434 mthode 431 Call, mot cl 161 Caption, proprit 351, 429 Caractre de continuit de ligne 155 de sparation 430 Case