vba visual basic pour applications pour word, excel, power point, access et com

Upload: zayneb-hamzi

Post on 15-Jul-2015

3.668 views

Category:

Documents


10 download

TRANSCRIPT

Dominique Maniez

Formation

VBAVisual Basic pour Applications pour Word, Excel, PowerPoint, Access et Outlook

FORMATION

VBA

Vos documents longs avec Word Ralisez efficacement vos mmoires, romans, thses, rapports... Dominique Maniez 192 p. Dunod, 2007.

Programmation et algorithmique en VBA pour Excel Anne Brygoo, Maryse Pelletier, Michle Soria et Sverine Dubuisson 240 p. Dunod, 2007.

FORMATION

VBA

Dominique ManiezDveloppeur, journaliste et universitaire

Toutes les marques cites dans cet ouvrage sont des marques dposes par leurs propritaires respectifs.

:

Dunod, Paris, 2007 ISBN 978-2-10-050872-3

Table des matiresAvant-propos . . . . . . . . . . . . . . . . . . . . . . XIII

Partie 1 Apprendre programmerChapitre 1 Quest-ce que programmer ? . . . . . . . . Plusieurs niveaux de programmation . . . . . . . . . Les langages de programmation . . . . . . . . . . . . La syntaxe . . . . . . . . . . . . . . . . . . . . . . . Les phases de conception dun La phase dtude pralable La phase danalyse . . . . La phase dencodage . . . La phase de test . . . . . La phase de production . programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5 6 7 8 8 9 10 10 10 13 14 14 15 17 18 21 23 26

Chapitre 2 Enregistrer une macro . . . . . . . . . . . Lenregistreur de macros . . . . . . . . . . . . . . . . Quand devez-vous enregistrer une macro ? . . . . Enregistrement de votre premire macro . . . . . . Excuter une macro . . . . . . . . . . . . . . . . . . O sont stockes les macros . . . . . . . . . . . . . . Comment assigner un raccourci clavier une macro ? . . . . . . . . . . . . . . . . . . . . . . Comment associer une icne une macro ? . . . . . . Conseils pour lenregistrement des macros . . . . . .

VI

Formation VBA

Le choix du nom des macros . . . . . . . . . . . . . . Les limitations de lenregistreur de macros . . . . . Enregistrement dune macro avec Excel . . . . . . . . Chapitre 3 Modifier le code des macros . . . . . . . . Voir le code de la macro . . . . . . . . . . . . . . . . Modifier le code de la macro . . . . . . . . . . . . .

27 29 32 37 38 47

Partie 2 Le langage VBAChapitre 4 Syntaxe de VBA . . . . . . . . . . . . . 55 55 56 57 58 63 65 68 70 73 73 76 79 80 82 82 83 85 88

Historique de VBA . . . . . . . . . . . . . . . . . . . Diffrences entre Visual Basic et VBA . . . . . . . . Syntaxe de VBA . . . . . . . . . . . . . . . . . . . . Variables . . . . . . . . . . . . . . . . . . . . . . . . Constantes . . . . . . . . . . . . . . . . . . . . . . . Oprateurs . . . . . . . . . . . . . . . . . . . . . . . Mots cls . . . . . . . . . . . . . . . . . . . . . . . . Instructions . . . . . . . . . . . . . . . . . . . . Chapitre 5 Variables et tableaux . . . . . . . . . . . Types de donnes . . . . . . . . Les dates . . . . . . . . . Les caractres . . . . . . . Les nombres . . . . . . . . Le type de donnes Variant Les erreurs de type . . . . . Les expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Visibilit des variables . . . . . . . . . . . . . . . . . Tableaux . . . . . . . . . . . . . . . . . . . . . . . .

Table des matires

VII

Chapitre 6 Tests conditionnels . . . . . . . . . . . . Les tests conditionnels . . . . . . . . . . If Then Else . . . . . . . . . . . . . Traiter plus de deux choix . . . . . . Oprateur logique dans une condition . . . . . . . . . . . . . . . . . . . . . . . . . . .

91 91 92 94 96 97 99 103 103 109 111 114 116 117 118 119 121 125 126 127 132 145 161 166

Imbriquer des tests conditionnels . . . . . . . . . . . Select Case . . . . . . . . . . . . . . . . . . . . . . . Chapitre 7 Boucles . . . . . . . . . . . . . . . . . . For Next . . . . . . . . . . . . . . . . . . . . . . . . Sortir de la boucle . . . . . . . . . . . . . . . . . While Wend . . . . . . . . . . . . . . . . . . . . . . Do Loop . . . . . . . Expression logique Null . . . . . . . Empty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Gare aux boucles infinies . . . . . . . . . . . . . . . Diffrences entre While et Until . . . . . . . . . . . Chapitre 8 Procdures et fonctions . . . . . . . . . . Procdures et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Syntaxe dune fonction . . . . . . . . . . MsgBox en dtail . . . . . . . . . . . Fonctions de Visual Basic par catgorie crire ses propres fonctions . . . . . . Les paramtres facultatifs . . . . . . .

Partie 3 Modles dobjetsChapitre 9 Objets . . . . . . . . . . . . . . . . . . . Dfinition dun objet . . . . . . . . . . . . . . . . . . 171 172

VIII

Formation VBA

Objets dans Office . . . . . . . . . . . . . . . . . . . Un objet en situation . . . . . . . . . . . . . . . . . crire des fonctions pour manipuler des objets . . . . Lexplorateur dobjets . . . . . . . . . . . . . . . . . Autres modles dobjets . . . . . . . . . . . . . . . . Chapitre 10 Programmer Word . . . . . . . . . . . . Objet Application . . . . . . . . . . . . . . . . . . . Objet Document . . . . . . . . . . . . . . . . . . . . Objet Range . . . . . . . . . . . . . . . . . . . . . . Objet Selection . . . . . . . . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . . . . . . . Pilotage dune application Office partir dune autre application . . . . . . . . . . . . . . . . . Chapitre 11 Programmer Excel . . . . . . . . . . . . Objet Application . . . . . . . . . . . . . . . . . . . Objet Workbook . . . . . . . . . . . . . . . . . . . . Objet Worksheet . . . . . . . . . . . . . . . . . . . . Objet Range . . . . . . . . . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . . . . . . . Chapitre 12 Programmer Access . . . . . . . . . . . Collections dAccess . . . . . . . . . . . . . . . . . . Objets dAccess . . . . . . . . . . . . . . . . . . . . . Objet DoCmd . . . . . . . . . . . . . . . . . . . . . Objet Form . . . . . . . . . . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . . . . . . . Apparition et remplissage dune liste par programmation . . . . . . . . . . . . . . . . Remplir un champ automatiquement . . . . . . . .

173 174 185 186 188 191 192 196 199 203 207 211 217 217 223 225 227 233 237 238 239 241 245 250 251 255

Table des matires

IX

Chapitre 13 ADO

. . . . . . . . . . . . . . . . . .

257 258 259 261 263 265 265 269 272 274 283 283 285 287 289 291 292 293 294 296 299 301 303 310 315 319 324

Installation dADO . . . . . . . . . . . . . . . . . . . Objets dADO . . . . . . . . . . . . . . . . . . . . . Objet Connection . . . . . . . . . . . . . . . . . . . Objet Recordset . . . . . . . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . Exemples Access . . . . . . . . . . . . Exemple Word . . . . . . . . . . . . . Exemple Excel . . . . . . . . . . . . . Exemples dutilisation dun fichier MDB sans Access . . . . . . . . . . . . . . Chapitre 14 Programmer Outlook . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . . . . . .

Modle dobjets . . . . . . . . . . . . . . . . . . . . . Objet MailItem . . . . . . . . . . . . . . . . . . . . . Objet MAPIFolder . . . . . . . . . . . . . . . . . . . Accs un sous-dossier partir de la Bote de rception . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . Envoyer un message partir dune BD Analyser tous les messages entrants . . Exporter les messages dans une BD . . Exporter les contacts dans une BD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Chapitre 15 Programmer PowerPoint . . . . . . . . . Objet Application . . . . . . . . . . . . . . . . . . . Collection Presentations . . . . . . . . . . . . . . . . Collection Slides . . . . . . . . . . . . . . . . . . . . Collection Shapes . . . . . . . . . . . . . . . . . . . Numros et numrations . . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . . . . . . .

X

Formation VBA

Chapitre 16 XML . . . . . . . . . . . . . . . . . . . Introduction . . . . . . . . . . . . . . . . . . . . . . De SGML XML en passant par HTML Histoire d'une norme . . . . . . . . Description de SGML . . . . . . . . Objectif de SGML . . . . . . . . . . Une DTD particulire : HTML . . . Description de XML . . . . . . . . . Objectifs de XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

329 329 330 331 332 333 334 337 337 339 343

XML en action . . . . . . . . . . . . . . . . . . . . . Le nouveau format des fichiers Office 2007 . . . . . .

Partie 4 Programmation VBA avanceChapitre 17 Crer des formulaires . . . . . . . . . . Exemple de UserForm pas pas . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . . . . . . . Cration du UserForm . . . . . . . . . . . . . . Chapitre 18 Grer des fichiers texte . . . . . . . . . 349 350 364 368 375 376 377 381 381 384 387 388 389 390

Objet FileSystemObject . . . . . . . . . . . . . . . . Objet TextStream . . . . . . . . . . . . . . . . . . . Mise en pratique . . . . . . . . . . . . . . . . . . . . Conversion de fichiers au format Vcard . . . . . . Crateur de fichiers batch . . . . . . . . . . . . . Chapitre 19 Programmer les API . . . . . . . . . . . Concept dAPI . . . . . . . . . . . . . . . . . . . . . Declare . . . . . . . . . . . . . . . . . . . . . . . . . Appel de fonction API . . . . . . . . . . . . . . . . .

Table des matires

XI

Mise en pratique . . . . . . . . . . . . . . . Lecture dun fichier WAV . . . . . . . . Lecture dun fichier Midi . . . . . . . . Rcuprer des informations sur la configuration vido . . . . . . . . Macro globale de recherche-remplacement

. . . . . . . . . . . . . . . . . . . . . . . . .

391 391 392 393 395 401 401 402 404 410 410 413 413 414 420 421 425 425 427 430 437

Chapitre 20 Dboguer un programme . . . . . . . . . Erreurs de programmation Erreurs de syntaxe . . Erreurs dexcution . Erreurs de logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Dbogage . . . . . . . . . . . . . . . . . . . . . . . . Dbogueur . . . . . . . . . . . . . . . . . . . Lancement du dbogueur . . . . . . . . . Fonctionnement du dbogueur . . . . . . . Visualisation des variables dans le dbogueur

Gestion des erreurs . . . . . . . . . . . . . . . . . . . Chapitre 21 Aller plus loin . . . . . . . . . . . . . . Organiser les macros . . . . . . . . . . . . . . . . . . Prendre de bonnes habitudes . . . . . . . . . . . . . Se documenter . . . . . . . . . . . . . . . . . . . . . Index . . . . . . . . . . . . . . . . . . . . . . . . . .

