formateur informatique

Formater toutes les occurrences du texte sélectionné

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Formater toutes les occurrences du texte sélectionné
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Automatiser les réglages

Au fil des astuces VBA Word, nous progressons. Dans ce nouveau volet, nous souhaitons ajouter une nouvelle fonctionnalité à notre ruban d'outils. Elle doit consister à formater automatiquement le ou les termes sélectionnés par l'utilisateur et ce, dans tout le document. Pour cela, il est question d'interagir en offrant une boîte de dialogue de confirmation restituant la sélection. A confirmation, le traitement VBA global doit être engagé.

Boîte de dialogue VBA Word pour formater le texte sélectionné dans tout le document

Sur l'exemple illustré par la capture, après un clic de l'utilisateur sur un bouton de macro dans le ruban, une boîte de dialogue de type InputBox surgit. Elle affiche fièrement le texte sélectionné par l'utilisateur. Si ce dernier clique sur le bouton Ok, le code VBA est déclenché pour formater automatiquement toutes les occurrences du terme dans le document. Il s'agit d'un bon moyen d'optimiser les opérations de mise en forme.

Document source
Pour la démonstration de cette nouvelle astuce nous avons besoin d'agir sur un document Word offrant suffisamment de matière. Il s'agit d'un document à partir duquel nous avons travaillé au cours des épisodes précédents. Il est composé d'une page de garde, d'un sommaire et d'un contenu qui débute à partir de la troisième page. Mais cette troisième page est considérée fort naturellement comme la première dans la numérotation opérée en pied de page.

Ce petit fascicule d'entraînement traite des graphiques dans Excel. Le mot Graphiques est donc un terme important de ce petit mémo. Il convient de mettre en valeur explicitement toutes ses occurrences dans l'intégralité du document. Et bien entendu, il n'est pas question d'envisager d'intervenir manuellement. C'est pour cela entre autres que le VBA Word existe. Une fois que nous aurons créé la procédure capable de faire ressortir le ou les termes sélectionnés, nous pourrons la traduire en action de macro universelle, utile pour toutes les utilisations futures de Word.

Dialogue InputBox
Dans un premier temps, il est question de dialoguer avec l'utilisateur. Au clic sur le bouton de macro que nous construirons, une boîte de message doit se présenter. Cette boîte de dialogue doit offrir une zone de texte dans laquelle les termes sélectionnés par l'utilisateur doivent être rappelés. Si ce dernier confirme, alors le traitement de mise en valeur doit être enclenché.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
  • Dans l'explorateur de projet sur la gauche, cliquer sur l'élément Normal pour le sélectionner,
Il représente le modèle de Word, celui qui rend les macros fonctionnelles pour toute utilisation. C'est donc lui qui doit accueillir notre code.
  • En haut de la fenêtre, cliquer sur le menu Insertion,
  • Dans les propositions, choisir Module,
Le module apparaît dans l'arborescence et sa feuille de code encore vierge se rend disponible au centre de l'écran.
  • Dans cette feuille de code, créer la procédure mef comme suit :
Sub mef()

End Sub


Mef est la contraction de Mise en forme. Donc le nom de procédure est suffisamment explicite.

Pour stocker les termes sélectionnés par l'utilisateur, nous avons besoin d'une variable typée comme un texte.
  • Dans les bornes de la procédure, ajouter la déclaration suivante :
Sub mef()
Dim cherche As String

End Sub


Déclarée en tant que String, cette variable peut mémoriser pratiquement n'importe quelle information. Et justement nous devons l'exploiter pour réceptionner la sélection de l'utilisateur. VBA offre deux fonctions pour afficher des boîtes de dialogues classiques. Il s'agit des fonctions MsgBox et InputBox. La première n'offre pas de zone de saisie contrairement à la fonction InputBox que nous allons utiliser.

Naturellement, une fonction retourne une valeur. Il peut s'agir du texte récupéré après validation ou d'une information indiquant que l'utilisateur a choisi d'annuler.
  • A la suite du code de la procédure, ajouter l'instruction VBA suivante :
