Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Résumé : explique aux programmeurs novices comment utiliser Visual Basic pour Applications (VBA) pour étendre Microsoft Word 2010. Cette rubrique présente le langage VBA, contient des instructions sur la manière d’accéder à VBA dans Word 2010 et fournit une solution détaillée à un problème de programmation Word réel ainsi que des conseils de programmation et de débogage.
Dernière modification : lundi 11 mai 2015
S’applique à : Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2010
Dans cet article
Qu’est-ce qu’une macro, pourquoi en aurais-je besoin et comment en créer une ?
Deuxième partie : écriture de macros plus complexes
Conclusion
Ressources supplémentaires
À propos de l’auteur
Date de publication : avril 2010
Auteur : Shauna Kelly
Sommaire
Première partie 1: exemple de macro de bout en bout
Deuxième partie : écriture de macros plus complexes
Conclusion
Ressources supplémentaires
À propos de l’auteur
Qu’est-ce qu’une macro, pourquoi en aurais-je besoin et comment en créer une ?
Une macro vous permet de placer Word en pilote automatique.
Exécuter une tâche fréquente dans Word peut être très frustrant lorsque cela implique à chaque fois une longue série de clics de souris ou de séquences de touches. Lorsque vous écrivez une macro, vous pouvez regrouper une collection de commandes et faire en sorte que Word les démarre en un seul clic ou une seule touche.
Cet article suppose que vous êtes un utilisateur averti de Word mais que vous ne possédez aucune connaissance en développement ou en programmation informatique.
Cet article est composé de deux parties :
La première partie décrit un exemple de bout en bout : comment écrire une macro simple, où l’enregistrer, comment créer un bouton dans la barre d’outils Accès rapide ou créer un raccourci clavier pour exécuter la macro, et comment copier cette macro sur un autre ordinateur (de façon à pouvoir l’utiliser à domicile et au bureau ou à pouvoir la partager avec un collègue).
La seconde partie examine les macros en détail : comment écrire des macros plus complexes et s’assurer que votre macro exécute bien les tâches souhaitées et ne provoque pas d’erreur ou de problème.
Première partie 1: exemple de macro de bout en bout
L’un des objectifs des macros est de vous permettre d’effectuer une tâche en un simple clic ou une simple séquence de touches.
Il m’arrive souvent de créer des documents qui contiennent des liens hypertexte vers des sites Web. Par défaut, Word exige que je suive, ou ouvre, un lien hypertexte en appuyant sur la touche Ctrl pendant que je clique sur le lien. L’image suivante montre l’option de suivi de lien hypertexte par défaut.
Figure 1. Appuyer sur la touche Ctrl et cliquer sur le lien hypertexte pour le suivre
.gif)
L’image suivante montre l’autre option de suivi de lien, qui consiste à cliquer dessus.
Figure 2. Cliquer pour suivre le lien hypertexte
.gif)
Ce comportement par défaut est utile, mais parfois je préfère suivre un lien hypertexte en cliquant dessus (Figure 2). Je peux configurer ce paramètre plusieurs fois par jour. Pour cela, je clique sur le bouton Fichier et, sous Aide, je clique sur Options. Dans la boîte de dialogue Options Word, je clique sur Avancé puis, sous les options Modification, j’active (ou désactive) la case à cocher Appuyer sur CTRL, puis cliquer pour suivre le lien hypertexte et je clique sur OK. Effectuer de manière répétée cette série de clics de souris est assez pénible, c’est pourquoi je souhaiterais pouvoir configurer ce paramètre en un seul clic.
Cette section explique comment créer une macro simple permettant de basculer entre l’utilisation de Ctrl+clic et le simple clic sur le lien hypertexte. Pour créer cette macro, vous allez apprendre à :
créer un fichier de modèle Word prenant en charge les macros (*.dotm) pour stocker votre macro et l’enregistrer dans le dossier de démarrage de Word ;
ouvrir et utiliser Visual Basic Editor, qui fait partie de Word ;
écrire une macro dans Visual Basic Editor ;
tester votre macro ;
créer un bouton dans la barre d’outils Accès rapide afin d’exécuter votre macro ;
créer un raccourci clavier afin d’exécuter votre macro ;
enregistrer votre fichier, le charger en tant que complément et, si nécessaire, le partager avec un collègue ou l’utiliser sur un autre ordinateur.
Cette section décrit chacune de ces étapes.
Création d’un fichier de macro
Avant de commencer à écrire une macro, réfléchissez à la manière et à l’emplacement où vous souhaitez la stocker.
Dans Word, il est possible d’enregistrer les macros dans deux types de fichiers Word : un fichier de document Word prenant en charge les macros (.docm) et un fichier de modèle Word prenant en charge les macros (.dotm). Il est déconseillé de stocker des macros dans un document, c’est pourquoi on les stocke plus souvent dans un fichier de modèle Word prenant en charge les macros (.dotm).
Il est possible d’enregistrer des macros dans le modèle Normal (Normal.dotm), mais cela rend difficile l’organisation ou le partage de vos macros. Il est généralement préférable de créer votre propre fichier et d’y stocker vos macros.
Le meilleur emplacement où enregistrer vos macros dépend de la façon dont vous souhaitez les utiliser. Vous devez déterminer si vous souhaitez les utiliser avec tous les documents avec lesquels vous êtes susceptible de travailler ou uniquement avec certains d’entre eux.
Par exemple, vous pourriez créer un modèle pour les rapports de ventes mensuelles et disposer de macros pour mettre en forme ces rapports. Dans ce cas, enregistrez le fichier de modèle dans le dossier Modèles utilisateur et utilisez ce modèle comme base pour les nouveaux documents. (Pour vérifier l’emplacement du dossier Modèles utilisateur, cliquez sur l’onglet Fichier, puis cliquez sur Options. Dans la boîte de dialogue Options, cliquez sur Avancé, puis sur Emplacement des fichiers.) Si une macro est stockée dans un modèle, seuls les documents attachés à ce modèle peuvent accéder à la macro. Les autres documents ne seront pas en mesure de la « voir ».
Dans cet article, vous allez créer des macros pouvant être utilisées par n’importe quel document. Pour cela, vous allez créer un fichier de modèle prenant en charge les macros. Tout d’abord, fermez tous les fichiers Word ouverts. Pour créer le fichier devant contenir les macros, cliquez sur le bouton Fichier, sur Nouveau, puis sur Mes modèles. Dans la boîte de dialogue Nouveau, sélectionnez la case d’option Modèle, puis cliquez sur OK. Enregistrez le fichier en tant que fichier de modèle prenant en charge les macros sous le nom MyWordTools.dotm dans le dossier de démarrage de Word. (Pour vérifier l’emplacement du dossier de démarrage de Word, cliquez sur l’onglet Fichier, puis cliquez sur Options. Dans la boîte de dialogue Options Word, cliquez sur Avancé, puis sur Emplacements des fichiers.)
Utilisation de Visual Basic Editor
Les macros Word sont écrites dans un langage de programmation appelé Visual Basic pour Applications (VBA).
L’écriture des macros s’effectue dans un emplacement de Word que la plupart des utilisateurs ne voient jamais : Visual Basic Editor (VBE). Vous pouvez ouvrir VBE des trois manières suivantes :
en appuyant sur le raccourci clavier Alt+F11 ;
en cliquant sur le bouton Visual Basic sous l’onglet Développeur. Pour cela, cliquez sur l’onglet Fichier, puis cliquez sur Options. Dans la boîte de dialogue Options Word, cliquez sur Personnaliser le Ruban. Sur le côté droit de la boîte de dialogue, sélectionnez l’onglet Développeur. Cliquez sur OK pour revenir à votre document puis, sous l’onglet Développeur, cliquez sur le bouton Visual Basic ;
en ajoutant la commande Visual Basic à la barre d’outils Accès rapide.
Avant de commencer à utiliser VBE, dans le menu Outils, cliquez sur Options. Dans la boîte de dialogue Options, sous l’onglet Éditeur, vérifiez que toutes les cases à cocher sont activées.
En haut à gauche de Visual Basic Editor se trouve l’Explorateur de projets, où figurent tous les fichiers ouverts actuellement dans Word. Vous y trouverez Normal (autrement dit Normal.dotm) et MyWordTools (le nouveau fichier que vous venez de créer).
L’image suivante montre le projet MyWordTools dans l’Explorateur de projets de Visual Basic Editor.
Figure 3. Explorateur de projets de Visual Basic Editor
.gif)
Dans votre fichier, les macros sont stockées dans des modules. Pour ajouter un module à votre fichier, dans l’Explorateur de projets, sélectionnez le fichier MyWordTools (Figure 3). Dans le menu Insertion, cliquez sur Module. Lorsque vous ajoutez un module à votre fichier, ce module est ajouté à l’Explorateur de projets et à la fenêtre Propriétés affichée juste au-dessous (Figure 4). Vous pouvez renommer un module à l’aide de la fenêtre Propriétés. Conservez le nom Module1.
L’image suivante montre le Module1 dans l’Explorateur d’objets de Visual Basic Editor.
Figure 4. Explorateur d’objets de Visual Basic Editor
.gif)
Pour finir, vous constaterez que l’entrée correspondant à votre fichier se nomme TemplateProject. Bien que cela ne soit pas nécessaire, nous vous conseillons de lui donner un nom plus descriptif. Pour cela, cliquez avec le bouton droit sur l’entrée correspondant au fichier MyWordTools, puis cliquez sur Propriétés de TemplateProject dans le menu contextuel (Figure 5).
L’image suivante montre l’élément de menu Propriétés de TemplateProject.
Figure 5. Élément de menu Propriétés
.gif)
Dans la boîte de dialogue Projet de modèle -Propriétés du projet, affectez au projet le nom MyWordTools.
Écriture de votre macro
C’est dans le grand espace vide situé à droite dans VBE que vous rédigez le code de votre macro. Si cette zone n’est pas affichée à l’écran, dans le menu Affichage, cliquez sur Code pour afficher la fenêtre de code. Word insère automatiquement l’instruction Option Explicit en haut de la fenêtre de code. Ne la supprimez pas.
Vous souhaitez créer une macro qui permet de basculer entre les deux paramètres possibles, dans Word, pour suivre un lien hypertexte. Cette macro fonctionnera comme d’autres boutons qui font basculer un paramètre dans Word. Le bouton Gras sous l’onglet Accueil, par exemple, met le texte en gras s’il ne l’est pas et supprime cette mise en forme s’il est actuellement en gras.
Copiez et collez l’exemple de code de macro suivant dans la fenêtre de code.
Sub ToggleHyperlinkCtrlClick()
Options.CtrlClickHyperlinkToOpen = Not Options.CtrlClickHyperlinkToOpen
End Sub
Il s’agit d’une petite macro nommée ToggleHyperlinkCtrlClick, qui ne compte qu’une seule ligne de code signifiant « Modifier l’option Word qui détermine si je dois utiliser Ctrl+clic pour ouvrir un lien hypertexte en activant l’opposé de sa valeur actuelle, c’est-à-dire Not sa valeur actuelle » (Figure 6).
L’image suivante fournit une explication ligne par ligne de la méthode ToggleHyperLinkCtrlClick.
Figure 6. Explication de la méthode ToggleHyperLinkCtrlClick
.gif)
Test de votre macro
Pour tester votre macro, appliquez la procédure suivante.
Pour tester la macro
Disposez les fenêtres Word et VBE côte à côte.
Cliquez sur la fenêtre principale de Word. Tapez plusieurs paragraphes de texte dans le document MyWordTools.dotm. Insérez quelques liens hypertexte dans votre texte (Figure 7).
L’image suivante montre le document MyWordTools et le code ToggleHyperLinkCtrlClick dans VBE côte à côte.
Figure 7. Document et Visual Basic Editor côte à côte
.gif)
Dans VBE, cliquez n’importe où dans votre macro. Pour exécuter la macro, dans le menu Exécuter, cliquez sur Exécuter Sub/Formulaire utilisateur ou appuyez sur F5.
Le paramètre de suivi de lien hypertexte sera modifié. Placez le curseur de la souris sur un lien hypertexte dans la fenêtre principale de Word pour constater que l’info-bulle a changé.
Réexécutez la macro pour faire basculer le paramètre.
Vous pouvez également exécuter votre macro dans Word proprement dit. Sous l’onglet Affichage, dans le groupe Macros, cliquez sur le bouton Macros. Votre macro ToggleHyperlinkCtrlClick sera répertoriée dans la boîte de dialogue Macros. Pour exécuter votre macro, cliquez sur son nom, puis sur le bouton Exécuter.
Création d’un bouton dans la barre d’outils Accès rapide afin d’exécuter votre macro
Pour bénéficier d’un accès à votre macro en un seul clic, vous pouvez ajouter un bouton à la barre d’outils Accès rapide. Pour cela, procédez comme suit.
Pour créer un bouton dans la barre d’outils Accès rapide
Cliquez avec le bouton droit sur la Barre d’outils Accès rapide, puis cliquez sur Personnaliser la barre d’outils Accès rapide dans le menu contextuel.
Sous Personnaliser la barre d’outils Accès rapide, dans la liste Choisir les commandes dans les catégories suivantes, sélectionnez Macros.
Dans la liste Personnaliser la barre d’outils Accès rapide, sélectionnez MyWordTools.dotm. (Vous devez sélectionner MyWordTools.dotm pour que Word enregistre le bouton de la barre d’outils Accès rapide dans le fichier MyWordTools.dotm. Ceci est nécessaire pour que ce bouton soit présent lorsque vous copiez ce fichier sur un autre ordinateur.)
Sélectionnez la macro ToggleHyperlinkCtrlClick , puis cliquez sur Ajouter.
Cliquez sur le bouton Modifier pour sélectionner un symbole et remplacer le nom par ToggleHyperlinkCtrlClick.
Vous pouvez maintenant exécuter votre macro à tout moment en cliquant sur le nouveau bouton dans la barre d’outils Accès rapide.
Création d’un raccourci clavier pour exécuter votre macro
Vous pouvez également créer un raccourci clavier pour exécuter votre macro. Pour cela, procédez comme suit.
Pour créer un raccourci clavier pour exécuter la macro
Cliquez avec le bouton droit sur la Barre d’outils Accès rapide, puis cliquez sur Personnaliser le Ruban dans le menu contextuel. En regard de Raccourcis clavier, cliquez sur le bouton Personnaliser.
L’image suivante montre la boîte de dialogue Personnaliser le clavier.
Figure 8. Boîte de dialogue Personnaliser le clavier
.gif)
Dans la boîte de dialogue Personnaliser le clavier (Figure 8), vous devez :
dans la liste Catégories, sélectionner Macros ;
dans la liste Macros, cliquer sur le nom de votre macro ;
cliquer dans la zone Nouvelle touche de raccourci et taper le raccourci clavier que vous souhaitez utiliser. Pour ma part, j’ai choisi Alt+H, comme Hypertexte. Cette boîte de dialogue indique également que ce raccourci n’est pas affecté actuellement et que mon choix n’interfèrera donc avec aucun raccourci clavier existant ;
dans la liste Enregistrer dans, sélectionner MyWordTools.dotm. (Vous devez sélectionner MyWordTools.dotm pour que Word enregistre le raccourci clavier dans le fichier MyWordTools.dotm. Ceci est nécessaire pour que le bouton soit présent lorsque vous copiez ce fichier sur un autre ordinateur.) ;
cliquer sur Affecter.
Pour exécuter votre macro, appuyez sur Alt+H.
Dernières touches
Vous avez créé un fichier pour stocker votre macro (MyWordTools.dotm), ajouté un module (Module1), créé votre macro (sous le nom ToggleHyperlinkCtrlClick), créé un bouton dans la barre d’outils Accès rapide pour démarrer la macro et créé un raccourci clavier pour démarrer la macro. Maintenant, enregistrez le fichier MyWordTools.dotm (dans VBE ou dans la fenêtre principale de Word).
Votre travail dans VBE étant maintenant terminé, vous pouvez le fermer et revenir dans Word. Pour cela, dans VBE, cliquez sur le menu Fichier, puis sur Fermer et revenir à Microsoft Word.
Pour tester votre macro, cliquez sur votre bouton dans la barre d’outils Accès rapide. Après avoir confirmé son bon fonctionnement, enregistrez et fermez le fichier.
Gestion et chargement de compléments
L’objectif est que cette macro soit disponible quel que soit le document sur lequel vous travaillez. Cependant, si vous créez un document (avec Ctrl+N), votre bouton sera absent de la barre d’outils Accès rapide. Vous n’aurez aucun moyen de démarrer votre macro.
Pour faire en sorte que la macro stockée dans MyWordTools.dotm soit accessible à tout document ouvert, vous devez charger MyWordTools.dotm en tant que complément. (Lorsqu’un fichier .dotm est utilisé comme complément, il porte le nom de « modèle global ».) Vous pouvez charger un fichier .dotm comme complément manuellement ou automatiquement :
Pour charger manuellement un fichier .dotm comme complément, fermez le fichier .dotm s’il est ouvert. Sous l’onglet Développeur, cliquez sur le bouton AddIns. Dans la boîte de dialogue Modèles et compléments, cliquez sur Ajouter, recherchez votre fichier .dotm, puis cliquez sur Ouvrir.
Pour pouvoir être chargé automatiquement comme complément, un fichier .dotm doit être enregistré dans le dossier de démarrage de Word. Quittez et redémarrez Word. Word chargera votre complément automatiquement.
Vous pouvez consulter la liste des compléments chargés actuellement dans Word. Sous l’onglet Développeur, cliquez sur le bouton Compléments.
MyWordTools.dotm ayant été enregistré dans le dossier de démarrage de Word, vous pouvez fermer et redémarrer Word. Word chargera automatiquement votre fichier MyWordTools.dotm en tant que complément. Le bouton devrait être présent dans la barre d’outils Accès rapide et vous devriez pouvoir utiliser votre macro.
Lorsque MyWordTools.dotm est chargé en tant que complément, le texte que vous avez laissé dans la fenêtre principale de Word dans MyWordTools.dotm disparaît. Word n’utilise pas le contenu du document proprement dit. Supprimez le texte de la fenêtre principale de Word avant d’enregistrer un fichier .dotm utilisé comme complément.
Il convient d’effectuer la distinction entre l’ouverture d’un fichier de complément (par exemple par un clic sur Fichier puis sur Ouvrir) et le chargement d’un complément (par exemple à l’aide du bouton Compléments de la barre Développeur). Ouvrez un fichier lorsque vous souhaitez le modifier et le tester. Chargez le fichier comme complément lorsque vous souhaitez l’utiliser.
Avertissement
Ne jamais charger un fichier en tant que complément lorsqu’il est actuellement ouvert dans Word. Ne jamais ouvrir et modifier un fichier de complément s’il est actuellement chargé en tant que complément. Ces opérations peuvent provoquer un comportement imprévisible.
Utilisation de votre macro sur un autre ordinateur
Pour utiliser votre macro, vous devez avoir :
le code de macro ;
un bouton qui exécute la macro dans la barre d’outils Accès rapide ;
le raccourci clavier qui exécute la macro.
Vous avez enregistré ces trois éléments dans MyWordTools.dotm. Par conséquent, pour utiliser votre macro sur un autre ordinateur, ou pour partager votre macro, il vous suffit de copier MyWordTools.dotm dans le dossier de démarrage de Word sur un autre ordinateur. Lorsque vous démarrez Word, Word charge MyWordTools.dotm en tant que complément et votre macro, le bouton et le raccourci clavier sont tous disponibles.
Deuxième partie : écriture de macros plus complexes
L’exemple de bout en bout de la première partie contient une macro simple d’une seule ligne. La deuxième partie explique comment étendre ce processus élémentaire afin de créer des macros complexes.
Ajout de macros supplémentaires au fichier MyWordTools.dotm
Le fichier que vous avez créé lors de la première partie, MyWordTools.dotm, contient désormais un module (Module1), qui contient une macro (ToggleHyperlinkCtrlClick).
Vous ne devez pas modifier un fichier pendant qu’il est chargé comme complément. Pour ajouter des macros supplémentaires à votre fichier, vous devez :
décharger le fichier comme complément. Pour cela, sous l’onglet Développeur, cliquez sur Compléments, puis désactivez la case à cocher correspondant à votre complément et cliquez sur OK ;
ouvrir le fichier afin de le modifier. Pour cela, cliquez sur l’onglet Fichier. Sous Informations, cliquez sur Ouvrir. Recherchez le fichier, cliquez dessus, puis cliquez sur Ouvrir.
Lorsque vous fichier est ouvert pour modification, vous pouvez :
ajouter une macro au module existant, Module1, en tapant du texte dans la fenêtre de code, ou
ajouter un nouveau module au fichier et taper une nouvelle macro dans le nouveau module.
La méthode la plus appropriée dépendra de la complexité de vos macros. Si vous n’avez que quelques brèves macros, il est plus simple de les placer toutes dans un même module. Si vous avez plusieurs longues macros, il peut être préférable de les stocker dans des modules distincts et de renommer chaque module afin d’indiquer les macros qu’il contient.
Une fois que vous avez ajouté une nouvelle macro à votre fichier, vous pouvez la tester, créer un bouton dans la barre d’outils Accès rapide et créer un raccourci clavier, exactement comme vous l’avez fait pour votre première macro.
Commentaires
Les développeurs professionnels incluent généralement des commentaires dans le code afin d’expliquer ce que ce code est censé faire.
Vous pouvez ajouter des commentaires à vos macros en faisant précéder le texte du commentaire d’une apostrophe simple. Par défaut, VBE affiche les commentaires en vert.
Écriture de code robuste : macro de tri de texte
Deux aspects doivent être pris en considération si vous partagez une macro avec un collègue. Tout d’abord, il est presque certain que l’ordinateur de cette autre personne n’est pas configuré comme le vôtre. Ensuite, il est probable que l’autre personne sera moins tolérante que vous envers les approximations et les imperfections du code. Votre code doit par conséquent être robuste.
Lorsqu’une macro est robuste, l’utilisateur ne reçoit aucun message d’erreur inexplicable et la macro fait ce qu’elle est censée faire, ni plus ni moins.
Afin d’illustrer quelques aspects liés à la robustesse du code, considérez la macro suivante qui sert à trier du texte.
Le tri de plusieurs paragraphes de texte nécessite plusieurs clics de souris. Si vous devez trier du texte fréquemment, il peut être utile de disposer d’un bouton unique pour effectuer un tri simple (et dans le cas où il vous faudrait effectuer un tri plus complexe, le bouton intégré sera toujours disponible sous l’onglet Accueil). Cette action de macro est illustrée dans l’exemple de code suivant.
Sub SortText1()
' A macro to sort the selected text
Selection.Sort
End Sub
Vous pouvez tester cette macro comme vous l’avez fait pour la précédente. Placez les fenêtres de Word et de VBE côte à côte. Dans la fenêtre principale de Word, tapez plusieurs paragraphes de texte et sélectionnez-les. Dans VBE, exécutez la macro en cliquant dans le code de macro et en appuyant sur F5. Word tri les paragraphes par ordre alphabétique.
Notre macro SortText1 semble fonctionner correctement. Cependant, elle n’est pas robuste. Pour le constater, insérez une image dans votre document. Faites-en une image flottante. Pour cela, sous l’onglet Format, sous Outils Image, dans le groupe Organiser, cliquez sur Position. Sélectionnez l’une des options de position de page Avec habillage du texte.
Sélectionnez votre image, puis exécutez la macro SortText1. Étant donné qu’il est impossible pour Word de trier une image flottante, un message d’erreur Visual Basic s’affiche. Cette macro n’est pas robuste !
Notre ligne de code, Selection.Sort, ne fonctionne correctement que si l’on a sélectionné du texte ordinaire. Avant de tenter de trouver une solution, considérez le problème suivant.
Avertissement
Si vous cliquez dans votre document sans sélectionner de texte et que vous exécutez la macro SortText1, le document entier est trié. Au mieux, ce comportement est inattendu ; au pire, il risque d’endommager les données.
L’exemple de code suivant montre comment restreindre la macro afin d’effectuer un tri uniquement lorsque plusieurs paragraphes de texte sont sélectionnés.
Sub SortText2()
' A macro to sort the Selection if the user has selected more than one
' paragraph of text.
If Selection.Paragraphs.Count > 1 Then
Selection.Sort
End If
End Sub
Exécutez la macro SortText2. Contrairement à SortText1, cette macro n’affiche pas de message d’erreur si vous sélectionnez une image. Par ailleurs, elle empêche le tri accidentel du document entier. Pour voir ce qui se produit, appliquez la procédure suivante pour parcourir le code ligne par ligne.
Pour parcourir le code VBA
Cliquez dans la fenêtre principale de Word et sélectionnez votre image.
Cliquez n’importe où dans la macro SortText2.
Appuyez sur F8. Word met en surbrillance la première ligne de la macro (Sub SortText2()).
Appuyez sur F8 de façon répétée afin de parcourir le code ligne par ligne.
L’utilisation de la touche F8 pour parcourir le code est un bon moyen de découvrir ce que fait ce code et de résoudre les problèmes liés au code. Dans le cas présent, on constate que, en cas de sélection d’une image, Word traite l’instruction If mais ignore l’instruction Selection.Sort.
La nouvelle macro SortText2 comporte plusieurs aspects intéressants :
On peut utiliser If et End If pour déterminer si Word traite le code ou l’ignore.
La ligne If se termine par le mot clé Then.
À chaque If doit correspondre un End If.
Cette macro utilise Selection à deux reprises. Selection.Paragraphs.Count fournit des informations sur ce que l’utilisateur a sélectionné. Selection.Sort tri le texte sélectionné.
L’exemple de code suivant montre comment étendre cette macro de façon à fournir des informations à l’utilisateur à l’aide des mots clés Else et MsgBox.
Sub SortText3()
If Selection.Paragraphs.Count > 1 Then
' The user has selected more than one paragraph of text.
' Sort the selection.
Selection.Sort
Else
' Tell the user what to do.
MsgBox "Please select two or more paragraphs and try again."
End If
End Sub
Il découle de cette macro trois constatations :
On peut utiliser If...Then, Else et End If pour déterminer si Word traite ou ignore le code.
L’utilisation d’une instruction Else est facultative. Chaque instruction If peut avoir zéro ou une instruction Else.
Si vous utilisez Else, une instruction End If est nécessaire.
La commande affiche un message à l’utilisateur à l’écran. Tapez le texte du message après le mot clé MsgBox et placez-le entre guillemets doubles. Si vous spécifiez du texte dans une macro (tel que le texte de ce message), vous devez le placer entre guillemets ("). Sans guillemets, Word tente de trouver « Please » dans le modèle objet Word. Word ignorant ce que signifie « Please », la macro provoquerait un message d’erreur.
Pour observer le problème, appliquez la procédure suivante.
Pour tester la macro SortText3
Créez un bouton dans la barre d’outils Accès rapide pour démarrer la macro SortText3. Faites en sorte que Word enregistre le bouton dans MyWordTools.dotm.
Testez votre bouton afin de vous assurer qu’il exécute la macro SortText3.
Enregistrez le fichier MyWordTools.dotm.
Quittez et redémarrez Word.
Si un ou plusieurs documents sont ouverts, fermez-les.
Testez de nouveau votre bouton dans la barre d’outils Accès rapide.
Un message d’erreur doit s’afficher. Cette erreur se produit car la première ligne de la macro fait référence à la Sélection. Le complément est chargé. Si aucun document n’est ouvert dans la fenêtre principale de Word, il n’existe aucune Selection. Sans Selection ne peut pas exécuter le code de votre macro.Word
Apportez une modification supplémentaire à la macro afin de la rendre robuste. Ajoutez un commentaire en haut de la macro afin que tout le monde puisse savoir quelle est sa fonction.
Déchargez le complément, puis ouvrez le fichier afin de le modifier. Remplacez votre macro existante par l’exemple de code suivant.
Sub SortText()
' A macro to sort the selected text, if the user has selected
' more than one paragraph
If Documents.Count > 0 Then
' The user has at least one document open.
If Selection.Paragraphs.Count > 1 Then
' The user has selected more than one paragraph
' of text, so sort it.
Selection.Sort
Else
' Tell the user what to do.
MsgBox "Please select two or more paragraphs and try again."
End If
End If
End Sub
Dans la version finale de SortText, cet exemple utilisait des blocs If…End If imbriqués. Il est important de mettre en retrait les lignes de code. Chaque If est associé à l’instruction End If correcte.
Une macro qui n’est pas robuste peut avoir les conséquences suivantes :
messages d’erreur (par exemple comme lorsque l’objet Selection était utilisé mais qu’aucun document, et par conséquent aucune Selection, n’était ouvert), ou
comportement indésirable (par exemple comme lorsque la commande Selection.Sort a trié accidentellement tout le document).
Voici quelques conseils pour vous aider à écrire des macros robustes.
Si votre macro fait référence à la Selection, créez un document test et testez votre macro en l’exécutant après avoir sélectionné différentes parties du document : effectuez un clic simple de façon à ne sélectionner aucun texte, déplacez le curseur en haut ou en bas du document, ou sélectionnez un mot unique, plusieurs paragraphes, une image, tout ou partie d’un tableau, du texte dans l’en-tête ou le pied de page, du texte dans une note de bas de page, une note de fin ou un commentaire, et ainsi de suite.
Fermez votre fichier, chargez-le en tant que complément et testez votre macro afin de vous assurer qu’elle fonctionne si aucun document n’est ouvert. Utilisez If Documents.Count > 0 pour vérifier si un document est ouvert.
Présentation du modèle objet Word
Les macros que nous avons utilisées jusqu’à maintenant ont fait appel à trois éléments Word importants :
Options. Il s’agit des options utilisées pour configurer Word.
Documents. Il s’agit de tous les documents actuellement ouverts dans Word. Vous pouvez utiliser le mot clé ActiveDocument pour faire référence au document actif.
Selection. Il s’agit de ce que l’utilisateur a sélectionné dans ActiveDocument : un mot unique, plusieurs paragraphes, une image ou tout autre type de contenu.
Pour chacune de ces macros, les éléments de niveau inférieur suivants ont été utilisés :
Selection.Sort
Ces éléments (Options, Documents et Selection) portent le nom d’Objets et font partie du modèle objet Word.
Un modèle objet est une hiérarchie. La hiérarchie inclut tous les éléments Word que vous pourriez souhaiter qu’une macro contrôle. Par exemple, l’objet ActiveDocument fait référence au document actif.
Si votre document actif contient un tableau d’au moins trois lignes et deux colonnes, le code suivant permet d’afficher le texte de la seconde cellule de la troisième ligne du premier tableau dans le document actif.
MsgBox ActiveDocument.Tables(1).Rows(3).Cells(2).Range.Text
Une macro peut manipuler un objet (tel que l’objet Selection ou l’objet ActiveDocument). En fait, il existe deux manières de manipuler un objet : grâce aux méthodes et aux propriétés.
Les méthodes s’apparentent à des verbes, dans le sens où elles décrivent une action. Par exemple :
ActiveDocument.PrintPreview
ActiveDocument.AcceptAllRevisionsShown
Les propriétés s’apparentent à des adjectifs, dans le sens où elles décrivent des objets. Par exemple :
MsgBox ActiveDocument.Paragraphs(1).Range.Text
ActiveDocument.Paragraphs(1).Range.Text = "New text for Paragraph 1"
Dans le premier exemple, la macro « lit » la propriété Text et affiche le texte dans une boîte de message. Dans le second exemple, elle « écrit » (ou définit) la propriété Text. L’exécution de cette ligne de code remplace le texte existant dans le premier paragraphe par « New text for Paragraph 1 ».
En général, votre macro peut « lire » ou « écrire » une propriété. Toutefois, certaines propriétés sont en lecture seule. Par exemple, l’objet Documents possède une propriété nommée .Count. Considérez l’exemple qui suit :
MsgBox Documents.Count ' Reports the number of currentlyopen documents.
Documents.Count = 4 ' Does not work: .Count is a readonly property.
Écriture de code raccourci : macro qui fait basculer l’affichage des limites de texte
Lorsque je modifie un gros document, j’apprécie de voir les limites de texte dans mon document. Lorsque j’effectue une révision, je préfère désactiver les limites de texte. Il peut m’arriver d’activer et de désactiver l’affichage des limites de texte à de nombreuses reprises durant la journée. Pour cela, je clique sur le bouton Fichier et, sous Aide, je clique sur Options. Dans la boîte de dialogue Options Word, je clique sur Avancé puis, sous Afficher le contenu du document, j’active (ou désactive) la case à cocher Afficher les limites de texte et je clique sur OK. Effectuer cette séquence de clics de souris de manière répétée est quelque peu frustrant. Je préfèrerais pouvoir cliquer une seule fois afin d’activer ou de désactiver l’affichage des limites de texte.
L’exemple de code suivant est une macro qui sert à faire basculer l’affichage des limites de texte.
Sub ToggleTextBoundaries1()
ActiveDocument.ActiveWindow.View.ShowTextBoundaries = Not ActiveDocument.ActiveWindow.View.ShowTextBoundaries
End Sub
Word ne se soucie pas de la longueur de la ligne de code, mais elle prend du temps à taper et peut se révéler difficile à lire. Pour raccourcir la macro et faciliter sa lecture, utilisez le mot clé With comme indiqué dans l’exemple de code suivant.
Sub ToggleTextBoundaries2()
With ActiveDocument.ActiveWindow.View
.ShowTextBoundaries = Not .ShowTextBoundaries
End With
End Sub
Dans le modèle objet, vous pouvez « explorer » d’un objet à un autre en plaçant un point (« . ») entre chaque élément de la hiérarchie. Le point séparant un objet enfant de son parent, vous ne pouvez pas commencer une ligne de code par un point, hormis en cas d’utilisation du mot clé With.
Chaque With doit être associé à une instruction End With. Entre With et End With, vous pouvez placer un point pour commencer un raccourci.
With ActiveDocument.ActiveWindow.View
' Between With and End With you can use
' a period to begin shortcut code.
' The shortcut will refer to ActiveDocument.ActiveWindow.View.
End With
Par exemple, entre ce With et End With, le raccourci .ShowTextBoundaries fait référence à ActiveDocument.ActiveWindow.View.ShowTextBoundaries.
Lorsque vous avez du code qui fait référence au même objet à plusieurs reprises, l’utilisation de With et End With permet de réduire la quantité de code à rédiger et de faciliter sa lecture.
Cette macro n’est pas encore robuste, mais vous pouvez créer une version finale robuste à l’aide de l’exemple de code suivant.
Sub ToggleTextBoundaries()
If Documents.Count > 0 Then
With ActiveDocument.ActiveWindow.View
.ShowTextBoundaries = Not .ShowTextBoundaries
End With
End If
End Sub
Dans cette version finale de ToggleTextBoundaries, un bloc With…End With est imbriqué dans un bloc If…End If. La mise en retrait des lignes vous permet de vous assurer que chaque With est associé à son End With et que chaque instruction If est associée à son instruction End If.
Utilisation de With et de l’objet Selection : macro d’insertion d’une section Paysage
Voici un exemple plus complet d’utilisation du mot clé With : une macro qui insère une section Paysage à l’emplacement du curseur.
Cette macro utilise le mot clé With avec l’objet Selection (autrement dit, With Selection). À mesure que vous vous familiariserez avec l’écriture de macro, vous utiliserez de moins en moins le mot clé Selection, car vous vous rendrez compte qu’il est plus efficace de faire appel à un objet Range. En étudiant cette macro, vous découvrirez comment Word gère l’objet Selection. Word et VBE étant ouverts côte à côte, cliquez dans la macro et appuyez sur F8 de manière répétée afin de parcourir la macro ligne par ligne et d’observer ce qui se produit dans la fenêtre principale de Word.
Cette macro montre également que, lorsque vous avez de nombreuses lignes de code, il est préférable de les scinder en « paragraphes » logiques, avec des commentaires décrivant ce que le code est censé faire.
Public Sub InsertLandscapeSectionHere()
' Purpose: Insert a landscape section at the insertion point,
' and insert text to tell the user where the landscape section is.
If Documents.Count > 0 Then
' The user has a document open, so insert a
' landscape section.
With Selection
' Do not accidentally over-write selected text
.Collapse Direction:=wdCollapseStart
' Insert section breaks with blank paragraphs
' in the new section.
.TypeParagraph
.Style = ActiveDocument.Styles(wdStyleNormal)
.InsertBreak Type:=wdSectionBreakNextPage
.TypeParagraph
.TypeParagraph
.TypeParagraph
.InsertBreak Type:=wdSectionBreakNextPage
.MoveUp Unit:=wdLine, Count:=3
' Set the orientation of new section to landscape.
.PageSetup.Orientation = wdOrientLandscape
' Provide guidance to the user.
.TypeText Text:="Your landscape section starts here."
End With
Else
' Tell the user what to do.
MsgBox "Please open a document and try again."
End If
End Sub
Vous observerez deux types de syntaxes dans cette macro :
La première syntaxe utilise un signe égal (=) :Selection.PageSetup.Orientation = wdOrientLandscape
La seconde syntaxe utilise un signe deux-points et un signe égal (=) :Selection.InsertBreak Type:=wdSectionBreakNextPage
Pour plus d’informations sur les différences entre ces types de syntaxes, voir l’article intitulé « Présentation de la syntaxe Visual Basic » dans l’aide de VBE.
En savoir plus sur les macros Word et Visual Basic Editor
Visual Basic Editor (VBE) inclut des outils destinés à vous aider à rédiger vos propres macros. Voici une liste des éléments à prendre en considération :
L’enregistreur de macro Word est un outil puissant. Si vous souhaitez écrire une macro mais que vous avez des doutes sur les composants du modèle objet Word à utiliser, l’enregistreur de macro est le partenaire idéal. Pour plus d’informations, voir Enregistrement d’une macro afin de générer du code et Comment modifier une macro enregistrée.
Lorsque vous tapez le nom d’un objet du modèle objet Word (tel que Selection ou ActiveDocument) et que vous tapez ensuite un point (.),Word affiche une liste de toutes les propriétés et méthodes de cet objet. Pour plus d’informations, voir Prise en main de VBA en 15 minutes.
La fenêtre Exécution dans VBE peut vous aider à en savoir plus sur le modèle objet Word et à tester des macros simples. Pour plus d’informations, voir Extension de Word 2007, Excel 2007 et PowerPoint 2007 avec une seule ligne de code VBA.
Vous pouvez personnaliser le menu et les barres d’outils de VBE. Une personnalisation utile consiste à créer des raccourcis clavier pour les commentaires. Pour cela, cliquez avec le bouton droit sur un emplacement vierge à proximité du menu ou des barres d’outils et sélectionnez Personnaliser. Dans la boîte de dialogue Personnaliser, sous l’onglet Barres d’outils, sélectionnez la barre d’outils Modifier. Laissez la boîte de dialogue Personnaliser ouverte. Dans la barre d’outils Modifier, cliquez avec le bouton droit sur le bouton Ajouter des marques de commentaire, remplacez le nom par &Commenter, puis cliquez sur Image et Texte. Faites de même avec le bouton Annuler les marques de commentaire et renommez-le &Annuler les commentaires. Vous pouvez maintenant sélectionner plusieurs lignes de code et utiliser les raccourcis clavier Alt+C et Alt+U pour commenter le code sélectionné ou en annuler les commentaires.
VBE offre une quantité importante d’informations d’Aide qui constituera votre source principale d’informations relatives au modèle objet Word :
Pour obtenir des informations d’ordre général, dans VBE, dans le menu Aide, cliquez sur Aide sur Microsoft Visual Basic pour Applications. Assurez-vous d’afficher la Table des matières en cliquant sur la petite icône en forme de livre dans la barre d’outils de la visionneuse d’aide du client. Ceci rendra l’exploration de l’aide au développement beaucoup plus intuitive. En particulier, sous Concepts, consultez les rubriques du FAQ Visual Basic.
Pour obtenir une aide spécifique sur un mot clé ou un objet du modèle objet Word (tel que ActiveDocument), cliquez dans le mot et appuyez sur F1 pour lire l’aide relative au mot clé ou à l’objet.
Conclusion
Les macros Word peuvent être longues, complexes et puissantes. Vous pourriez écrire une macro pour discuter avec une base de données externe, effectuer des calculs et renvoyer le résultat à Word. Vous pouvez également écrire une macro dans Word afin de contrôler Excel, PowerPoint ou Outlook. Parfois, les macros rudimentaires peuvent être utiles et vous faire gagner du temps.
Si votre macro a pour but de mettre du texte en forme, il peut être préférable de créer un Style plutôt que d’écrire une macro. Si la macro doit contrôler la mise en page d’un document, il peut être préférable de créer un modèle. Par ailleurs, il se peut qu’il existe une commande intégrée qui puisse être ajoutée à la barre d’outils Accès rapide (lors de la personnalisation de la barre d’outils Accès rapide, dans la liste Choisir les commandes dans les catégories suivantes, cliquez sur Toutes les commandes).
Amusez-vous à rédiger des macros, mais ne réinventez pas la roue en écrivant une macro dont la fonction est déjà remplie par Word.
Ressources supplémentaires
Pour plus d’informations, voir les ressources suivantes :
Extension de Word 2007, Excel 2007 et PowerPoint 2007 avec une seule ligne de code VBA
Utilisation de VBA pour mettre en forme de longs documents Word 2007 en un temps record
Vidéo : utilisation de VBA pour contrôler des commandes intégrées dans Office System 2007
Webcast : L’utilisation quotidienne de VBA est plus simple que vous ne pensez
À propos de l’auteur
Shauna Kelly développe des compléments et des modèles Word pour aider les utilisateurs dans les administrations et les entreprises à utiliser Word plus efficacement. Elle est MVP spécialiste de Microsoft Word depuis 2002.