Avant-proposJutilise le traitement de texte Word depuis sa deuxime version sous DOS, ce qui signifie quentre les versions en mode texte et les versions sous Windows, jai connu une bonne dizaine de versions diffrentes. Jai toujours t fascin par la puissance de cet outil avec lequel je travaille quasi quotidiennement. Jai aussi trs vite dcouvert que la puissance intrinsque de Word pouvait tre dcuple par lutilisation dun mini-langage, baptis lpoque, macro-commandes. Il ntait pas rare de constater que quelques macro-commandes dune quinzaine de lignes pouvaient conomiser des heures de travail pnible. Lcriture de ces petits bouts de programme ncessitait parfois du temps mais on avait toujours la sensation, une fois la macro-commande finalise, davoir travaill plus intelligemment que si lon avait d raliser la tche accomplir manuellement. En fait, la plupart des utilisateurs de Word sont tellement absorbs par leur travail dcriture quils ngligent totalement de lire la documentation du produit et passent ct des fonctions les plus puissantes de ce traitement de texte. Le mme constat sapplique bien videmment Excel, ainsi quaux autres applications de la suite Office. En rdigeant ce livre, jai voulu dmontrer tous les utilisateurs dOffice quils se privent inutilement de la richesse fonctionnelle de leur traitement de texte, de leur tableur ou de leur base de donnes en ignorant la programmation. En vous apprenant programmer Word, Excel, Access, Outlook et PowerPoint, je souhaite premirement vous montrer que cette activit nest pas rserve aux professionnels de linformatique et, deuximement, vous faire gagner du temps dans lexcution des tches rptitives et fastidieuses.

XIV

Formation VBA

QUI SADRESSE CE LIVRE ?Cet ouvrage est un livre dinitiation et il ne ncessite donc aucune connaissance pralable en programmation ; il vise par consquent un public de dbutants. Il sadresse dabord aux utilisateurs de la suite Office qui souhaitent aborder lapprentissage de la programmation afin damliorer leur productivit. Les personnes utilisant Office et possdant dj une exprience de programmeur peuvent galement profiter de ce livre en faisant lconomie de la lecture des chapitres consacrs aux rudiments de la programmation. Cet ouvrage nest pas un ouvrage de rfrence en ce sens o il ne prtend absolument pas lexhaustivit ; de nombreuses informations sont sciemment passes sous silence afin de clarifier le propos et de ne pas semer la confusion dans lesprit du lecteur par un apport trop important de connaissances nouvelles ( titre dinformation, louvrage intitul Microsoft Word 2000 Language Reference comporte prs de 1 500 pages...). La dmarche pdagogique mise en uvre dans ce livre est similaire la mthode de programmation qui procde par raffinements successifs ; cette mthode reprend en fait un principe cartsien qui stipule quil faut commencer par les objets les plus simples et les plus aiss connatre, pour monter peu peu comme par degrs jusqu la connaissance des plus composs . La dernire partie de cet ouvrage proposera, ceux qui le souhaitent, des pistes pour quils puissent approfondir les sujets abords dans ces pages ou bien explorer dautres horizons plus complexes de la programmation sous Office.

POURQUOI APPRENDRE PROGRAMMER OFFICE ?Il peut paratre tonnant de se poser une telle question dans un ouvrage dinitiation la programmation Office. En effet, les gens qui souhaitent sinitier une discipline particulire connaissent en gnral trs bien leurs motivations. Pourtant, il existe tellement de malentendus au sujet de la programmation que jai souhait clarifier certains points et galement tordre le cou des ides reues qui sont fort rpandues. Je pense galement que de nombreuses personnes

Avant-propos

XV

nosent pas saventurer dans lapprentissage de la programmation par peur de ne pas y arriver. Dans cet avant-propos, je souhaite dculpabiliser tous ceux qui en ont envie, mais qui nosent pas sauter le pas. Quest-ce qui peut bien pousser un utilisateur de micro-ordinateur se lancer dans lapprentissage de la programmation ? Je vais ici faire un tour dhorizon de toutes les raisons qui peuvent influencer quelquun vouloir sinitier VBA qui est le langage de programmation dOffice. Quand jaurai termin linventaire de tous ces motifs, vous constaterez quils sont tellement nombreux quil ny a vraiment aucune raison valable de sen priver. La premire raison est dordre intellectuel. Apprendre programmer, cest devenir acteur du processus informatique. Quand on programme, on est moins passif devant sa machine et on acquiert une meilleure connaissance du fonctionnement matriel et logiciel de lordinateur. En mme temps, on acquiert certains types de raisonnements logiques qui peuvent servir dans dautres domaines que celui de la programmation. La deuxime raison est culturelle. Quand vous voulez comprendre la culture dun pays tranger, il est ncessaire de connatre les rudiments de la langue parle par les autochtones. Il en va de mme pour linformatique : vous devez apprendre un langage de programmation pour mieux comprendre la culture informatique qui, au fil du temps, a pntr tous les secteurs de la socit. La troisime raison est sociale. Aujourdhui, linformatisation de la socit est pousse lextrme et cest finalement un enjeu social que de comprendre comment les programmes fonctionnent. Nous sommes un certain nombre penser que la chose informatique ne doit pas tre lapanage des informaticiens. En apprenant un langage de programmation, vous empitez sur le territoire des informaticiens et vous vous attaquez ainsi leur toute puissance, ce qui est dmocratiquement sain car il est anormal quune caste dindividus ait autant de pouvoirs sans rendre de comptes personne. La quatrime raison est productiviste. La programmation, mme un niveau peu lev, va vous permettre de gagner un temps prcieux, surtout si vous accomplissez des tches rptitives. En effet, lautomatisation des tches va augmenter votre productivit, parfois dans des

XVI

Formation VBA

proportions que vous nimaginez mme pas. Outre le gain de temps, vous allez galement vous affranchir des tches pnibles et pouvoir ainsi vous consacrer des tches plus nobles. Au final, vous constaterez que lamlioration est non seulement quantitative, mais galement qualitative. La dernire raison est quen programmant vous allez pouvoir bnficier dun logiciel sur mesure car vous allez crer tout ce qui vous manque. Les possibilits de paramtrage dOffice sont dj importantes, mais en programmant, vous allez contrler exactement les traitements de votre systme dinformation. Apprendre programmer ouvre des horizons quasiment infinis et il est bien difficile dtre exhaustif si on veut inventorier toutes les applications pratiques. Nous nous contenterons ici de quelques exemples. En matrisant les rudiments de la programmation, vous allez dj pouvoir inventer des commandes et des fonctions qui nexistent pas dans le logiciel (par exemple des fonctions dExcel qui vous manquent). Vous allez pouvoir galement contrler la validit des informations qui sont saisies dans Word, Excel ou Access. Dans tous ces logiciels, il est extrmement facile de saisir des donnes mais ds que lon veut exercer un contrle minimal sur les informations qui sont saisies, il faut avoir recours la programmation. Et si on rflchit bien, on saperoit quil est inutile de traiter des donnes par de savants calculs si on na pas pris la prcaution de sassurer de la validit de ces informations. De la mme manire, si vous dveloppez des modles qui doivent tre utiliss par dautres, la programmation vous aidera dfinir des crans daide spcifiques ou bien des formulaires de saisie personnaliss qui faciliteront la tche de ceux qui doivent entrer les informations. Enfin, et cest ce qui est sans doute le plus simple, vous automatiserez tous les traitements rptitifs. Cest dailleurs souvent dans lautomatisation des tches banales que la programmation se rvle dune efficacit maximale, et lapprenti programmeur est toujours tonn du gain de productivit fantastique que peuvent lui procurer quelques lignes de code.

Avant-propos

XVII

Ainsi, aprs avoir lu cet ouvrage : vous aurez une bonne ide de ce quest la programmation ; vous matriserez les concepts de base de la programmation ; vous saurez crire de petits programmes sous Office ; vous aurez tordu le cou des mythes encore vivaces ; vous pourrez vous lancer dans lapprentissage dun langage de programmation plus puissant.

Importance des exemples de code Il est impossible de concevoir un ouvrage traitant de la programmation Office sans de nombreux exemples de code car, si lon apprend programmer en programmant, on tudie galement la programmation en examinant le code de programmes crits par dautres. Imprimer le code de tous les exemples au sein de cet ouvrage ne serait gure raisonnable car cela prendrait une place considrable ; il est dautre part prouv que la recopie dun listing imprim engendre de nombreuses erreurs de retranscriptions. Cest pour cette raison que ne sont imprims dans ce livre que de courts exemples ou bien des extraits de programmes plus longs. Cependant, il faudra absolument que vous vous procuriez la totalit des exemples de code de cet ouvrage qui sont disponibles sur Internet sur le site des ditions Dunod ladresse suivante : www.dunod.com ou bien sur mon site personnel (dans la rubrique Code des ouvrages) ladresse suivante : www.cosi.fr

UN OUVRAGE VRAIMENT CONU POUR LES DBUTANTSCest peut-tre parce que je narrivais pas trouver les livres que javais envie de lire que je me suis mis en crire. Cela ne veut pas dire que mes livres sont meilleurs que les autres, mais tout simplement quils correspondent mieux ce que je recherche. Quand jai commenc apprendre programmer, il y a de cela une vingtaine dannes, jai dvor des dizaines de livres sur le sujet. Mme aujourdhui, quand japprends un nouveau langage de program-

XVIII

Formation VBA

mation, je lis des ouvrages de programmation. Aprs toutes ces annes passes lire cette littrature technique sur la programmation, je suis arriv la conclusion quil nexistait pas vritablement douvrage conu pour les dbutants qui ny connaissent rien du tout. Les livres de programmation sont avant tout conus pour les informaticiens ; cette dmarche peut se comprendre dans la mesure o la plupart des informaticiens programment, mais comme notre credo est que tout le monde peut programmer et que la programmation ne doit surtout pas tre rserve aux informaticiens, il existe un vritable problme pour les lecteurs qui ne sont pas informaticiens, mais qui souhaitent nanmoins sinitier la programmation. Ce livre a donc pour but de sadresser aux gens qui ny connaissent vraiment rien et qui veulent dcouvrir les joies (et les peines) de la programmation avec Office. Cet objectif implique que la pdagogie mise en uvre dans cet ouvrage prenne vritablement en compte le caractre nophyte du lecteur. Je ne prendrai quun seul exemple qui illustre bien cette diffrence de traitement pdagogique ; dans les livres de programmation, il est ncessaire dapprendre la syntaxe (cest--dire la grammaire) du langage de programmation tudi. En gnral, tous les livres commencent par dcrire la syntaxe formelle, puis prennent des exemples. Nous sommes persuads que cette mthode ne fonctionne pas avec des dbutants qui ne sont pas habitus au formalisme de la description de la syntaxe du langage. Nous pensons au contraire quil faut commencer par les exemples et ventuellement passer au formalisme aprs avoir tudi de nombreux exemples.

POURQUOI APPRENDRE LA PROGRAMMATION DE CINQ LOGICIELS EN MME TEMPS ?Dans les premires versions dOffice, chaque logiciel de la suite avait son propre langage et les langages de programmation taient donc incompatibles entre eux ; ainsi, par exemple, Word Basic ntait pas compatible avec Access Basic. Avec lavnement dOffice 2000, Microsoft a ralis un effort considrable dharmonisation et dsormais, VBA (Visual Basic pour Applications) est lunique langage de programmation de la suite. Ce qui signifie que quand japprends programmer Word, je sais programmer la fois Excel, Access, Out-

Avant-propos

XIX

look et PowerPoint. Lunicit de ce langage est un progrs norme et cest pour cette raison quil serait dommage de se limiter lapprentissage de la programmation dun seul logiciel quand il est si facile de passer dun logiciel lautre. Lapprentissage de VBA reprsente donc un trs bon investissement car, si vous nutilisez, par exemple, que Word et Excel, vous pourrez trs facilement apprendre la programmation Access tant donn que le langage est rigoureusement le mme. Le fait quOffice propose un mme langage pour toutes ses applications est rellement un avantage dterminant et nous pensons quil va inciter plus dun utilisateur se lancer dans laventure de lapprentissage de la programmation VBA.

COMMENT APPRENDRE A PROGRAMMER OFFICE ?Au risque de rappeler une vidence, pour apprendre programmer Office, il faut dj apprendre Office. Cette vrit premire mrite dtre rpte tant on a vu dutilisateurs se lancer dans lapprentissage de la programmation sans matriser les fonctionnalits lmentaires de Word (comme par exemple, les styles, les modles ou bien encore les tableaux), dExcel (criture dune formule, adresse relative ou absolue, etc.) ou dAccess (cration de tables, de requtes ou de formulaires). Si vous pensez que vos connaissances dOffice sont imparfaites, il faudra donc les approfondir et nous vous conseillons pour ce faire la lecture des ouvrages consacrs aux applications de la suite Office, la collection Au quotidien chez Microsoft Press constituant un bon point de dpart. Une fois que ces connaissances sont acquises, il faut apprendre le langage de programmation VBA et le modle dobjets des applications Office. Nous emploierons ici souvent lanalogie avec lapprentissage des langues vivantes et lambition de ce livre est donc de vous enseigner la syntaxe (le langage VBA) et le vocabulaire (le modle dobjets) de chacun des logiciels de la suite afin que vous puissiez crire vous-mme rapidement des programmes.

XX

Formation VBA

Il existe cependant une difficult importante quand on veut apprendre une langue trangre : par o commencer ? La tche semble immense (elle lest rellement) et la logique voudrait quavant de sexprimer on commence par matriser la grammaire et le lexique. Mais cette approche pdagogique est bien peu efficace et chacun dentre nous se rend bien compte que lon apprend une langue en la pratiquant, la thorie ne pouvant venir que dans un deuxime temps. Nous allons donc apprendre programmer en programmant et nous tudierons la thorie seulement quand nous en aurons rellement besoin.

QUELLE VERSION DOFFICE FAUT-IL UTILISER AVEC CE LIVRE ?Cet ouvrage couvre le langage de programmation des versions dOffice allant de la version 2000 la version 2007. Outre sa dnomination commerciale, chaque version dOffice comporte un numro de version interne quil est prfrable de connatre. Le tableau suivant tablit la correspondance entre ces deux dnominations :Appellation commerciale Office 2000 Office XP Office 2003 Office 2007 Numro de version 9 10 11 12

Office 2007 introduit quelques diffrences notables entre les prcdentes versions dOffice du point de vue de la programmation. Ces diffrences sont signales dans cet ouvrage par des encadrs labelliss Nouveaut Office 2007.

Dominique MANIEZ, le 24 dcembre 2006.

PARTIE 1

Apprendre programmer

1Quest-ce que programmer ?Nombreux sont ceux qui pensent que cest la connaissance de la programmation qui fait la diffrence entre linformaticien et lutilisateur averti. Ainsi, de nombreux utilisateurs chevronns du traitement de texte craignent de se lancer dans lapprentissage de la programmation en pensant quil sagit l dun monde qui leur est inaccessible. Lambition de ce livre est de dmontrer quils ont tort et que la programmation, aborde en douceur et avec pdagogie, nest pas lapanage des professionnels de linformatique ; en effet, lutilisateur lambda, sil matrise les bases de la logique, peut apprendre aisment programmer. Cette entreprise est la porte de tous et cet ouvrage prtend dmythifier la programmation, en montrant tout dabord que cette discipline de linformatique repose sur des techniques que chacun utilise dans la vie courante. Cela signifie que, comme Monsieur Jourdain faisait de la prose sans le savoir, vous avez dj programm, mme si vous lignorez. Nous dfinirons tout dabord la programmation comme lart dcrire des programmes et nous dirons quun programme est une suite dinstructions. Le Grand Robert donne une dfinition plus complte que je vous livre ci-dessous : Ensemble ordonn des oprations ncessaires et suffisantes pour obtenir un rsultat ; dispositif permettant un mcanisme d'effectuer ces oprations.

4

Chapitre 1. Quest-ce que programmer ?

Cette dfinition introduit la notion importante de rsultat ; on programme toujours un ordinateur pour aboutir un rsultat. Nous reviendrons plus loin sur cet aspect non ngligeable de la programmation. On peut donc dire que lorsque vous crivez une suite dinstructions, vous rdigez un programme. En fait, la ralisation en squence dune liste dordres est une opration assez banale dans la vie quotidienne et quand, par exemple, on ralise une recette de cuisine, on excute un programme. Voici une recette facile raliser que je vous recommande personnellement : Gougre bourguignonne (pour 16 choux) Verser dans une casserole 25 cl deau, 100 grammes de beurre coup en morceaux, du sel, du poivre et une pince de noix de muscade rpe. Faire chauffer pour porter ce mlange bullition. Ds que le mlange bout, retirer la casserole du feu et verser dun seul coup 150 grammes de farine ptisserie. Mlanger avec une spatule jusqu obtenir une pte homogne. Attendre que la pte ne dgage plus de vapeur. Ajouter un un quatre ufs. Si les ufs sont trs gros, najouter que trois ufs. Incorporer la prparation 300 grammes de gruyre rp. Avec cette prparation, faire des choux de taille moyenne et les dposer sur une plaque ptisserie beurre et farine. Faire cuire 30 minutes dans un four 250. Dans cette recette de cuisine qui est la porte de tous, on trouve en fait une bonne partie des concepts de la programmation que nous tudierons tout au long de cet ouvrage, comme les boucles, les tests conditionnels et les fonctions. Si vous ntes pas trs port sur la gastronomie et que cet exemple ne vous dit pas grand-chose, vous avez sans doute dj ralis le montage dun meuble en kit ; cette opration sapparente galement la ralisation dun programme informatique. Si vous commencez rflchir certaines oprations de la vie quotidienne, vous vous rendrez alors compte quil existe de nombreuses activits o lon doit reproduire en squence toute une srie dactions afin daboutir un rsultat. Prendre son petit-djeuner le matin ou bien se laver les dents sont

Plusieurs niveaux de programmation

5

en gnral des activits qui sont parfaitement codifies et que vous accomplissez tous les jours sans vous poser de questions. Pourtant, au sens informatique du terme, il sagit de programmes que vous excutez. Programmer consiste crire le scnario complet de ces activits pour arriver un rsultat toujours identique ; dans le cas du petitdjeuner, le but est dingrer des aliments qui apporteront suffisamment de calories pour vous permettre de tenir le coup jusquau repas de midi. Excuter un programme consiste effectuer les unes aprs les autres les diffrentes instructions dun scnario qui bien videmment dans la vie courante na pas besoin dtre crit : prendre le tube de dentifrice, ouvrir le tube, taler la pte sur la brosse dents, refermer le tube, etc. Grce ces exemples extraits de la vie quotidienne, on constate facilement que la logique et les concepts de la programmation nous sont en fait trs proches. Il ny a donc pas lieu de redouter la programmation informatique car nous en possdons la plupart de ses mcanismes ; les seules choses qui vont changer sont le but que lon va assigner au programme et le langage qui va permettre de dcrire le droulement des oprations excuter.

PLUSIEURS NIVEAUX DE PROGRAMMATIONDe la mme manire quil existe des recettes plus ou moins compliques, il existe plusieurs niveaux de programmation. On peut considrer que le premier niveau de programmation dans Office consiste ni plus, ni moins, paramtrer le logiciel afin quil rponde nos exigences particulires. Ainsi, le simple fait de renseigner la bote de dialogue des options de Word est une programmation basique dans la mesure o lon va donner des instructions Word pour quil se comporte de la manire souhaite (par exemple, afficher les codes de champ). Le deuxime niveau est lautomatisation de certaines tches rptitives grce la sauvegarde des oprations accomplies les unes la suite des autres : on parle alors de macro-commandes (ou macros). Il existe certains logiciels (notamment Word, Excel et PowerPoint) qui permettent denregistrer la squence des oprations que vous tes en

6

Chapitre 1. Quest-ce que programmer ?

train de raliser et qui vous autorisent ensuite rejouer cette squence quand vous le dsirez. Cest un peu le principe du magntoscope : vous enregistrez et vous rejouez autant de fois que vous le voulez et quand vous le voulez. Le troisime niveau est lcriture de fonctions qui sont absentes du logiciel que vous utilisez, que ce soit le systme dexploitation ou bien, par exemple, un des logiciels de la suite Office. Imaginons que vous ayez souvent besoin dans Excel de convertir des valeurs exprimes en minutes en valeurs exprimes en heures ; ainsi la valeur 230 devra tre convertie en 3 heures et 50 minutes . ma connaissance, une telle fonction nexiste pas dans Excel et vous pouvez, laide du langage de programmation dOffice, crire votre propre fonction de conversion et faire en sorte que votre programme devienne une nouvelle fonction intgre dExcel. Le dernier niveau est lcriture de programmes complets prenant en charge une tche complexe, par exemple un logiciel de facturation. Le programme prend en compte tous les aspects dune application : linterface utilisateur (les botes de dialogue et les formulaires de saisie), les calculs et les impressions. Un programme consiste donc en une squence dinstructions ncessaires pour atteindre un but. Avant dcrire un programme, il faut toujours dterminer prcisment le but atteindre et chacun comprendra que plus lobjectif est complexe, plus le programme sera long et difficile crire.

