Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Comment : rechercher et remplacer du texte dans les documents par programmation

 

L'objet Find est membre des objets Selection et Range, que vous pouvez utiliser indifféremment pour rechercher du texte dans des documents Microsoft Office Word. La commande Replace est une extension de la commande Find.

Utilisez un objet Find pour parcourir un document Microsoft Office Word et rechercher du texte, une mise en forme ou un style spécifique, et utilisez la propriété P:Microsoft.Office.Interop.Word.Find.Replacement pour remplacer l'un des éléments trouvés.

S'applique à : les informations contenues dans cette rubrique s'appliquent aux projets de niveau document et aux projets de compléments VSTO pour Word. Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Quand vous utilisez un objet Selection pour rechercher du texte, les critères de recherche que vous spécifiez s'appliquent uniquement au texte sélectionné. Si l'objet Selection est un point d'insertion, la recherche s'effectue dans le document. Quand l'élément correspondant aux critères de recherche est trouvé, il est automatiquement sélectionné.

Il est important de noter que les critères Find sont cumulatifs, ce qui signifie qu'ils sont ajoutés aux critères de recherche précédents. Avant la recherche, effacez la mise en forme des recherches précédentes à l'aide de la méthode M:Microsoft.Office.Interop.Word.Find.ClearFormatting.

Pour rechercher du texte à l'aide d'un objet Selection

  1. Affectez une chaîne de recherche à une variable.

    object findText = "find me";
    
  2. Effacez la mise en forme des recherches précédentes.

    Application.Selection.Find.ClearFormatting();
    
  3. Exécutez la recherche et affichez une boîte de message avec les résultats.

    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    } 
    

L'exemple suivant montre la méthode complète.

private void SelectionFind() 
{ 
    object findText = "find me";

    Application.Selection.Find.ClearFormatting();

    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    } 
}

L'utilisation d'un objet Range vous permet de rechercher du texte sans rien afficher dans l'interface utilisateur. L'objet Find retourne True si du texte correspondant aux critères de recherche est trouvé, et False dans le cas contraire. Il redéfinit également l'objet Range pour qu'il corresponde aux critères de recherche si le texte est trouvé.

Pour rechercher du texte à l'aide d'un objet Range

  1. Définissez un objet Range constitué du deuxième paragraphe du document.

    L'exemple de code suivant peut être utilisé dans une personnalisation au niveau du document.

    Word.Range rng = this.Paragraphs[2].Range; 
    

    L'exemple de code suivant peut être utilisé dans un complément VSTO. Cet exemple utilise le document actif.

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. Utilisez la propriété P:Microsoft.Office.Interop.Word.Range.Find de l'objet Range pour effacer en premier lieu toutes les éventuelles options de mise en forme existantes, puis recherchez la chaîne find me.

    rng.Find.ClearFormatting();
    
    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
    
  3. Affichez les résultats de la recherche dans une boîte de message, puis sélectionnez l'objet Range pour le rendre visible.

        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 
    
    rng.Select(); 
    

    Si la recherche échoue, le deuxième paragraphe est sélectionné. Si elle réussit, les critères de recherche sont affichés.

L'exemple suivant montre le code complet pour une personnalisation au niveau du document. Pour utiliser cet exemple, exécutez le code à partir de la classe ThisDocument dans votre projet.

private void RangeFind() 
{ 
    object findText = "find me";

    Word.Range rng = this.Paragraphs[2].Range; 

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 

    rng.Select(); 
}

L'exemple suivant montre le code complet pour un complément VSTO. Pour utiliser cet exemple, exécutez le code à partir de la classe ThisAddIn dans votre projet.

private void RangeFind()
{
    object findText = "find me";

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing))
    {
        MessageBox.Show("Text found.");
    }
    else
    {
        MessageBox.Show("Text not found.");
    }

    rng.Select();
}

Le code suivant effectue une recherche dans la sélection actuelle et remplace toutes les occurrences de la chaîne find me par la chaîne Found.

Pour rechercher et remplacer du texte dans des documents

  1. Ajoutez l'exemple de code suivant à la classe ThisDocument ou ThisAddIn dans votre projet.

    private void SearchReplace()
    {
        Word.Find findObject = Application.Selection.Find;
        findObject.ClearFormatting();
        findObject.Text = "find me";
        findObject.Replacement.ClearFormatting();
        findObject.Replacement.Text = "Found";
    
        object replaceAll = Word.WdReplace.wdReplaceAll;
        findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing,
            ref replaceAll, ref missing, ref missing, ref missing, ref missing);
    }
    

    La classe Find a une méthode M:Microsoft.Office.Interop.Word.Find.ClearFormatting et la classe T:Microsoft.Office.Interop.Word.Replacement a également sa propre méthode M:Microsoft.Office.Interop.Word.Replacement.ClearFormatting. Quand vous effectuez des opérations de recherche et remplacement, vous devez utiliser la méthode ClearFormatting des deux objets. Si vous l'utilisez uniquement sur l'objet Find, vous pouvez obtenir des résultats inattendus dans le texte de remplacement.

  2. Utilisez la méthode M:Microsoft.Office.Interop.Word.Find.Execute(System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@,System.Object@) de l'objet Find pour remplacer chaque élément trouvé. Pour spécifier les éléments à remplacer, utilisez le paramètre Replace. Ce paramètre peut avoir l'une des valeurs T:Microsoft.Office.Interop.Word.WdReplace suivantes :

Afficher: