André Guyon
(L'Actualité langagière, volume 9, numéro 1, 2012, page 32)

J’entends souvent des collègues parler de macros qu’ils ont créées ou trouvées et qu’ils voudraient mettre en commun. Ma chronique ne s’adresse pas à eux, mais plutôt aux personnes qui n’ont jamais fait de macros. Je vais leur montrer à quel point c’est facile d’en créer.

À l’origine, macro voulait dire macro-instruction, c’est-à-dire une séquence d’actions en une seule commande. Par la suite, les langages de macros sont devenus de véritables langages de programmation très puissants. Ils peuvent maintenant faire bien d’autres choses que des actions limitées au logiciel d’où ils proviennent – par exemple, une macro de Word pourrait trouver un fichier créé par Photoshop et le supprimer.

Une mise en garde avant d’entrer dans le vif du sujet : même si une macro fonctionne bien pour vous, rien ne garantit qu’elle fonctionnera bien ailleurs.

J’utilise présentement la version 2007 de Microsoft Word comme logiciel de traitement de texte. Contrairement aux versions précédentes, quand on installe MS-Office 2007, la partie macros ne s’installe pas. Il est donc probable qu’une partie de ce que je vais montrer ici ne corresponde pas à votre installation actuelle.

Parmi les onglets de mon logiciel, le dernier se nomme Développeur. Pour créer une macro, cliquez sur cet onglet.

Capture d’écran de l’interface Microsoft Word

Les macros de Word se déclinent en deux niveaux. Au premier niveau, le logiciel enregistre tout simplement la dernière opération. Pour reproduire l’opération, il faut lancer la macro ou employer un raccourci-clavier.

Pour les besoins de la chronique, je vais créer une macro qui permet d’inverser deux lettres que j’ai tendance à intervertir. Je tape trop souvent ordianteur au lieu de ordinateur. Je vais donc positionner le curseur juste avant la première des lettres interverties (le a de ordianteur) et lancer la création d’une macro, en cliquant sur Enregistrer une macro.

Capture d’écran de l’interface Microsoft Word

Le logiciel propose un nom par défaut : Macro1, Macro2, etc. Si je crée souvent des macros, un tel nom ne m’aidera pas à me souvenir de la différence entre Macro1 et Macro44, par exemple. C’est pourquoi je nommerai ma macro bdtInverseCaracteres*.

Capture d’écran de l’interface Microsoft Word

Je veux aussi attribuer un raccourci-clavier à cette macro. Attention! Si j’utilise un raccourci-clavier déjà associé à une fonction de Word, la nouvelle macro s’exécutera au lieu de la fonction attendue. Par exemple Ctrl+G, Ctrl+U et Ctrl+I sont les raccourcis-claviers permettant d’insérer respectivement le gras, le souligné et l’italique.

J’attribue donc un raccourci-clavier que je n’utilisais jamais, soit Ctrl+O (touche Ctrl et touche O enfoncées simultanément).

Capture d’écran de l’interface Microsoft Word

J’entre le raccourci-clavier voulu, puis je clique sur le bouton Attribuer, dans le coin inférieur gauche.

La boîte Touches actuelles contient maintenant mon raccourci-clavier. Il suffit de cliquer sur le bouton Fermer pour revenir au texte.

Capture d’écran de l’interface Microsoft Word

Je supprime le a devant le n, puis j’insère un a après le n. Ensuite, je mets fin à l’enregistrement de la macro (Arrêter l’enregistrement).

Capture d’écran de l’interface Microsoft Word

La macro est complète. Elle me permet maintenant de procéder à ces interventions grâce à mon raccourci-clavier Ctrl+O… mais seulement pour ces deux lettres.

Une macro générale

Si je veux généraliser ma macro, je dois passer au deuxième niveau, qui me permet de modifier une macro existante, voire d’en créer une de but en blanc dans l’éditeur de Visual Basic for Applications.

Capture d’écran de l’interface Microsoft Word

Les macros deviennent toutes une sous-routine d’un ensemble.

Voici le code qu’a généré l’enregistrement de ma première macro :

Sub bdtInverseCaracteres()

’ bdtInverseCaracteres Macro


Selection.Delete Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="a"
End Sub

En français, maintenant. Grâce à la macro, le logiciel efface le premier caractère, se déplace d’un caractère sur la droite, puis insère un a à droite. Pour généraliser la macro, je voudrais pouvoir inverser n’importe quelle lettre. Je vais donc ajouter quelques lignes avant celle qui commande l’effacement du premier caractère.

Voici le code de la macro modifiée :

Sub bdtInverseCaracteres()

’ bdtInverseCaracteres Macro


Dim Caractere As String
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Caractere = Selection.Text
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=Caractere
End Sub

Qu’est-ce que j’ai fait? J’ai ajouté trois lignes. D’abord, l’énoncé Dim déclare une variable qui servira de contenant pour le caractère. La ligne qui suit sélectionne un caractère à droite du curseur et la suivante place le caractère dans la variable. Ensuite, dans l’avant-dernière ligne, on a remplacé le fait de toujours insérer a par l’insertion du caractère interverti, quel qu’il soit (la variable Caractere).

Une fois la macro terminée, je peux retourner à mon texte en sélectionnant l’option Fermer et retourner à Microsoft Word du menu Fichier.

Capture d’écran de l’interface Microsoft Word

Voilà. C’était un cours en accéléré sur la création de macros. J’aurais pu vous fournir des milliers de détails supplémentaires sur le sujet. J’espère simplement vous avoir donné le goût de vous approprier la technologie sous-jacente aux macros. Vous êtes mal pris? Vous pouvez toujours consulter le fichier d’aide de Word, mais sachez qu’il existe de nombreux sites bien faits infiniment plus clairs que cette « aide ».

Je suggère souvent aux gens de faire une macro qui enregistre une séquence de commandes en direct, puis d’examiner le code. À la longue, on s’habitue et on voit si on aime ça ou pas.

Je vous souhaite un printemps rempli de macrodécouvertes.

Remarque