LES LANGAGES DE PROGRAMMATIONLa recette de cuisine cite plus haut est rdige en langage naturel (en loccurrence le franais) alors que les programmes informatiques scrivent laide de langages de programmation. De la mme manire que les langues vivantes sont censes obir des rgles de grammaire, les langages de programmation suivent des rgles que lon nomme syntaxe. Cependant, les langues naturelles tolrent assez bien les approximations et la phrase Je kiffe grave la fille que je sors avec sera comprise par tout le monde (pour ceux que cette formulation ne choque pas, nous signalons, toutes fins utiles, que

La syntaxe

7

lon doit dire en bon franais Je kiffe grave la fille avec qui je sors ). En revanche, les langages informatiques sont beaucoup plus puristes et pointilleux, si bien que la moindre omission dune virgule, dune parenthse ou bien dun point sera immdiatement sanctionne. Le caractre strict de la syntaxe dun langage informatique est parfois mal vcu par les apprentis programmeurs ; il faut bien comprendre que lordinateur, la diffrence dun tre humain, ne peut pas interprter les mots qui manquent et les phrases mal construites. Larchitecture binaire dun ordinateur a pour consquence quun programme est syntaxiquement correct ou incorrect et quil ne peut pas y avoir de juste milieu. Un programme peut donc planter, cest--dire sarrter brutalement, parce que vous avez oubli un point-virgule dans le code. On appelle code ou code source, voire source, lensemble des lignes dun programme et encoder ou coder le fait de transcrire les actions excuter dans un langage informatique.

LA SYNTAXELe code dun programme est compos de phrases lmentaires appeles lignes dinstruction. Chaque ligne dinstruction doit excuter une action comme afficher un message lcran, additionner deux nombres, lire une valeur stocke dans un fichier, etc. Chaque langage de programmation possde sa propre syntaxe, cest--dire ses propres rgles dcriture. Les lignes dun programme doivent tre crites avec le vocabulaire du langage de programmation qui comprend un nombre de mots fini. Comme dans une langue naturelle, il existe plusieurs catgories de mots (verbe, adjectif, conjonction de coordination, etc.) dans un langage de programmation et nous apprendrons, au fur et mesure de notre progression, ces diffrents types de mots. Tout comme un nonc humain, une instruction peut tre ambigu et il convient tout prix dviter les ambiguts. Ainsi, le rsultat de linstruction qui effectue le calcul suivant : x=2+3*4

8

Chapitre 1. Quest-ce que programmer ?

parat incertain car on ne sait pas si x vaut 20 ou 14. La simple utilisation de parenthses lvera, dans le cas prsent, lambigut. En ralit, la plupart des langages de programmation considreront quil ny a pas dambigut dans cette formule de calcul car loprateur de la multiplication est prioritaire sur celui de laddition. Les oprateurs mathmatiques (+, -, * et /) ont un degr de priorit les uns par rapport aux autres qui dtermine lordre dans lequel les oprations mathmatiques sont effectues.

LES PHASES DE CONCEPTION DUN PROGRAMMEQuel que soit le langage employ pour crire un programme, il existe une mthodologie pour le rdiger. On a lhabitude de dcomposer lcriture dun programme en diffrentes phases.

La phase dtude pralableSil fallait rsumer cette premire tape par une maxime, nous proposerions : rflchir avant dagir ! . En effet, avant dcrire un programme quelconque, la premire des choses faire est dteindre son ordinateur et de rflchir. On peut notamment commencer par se poser les questions suivantes : Quel est lobjectif de ce programme ? Nest-il pas plus rapide de raliser cet objectif manuellement ? Cet objectif a-t-il rellement un intrt ? Ce programme nexiste-t-il pas dj sous une autre forme ? Ce programme est-il ralisable ? La ralisation de ce programme nest-elle pas trop coteuse ?

Bien videmment, il existe de nombreux cas o vous pourrez crire un programme sans vous poser toutes ces questions. Ainsi, quand vous voudrez rdiger un programme trs simple pour automatiser une tche prcise qui nest pas complexe, vous pourrez foncer bille en tte. En revanche, ds que le projet de programmation devient un peu plus ambitieux, il vaut vraiment mieux se poser des questions avant de programmer. Cette manire de faire sapparente (ou devrait sapparen-

Les phases de conception dun programme

9

ter) la pratique des informaticiens professionnels. En tant quamateur, vous pensez peut-tre pouvoir vous dispenser de toute cette rigueur qui est lapanage du professionnel. Nous pensons que vous auriez tort dagir de la sorte. On peut programmer en dilettante tout en adoptant une dmarche professionnelle ; cela nest pas contradictoire ! En fait, la programmation est une discipline exigeante et si lon ne respecte pas un minimum les rgles du jeu, on risque de ne pas arriver au but que lon stait assign, ce qui engendrera dconvenues et frustrations. De trs nombreux projets informatiques ne sont pas mens jusquau bout car on a nglig la phase de dfinition de lobjectif du logiciel. Si cette description nest pas assez complte, tout ldifice risque dtre compromis. Ne perdez jamais de vue que lon ne programme pas pour programmer, mais toujours pour atteindre un but. Quand un architecte dessine les plans dune maison, il doit avoir une ide prcise de ce que souhaite son client.

La phase danalyseUne fois que lon a lassurance que le projet de programmation est ralisable, il faut rflchir la structuration du programme. Linformatique tant la science du traitement automatis de linformation, un programme nest jamais quun processus de transformation dinformations. Il convient donc dinventorier toutes les informations dont le programme a besoin au dpart et toutes les informations dont il aura besoin en sortie. Quand on possde toutes ces donnes, il faut dcrire les algorithmes qui permettront de transformer les informations disponibles en entre afin de produire les informations disponibles en sortie. Un algorithme est lensemble des rgles opratoires qui permettent deffectuer un traitement de donnes ; ce procd dcrit formellement toutes les tapes dun calcul qui doit fonctionner dans tous les cas de figure. Par exemple, lalgorithme pour trouver si un nombre entier est pair est trs simple : Diviser le nombre entier par 2,

10

Chapitre 1. Quest-ce que programmer ?

Si le reste de la division est 0, le nombre est pair, Sinon, le nombre est impair. On peut alors dcrire tout le droulement du programme dans un langage quasi naturel que lon appellera pseudo-code. Voici un exemple de pseudo-code qui permet dappliquer un tarif rduit pour les mineurs : Demander lutilisateur sa date de naissance, Si lutilisateur a moins de 18 ans, Diviser le prix par deux, Sinon appliquer le prix normal.

La phase dencodageUne fois que lanalyse est termine, il faut transcrire le pseudo-code dans un langage de programmation. Les phases dtude et danalyse sont indpendantes de tout langage de programmation et le choix de ce dernier peut se faire au moment de lencodage. Plus la phase danalyse a t pousse, plus lencodage sera simple. La plupart des problmes de programmation proviennent dune analyse trop succincte, voire dune absence totale danalyse.

La phase de testQuand lencodage est achev, il faut tester le programme car il est excessivement rare quun programme, sauf sil est trs court et extrmement simple, fonctionne correctement du premier coup. Les causes derreur sont multiples et un chapitre de cet ouvrage est consacr leur tude. Quand les tests permettent de mettre en vidence des erreurs, il faut revenir en arrire et retourner, en fonction de la gravit de lerreur, la phase danalyse (erreur de conception) ou dencodage (erreur de programmation).

La phase de productionUne fois que le programme parat exempt derreurs (ce nest malheureusement souvent quune illusion...), on peut envisager de le diffuser auprs des utilisateurs.

Les phases de conception dun programme

11

Le cycle de vie du logiciel nest pas pour autant termin car il est fort probable que certains utilisateurs trouvent des bugs (erreurs de programmation) qui nauront pas t dtects lors des phases de tests ou bien que dautres utilisateurs demandent au programmeur des amliorations ou de nouvelles fonctionnalits. Il faudra alors se relancer dans une analyse, voire repartir de zro si les modifications souhaites sont trop importantes...

CONCLUSIONUn programme doit avoir un but bien dtermin et la programmation consistera crire les instructions permettant de raliser un objectif. Avant de commencer programmer, il faut bien rflchir la structure du programme et inventorier les informations qui sont manipules par le programme. Apprendre programmer, cest apprendre un langage de programmation qui est compos dun vocabulaire (une liste de mots finie dont on peut consulter chaque dfinition dans laide en ligne) et dune syntaxe (la manire dagencer les mots). Programmer nest pas difficile si lon a lesprit un tant soit peu logique et si lon respecte rigoureusement la syntaxe du langage de programmation que lon utilise, car la moindre erreur de syntaxe peut bloquer le programme.

2Enregistrer une macroLa documentation de Word dfinit une macro comme une srie de commandes et dinstructions regroupes au sein dune mme commande afin dexcuter automatiquement une tche. Pour Excel, une macro est une srie de commandes et de fonctions stockes dans un module Visual Basic, qui peut tre excute chaque fois quon doit accomplir cette tche. Nous allons voir dans ce chapitre quil est trs simple dcrire ses premires macros en utilisant lenregistreur de macros. Il y a une vingtaine dannes, une poque o lon abrgeait moins les mots, Microsoft inventa pour ses logiciels Word et Multiplan le concept de macro-commande. Il sagissait de la possibilit de mmoriser les touches frappes au clavier, les options slectionnes et les commandes excutes afin de les rutiliser plus tard. Lutilisateur avait donc la possibilit denregistrer une suite de commandes du logiciel pour automatiser les actions les plus rptitives. Mais lcriture de macro-commandes tait assez complexe et le mini langage de programmation qui accompagnait Word et Multiplan tait assez pauvre. Aujourdhui, avec Office, les choses ont considrablement volu et de la mme manire que lon ne parle plus de micro-informatique, mais de micro, les macro-commandes sont devenues les macros. Lutilisateur de la suite Office dispose prsent dun langage de programmation puissant et complet dot dun environnement digne des langages utiliss par les informaticiens professionnels.

14

Chapitre 2. Enregistrer une macro

LENREGISTREUR DE MACROSWord, Excel et PowerPoint disposent dun enregistreur de macros qui, la manire dun magntophone, peut enregistrer vos actions dans le logiciel et rejouer volont ce que vous avez excut. Les autres logiciels de la suite Office (Access, Outlook, etc.) ne possdent pas denregistreur de macros et le code VBA ne peut donc pas tre gnr automatiquement. En revanche, il existe dans Access un type dobjet nomm macro qui permet de stocker squentiellement une srie dactions accomplir ; cependant, les macros de ce type nutilisent pas le langage VBA.

Quand devez-vous enregistrer une macro ?Chaque fois que vous ralisez une tche rptitive dans Word, dans Excel ou dans PowerPoint, vous devez vous poser la question de lintrt dune macro. Il nest nul besoin que la tche accomplir soit excessivement longue ; il suffit simplement que vous laccomplissiez souvent. Si, par exemple, vous devez tous les jours imprimer la dixime page dun document, vous pouvez enregistrer une macro qui automatisera cette tche. Mme si le temps gagn est en loccurrence minime (une dizaine de secondes), vous devez systmatiser cette dmarche qui vous permettra au final dconomiser un temps apprciable. En crivant des macros, vous allez avoir le sentiment (vridique) de travailler plus intelligemment et puis vous gagnerez en efficacit car, quand une macro fonctionne bien, elle fonctionne bien tout le temps, ce qui nest malheureusement pas le cas des tres humains. Mais, ne perdez pas de vue que le but ultime des macros est un gain de temps. A contrario, il ne sert rien denregistrer une macro pour une tche que vous naccomplissez quune seule fois ou de manire trs pisodique. Mme si le fait denregistrer une macro nest pas complexe et ne prend que quelques secondes en plus, il est inutile de le faire si vous navez pas loccasion dexploiter la macro enregistre.

Lenregistreur de macros

15

Si vous effectuez souvent la mme mise en forme sous Word (par exemple, une modification de la police, un changement de la taille de la police et une mise en gras), il est prfrable de crer un style plutt que denregistrer une macro. Si jamais le style dfini ne vous convient plus, une seule modification du style suffira changer automatiquement toutes les occurrences de ce style dans lensemble du document. En revanche, avec une macro, il faudrait non seulement modifier la macro, mais lexcuter nouveau sur tout le document pour chaque occurrence du style. En pareil cas, une commande de recherche et de remplacement serait dailleurs plus efficace.

Enregistrement de votre premire macroImaginez, par exemple, que vous deviez souvent remettre en forme des documents Word dans lesquels lutilisateur na pas cru bon de saisir un espace inscable avant le caractre deux-points. Pour ce faire, une simple commande de recherche et de remplacement fait laffaire et cette opration nest pas trs longue, mais si elle doit se rpter souvent, elle deviendra vite fastidieuse. Nous allons voir comment nous pouvons facilement lautomatiser grce une macro. Pour faire lexercice, lancez Word et choisissez la commande Outils Macro Nouvelle macro. Dunod La photocopie non autorise est un dlit

Une bote de dialogue semblable celle-ci apparat :

Figure 2.1 Bote de dialogue Enregistrer une macro

16

Chapitre 2. Enregistrer une macro

Office Dans Word 2007, vous devez, pour enregistrer des macros, 2 0 0 7 faire apparatre longlet Dveloppeur. Pour ce faire, dans les options standard de Word, cochez la case Afficher longlet Dveloppeur dans le ruban. Une fois longlet Dveloppeur activ (figure 2.2), cliquez sur licne Enregistrer une macro.

Figure 2.2 Onglet Dveloppeur de Word 2007

la place du nom macro1, saisissez remplacedp (nous reviendrons plus tard sur les autres options de cette bote de dialogue) et cliquez sur le bouton OK. Ds que vous avez valid, une petite bote de dialogue apparat :

Figure 2.3 Bote de dialogue darrt denregistrement dune macro

Vous noterez tout dabord que le pointeur de votre souris a t modifi et quil symbolise prsent une cassette audio. Cela signifie que Word est prt enregistrer tous vos faits et gestes. La bote de dialogue comporte deux boutons. Celui de gauche sert arrter lenregistrement et celui de droite sert mettre en pause. Si vous cliquez sur ce bouton, vos actions ne seront plus enregistres. Vous pouvez donc commencer enregistrer votre macro. Pour notre exemple, choisissez la commande Edition Remplacer (ou bien saisissez le raccourci clavier CRTL + H). Dans le champ Rechercher, saisissez un espace suivi du caractre deux-points et dans le champ Remplacer, saisissez un espace inscable (CTRL + Majuscule + Espace) suivi du caractre deux points.

Excuter une macro

17

Figure 2.4 Enregistrement dune macro ralisant une opration de recherche et de remplacement

Quand la saisie des caractres rechercher puis remplacer est termine, cliquez sur le bouton Remplacer tout, puis fermez la bote de dialogue Rechercher et remplacer. Une fois que cela est ralis, cliquez sur le bouton gauche de la tlcommande de lenregistreur de macros afin darrter la squence denregistrement.Office Dans Word 2007, pour arrter lenregistrement de la macro, 2 0 0 7 cliquez sur le bouton Arrter lenregistrement qui se trouve sur le ruban (figure 2.5).

Dunod La photocopie non autorise est un dlit

Figure 2.5 Arrt de lenregistrement de la macro dans Word 2007

Notre macro est pour linstant modeste, mais nous allons lamliorer au fil de ces pages.

EXCUTER UNE MACROLa premire des choses vrifier est de savoir si lenregistrement sest correctement droul et si le fait de rejouer la macro produit

18

Chapitre 2. Enregistrer une macro

bien leffet escompt. Pour ce faire, choisissez la commande Outils Macro Macros (notez que le raccourci clavier de cette commande est ALT + F8) qui fait apparatre la bote de dialogue suivante :

Figure 2.6 Bote de dialogue permettant dexcuter les macros enregistres

Office Dans Word 2007, pour faire apparatre la liste des macros enre2 0 0 7 gistres, cliquez sur le bouton Macros qui se trouve sur le ruban.

Si vous avez bien ralis lexercice prcdent, une macro du nom de remplacedp doit figurer dans la liste (il est possible que dautres macros, installes automatiquement par dautres logiciels, figurent galement dans cette liste). Pour excuter la macro remplacedp, slectionnez son nom puis cliquez sur le bouton Excuter. Normalement, la macro effectue lopration de recherche et de remplacement pour laquelle elle a t prvue. Afin de voir si la macro fonctionne bien, effectuez le test sur un document qui comprend bien des caractres deux-points non prcds dun espace inscable.

O SONT STOCKES LES MACROSQuand vous dmarrez lenregistreur de macros, une bote de dialogue vous demande o vous voulez enregistrer la macro :

O sont stockes les macros

19

Figure 2.7 Dsignation de lemplacement de stockage des macros

La liste droulante contient deux possibilits : Tous les documents (normal.dot) (document) Si vous choisissez loption par dfaut (stockage de la macro dans Normal.dot), la macro sera accessible dans tous les documents Word que vous pourrez crer par la suite. En effet, Normal.dot est ce que lon appelle un modle global et tous les documents que vous crez dans Word, si vous ne prcisez pas un autre modle, sont bass sur Normal.dot.Office Le format natif des documents dans Office 2007 tant XML, le 2 0 0 7 fichier Normal.dot a pour quivalent dans Word 2007, Normal.dotm. Ce fichier, situ normalement dans C:\Documents and Settings\Utilisateur\Application Data\Microsoft\Templates, est une archive ZIP compose de fichiers XML et dun fichier nomm vbaProject.bin qui contient le code des macros.

Dunod La photocopie non autorise est un dlit

Si vous choisissez lautre option, la macro sera enregistre dans le document actif et vous ne pourrez lexcuter qu partir de ce document, cest--dire, seulement quand il sera ouvert. Dans ces conditions, le choix de lemplacement des macros est important et vous privilgierez lenregistrement dans Normal.dot pour toutes vos macros gnriques et dans tous les autres cas, lenregistrement dans le document actif. De toutes les faons, ce choix nest pas dfinitif et il est possible de dplacer ou de copier des macros.

20

Chapitre 2. Enregistrer une macro

Vous pouvez galement bnficier dune troisime option pour le choix de lemplacement des macros : Documents bass sur En effet, si le document partir duquel vous enregistrez une macro a t cr partir dun modle utilisateur (par exemple Brochure.dot qui est un modle livr avec Word), vous avez la possibilit de crer votre macro dans ce modle de telle sorte que tous les documents crs partir de ce modle hriteront de cette macro.

Figure 2.8 Stockage dune macro dans un fichier de modle diffrent de Normal.dot

Rappel sur les modles Un modle est un document qui sert produire dautres documents. Chaque document Word est bas sur un modle (un moule) ; quand on cre un nouveau document, si on ne prcise aucun modle, le document est bas par dfaut sur le modle intitul Normal.dot (dot tant lextension des modles de document, le t de dot signifiant template qui est le nom anglais pour modle). Si on veut prciser un modle particulier, il faut utiliser la commande Fichier Nouveau et choisir parmi les nombreux modles proposs par Word ou bien parmi ceux que lon a crs. Un modle peut contenir diffrents lments comme des styles, des macros, des menus et des barres doutils dont hritera tout document qui sera bas sur ce modle. Dans Word 2007, les modles ont pour extension dotx ou bien dotm, sils contiennent des macros.

Comment assigner un raccourci clavier une macro ?

21

COMMENT ASSIGNER UN RACCOURCI CLAVIER UNE MACRO ?Nous avons vu que le fait dappuyer sur ALT + F8 faisait apparatre la liste des macros disponibles. Il est souvent plus rapide, afin dexcuter une macro, de lui assigner un raccourci clavier. Pour ce faire, choisissez la commande Affichage Barre doutils Personnaliser... et cliquez sur le bouton Clavier... ce qui affiche lcran suivant :

Figure 2.9 Assignation dun raccourci clavier une macro

Dunod La photocopie non autorise est un dlit

Office Dans Word 2007, on atteint la bote de dialogue Personnaliser 2 0 0 7 le clavier partir des options de Word (menu Personnaliser). Dans la liste de gauche, choisissez Macros, puis slectionnez la macro laquelle vous voulez assigner un raccourci clavier. Cliquez enfin sur le bouton Personnaliser.

Faites dfiler la liste Catgories pour atteindre litem Macros, puis slectionnez dans la liste Macros situe droite la macro laquelle vous voulez assigner un raccourci clavier. Vous devez alors choisir un raccourci clavier : pour cela, positionnez-vous dans la zone Nouvelle touche de raccourci et saisissez un raccourci. Dans la mesure o notre macro effectue une opration de remplacement, il serait intressant, dun point de vue mnmotechnique, de lassocier au raccourci CTRL + R. Cependant, en fonction de la version de Word que vous utilisez, il est possible que la combinaison

22

Chapitre 2. Enregistrer une macro

de touches soit dj attribue. Ainsi, dans Word 2007, la combinaison CRTL + R est attribue la commande Retrait.

Figure 2.10 Le raccourci clavier est dj affect une commande de Word

En testant dautres combinaisons de touches, vous allez vous apercevoir que de trs nombreux raccourcis sont dj programms dans Word. Pour contourner cette difficult, vous pouvez chercher une combinaison de touche qui nest pas attribue.

Figure 2.11 Ce raccourci clavier nest pas affect

Vous pouvez galement dcider daffecter votre macro une combinaison laquelle une commande a dj t attribue. Sil est dconseill de raffecter les commandes classiques comme CTRL + C, il nest pas draisonnable de rattribuer une combinaison telle que CTRL + K qui est affecte la commande InsertionLienHypertexte si vous nutilisez jamais ce raccourci. Vous pouvez aussi utiliser la touche ALT dans votre combinaison ; dans notre exemple, nous dcidons dattribuer le raccourci ALT + R

Comment associer une icne une macro ?

23

notre macro de remplacement dans la mesure o cette combinaison nest pas attribue. Dans la liste droulante Catgories, cliquez sur Macros puis, dans la liste Macros, slectionnez remplacedp. Cliquez enfin sur le bouton Attribuer.

Figure 2.12 Affectation dun raccourci clavier une macro

Cliquez sur le bouton Fermer de la bote de dialogue. Dunod La photocopie non autorise est un dlit

prsent, quand vous appuyez, sur ALT + R, vous dclenchez lexcution de la macro remplacedp.

COMMENT ASSOCIER UNE ICNE UNE MACRO ?Les interfaces tant devenues graphiques, les utilisateurs sont devenus friands de boutons divers et varis et il est dsormais possible de dclencher une macro en cliquant sur un bouton. Pour associer notre macro un bouton, il faut dabord excuter la commande Affichage Barre doutils Personnaliser... Cliquez ensuite sur longlet Commandes et, dans la liste droulante Catgories, choisissez Macros puis slectionnez Normal.NewMacros.remplacedp.

24

Chapitre 2. Enregistrer une macro

Office Compte tenu de la modification en profondeur de linterface 2 0 0 7 dOffice 2007, la personnalisation de linterface fera lobjet dun chapitre part dans cet ouvrage. Dans limmdiat, vous pouvez ajouter une icne sur la barre doutils Accs rapide grce au menu Personnaliser des options de Word. Choisissez la macro dans la liste de gauche et cliquez sur le bouton Ajouter ; la macro passe alors dans la liste de droite, intitule Personnaliser la barre doutils Accs rapide. Vous pouvez modifier licne du bouton en cliquant sur Modifier. Aprs avoir valid par OK, licne que vous avez choisie se retrouve dans la barre doutils Accs rapide et vous pouvez excuter la macro dun clic de souris.

Figure 2.13 Affectation dune icne une macro

Il suffit ensuite, par une simple opration de glisser-dplacer, daller dposer la commande sur une des barres doutils de Word ce qui donne le rsultat suivant :

Figure 2.14 Insertion dune macro dans une barre doutils

Le rsultat graphique ntant pas trs heureux, il faut faire, immdiatement aprs lavoir dpos, un clic droit sur ce nouveau bouton afin dafficher les options disponibles :

Comment associer une icne une macro ?

25

Figure 2.15 Proprits de licne de notre macro

Cest loption Texte seul pour ce bouton qui est responsable de laffichage du texte du bouton. Si lon souhaite avoir un bouton graphique, il suffit, dans un premier temps, de choisir loption Par dfaut qui affiche licne suivante :

Figure 2.16 Icne par dfaut pour les macros Word

Dunod La photocopie non autorise est un dlit

Si cette icne ne vous convient pas, il est possible, grce loption Modifier limage du bouton, de choisir dans une palette de boutons supplmentaires :

Figure 2.17 Icnes de remplacement de licne par dfaut

Si, malgr tout, vous ne trouvez toujours pas le bouton qui vous convient, vous pouvez vous retrousser les manches et choisir la commande Editeurs de boutons...

26

Chapitre 2. Enregistrer une macro

Figure 2.18 Vous pouvez dessiner vous-mme licne du bouton qui excutera la macro

Comme vous pouvez le constater, lauteur de ces lignes na pas fait les Beaux-Arts et le rsultat nest pas toujours garanti. On trouve cependant sur Internet de trs bonnes bibliothques dicnes...

CONSEILS POUR LENREGISTREMENT DES MACROSEnregistrer des macros, comme vous avez pu le voir, est extrmement simple puisquil suffit de faire ce que vous avez dj lhabitude de faire, savoir utiliser votre logiciel ; cependant, il convient de prendre certaines prcautions, notamment parce que lenregistreur de macros enregistre tout. Cela signifie quil enregistrera galement toutes les erreurs que vous commettrez. Par exemple, si vous faites une erreur de frappe et que vous la corrigez, le code de la macro contiendra lerreur de frappe et sa correction. Cela nest pas trs grave en soi, mais peut arriver surcharger le code de la macro si les erreurs sont trop nombreuses et, par voie de consquence, ralentir son excution. Le premier conseil suivre est donc de prparer son scnario avant lenregistrement dune macro. De la mme manire que lorsque vous dictez votre annonce votre rpondeur enregistreur, vous avez la possibilit dcrire le texte de votre annonce au pralable, il vaut mieux avoir une ide assez prcise de lordre de laccomplissement des

Le choix du nom des macros

27

actions que vous souhaitez enregistrer. Dans cette perspective, il nest peut-tre pas inutile de faire quelques rptitions avant la prise finale. Si lenregistrement dune macro est trs long, le risque de commettre des erreurs saccrotra et il est donc judicieux de dcomposer lenregistrement de la macro en plusieurs squences. Il sera ultrieurement facile de combiner les diffrentes parties de la macro pour nen faire quune seule (nous verrons comment faire cela au prochain chapitre).

LE CHOIX DU NOM DES MACROSUne autre recommandation a trait au nom des macros : vous avez pu voir que Word propose par dfaut comme nom de macro Macro1. Il est assez difficile dimaginer un nom moins expressif que celui-ci et vous devez donc vous empresser de le changer. En effet, quand vous aurez crit trois macros, vous vous y retrouverez sans peine. En revanche, quand vous en aurez cr plus dune centaine, il sera beaucoup moins vident de faire le tri et vous avez donc tout intrt donner vos macros des noms qui indiquent leur objet. Il existe plusieurs cueils dans le choix du nom dune macro, comme nous allons le voir. Dunod La photocopie non autorise est un dlit

Premirement, il existe des rgles de pure forme pour lattribution dun nom une macro ; en voici une liste quasi exhaustive : un nom ne peut pas dpasser 255 caractres ; un nom ne doit pas commencer par un chiffre ; un nom ne doit pas contenir les caractres tels quun espace, un point (.), un point dexclamation (!), un point-virgule (;), un point dinterrogation (?) ou les caractres @, &, $, #, ^, %, , +, =, `, {, (, [, }, ), ] ou le symbole de leuro ; Visual Basic ne faisant pas la diffrence entre les majuscules et les minuscules, les noms de macros test et TEST seront considrs comme quivalents. En revanche les noms ditioncouper et EditionCouper ne sont pas considrs comme quivalents.

28

Chapitre 2. Enregistrer une macro

Dune manire gnrale, vitez les caractres sotriques dans les noms de vos macros et limitez-vous aux chiffres, aux lettres et la barre de soulignement. Vous pouvez cependant vous autoriser les lettres accentues comme , , , etc. Vous noterez galement quil existe en quelque sorte des noms rservs car Word possde des macros prdfinies. En effet, chaque commande que lon peut activer par un menu a un nom de macro qui lui est dj attribu. Ainsi la commande Copier du menu Edition a pour nom EditionCopier. Si vous enregistrez une nouvelle macro et que vous lappelez EditionCopier (ou bien editioncopier ou bien encore Editioncopier), le code de cette macro sera alors excut quand vous emploierez la commande Copier du menu Edition. Ceci est fort gnant car vous pouvez ainsi modifier totalement le comportement de Word. Il y a donc lieu dviter au maximum lemploi de tels noms pour vos macros moins que vous ne souhaitiez redfinir les commandes internes de Word, mais cela nest gure conseill. Vous trouverez dans la documentation lectronique qui accompagne cet ouvrage la liste complte des noms des macros prdfinies de Word. Consultez cette liste quand vous nommez une macro ou bien adoptez la convention dont nous allons parler ci-dessous. Si vous travaillez tout seul dans votre coin, vous tes sans doute le plus heureux des hommes (terme gnrique qui embrasse les femmes) et vous tes donc labri dautrui ; cette hypothse est malheureusement assez rare et mme si vous tes un solipsiste forcen, vous allez bien, un moment ou un autre, devoir ctoyer des macros crites par dautres programmeurs (ne serait-ce que les miennes...). Cela peut poser un problme car les programmeurs, quand ils nomment leurs macros, font en gnral preuve dune banalit affligeante ; ceci a pour consquence que lorsque vous rcuprez des macros crites par dautres (sur Internet, dans un magazine, etc.), il y a des risques que certaines de ces macros comportent le mme nom que les vtres. Pour viter cela, il existe une solution simple qui consiste prfixer toutes vos macros par un identificateur qui peut tre vos initiales suivies du caractre de soulignement. Vous pouvez toujours tomber sur un homonyme qui adopte la mme convention que vous, mais le risque est beaucoup plus rare.

Le choix du nom des macros

29

Enfin, nous vous conseillons vivement lorsque vous enregistrez une macro de bien remplir le champ Description qui est mis votre disposition. Ce commentaire vous permettra ultrieurement de mieux vous y retrouver dans toutes vos macros.

Figure 2.19 Documentation de la macro par lajout dun commentaire lors de lenregistrement

Les limitations de lenregistreur de macrosNous avons vu plus haut que lenregistreur de macros enregistrait tout, y compris vos erreurs. Cela nest pas tout fait exact dans la mesure o certaines actions ne peuvent pas tre enregistres. Ainsi, la principale limite concerne lutilisation de la souris. Si vous choisissez une commande laide de la souris, vous naurez aucun problme ; en revanche, si vous voulez slectionner du texte, dplacer le point dinsertion, couper, copier ou dplacer du texte laide de la souris, aucune de ces actions ne sera enregistre car la souris reste inactive pendant lenregistrement dune macro (pour la mme raison, les menus contextuels associs au clic droit de la souris sont inactifs). Pour enregistrer ces actions, la seule solution consiste utiliser le clavier et nous vous indiquons ci-dessous les raccourcis clavier les plus importants qui remplacent lutilisation de la souris :Actions de dplacement du point dinsertion Dun mot vers la gauche Dun mot vers la droite CTRL+GAUCHE CTRL+DROITE

Dunod La photocopie non autorise est un dlit

30

Chapitre 2. Enregistrer une macro

Actions de dplacement du point dinsertion Dun paragraphe vers le haut Dun paragraphe vers le bas En haut de la fentre En bas de la fentre En haut de la page suivante En haut de la page prcdente la fin dun document Au dbut dun document lemplacement occup par le point dinsertion lors de la dernire fermeture du document CTRL+HAUT CTRL+BAS ALT+CTRL+PG.PRC ALT+CTRL+PG.SUIV CTRL+PG.SUIV CTRL+PG.PRC CTRL+FIN CTRL+ORIGINE MAJ+F5

Actions dextension de la slection Dun caractre vers la droite Dun caractre vers la gauche la fin dun mot Au dbut dun mot la fin dune ligne Au dbut dune ligne Dune ligne vers le bas Dune ligne vers le haut la fin dun paragraphe Au dbut dun paragraphe Dun cran vers le bas Dun cran vers le haut Au dbut du document MAJ+DROITE MAJ+GAUCHE CTRL+MAJ+DROITE CTRL+MAJ+GAUCHE MAJ+FIN MAJ+ORIGINE MAJ+BAS MAJ+HAUT CTRL+MAJ+BAS CTRL+MAJ+HAUT MAJ+PG.SUIV MAJ+PG.PRC CTRL+MAJ+ORIGINE

