formateur informatique

Remplacer rapidement un mot par un autre avec mise en forme

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Remplacer rapidement un mot par un autre avec mise en forme
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    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Remplacer et formater la sélection

Avec cette nouvelle astuce VBA Word, nous allons offrir une boîte de dialogue qui se déclenche au clic de l'utilisateur sur un bouton de macro enregistré dans le modèle. Celle-ci doit réceptionner le texte sélectionné sur le document pour remplacer toutes ses occurrences. Et pour cela, l'utilisateur doit disposer d'une zone de saisie et de cases à cocher pour définir en même temps les attributs de format à appliquer lors du remplacement.

Sources de travail
Pour mener à bien cette étude, nous proposons de récupérer un document présentant un texte à manipuler ainsi qu'un formulaire préconçu pour axer les travaux sur le code VBA. La décompression livre le document Word accompagné de deux fichiers aux extensions respectives frx et frm. La première extension correspond au fichier du userForm graphique. La seconde correspond au code VBA qui lui est associé, s'il existe.

Importer le UserForm dans le modèle
Pour commencer, nous avons tout d'abord besoin d'importer le formulaire dans le modèle Word pour pouvoir l'exploiter par le code VBA.
  • Double cliquer sur le fichier du document (docx) pour l'ouvrir dans Word,
Nous découvrons un texte standard qui fera parfaitement l'affaire pour les besoins des manipulations. Il a été inséré automatiquement grâce à une fonction Word.
  • 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 Word. Tout ce que nous y enregistrerons sera disponible pour toutes les utilisations à venir et ce, quel que soit le document.
  • En haut de la fenêtre de l'éditeur, cliquer sur le menu Fichier,
  • Puis, choisir la commande Importer un fichier,
  • Dans la boîte de dialogue qui suit, pointer dans le dossier de décompression,
  • Puis, double cliquer sur le fichier rplcmt.frm,
Un nouveau dossier apparaît dans l'arborescence du modèle Normal. Il se nomme Feuilles.
  • Double cliquer sur ce dossier pour le déployer,
  • Puis, double cliquer sur l'élément rplcmt qu'il contient,
Il s'agit du UserForm, soit du formulaire et ainsi nous affichons son interface graphique au centre de l'écran. Comme vous pouvez le voir, il est constitué d'une zone de saisie pour le texte de remplacement, de trois cases à cocher pour choisir l'attribut de format à appliquer et de deux boutons. Mais ce n'est pas tout. Il y a aussi deux contrôles Label soit des étiquettes dont le contenu est vide à ce stade. La première est située au-dessus de la zone du texte de remplacement. Son nom d'objet est info. Elle doit servir à renseigner dynamiquement l'utilisateur sur l'action à entreprendre. La seconde est placée sur la droite du bouton Annuler. Son nom d'objet est mem. Elle doit servir à stocker le texte sélectionné par l'utilisateur.

Interface graphique VBA Word de remplacement de texte avec mise en forme

La zone du texte de remplacement est nommée texteRplcmt. Les trois cases à cocher sont respectivement intitulées gras, italique et souligne. Ces noms d'objets sont importants pour pouvoir piloter ces contrôles par le code VBA. Pour consulter ces noms, il faut premièrement sélectionner l'un des contrôles puis regarder sa propriété (Name) dans la fenêtre des propriétés.

Noms des contrôles du formulaire VBA Word dans la fenêtre Propriétés

Si celle-ci n'est pas visible dans votre environnement, vous pouvez l'afficher en cliquant sur le menu Affichage puis sur la rubrique Fenêtre propriétés.

Remarque : Ce formulaire est très dépouillé dans sa présentation. Mais il a le mérite d'exister. Libre à vous d'améliorer son esthétique, précisément avec la fenêtre propriétés.

Bouton de macro et procédure
Pour débuter, nous devons commencer par créer les bornes de la procédure principale à associer à un bouton de macro à greffer dans l'un des rubans Word. Le rôle de cette procédure est de récolter l'information du texte à remplacer pour le transmettre au formulaire à ouvrir.
  • Sous le dossier Feuilles, déployer le dossier Modules,
  • Dans la liste, double cliquer sur le module Textes,
Nous affichons ainsi ses procédures de code VBA au centre de l'écran. Il s'agit d'un module que nous avons créé à l'occasion d'astuces précédentes. S'il n'existe pas dans votre environnement, vous devez le créer en cliquant sur menu Insertion puis en choisissant la commande Modules. Ensuite, il est très simple de lui attribuer ce nom avec la propriété (Name) de la fenêtre propriétés.
  • Dans la feuille de code, après toute procédure, créer la procédure remplacerPartout :
Sub remplacerPartout()

End Sub


