Le but est donc de remplacer une expression par la même mais en attribuant à un ou plusieurs mots de cette expression une mise en forme particulière : gras, italique, couleur, style de caractères, etc.

Avec la fonctionnalité Recherche-Remplace, vous pouvez modifier la mise en forme de l'expression entière mais pas d'une seule partie. Une macro va donc s'avérer utile.

Néanmoins, pour le gras et l'italique, il y a une solution qui peut se passer de macro :

  • Ouvrez la boîte de dialogue Recherche-Remplace (Ctrl+H)
  • Dans la zone de recherche, saisissez l'expression.
  • Dans la zone de remplacement, saisissez l'expression, mais encadrez les mots à mettre en gras par des underscores (_) et/ou les mots à mettre en italique par des astérisques (*).
    Par exemple, vous souhaitez que le nom "Dupont" soit en gras mais uniquement lorsqu'il s'agit de "Jean Dupont". Le texte de remplacement sera : Jean _Dupont_
  • Cliquez sur Remplacer tout.

À présent, vous allez utiliser la fonctionnalité Mise en forme automatique pour appliquer le gras. Cette fonctionnalité n'existe pas sur le ruban, vous allez l'installer sur la barre d'outils Accès rapide. Voyez cet article.

  • Cliquez sur le bouton Mise en forme automatique.
  • Cliquez sur Options.
  • Dans la boîte de dialogue Correction automatique, onglet Mise en forme automatique, décochez tout, et cochez uniquement l'option Gras et italique par les attributs correspondants.
  • Cliquez sur OK et à nouveau sur OK.
  • Votre document est corrigé.

S'il s'agit d'une modification de mise en forme autre que les attributs Italique et Gras, une macro devient donc nécessaire. Néanmoins, rien n'empêche d'utiliser la macro même pour du gras !

La macro suivante va souligner le mot "Dupont" uniquement pour les occurrences "Jean Dupont" :

Sub remplacer()
'macro écrite par m@rina
'souligner le mot Dupont uniquement pour Jean Dupont
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
    Do
        With Selection.Find
            .ClearFormatting
            .Text = "Jean Dupont"
            .Forward = True
            .Wrap = wdFindStop
            .Execute
        End With

    If Selection.Find.Found Then
    ActiveDocument.Range(Selection.Range.Start + 5, Selection.Range.End).Font.Underline = wdUnderlineWords
    End If
    Loop Until Not Selection.Find.Found
End Sub

Voici une autre macro qui va appliquer l'attribut Gras et la couleur rouge à toutes les occurrences horaires saisies de la façon suivante : 10h05, mais uniquement pour l'heure, et donc dans cet exemple pour le chiffre 10 :

Sub remplacer3()
'macro écrite par m@rina
'colorer et mettre en gras les heures sans le "h" et sans les minutes
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
    Do
        With Selection.Find
            .ClearFormatting
            .Text = "^#^#h^#^#"
            .Forward = True
            .Wrap = wdFindStop
            .Execute
        End With

    If Selection.Find.Found Then

        With ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 3)
            .Font.Bold = True
            .Font.Color = wdColorRed
        End With

    End If
    Loop Until Not Selection.Find.Found
End Sub

Plus compliqué : imaginons que le texte à mettre en forme soit des nombres tous différents et avec un nombre de chiffres de 1 à 3. Pour exemple, mettre tous les nombres en gras dans l'expression "Se rendre page xxx". On va devoir utiliser les caractères génériques pour préciser qu'il peut y avoir de 1 jusqu'à 3 chiffres dans le numéro de la page :

Sub remplacer()
'macro écrite par m@rina
'colorer tous les nombres dans l'expression "Se rendre page xxx"
Dim texte As String
texte = "Se rendre page ([0-9]{1;3})" 'entre 1 et 3 chiffres - modifier si nécessaire
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
    Do
        With Selection.Find
            .ClearFormatting
            .MatchWildcards = True
            .Text = texte
            .Forward = True
            .Wrap = wdFindStop
            .Execute
        End With
    If Selection.Find.Found Then ActiveDocument.Range(Selection.Range.Start + 15, Selection.Range.End).Font.Bold = True
    Loop Until Not Selection.Find.Found
End Sub