Le choix du nom des macros

31

Actions dextension de la slection la fin dun document la fin dune fentre Au document tout entier un bloc de texte vertical CTRL+MAJ+FIN ALT+CTRL+MAJ+PG.SUIV CTRL+A CTRL+MAJ+F8, puis utilisez les touches de direction ; appuyez sur ECHAP pour annuler le mode de slection F8+touches de direction ; appuyez sur ECHAP pour annuler le mode de slection

un endroit dtermin du document

Actions de dplacement dans un tableau la cellule suivante dune ligne la cellule prcdente dune ligne la premire cellule dune ligne la dernire cellule dune ligne la premire cellule dune colonne la dernire cellule dune colonne Dunod La photocopie non autorise est un dlit

TABULATION MAJ+TABULATION ALT+ORIGINE ALT+FIN ALT+PG.PRC ALT+PG.SUIV HAUT BAS

la ligne prcdente la ligne suivante

Actions de slection dans un tableau Slectionner le contenu de la cellule suivante Slectionner le contenu de la cellule prcdente tendre une slection aux cellules avoisinantes TABULATION MAJ+TABULATION Maintenez la touche MAJ enfonce et appuyez plusieurs fois sur une touche de direction

32

Chapitre 2. Enregistrer une macro

Actions de slection dans un tableau Slectionner une colonne Se dplacer dans la cellule en haut ou en bas de la colonne. Maintenez la touche MAJ enfonce et appuyez plusieurs fois sur la touche HAUT ou BAS CTRL+MAJ+F8, puis utilisez les touches de direction ; appuyez sur ECHAP pour annuler le mode de slection ALT+5 sur le pav numrique (VERR.NUM tant dsactiv)

tendre une slection (ou un bloc)

Slectionner lintgralit dun tableau

Lenregistreur de macros possde dautres limitations, mais elles se rencontrent plus rarement.

ENREGISTREMENT DUNE MACRO AVEC EXCELLe processus denregistrement dune macro avec Excel est similaire celui de Word. Il diffre seulement en quelques points que nous allons dtailler. Pour activer lenregistrement, il faut choisir la commande Outils Macro Nouvelle macro... Notez que vous pouvez galement afficher la barre doutils de Visual Basic (commande Affichage Barre doutils Visual Basic) :

Figure 2.20 Barre doutils de Visual Basic

La deuxime icne en partant de la gauche (reprsente par un point bleu) vous permet de dclencher lenregistrement dune macro qui fait apparatre la bote de dialogue suivante :

Enregistrement dune macro avec Excel

33

Figure 2.21 Enregistrement dune macro avec Excel

Office Dans Excel 2007, vous devez, pour enregistrer des macros, faire 2 0 0 7 apparatre longlet Dveloppeur. Pour ce faire, dans les options standard dExcel, cochez la case Afficher longlet Dveloppeur dans le ruban. Une fois longlet Dveloppeur activ, cliquez sur licne Enregistrer une macro.

Les recommandations concernant le nom de la macro et sa description sont identiques celles que nous avons dj nonces. Le champ Touche de raccourci permet de programmer la touche CTRL pour lui associer la macro. Vous noterez quExcel fait ici la diffrence entre les majuscules et les minuscules : CTRL + K sera donc considr comme diffrent de CTRL + k. Dunod La photocopie non autorise est un dlit

Vous avez la possibilit denregistrer la macro dans trois emplacements diffrents : le classeur de macros personnelles, un nouveau classeur, le classeur actif.Le classeur de macros personnelles Le classeur de macros personnelles est un fichier spcial baptis PERSO.XLS qui se trouve dans le rpertoire de dmarrage dExcel (le plus souvent, il sagit du rpertoire Documents and Settings\Utilisateur\Application Data\Microsoft\Excel\XLSTART). Ce fichier est donc charg automatiquement au dmarrage dExcel et ses macros sont disponibles pour tous les autres classeurs. PERSO.XLS est donc lquivalent du fichier NORMAL.DOT de Word. Si vous tenez examiner le

34

Chapitre 2. Enregistrer une macro

contenu de ce fichier, il suffit de choisir la commande Fentre Afficher... et de faire un double-clic sur Perso. Il peut tre utile de visualiser ce fichier si vous souhaitez y stocker autre chose que des macros personnelles, par exemple des donnes. Pour supprimer laffichage de ce classeur, choisissez la commande Fentre Masquer. Si vous enregistrez des macros dans le classeur de macros personnelles, noubliez pas de sauvegarder ce fichier quand vous quittez Excel. La bote de dialogue illustre la figure 2.22 vous le rappellera.

Figure 2.22 Enregistrement du classeur de macros personnelles

Office Dans Excel 2007, le classeur de macros personnelles se nomme 2 0 0 7 Personal.XLSB. Vous pouvez le visualiser dans longlet Affichage, en cliquant sur licne Afficher de la zone Fentre.

Aprs avoir rempli la bote de dialogue vous demandant le nom de la macro que vous voulez enregistrer, lenregistrement peut commencer et une nouvelle bote de dialogue apparat :

Figure 2.23 Enregistrement dune macro Excel

Outre licne qui permet darrter lenregistrement (notez qu la diffrence de Word, vous ne pouvez pas mettre lenregistrement en pause), licne de droite permet de choisir entre des adresses absolues ou relatives de cellules. Prenons un exemple simple pour bien voir cette diffrence qui est trs importante. Ouvrez une nouvelle feuille de calcul et demandez enregistrer une nouvelle macro. Le pointeur

Enregistrement dune macro avec Excel

35

de cellule tant en A1, dmarrez lenregistrement et accomplissez les actions suivantes : Slectionnez la cellule B3 Saisissez Lundi Dplacez-vous en C3 puis saisissez Mardi Dplacez-vous en D3 puis saisissez Mercredi Dplacez-vous en E3 puis saisissez Jeudi Dplacez-vous en F3 puis saisissez Vendredi Dplacez-vous en B4 Vous devez tre dans la mme situation que sur la figure 2.24 :

Figure 2.24 Enregistrement dune macro Excel

Arrtez lenregistrement de la macro. Dunod La photocopie non autorise est un dlit

Par dfaut, lenregistreur de macros prend en compte des cellules absolues et si vous excutez la macro sur une autre feuille, la saisie des jours commencera toujours dans la cellule B3. Ouvrez une nouvelle feuille de calcul et recommencez exactement lenregistrement de la macro prcdente, mais cette fois-ci, avant de slectionner la cellule B3, vous allez cliquer sur licne qui vous permet de travailler en mode relatif. Une fois lenregistrement arrt, positionnez le pointeur de cellules en C10 et excutez la macro : cette fois-ci, la saisie des jours commencera en D12 puisquExcel a enregistr la saisie des jours relativement ; B3 tant situ deux lignes en dessous et une colonne droite par rapport A1, il est normal que la saisie commence en D12 si le pointeur est situ en C10.

36

Chapitre 2. Enregistrer une macro

Cette diffrence est extrmement importante et il est capital que vous dcidiez lavance si vous voulez procder un enregistrement en mode absolu (mode par dfaut) ou en mode relatif. Il est possible de cliquer sur licne Rfrence relative en cours denregistrement, mais nous ne vous le conseillons pas car le rsultat est souvent droutant.

CONCLUSIONLenregistreur de macros reprsente le moyen le plus simple pour gnrer rapidement un programme sans avoir crire une seule ligne de code. Il sagit l dun outil puissant dont seuls Word, Excel et PowerPoint sont dots. Lenregistreur de macros est galement un fantastique outil dapprentissage car une fois que le code aura t gnr, vous aurez tout le loisir daller lexaminer afin de voir comment il est structur. Dans un second temps, quand vous en saurez plus, vous pourrez modifier les programmes gnrs par lenregistreur afin de les amliorer. Mme quand vous possderez bien les bases du langage macro de Word, dExcel et de PowerPoint, lenregistreur de macros sera souvent un excellent moyen de vrifier la syntaxe dune commande ; ainsi, plutt que de vous plonger dans la documentation, il sera beaucoup plus simple de faire enregistrer la commande que vous souhaitez mettre en uvre et daller ensuite dcortiquer le programme dans lditeur. Dans le chapitre suivant, nous allons justement apprendre visualiser et modifier les macros que nous venons de crer.

3Modifier le code des macros

Lenregistreur de macros procure un moyen rapide et efficace de gnrer des programmes sans avoir crire une seule ligne de code. Il comporte cependant des limites et il devient vite indispensable, quand on lutilise, de modifier le code qui a t gnr. Dans ce chapitre, nous allons tout dabord apprendre visualiser le code et ensuite le modifier pour le complter et lamliorer. Nous reprendrons lexemple de la macro de remplacement ralise dans le chapitre prcdent. Si vous avez bien suivi la leon, cette macro doit prsent se trouver dans le modle de Word Normal.DOT (ou Normal.dotm si vous utilisez Word 2007). Nous vous conseillons ce sujet de faire une copie de sauvegarde de ce fichier-l et de la conserver en un lieu sr car il peut se rvler assez dangereux de travailler directement sur les modles globaux de Word ou dExcel. Cest pour cette raison que nous ferons tous les exercices dans des fichiers indpendants de manire ne pas modifier des fichiers dont laltration pourrait avoir des consquences fcheuses pour la bonne marche dOffice. Si vous ne lavez pas encore fait, cest le moment dinstaller les fichiers du livre sur votre disque dur (pour ce faire, reportez-vous lavant-propos de cet ouvrage).

38

Chapitre 3. Modifier le code des macros