Sub mef()
Dim cherche As String

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)

End Sub


Comme vous pouvez le voir, la fonction InputBox peut recevoir de nombreux paramètres. Mais seul le premier est obligatoire. Il concerne le message à afficher sur la boîte de dialogue. Le deuxième permet de personnaliser le titre de cette dernière. Le troisième est la valeur à afficher par défaut dans la zone de saisie. Avec la propriété Text de l'objet VBA Selection, nous y inscrivons donc le ou les termes sélectionnés par l'utilisateur sur le document. Nous pouvons réaliser un petit test à ce stade.
  • Enregistrer les modifications (CTRL + S),
  • Basculer sur le document Word (ALT + Tab),
  • Atteindre la troisième page par exemple,
  • Double cliquer dans un mot pour le sélectionner,
  • Revenir dans l'éditeur VBA Word entre les bornes de la procédure,
  • Exécuter le code, par exemple en enfonçant la touche F5 du clavier,
Afficher le texte sélectionné sur le document dans une boîte de dialogue InputBox en VBA Word

Le visuel est rendu au document. Et comme vous pouvez le voir, la boîte de dialogue s'affiche avec la sélection restituée dans la zone de saisie.
  • Cliquer sur le bouton Annuler de la boîte de dialogue,
Ainsi, nous sommes de retour dans l'éditeur VBA Word.

Le résultat ou retour de cette fonction est donc affecté à notre variable cherche. Mais si l'utilisateur clique sur le bouton Annuler de la boîte de dialogue, la valeur retournée est vide. Nous devons donc tester le contenu de la variable cherche avant de poursuivre le traitement. Et pour cela, une instruction conditionnelle est nécessaire.
  • A la suite du code VBA, créer les bornes de l'instruction conditionnelle comme suit :
Sub mef()
Dim cherche As String

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <> "" Then

End If


End Sub


Grâce à ce critère (cherche <> ""), nous entendons poursuivre le traitement lorsque le contenu de la variable cherche n'est pas vide. Implicitement et inversement, puisque nous n'écrirons aucun code en dehors des bornes de cette instruction, le traitement s'arrêtera.

Rechercher toutes les occurrences
Maintenant, nous devons replacer le point d'insertion au tout début du document. De cette façon, aucun texte ne sera ignoré. Le cas échéant, la méthode de recherche débute à partir de l'emplacement actif. Nous le savons, c'est la méthode HomeKey de l'objet Selection que nous devons utiliser.
  • Dans les bornes de l'instruction conditionnelle, ajouter la ligne de code VBA suivante :
Sub mef()
Dim cherche As String

cherche =InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <>"" Then
Selection.HomeKey wdStory
End If

End Sub


Vous le savez, la valeur wdStory passée en argument de la méthode HomeKey désigne l'article complet, soit le document Word dans sa globalité. De fait, cette ligne de code a pour effet de replacer le point d'insertion au début du tout premier paragraphe.

Ensuite, toujours lorsque le critère est vérifié, il est question de rechercher toutes les occurrences du terme réceptionné. Nous le savons, l'objectif est de les mettre en valeur dans tout le document. Et pour cela, grâce à une précédente astuce VBA Word, nous avions appris à domestiquer la propriété Find de l'objet Selection. Elle offre de nombreuses propriétés enfants qu'il s'agit de calibrer pour déterminer la nature de la recherche mais aussi les attributs de remplacement. Et comme nous l'avons appris ensemble, lorsque les propriétés d'un objet sont nombreuses à régler, il est judicieux de les regrouper dans un bloc With.
  • Dans les bornes de cette instruction conditionnelle, créer ce bloc With comme suit :
Sub mef()
Dim cherche As String

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <> "" Then
Selection.HomeKey wdStory
With Selection.Find

End With

End If

End Sub


Désormais, nous devons commencer par définir le texte à remplacer. Mais il n'est pas question de le changer. C'est sa mise en valeur qui doit être prononcée. Nous devons néanmoins le définir. Ce texte est mémorisé dans la variable cherche. De plus, nous devons aussi le rappeler comme texte de remplacement. En effet, la fonctionnalité de remplacement de Word mémorise les anciennes recherches et donc les anciens réglages.
  • Dans les bornes du bloc With, ajouter les instructions VBA suivantes :
Sub mef()
Dim cherche As String

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <> "" Then
Selection.HomeKey wdStory
With Selection.Find
.Text = cherche
.Replacement.Text = cherche

End With
End If

End Sub


C'est donc la propriété enfant Text de la propriété Find de l'objet Selection qui permet d'indiquer quel est l'élément cherché dans le document. Attention dans cette construction en bloc With de bien inscrire le point en préfixe des propriétés enfants appelées. Et c'est la propriété enfant Text de la propriété enfant Replacement qui permet d'indiquer le texte utilisé pour le remplacement.

Ce sont ensuite de nouvelles propriétés enfants de la propriété Find qui permettent de définir les attributs de mise en valeur dans ce processus de remplacement.
  • A la suite du code dans le bloc With, ajouter les instructions VBA suivantes :
Sub mef()
Dim cherche As String

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <> "" Then
Selection.HomeKey wdStory
With Selection.Find
.Text = cherche
.Replacement.Text = cherche
.Replacement.Font.Size = 12
.Replacement.Font.Bold = True
.Replacement.Font.Color = 192

End With
End If

End Sub


C'est donc la propriété enfant Replacement qui permet de descendre encore dans la hiérarchie pour définir précisément quels sont les attributs sur lesquels des modifications doivent être entreprises. Nous agissons essentiellement sur la police grâce à la propriété enfant Font. Mais là encore, il s'agit d'une considération généraliste. C'est pourquoi nous descendons jusqu'à la propriété enfant Size pour augmenter la taille du texte à 12 points. Puis, nous exploitons la propriété enfant bold pour passer chaque occurrence en gras. Enfin, c'est la propriété enfant Color qui permet de changer la couleur de chaque texte remplacé. Avec la valeur 192, nous optons pour un rouge assez foncé.

Maintenant et pour finir, il est question d'exécuter la recherche et le remplacement. Il ne s'agit donc plus d'une propriété enfant mais d'une méthode que nous connaissons d'ailleurs.
  • Toujours à la suite du code dans le bloc With, ajouter l'instruction VBA suivante :
Sub mef()
Dim cherche As String

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <> "" Then
Selection.HomeKey wdStory
With Selection.Find
.Text = cherche
.Replacement.Text = cherche
.Replacement.Font.Size = 12
.Replacement.Font.Bold = True
.Replacement.Font.Color = 192
.Execute Replace:=wdReplaceAll
End With
End If

End Sub


C'est donc la méthode Execute de la propriété Find de l'objet Selection qui permet de lancer l'opération de recherche et de remplacement. Cette méthode propose de nombreux paramètres. Ils sont tous facultatifs. Et comme nous avons défini les réglages en amont avec les propriétés enfants, nous désignons directement l'argument concerné par son intitulé Replace suivi de la valeur à affecter, pour réaliser un remplacement global sur le document.

Remarque : Le code encapsulé dans le bloc With aurait pu être fourni par une macro automatique enregistrant l'utilisateur en train de définir tous ces réglages depuis la boîte de dialogue de recherche et de remplacement. Si la technique vous intéresse, elle est enseignée par l'astuce Word montrant comment formater automatiquement les mots clés d'un document.

Bouton de macro
L'outil que nous venons de construire a toutes les raisons de figurer parmi les commandes accessibles facilement. Cette automatisation de mise en valeur globale sur des termes précis peut représenter un gain de temps non négligeable. C'est la raison pour laquelle nous souhaitons associer cette procédure à un bouton de macro à greffer dans l'un des rubans.
  • Basculer sur le document (ALT + Tab),
  • En haut de la fenêtre Word, cliquer droit n'importe où sur le ruban actif,
  • Dans le menu contextuel, choisir la commande Personnaliser le ruban,
  • Dans la liste de droite de la boîte de dialogue, déployer l'affichage de l'onglet Outils,
  • Puis, sélectionner le groupe Navigation,
Il s'agit d'un ruban et d'une section que nous avons créés à l'occasion des astuces VBA Word précédentes. Si vous ne les possédez pas, vous pouvez les créer ou choisir d'incorporer le bouton de macro dans un ruban existant.
  • Maintenant, cliquer sur le bouton Nouveau groupe en bas de la boîte de dialogue,
  • Puis, cliquer sur le bouton Renommer situé juste à côté,
  • Dans la nouvelle boîte de dialogue, saisir l'intitulé Formats et valider par Ok,
  • Déployer alors l'affichage de la zone déroulante au-dessus de la liste du centre,
  • Dans les propositions, choisir la catégorie des macros,
  • Sélectionner la macro mef,
  • Puis, cliquer sur le bouton Ajouter au centre de la boîte de dialogue,
Cette action a pour effet d'ajouter le bouton associé à la macro VBA, à la suite dans la section Formats du ruban Outils.
  • Dès lors, cliquer de nouveau sur le bouton Renommer en bas de la boîte de dialogue,
  • Dans la nouvelle boîte, saisir l'intitulé Mef,
  • Puis choisir une icône représentative de l'action entreprise,
  • Cliquer alors sur le bouton Ok pour valider ces réglages,
  • Cliquer de nouveau sur le bouton Ok pour valider la création du bouton,
Nous sommes ainsi de retour sur le document Word.

Créer un bouton de macro VBA Word pour formater automatiquement les mots clés du document

Personnaliser un bouton de macro VBA Word à placer dans un ruban personnalisé

Il convient maintenant de tester le bon fonctionnement de la macro VBA que nous avons écrite.
  • Atteindre la troisième page du document,
  • Sur n'importe quel paragraphe, sélectionner le mot graphiques,
Veillez à réaliser une sélection précise sans espace ni avant, ni après le mot. Sinon, les occurrences suivies d'une virgule par exemple, ne seront pas prises en compte.
  • En haut de la fenêtre Word, cliquer sur l'onglet Outils pour activer son ruban,
  • Dès lors, dans la section Formats du ruban, cliquer sur le bouton Mef,
La boîte de dialogue InputBox apparaît restituant le texte sélectionné.
  • Déclencher l'opération en cliquant sur le bouton Ok,
Un message de confirmation peut surgir. Il convient de le valider. Pour neutraliser toutes les communications classiques de Word avec l'utilisateur, il suffit d'inscrire l'instruction VBA suivante en entête de code de la procédure : Application.DisplayAlerts = wdAlertsNone.

Formater automatiquement toutes les occurrences du mot clé sélectionné en VBA Word

Quoiqu'il en soit, en faisant défiler le document vers le bas, vous constatez que toutes les occurrences du mot clé sélectionné ont été automatiquement mises en valeur. Il s'agit donc d'un très bon moyen pour faire ressortir des éléments importants sans en oublier et en gagnant un temps précieux.

Dernière remarque : Nous l'avons évoqué précédemment, la fonctionnalité de recherche et de remplacement conserve la mémoire des réglages opérés lors d'un précédent traitement. C'est la raison pour laquelle nous avons redéfini le texte de remplacement bien que nous ne souhaitions pas le modifier. Mais c'est aussi la raison pour laquelle il peut être opportun de réinitialiser les attributs de format dans la zone de recherche comme dans la zone de remplacement. Et pour cela, il s'agit d'exploiter la propriété enfant ClearFormatting.

Sub mef()
Dim cherche As String

Application.DisplayAlerts = wdAlertsNone

cherche = InputBox("Texte cherché ?", "Recherche", Selection.Text)
If cherche <> "" Then
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = cherche
.Replacement.Text = cherche
.Replacement.Font.Size = 12
.Replacement.Font.Bold = True
.Replacement.Font.Color = 192
.Execute Replace:=wdReplaceAll
End With
End If

End Sub


 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn