Professional Documents
Culture Documents
Chapitre
18
Macros et VBA
Dicult :
ous voici presque arrivs la n de ce livre ; dsormais, vous devriez maitriser Word.
Pourtant, il vous reste encore des choses apprendre. Ce que nous allons voir dans
ce chapitre, vous n'en aurez pas l'utilit tous les jours mais cela pourra vous faire
gagner du temps lors de votre utilisation de Word.
Vous eectuez frquemment les mmes tches de mise en forme ou de mise en page ?
Vous avez l'impression que certaines mises en forme vous prennent beaucoup de temps et
d'nergie ? Les macros et le langage VBA sont faits pour vous. Poursuivez vite la lecture
et dcouvrez un univers fascinant qui n'a de limites. . . que votre propre imagination !
377
Des macros, des macros ! Je ne sais pas exactement ce qu'est une macro,
moi ! Est-ce que ce chapitre est vraiment fait pour moi ?
Je vais immdiatement mettre un terme aux bruits de couloirs selon lesquels les macros
sont rserver un public averti, qui a une grande exprience de Word et connat dj
(au moins !) trois ou quatre langages de programmation. Tout ceci est absolument faux !
Si vous savez utiliser Word, vous saurez sans peine crer et mettre en uvre des macros.
Nous allons commencer par un exemple simple, qui n'a d'autre intrt que de vous
familiariser avec l'enregistreur de macros. La macro en question va mettre en gras le
texte slectionn.
Mais il y a l'icne Gras du Ruban pour cela. Pourquoi crer une macro ?
C'est vrai, c'est vrai ! Alors, corsons un peu les choses. Que diriez-vous de crer une
macro qui applique simultanment les attributs Gras, Italique et Soulign au texte
slectionn ? Il n'existe aucune icne du Ruban capable de cette prouesse et la macro
correspondante est trs simple mettre en place. Alors, au diable l'avarice !
L'enregistreur de macros est disponible dans l'onglet Dveloppeur du Ruban. Si cet
onglet n'est pas encore ach, basculez sur l'onglet Fichier et cliquez sur Options.
Dans la bote de dialogue Options Word, cliquez sur Personnaliser le Ruban, cochez
la case Dveloppeur puis validez en cliquant sur OK. L'icne de l'enregistreur de macros
se trouve dans le groupe Code, comme indiqu la gure 18.1.
Tlcharger le document
Code web : 986199
Ouvrez le document macros.docx et slectionnez le premier paragraphe (1). Maintenant, vous pouvez lancer l'enregistreur de macros : cliquez sur l'icne Enregistrer
une macro (2). Donnez le nom Gras_Italique_Soulign la macro (3) et validez en
cliquant sur OK (4), comme indiqu la gure 18.2.
Je suis sr que vous brlez d'impatience de l'utiliser. Slectionnez le deuxime paragraphe qui, lui n'est pas encore en gras, italique et soulign. Si ncessaire, basculez sur
l'onglet Dveloppeur du Ruban et cliquez sur l'icne Macros du groupe Code. La bote
de dialogue Macros dresse la liste des macros enregistres sur votre ordinateur. Cliquez
sur la macro Gras_Italique_Soulign puis sur le bouton Excuter (voir gure 18.3).
Les espaces et les tirets ne sont pas autoriss dans le nom des macros. Par
contre, les caractres accentus de la langue franaise et les caractres de
soulignement sont. J'ai choisi d'utiliser le caractre de soulignement, situ
le
sur la touche 8 des claviers franais, pour que le nom soit plus facile lire.
Ceci dit, les noms GrasItaliqueSoulign et grasitaliquesoulign sont
tout aussi valables.
Toutes les macros seront bases sur le mme principe et ce, indpendamment de leur
complexit. Pour vous en persuader, vous allez maintenant dnir une macro qui agit
sur un tableau. La gure 18.4 reprsente l'eet recherch.
Je vous sens lgrement nerveux ! N'ayez crainte, tout va bien se passer. . . Les plus
observateurs d'entre vous auront identi les transformations appliques au texte.
Slectionnez les donnes convertir en tableau. Basculez sur l'onglet Dveloppeur du
Ruban puis cliquez sur l'icne Enregistrer une macro dans le groupe Code. Donnez
la macro le nom Tableau puis cliquez sur OK.
380
Les macros ne peuvent pas tre appliques des objets graphiques (images,
Clip arts, SmartArt, formes, graphiques, eets typographiques, etc.).
381
Un raccourci clavier
Pour aecter un raccourci clavier une macro, basculez sur l'onglet Fichier du Ruban
puis cliquez sur Options. Dans la bote de dialogue Options Word, slectionnez l'onglet Personnaliser le Ruban puis cliquez sur le bouton Personnaliser droite du
libell Raccourcis clavier. Une nouvelle bote de dialogue intitule Personnaliser
le clavier s'ouvre. Slectionnez Macros dans la zone de liste Catgories (1), cliquez
sur la macro laquelle vous voulez aecter un raccourci clavier (2), cliquez dans le
champ Nouvelle touche de raccourci et tapez un raccourci en vous assurant que
l'information [non attribue] apparat la suite du libell Affectes (3). Cliquez
successivement sur Attribuer, Fermer puis OK pour enregistrer le raccourci clavier (voir
gure 18.5).
Figure 18.5 Les direntes tapes pour aecter un raccourci clavier une macro
1. Clic sur l'icne Macros dans le groupe Code, slection de la macro dans la bote de dialogue
Macros, puis clic sur le bouton Excuter.
382
Vous pouvez dsormais appuyer sur Alt + Z (c'est le raccourci que j'ai choisi) pour
transformer des donnes slectionnes en tableau mis en forme. Avouez que c'est bien
plus agrable.
rapide
Vous prfrez utiliser la barre d'outils Accs rapide ? Pas de problme ! Il vous sut de
cliquer sur l'icne Personnaliser la barre d'outils Accs rapide et de slectionner Autres commandes dans le menu. Cette action ouvre la bote de dialogue Options
Word avec l'onglet Barre d'outils Accs rapide slectionn. Choisissez Macros dans
la premire liste droulante (1). Les macros qui ont t dnies sur l'ordinateur apparaissent dans la premire zone de liste. Slectionnez l'une d'entre elles et cliquez sur
Ajouter (2). Cliquez enn sur OK pour ajouter la macro la barre d'outils Accs
rapide, comme indiqu la gure 18.6.
rapide
J'ai ajout deux macros dans la barre d'outils Accs rapide et il m'est
impossible de les direncier parce qu'elles utilisent toutes les deux la mme
icne. Y-a-t-il quelque chose faire ?
Bien sr ! Cliquez sur l'icne Personnaliser la barre d'outils Accs rapide et
slectionnez Autres commandes dans le menu. Cliquez sur l'icne modier dans la
deuxime zone de liste, puis cliquez sur Modifier. Vous pouvez maintenant choisir une
icne parmi celles proposes (voir gure 18.7).
Figure 18.7 Choix de l'icne d'une macro dans la barre d'outils Accs
rapide
Au lancement de Word
la cration d'un nouveau document
l'ouverture d'un document existant
la fermeture d'un document
la fermeture de Word
Supposons par exemple que vous vouliez ouvrir automatiquement le document Tous
mes fichiers.docx ds le lancement de Word. Pour cela, vous allez dnir la macro
AutoExec.
Lancez Word et fermez la page vide ouverte par dfaut. Basculez ensuite sur l'onglet Dveloppeur du Ruban, puis cliquez sur l'icne Enregistrer une macro dans le
groupe Code. Baptisez cette macro AutoExec et validez en cliquant sur OK. Basculez
sur l'onglet Fichier du Ruban, cliquez sur Ouvrir, dsignez le document Tous mes
fichiers.docx et validez en cliquant sur Ouvrir. Pour terminer, basculez sur l'onglet
Dveloppeur du Ruban et cliquez sur Arrter l'enregistrement.
Pour vous assurer que la macro fonctionne, fermez Word puis rouvrez-le. Le document
Tous mes fichiers.docx doit s'ouvrir automatiquement.
La macro AutoExec est certes trs pratique, mais il peut tre intressant de
ne pas la lancer chaque ouverture de Word. Pour cela, il sut de maintenir
la touche
Maj enfonce lorsque vous cliquez sur l'icne de Word dans le
menu Dmarrer.
Tlcharger le document
Code web : 511541
Tout fonctionne la perfection. Cet exemple ne montre pas du tout les limites
des macros ! Est-ce que j'aurais mal compris ?
Je sais, je sais, tout va bien. . . pour le moment ! Mais nous allons corser les choses.
Supposons que vous ne vouliez transformer que les trois premiers styles Titre 2 en
Titre 3. Reprenez les huit tapes prcdentes mais, l'tape 7, ne cliquez pas sur
386
387
388
Cette macro est celle qui nous a permis de modier les trois premiers Titre
2 en Titre 3.
Chaque ligne correspond une instruction du langage VBA. Ces instructions demandent Word d'eectuer des actions bien prcises sur le document : mettre en
exposant, changer le niveau de titre, slectionner une portion de texte, etc.
Les mots qui composent une instruction comportent une ou parfois plusieurs majuscules, qui sont l pour faciliter leur comprhension et leur lisibilit. Ainsi, le mot
ClearFormatting est compos des mots Clear et Formatting et signie eacer
la mise en forme . Vous vous demandez certainement pourquoi les mots Clear et
Formatting n'ont pas t spars par un espace, comme dans un texte traditionnel.
Eh bien, cela vient du fait que le code VBA n'est pas un texte traditionnel : il s'agit
d'un ensemble d'instructions destines tre excutes par l'ordinateur. Cette syntaxe
n'est pas rserve au langage VBA : elle reste valable dans la plupart des langages de
programmation.
Les commentaires
En VBA, il est possible d'insrer des commentaires au milieu de son code ; un commentaire n'est pas pris en compte lorsque le code est excut. Vous les reprez facilement,
ils commencent par le caractre ', c'est dire une apostrophe droite 2 .
quoi servent-ils ? Ce sont des espaces de libre expression (vous pouvez y crire en
franais !). Vous pouvez rdiger des commentaires pour expliquer le fonctionnment du
code. D'autres personnes pourront ainsi plus rapidement comprendre ce que vous avez
voulu faire.
2. On en voit notamment au dbut du code prcdent.
389
Les mots Sub et End Sub dnissent les limites du code associ la macro et le mot
Titre2_vers_Titre3 est le nom de la macro.
L'ensemble est appel
de la macro.
Les conditions If
Pour permettre au programme de prendre des dcisions, on utilise des blocs If comme
celui-ci :
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
390
Ils commencent par With et terminent par End With. Tout le texte l'intrieur est
indent, c'est--dire dcal vers la droite. Ce dcalage n'a pas d'incidence sur le code
mais il le rend plus lisible.
Que signie ce bloc de code qui commence par With ? C'est en fait une faon d'viter
les rptitions dans le code : cela signie Avec . Cela nous vite d'avoir crire
toujours le mme prxe chaque ligne :
Selection.Find.Text = ""
Selection.Find.Replacement.Text = ""
Selection.Find.Forward = True
...
391
392
Sans chercher comprendre les instructions, vous pouvez assez facilement dduire que
le style Titre 2 (Selection.Find.Style = ActiveDocument.Styles("Titre 2"))
doit tre remplac par le style Titre 3 (Selection.Find.Replacement.Style =
ActiveDocument.Styles("Titre 3")). Le bloc d'instructions qui s'tend entre With
Selection.Find et End With dnit les caractristiques de la recherche. Au hasard
des lignes, vous captez peut-tre les mots suivants :
Text="" et Replacement.Text="" : texte recherch et texte de remplacement ;
Forward = True : vers l'avant ;
MatchCase = False : insensible la casse (sans faire de dirence entre les majuscules et les minuscules).
Si vous ne comprenez rien tout cela, ce n'est pas bien grave. Ce qui compte, c'est
de pouvoir identier les blocs d'instructions et de savoir comment les modier. Si vous
avez compris que le premier bloc tait l'origine de la transformation des Titre 2 en
Titre 3, c'est bien susant.
Examinez les trois blocs suivants. Ils sont identiques :
With Selection
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse Direction:=wdCollapseStart
End If
.Find.Execute
End With
Avez-vous une ide de leur utilit ? Rchissez un peu. L'exercice consistait eectuer
trois remplacements. Il parat donc logique que chaque bloc soit l'origine d'un remplacement. Si vous examinez les quelques lignes de ce bloc, vous voyez en particulier
l'instruction Execute qui eectue le remplacement :
.Find.Execute Replace:=wdReplaceOne
Ici encore, je vous rassure, il n'est pas ncessaire de comprendre la totalit du code
pour pouvoir le modier. Pour conrmer mes dires, je vais vous demander d'intervenir
sur ce code pour eectuer non pas trois mais, disons, dix remplacements. Je vous laisse
rchir quelques instants. . .
La premire ide qui vient l'esprit consiste copier-coller le bloc de code responsable
d'un remplacement autant de fois que ncessaire. Sept fois en l'occurrence. Bien qu'un
393
Les boucles sont trs importantes en VBA et souvent utilises pour eectuer des remplacements et mises en forme rptitifs.
394
VBA et l'autocompltion
Nous allons voir travers un exemple que VBA ore de nombreuses possibilits trs
puissantes. Pour apprendre les connatre, nous allons utiliser l'autocompltion.
Vous savez que Word permet d'envoyer par e-mail le document en cours d'dition un
correspondant. Cette technique a dj t mentionne dans ce livre mais que diriez-vous
cette fois-ci de le faire avec une macro ? Si j'ai choisi cet exemple, c'est pour montrer
la puissance du langage VBA : une simple instruction va en eet sure pour envoyer
un e-mail !
Basculez sur l'onglet Dveloppeur puis cliquez sur l'icne Enregistrer une macro.
Donnez la macro le nom EnvoiMail et validez en cliquant sur OK. Basculez sur l'onglet
Fichier du Ruban. Cliquez sur Enregistrer et envoyer puis sur Envoyer en tant
que pice jointe. Cela cre un nouveau message ayant comme pice jointe le document en cours d'dition. Cliquez sur l'icne Arrter l'enregistrement du groupe
Code pour mettre n l'enregistrement. La macro est directement oprationnelle. Examinons le code VBA gnr :
Sub EnvoiMail()
'
' EnvoiMail Macro
'
'
ActiveDocument.SendMail
End Sub
Je ne pense pas qu'il soit ncessaire de donner des prcisions. L'unique instruction de
cette macro envoie le document grce SendMail.
D'accord, VBA est trs puissant. Mais existe-t-il d'autres instructions aussi
puissantes que SendMail ? Et comment en avoir la liste ?
C'est justement ce qui est intressant. Il est temps pour nous de parler de la magie de l'autocompltion. Entendez par l la facult qu'a l'diteur VBA de proposer
des choix adapts l'criture de code en cours. Si tout cela n'est pas clair, placez le
.
point d'insertion aprs le l de SendMail et appuyez sur la touche Entre Tapez ActiveDocument et faites suivre ce mot d'un point. Immdiatement, une liste de
mots-cls vous est propose, comme la gure 18.12.
vous de choisir celui qui correspond vos besoins. Par exemple :
Background agit sur l'arrire-plan du document ;
Close ferme le document ;
GoTo lance la commande Atteindre 5 ;
RejectAllRevisions supprime toutes les marques de rvision du document ;
Save enregistre le document ;
5. Onglet Accueil, groupe Modification, icne Rechercher.
395
Pour choisir un mot, cliquez dessus puis appuyez sur la touche Tab du clavier. Avezvous remarqu les deux types d'icnes aches dans la liste ? Les icnes de couleur
verte correspondent des actions et les icnes de couleur grise des proprits(voir
gure 18.13). Vous choisirez les premires pour agir dans le document (excution d'une
instruction, modication d'un lment, envoi d'un e-mail, etc.) et les deuximes pour
avoir des informations sur le document (nom du thme actif, type d'ombrage, largeur,
etc.).
Remplacer m3 par m3
Pour bien suivre ce qui va tre dit dans cette section, je vous suggre d'utiliser le
document vba.docx, en utilisant le code web suivant :
Tlcharger le document
Code web : 469506
Les macros et le code VBA sont souvent utiliss pour eectuer des remplacements globaux dans un document. La technique tudie dans cette section s'intresse un remplacement complexe qui combine l'enregistreur de macros et le dveloppement VBA.
vous de la personnaliser pour qu'elle s'adapte aux cas auxquels vous serez confronts.
Dans un premier temps, nous allons construire la base de la recherche avec l'enregistreur de macros. Basculez sur l'onglet Dveloppeur du Ruban et cliquez sur l'icne
Enregistrer une macro. Donnez la nouvelle macro le nom m3 la nouvelle macro et validez en cliquant sur OK. Basculez sur l'onglet Accueil du Ruban, puis cliquez
sur l'icne Remplacer dans le groupe Modification. La bote de dialogue Rechercher
et remplacer s'ouvre. Tapez m3 dans le champ Rechercher puis. . .
Mais au fait, comment taper m3 dans le champ Remplacer par ? C'est tout bonnement impossible ! Le remplacement global de m3 par m3 ne pourra donc pas
se faire sous l'onglet Remplacer.
Basculez sur l'onglet Rechercher et cliquez sur Suivant. La premire occurrence de
m3 dans le document est surligne. Fermez la bote de dialogue Rechercher et
remplacer en cliquant sur sa case de fermeture. Nous allons maintenant slectionner
.
le 3 . Maintenez enfonce la touche Maj et appuyez sur la touche Droite Le
caractre 3 est slectionn. L'icne exposant n'tant pas directement accessible
dans le Ruban, vous allez dployer le groupe Police de l'onglet Accueil en cliquant
sur la petite icne ache en bas droite de ce groupe, comme la gure 18.15. Cochez
la case Exposant et validez en cliquant sur OK.
397
398
Ne vous laissez pas submerger par l'apparente complexit du code. Ce dernier peut
tre clairement divis en trois blocs.
Le premier recherche la prochaine occurrence de m3 dans le texte :
Selection.Find.ClearFormatting
...
Selection.Find.Execute
399
Vous voyez, ce n'tait pas si dicile. Maintenant, la question est la suivante : comment
rpter ces trois blocs d'instructions pour parcourir tout le document ? Une petite ide ?
Avec une boucle bien sr !
Nous allons encadrer ce code par les instructions suivantes :
While (a<>1)
'Les trois blocs d'instructions
Wend
Ainsi, les deuxime et troisime blocs de code ne seront excuts que dans le cas o un
m3 est trouv. Votre code devrait maintenant ressembler ceci :
Sub m3()
'
' m3 Macro
'
'
While (a <> 1)
Selection.Find.ClearFormatting
With Selection.Find
.Text = "m3"
.Replacement.Text = "m3"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
If Not (Selection.Find.Found) Then
a = 1
Else
401
Accder la vido
Code web : 603458
Figure
atteinte
Pour ceux d'entre vous qui voudraient aller plus loin et qui comprennent l'anglais,
je vous conseille l'excellent site Microsoft Word MVP FAQ Site. Vous y trouverez de
nombreux exemples de macros et de code VBA qui vous permettront de progresser
dans votre apprentissage.
En rsum
Les macros font gagner beaucoup de temps dans les traitements rptitifs ou complexes. Pour crer une nouvelle macro, vous utiliserez l'enregistreur de macros de
Word.
Pour faciliter leur excution, il est possible d'aecter des raccourcis clavier aux macros que vous utilisez le plus souvent ou de leur associer des icnes dans la barre
d'outils Accs rapide.
Il est possible d'excuter automatiquement une macro en lui donnant un nom rserv :
AutoExec (au lancement de Word), AutoNew ( la cration d'un nouveau document),
AutoOpen ( l'ouverture d'un document existant), AutoClose ( la fermeture d'un
document) ou AutoExit ( la fermeture de Word).
Lorsque les macros montrent leurs limites, vous pouvez diter le code VBA gnr
par l'enregistreur de macros.
Les instructions de test If Then Else et les boucles While Wend facilitent l'excution slective et rptitive du code an d'appliquer un traitement des lments qui
vrient une ou plusieurs conditions.
403