VOIR LE CODE DE LA MACROVous allez maintenant ouvrir dans Word le fichier REMPLACE.DOC : ce fichier contient le code de la macro que vous avez enregistre dans le chapitre 2.Virus et macros Avec la gnralisation dInternet qui permet leur propagation rapide, les virus sont devenus une plaie quotidienne ; il appartient donc chacun de se prmunir contre ce flau afin de protger son ordinateur et, par voie de consquence, dempcher la contamination des autres utilisateurs. Les virus sont avant tout des programmes dont leur auteur a des intentions malfaisantes ; dans la mesure o les macros sont galement des programmes, rien nempche un programmeur dcrire un virus qui sexcute lintrieur dune macro. Devant la simplicit du langage VBA, on a donc vu apparatre toute une srie de virus macro qui se nichaient au sein de fichiers Word ou Excel. Le virus Melissa reste sans doute le meilleur exemple du virus programm en VBA. Il faut bien reconnatre que Microsoft a mis beaucoup de temps se proccuper du problme de la scurit des macros et les premires versions dOffice intgrant VBA ntaient pas spcialement bien protges contre les virus macro. Les choses ont heureusement chang et lutilisateur dOffice a dsormais le choix entre trois attitudes : Toutes les macros des fichiers Office sont susceptibles dtre excutes sans que lutilisateur en soit averti (niveau de scurit faible). La prsence de toutes les macros des fichiers Office est signale lors de louverture dun fichier et lutilisateur a le choix dactiver ou de dsactiver les macros (niveau de scurit moyen). Toutes les macros des fichiers Office sont dsactives lors de leur ouverture, hormis les macros provenant de sources fiables (niveau de scurit lev). Pour quune source soit juge fiable, la macro doit tre signe numriquement laide dun certificat numrique (comme un courrier lectronique) qui doit tre acquis auprs dune autorit de certification. Bien que Microsoft fournisse un outil (SELFCERT.EXE) permettant de signer ses propres macros, la signature numrique des macros est dans les faits rserve aux professionnels. Pour paramtrer le niveau de scurit des macros, vous devez utiliser la commande Outils Macro Scurit et dterminer le niveau de scu-

Voir le code de la macro

39

rit qui vous convient. Dans la pratique, seul le niveau de scurit moyen est efficace. En effet, le niveau de scurit faible est vraiment dangereux et laisse la porte ouverte tous les virus potentiels. Le niveau de scurit lev est quant lui trop restrictif et ne laisserait mme pas la possibilit dutiliser les macros livres avec cet ouvrage dans la mesure o elles ne sont pas signes numriquement. La seule solution acceptable est donc le niveau de scurit moyen. Quand un fichier qui contient des macros est ouvert, la bote de dialogue illustre la figure 3.1 apparat.

Figure 3.1 Activation ou dsactivation des macros contenues dans un fichier Office.

Vous avez alors le choix dactiver ou de dsactiver les macros contenues dans le fichier. La conduite tenir en la matire est assez simple : vous devez vous mfier des macros provenant dune origine inconnue ou de la prsence de macros dans un fichier qui nest pas cens en contenir. Dans ce cas-l, cliquez sur le bouton Dsactiver les macros. Quand les macros sont dsactives, il est toujours possible dexaminer leur code ; en cas de doute sur une macro, vous pouvez, dans un premier temps, la dsactiver puis expertiser son code tranquillement. Quand lexamen du code de la macro vous aura montr son innocuit, vous pourrez alors recharger le fichier et activer cette fois-ci la macro. Cela tant, vous me ferez lhonneur de maccorder votre confiance et de croire que les macros livres avec cet ouvrage sont sans danger. Vous pourrez donc, chaque fois que vous ouvrirez un fichier de ce livre et que vous obtiendrez ce genre de message, cliquer sans crainte sur le bouton Activer les macros.

Office Dans Office 2007, les options de scurit des macros ont t 2 0 0 7 renforces. Dans longlet Dveloppeur. Vous trouverez loutil Scurit des macros qui fait apparatre la bote de dialogue Centre de gestion de la confidentialit o vous pouvez paramtrer le niveau de scurit de vos macros. Quand le Centre de gestion de la confidentialit dtecte

40

Chapitre 3. Modifier le code des macros

un problme, il affiche dans la barre de message (situe au-dessus du document) la mention Avertissement de scurit Les macros ont tdsactives. Le bouton Options permet alors dactiver le contenu de la macro. Pour de plus amples informations sur la scurit des macros, consultez laide en ligne la rubrique Signer numriquement un projet macro ou bien la page Web suivante : http://office.microsoft.com/fr-fr/outlook/HA100310711036.aspx

Figure 3.2 Centre de gestion de la confidentialit dans Office 2007.

Figure 3.3 Activation dune macro dsactive par le Centre de gestion de la confidentialit dans Office 2007.

Quand le fichier REMPLACE.DOC est charg, la fentre de Word affiche un texte qui explique le rle de la macro ainsi que des paragraphes qui permettent de tester la macro de remplacement.

Voir le code de la macro

41

Pour examiner le code de cette macro, excutez la commande Outils Macro Visual Basic Editor (dans Word 2007, cliquez sur loutil Visual Basic qui se trouve sur longlet Dveloppeur) qui fait apparatre lcran suivant :

Figure 3.4 Fentre de lditeur de code, Visual Basic Editor

Le raccourci clavier pour faire apparatre lditeur Visual Basic est ALT + F11. Il est fort probable que votre cran ne ressemble pas exactement celui qui est illustr la figure 3.4, mais cela nest pas important pour linstant. La fentre Visual Basic Editor, comme son nom lindique, est un diteur pour Visual Basic, cest--dire un mini traitement de texte qui va vous servir crire vos programmes Word, Excel, Access, PowerPoint ou Outlook puisque ces cinq applications partagent le mme langage. Autant vous le dire tout de suite, lditeur de programmes est un logiciel extrmement puissant et il peut vite se montrer droutant pour le nophyte tant il recle de commandes et doptions. La complexit rside galement dans le nombre de fentres et de barres

42

Chapitre 3. Modifier le code des macros

doutils qui peuvent venir encombrer lcran et le rendre confus. Exceptionnellement riche, lditeur Visual Basic est souvent un cassette pour le dbutant qui ne sait pas par o commencer, les concepts nouveaux mergeant de toutes parts. Ltude exhaustive de toutes les fonctionnalits de cet diteur est bien videmment impossible dans le cadre qui nous est imparti et nous nous concentrerons sur les fonctions vraiment essentielles de ce quon appelle un environnement de dveloppement intgr (EDI). Pour y voir plus clair, commencez par fermer toutes les fentres de lditeur afin de ne garder que la barre de titre, la barre de menus et la barre doutils.

Figure 3.5 Visual Basic Editor sans aucune fentre ouverte

Pour raliser cela, fermez individuellement toutes les fentres ouvertes en cliquant sur la case de fermeture de chaque fentre. Choisissez ensuite la commande Affichage Explorateur de projets qui fait apparatre la fentre suivante :

Figure 3.6 Explorateur de projets

Comme son nom lindique, lExplorateur de projets permet de visualiser les diffrents lments constitutifs dun projet. La documentation lectronique dOffice est assez succincte quant la notion de

Voir le code de la macro

43

projet quelle dfinit comme un jeu de modules En fait, il faut comprendre quun projet est un ensemble qui regroupe tous les lments rajouts lapplication hte (Word, Excel, Access, PowerPoint ou Outlook) pour crer un programme. Ces lments diffrent dune application lautre et lExplorateur de projets dun fichier Excel sera diffrent de celui dune base de donnes Access. Il nexiste quun seul projet pour les applications Outlook et il sagit du fichier nomm VBAProject.OTM. Tout le code des macros que vous crez dans lditeur de programmes dOutlook est stock dans ce fichier. Les lments constitutifs dun projet sont principalement les documents eux-mmes (Word ou Excel), des programmes crits en Visual Basic (appels modules) ou des formulaires. Un projet dpend toujours dun document (fichier Word, fichier Excel, fichier PowerPoint ou base de donnes Access) et comme Word, Excel et PowerPoint permettent de charger plusieurs documents la fois, cela explique quil puisse y avoir plusieurs projets au sein de lExplorateur de projets. Il y a en fait au moins autant de projets quil y a de documents chargs. Vous noterez que si vous travaillez la fois sur des documents Word, Excel et PowerPoint, chaque application dispose de sa propre fentre Microsoft Visual Basic. Chaque projet prsent dans lExplorateur est reprsent par une icne et en cliquant sur le signe plus (+) gauche de ce symbole, on dcouvre la liste des lments du projet.

Figure 3.7 lments constitutifs dun projet Word

44

Chapitre 3. Modifier le code des macros

Certains projets peuvent tre chargs automatiquement et il sagit notamment du projet Normal pour les documents Word et du projet EuroTool pour les documents Excel. Dans notre document Word, il existe trois catgories (Microsoft Word Objets, Modules et Rfrences). Retenez bien que ces catgories dpendent du type de lapplication (Word, Excel, Access, PowerPoint ou Outlook) et quau sein dune mme application il peut y avoir diffrents sous-ensembles, en fonction des objets contenus dans le document. Dans notre exemple, lobjet Microsoft Word a pour nom ThisDocument et il sagit dun nom gnrique pour dsigner le document Word lui-mme. Le deuxime sous-ensemble, Modules, contient les programmes, quils aient t crits directement dans lditeur ou bien quils aient t gnrs grce lenregistreur de macros. Le module NewMacros est un module spcial qui renferme toutes les macros qui ont t gnres par lenregistreur. Si vous faites un double-clic sur lobjet NewMacros, vous faites afficher son code dans une fentre baptise tout simplement Code. La dernire catgorie, Rfrences, contient une rfrence Normal.DOT, tant donn que tous les documents Word sont bass par dfaut sur ce modle. La fentre Code contient donc le code de la macro que nous avons enregistre dans le chapitre prcdent et nous allons maintenant examiner ce code plus attentivement. Ce programme est compos de 21 lignes que nous allons dcortiquer ; chaque ligne logique du programme reprsente une action qui est excute squentiellement.Sub remplacedp()

La premire ligne comporte le titre de notre macro prcd du mot Sub. Ce terme, qui est labrviation de Subroutine (sous-programme), indique quil sagit du dbut du programme. Le nom de notre macro

Voir le code de la macro

45

est suivi dune paire de parenthses, ce qui constitue une convention dcriture.' ' remplacedp Macro ' Remplace la suite de caractres espace + deux-points par la suite espace inscable + deux-points '

Les quatre lignes suivantes commencent toutes par une apostrophe et sont de couleur verte. Lapostrophe indique quil sagit dun commentaire ; un commentaire est une ligne qui nest pas excute et qui fournit des renseignements sur le programme. Les commentaires sont extrmement importants et la plupart des dbutants ngligent cette facult qui leur est offerte. Vous devez absolument documenter vos programmes et nous reviendrons plus tard sur lart et la manire dcrire des commentaires. Ces lignes ont t crites par lenregistreur de macros et la troisime ligne de commentaire est le contenu de la zone Description de la bote de dialogue Enregistrer une macro.Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting

Ces deux lignes indiquent Word de supprimer les options de mise en forme des champs de la bote de dialogue Rechercher et remplacer et correspondent lutilisation du bouton Sans attributs.With Selection.Find .Text = " :" .Replacement.Text = " :" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With

Le bloc dlimit par With End With permet de dfinir les options de la bote de dialogue Rechercher et remplacer. Mme si lon nest pas particulirement anglophone, on devine que Text correspond la suite de caractres rechercher et Replacement.Text la suite de

46

Chapitre 3. Modifier le code des macros

caractres qui serviront pour le remplacement. Alors que lon na saisi que deux paramtres dans la bote de dialogue, on peut stonner du fait que la macro comporte dix lignes dont chacune dentre elle dfinit une option. En ral