Bien qu'elle soit encore vide, maintenant qu'elle existe, nous pouvons d'ores et déjà établir la liaison avec un bouton de macro.
  • Enregistrer les modifications (CTRL + S),
  • Revenir sur le document Word,
  • Cliquer droit n'importe où sur le ruban Actif,
  • Dans le menu contextuel, choisir la commande Personnaliser le ruban,
Personnaliser le ruban Word pour ajouter un bouton de macro VBA

La boîte de dialogue des options Word apparaît sur la catégorie nommée Personnaliser le ruban.
  • Au centre de l'écran, déployer la liste déroulante au-dessus des commandes,
  • Dans les propositions, choisir la catégorie Macros,
  • Glisser la macro remplacerPartout dans la section Textes du ruban Outils,
Ajouter un bouton de macro VBA Word dans un onglet personnalisé

Là encore, il s'agit d'une section et d'un ruban que nous avons créés à l'occasion de précédentes astuces VBA Word. Si vous ne les possédez pas, vous pouvez les créer ou encore choisir de glisser la macro dans un ruban existant.
  • Cliquer sur le bouton Renommer en bas de la boîte de dialogue,
  • Dans la zone Nom complet de celle qui suit, taper par exemple l'intitulé : Remplacer&Format,
  • Puis, choisir une icône représentative dans la liste de celles qui sont proposées,
intitulé et icône graphique du bouton VBA Word dans ruban personnalisé

  • Cliquer alors sur le bouton Ok,
  • Puis, cliquer de nouveau sur le bouton Ok de la première boîte de dialogue,
Nous sommes ainsi de retour sur le document Word et si vous activez le ruban Outils en haut de la fenêtre, vous constatez la présence du nouveau bouton dans la section Textes.

Nouveau bouton de macro dans onglet personnalisé Word

Son rôle est de lancer le code VBA que nous allons construire dans la procédure remplacerPartout.

Informations à transmettre au formulaire
Il est temps de développer cette procédure. Elle doit entre autres se charger de récupérer le texte sélectionné qu'elle doit ensuite transmettre au formulaire qui se chargera de la suite du traitement.
  • Revenir dans l'éditeur VBA Word,
  • Dans la procédure remplacerTout, ajouter la déclaration et l'affectation suivantes :
Sub remplacerPartout()
Dim texte As String

texte = Trim(Selection.Text)

End Sub


Nous déclarons tout d'abord la variable texte de type texte (String) pour pouvoir mémoriser l'information choisie par l'utilisateur. Cette information, nous lui affectons ensuite, grâce à la propriété Text de l'objet VBA Selection. Comme nous l'avons déjà appris, elle restitue simplement le texte sélectionné sur le document actif. Notez l'emploi de la fonction Trim pour purger les espaces de début et de fin. Nous nous protégeons ainsi des sélections imprécises et hasardeuses.

Maintenant, nous devons transmettre cette donnée au formulaire. Pour cela, nous devons désigner le contrôle cible par son nom. Et pour l'atteindre, ce nom d'objet doit être préfixé du nom du formulaire lui-même.
  • A la suite du code de la procédure, ajouter les instructions VBA suivantes :
Sub remplacerPartout()
Dim texte As String

texte = Trim(Selection.Text)
rplcmt.info.Caption = "Le texte à remplacer est : " & texte & Chr(13) & "Son remplaçant sera formaté selon votre choix."
rplcmt.texteRplcmt.Value = texte
rplcmt.mem.Caption = texte
rplcmt.gras.Value = 1


End Sub


La zone info est l'étiquette en entête du formulaire à laquelle nous transmettons une information indicative à destination de l'utilisateur. Elle est concaténée au texte ramassé sur le document. Notez l'emploi de la fonction Chr avec la valeur 13 en paramètre pour repousser la suite sur la ligne suivante du Label. Ensuite, nous transmettons le texte sélectionné à la zone de saisie nommée texteRplcmt. C'est lui qu'il devra changer ou conserver s'il souhaite simplement appliquer des attributs de format à toutes ses occurrences. Nous transmettons cette même information à l'étiquette mem placée sur la droite du bouton Annuler. Notez que pour écrire dans un Label, il faut exploiter la propriété Caption et non plus Text comme c'est le cas pour une zone de saisie (TextBox). Grâce à cette étiquette, le formulaire connaîtra le texte de remplacement, tandis que le texte à remplacer lui est fourni par la zone de saisie texteRplcmt. Enfin, nous activons la première des cases à cocher pour que le gras soit le formatage proposé par défaut.

Maintenant, nous devons appeler le formulaire, si et seulement si la sélection n'est pas vide.
  • A la suite du code de la procédure, ajouter l'instruction conditionnelle suivante :
Sub remplacerPartout()
Dim texte As String

texte = Trim(Selection.Text)
rplcmt.info.Caption = "Le texte à remplacer est : " & texte & Chr(13) & "Son remplaçant sera formaté selon votre choix."
rplcmt.texteRplcmt.Value = texte
rplcmt.mem.Caption = texte
rplcmt.gras.Value = 1

If (Len(texte) > 1) Then rplcmt.Show
End Sub


Nous testons simplement la longueur de la chaîne sélectionnée grâce à la fonction VBA Len. Si elle ne comporte pas plus d'un caractère, la procédure est abandonnée. Dans le cas contraire, le formulaire est appelé à se montrer grâce à la méthode Show associée à son nom d'objet.
  • Enregistrer les modifications (CTRL + S) et revenir sur le document (Alt + Tab),
  • Sélectionner le mot fichier à la toute fin du premier paragrahe,
Le plus simple est de double cliquer dans le mot.
  • Dans le ruban Outils, cliquer sur le bouton Remplacer&Format,
Afficher le texte sélectionné dans la zone de texte du formulaire VBA Word

Comme vous pouvez l'apprécier, le UserForm s'affiche restituant les informations concoctées. Le texte d'accueil, sur deux lignes, est bien placé au-dessus de la zone de remplacement et il est explicite. Le terme sélectionné est clairement rapatrié dans la zone de saisie. L'utilisateur n'a plus qu'à le changer s'il le souhaite pour impacter toutes ses occurrences. La première case est effectivement cochée pour le format à appliquer. En revanche, le texte sélectionné et rappelé dans le Label situé à droite du bouton Annuler n'est pas visible. En effet, la propriété Visible de ce contrôle est réglée à False. Cette indication est nécessaire pour le code mais pas indispensable pour l'utilisateur.

Remplacer avec mise en forme
Maintenant que le formulaire est susceptible de détenir les informations nécessaires à la recherche et au remplacement de l'expression sélectionnée, il est temps d'implémenter le code du traitement.
  • Revenir dans l'éditeur VBA Word,
  • Dans l'explorateur de projet, double cliquer sur le userForm rplcmt,
  • Sur le formulaire en conception, double cliquer sur le bouton Remplacer,
Ainsi, nous basculons dans la feuille de code VBA entre les bornes de la procédure événementielle remplacer_Click. Private Sub remplacer_Click()
Dim texteAr As String: Dim texteR As String

End Sub


Nous déclarons et typons les variables texteAr et texteR comme des String respectivement pour manipuler le texte à remplacer et le texte de remplacement.

Il est temps maintenant de réceptionner les informations et de les afficher à l'écran en guise de test. Nous devons donc procéder à l'affectation des deux premières variables.
  • A la suite du code de la procédure, ajouter les instructions VBA suivantes :
Private Sub remplacer_Click()
Dim texteAr As String: Dim texteR As String

texteAr = mem.Caption
texteR = texteRplcmt.Value

MsgBox "Le texte à remplacer est : " & texteAr & Chr(13) & "Le texte de remplacement est : " & texteR


End Sub


Nous récupérons les informations transmises au formulaire par le biais des contrôles mem et texteRplcmt pour les stocker dans les variables texteAr et texteR. Nous pouvons donc les afficher à l'écran pour les tester en supposant qu'entre temps, l'utilisateur a bien inscrit le texte de remplacement dans la zone de saisie texteRplcmt. C'est ce que nous faisons avec la fonction VBA MsgBox.
  • Sur le document Word, sélectionner le texte Fichier et cliquer sur le bouton de macro,
  • Dans la zone de saisie de la boîte de dialogue, remplacer le texte fichier par le texte document,
  • Puis, cliquer sur le bouton Remplacer,
Afficher dans boîte de dialogue le texte à remplacer et le texte de remplacement sur formulaire VBA Word

Comme vous pouvez le voir, les informations consolidées s'affichent à l'écran attestant que nous sommes en mesure de manipuler les informations transmises pour la recherche et le remplacement.
  • Cliquer sur la croix du userForm pour le fermer,
  • Puis, revenir dans l'éditeur VBA Word dans les bornes de la procédure remplacer_Click,
  • Passer la ligne du MsgBox en commentaire en la préfixant d'une apostrophe,
Maintenant, pour effectuer ce remplacement automatique, nous devons exploiter la propriété Find de l'objet VBA Selection. Une macro automatique nous avait appris cette propriété et ses dépendances. Et ce sont ces dernières que nous allons régler pour effectuer tous les paramétrages avant de procéder au remplacement global. Et pour cela, nous allons regrouper les instructions dans un bloc With afin de ne pas répéter à chaque reprise l'objet Selection et sa propriété Find. Ce mécanisme d'optimisation de code, nous l'avons aussi appris et mis en pratique à l'occasion de précédentes astuces VBA Word.
  • A la suite du code de la procédure, ajouter les instructions VBA suivantes :
Private Sub remplacer_Click()
Dim texteAr As String: Dim texteR As String

texteAr = mem.Caption
texteR = texteRplcmt.Value

'MsgBox "Le texte à remplacer est : " & mem.Caption & Chr(13) & "Le texte de remplacement est : " & texteR

Selection.HomeKey wdStory

With Selection.Find

End With


End Sub


Comme vous pouvez le voir, avant le bloc With et donc avant d'enclencher le mécanisme de recherche et de remplacement, nous prenons soin de replacer le point d'insertion au tout début du document. Et pour cela comme nous l'avons appris, nous exploitons la méthode HomeKey de l'objet Selection avec le paramètre wdStory qui désigne le document. Une recherche est effectivement chronologique. En partant du tout début, nous nous assurons de ne rater aucune occurrence.

Maintenant et toujours avant d'engager le remplacement, nous devons nous assurer que des réglages de mise en forme n'avaient pas été définis lors d'une précédente recherche. Car dans ces conditions, Word les conserve en mémoire. Nous allons simplement prendre soin de les annuler s'ils existaient.
  • Dans les bornes du bloc With, ajouter les deux instructions VBA suivantes :
...
'MsgBox "Le texte à remplacer est : " & mem.Caption & Chr(13) & "Le texte de remplacement est : " & texteR

Selection.HomeKey wdStory

With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting


End With

...


La méthode ClearFormatting associée à la propriété Find annule les réglages de mise en forme définis pour la recherche. Cette même méthode mais associée à la propriété dérivée Replacement annule les attributs définis pour le remplacement.

Par contre nous, nous devons définir les attributs de format pour le texte de remplacement en fonction du choix utilisateur, c'est à dire en fonction de la case cochée. Pour cela, il suffit d'utiliser des instructions conditionnelles en cascade afin de vérifier quelle est la case qui porte une valeur.
  • A la suite du code du bloc With, ajouter les instructions conditionnelles suivantes :
...
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
If gras.Value Then
.Replacement.Font.Bold = True
ElseIf italique.Value Then
.Replacement.Font.Italic = True
ElseIf souligne.Value Then
.Replacement.Font.Underline = True
End If

End With
...


Nous exploitons donc la propriété Value de l'objet case à cocher. Si cette dernière renvoie une valeur, nous définissons le format à appliquer grâce à la propriété Font qui permet de descendre jusqu'aux attributs à régler (Bold pour gras) sinon si (ElseIf) c'est la suivante, nous adaptons les attributs en conséquence.

Enfin et nécessairement, il ne nous reste plus qu'à indiquer quel est le texte à remplacer ainsi que le texte de remplacement pour pouvoir lancer l'exécution du processus.
  • A la fin du bloc With, ajouter les trois instructions VBA suivantes :
...
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
If gras.Value Then
.Replacement.Font.Bold = True
ElseIf italique.Value Then
.Replacement.Font.Italic = True
ElseIf souligne.Value Then
.Replacement.Font.Underline = True
End If
.Text = texteAr
.Replacement.Text = texteR
.Execute Replace:=wdReplaceAll

End With
...


La propriété Text appliquée à la propriété Find de l'objet Selection permet de définir le texte cherché. Cette même propriété appliquée à la propriété dérivée Replacement permet de définir le texte de remplacement. Enfin, nous utilisons la méthode Execute. Celle-ci offre de nombreux arguments facultatifs. Pour pointer directement sur celui qui nous intéresse, nous utilisons son intitulé (Replace:=). Et pour un remplacement global, nous lui passons la valeur wdReplaceAll.
  • Enregistrer les modifications (CTRL + S) puis basculer sur le document Word (ALT + Tab),
  • Double cliquer dans le mot fichier à la fin du premier paragraphe pour le sélectionner,
  • Dans le ruban Outils, cliquer sur le bouton Remplacer&Format,
  • Dans la zone de saisie du UserForm, remplacer le texte fichier par le texte document,
  • Puis, cliquer sur le bouton Remplacer,
Remplacer et formater toutes les occurrences du texte cherché en VBA Word

Comme vous pouvez l'apprécier, toutes les occurrences du mot fichier sont bien remplacées par le mot document et dans le même temps, ce dernier se pare des attributs de mise en forme choisis.

Pour finir, il conviendrait de rendre fonctionnel le bouton Annuler. Comme vous le savez, il suffit d'exploiter la méthode Hide associée au nom de l'objet formulaire. Comme son nom l'indique, cette méthode permet de masquer le formulaire, comme s'il était fermé.

 
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