Comment : rechercher du texte dans les plages de la feuille de calcul par programmationHow to: Programmatically Search for Text in Worksheet Ranges

Le <xref:Microsoft.Office.Interop.Excel.Range.Find%2A> méthode de la Range objet vous permet de rechercher du texte dans la plage.The <xref:Microsoft.Office.Interop.Excel.Range.Find%2A> method of the Range object enables you to search for text within the range. Ce texte peut être également une des chaînes d’erreur qui peuvent apparaître dans une cellule de feuille de calcul, tel que #NULL! ou #VALUE!.This text can also be any of the error strings that can appear in a worksheet cell such as #NULL! or #VALUE!. Pour plus d’informations sur les chaînes d’erreur, consultez valeurs d’erreur.For more information about error strings, see Cell Error Values.

S’applique à : Les informations contenues dans cette rubrique s’appliquent aux projets de niveau document et aux projets de compléments VSTO pour Excel.Applies to: The information in this topic applies to document-level projects and VSTO add-in projects for Excel. Pour plus d’informations, consultez Fonctionnalités disponibles par type d’application et de projet Office.For more information, see Features Available by Office Application and Project Type.

L’exemple suivant recherche une plage nommée Fruits et modifie la police des cellules qui contiennent le mot « apples ».The following example searches a range named Fruits and modifies the font for cells that contain the word "apples". Cette procédure utilise également le <xref:Microsoft.Office.Interop.Excel.Range.FindNext%2A> (méthode), qui utilise la recherche des paramètres pour répéter la recherche.This procedure also uses the <xref:Microsoft.Office.Interop.Excel.Range.FindNext%2A> method, which uses the previously set search settings to repeat the search. Vous spécifiez la cellule à partir de laquelle effectuer la recherche et le <xref:Microsoft.Office.Interop.Excel.Range.FindNext%2A> méthode gère le reste.You specify the cell after which to search, and the <xref:Microsoft.Office.Interop.Excel.Range.FindNext%2A> method handles the rest.

Note

Le <xref:Microsoft.Office.Interop.Excel.Range.FindNext%2A> recherche de la méthode encapsule jusqu’au début de la plage de recherche une fois qu’il a atteint la fin de la plage.The <xref:Microsoft.Office.Interop.Excel.Range.FindNext%2A> method's search wraps back to the beginning of the search range after it has reached the end of the range. Votre code doit s’assurer que la recherche n’encapsule pas autour d’une boucle infinie.Your code must ensure that the search does not wrap around in an infinite loop. L’exemple de procédure montre une façon de gérer cette situation à l’aide de la <xref:Microsoft.Office.Interop.Excel.Range.Address%2A> propriété.The sample procedure shows one way to handle this using the <xref:Microsoft.Office.Interop.Excel.Range.Address%2A> property.

lien vers la vidéo pour une démonstration vidéo connexe, consultez comment faire pour utiliser la méthode Find dans un complément à Excel ?.link to video For a related video demonstration, see How Do I: Use the Find Method in an Excel Add-in?.

Pour rechercher du texte dans une plage de feuille de calculTo search for text in a worksheet range

  1. Déclarez les variables pour le suivi de l’intégralité de la plage, de la première plage trouvée et de la plage trouvée actuelle.Declare variables for tracking the entire range, the first found range, and the current found range.

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 
    
    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing
    
  2. Recherchez la première correspondance, en spécifiant tous les paramètres à l’exception de la cellule à rechercher.Search for the first match, specifying all the parameters except the cell to search after.

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing); 
    
    currentFind = Fruits.Find("apples", , _
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
    
  3. Continuer la recherche aussi longtemps qu’il existe des correspondances.Continue searching as long as there are matches.

    while(currentFind != null) 
    
    While Not currentFind Is Nothing
    
  4. Comparez la première plage trouvée (firstFind) à rien.Compare the first found range (firstFind) to Nothing. Si firstFind ne contient aucune valeur, le code stocke la plage trouvée (currentFind).If firstFind contains no value, the code stores away the found range (currentFind).

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
    If firstFind Is Nothing Then
        firstFind = currentFind
    
  5. Quitter la boucle si l’adresse de la plage trouvée correspond à l’adresse de la première plage trouvée.Exit the loop if the address of the found range matches the address of the first found range.

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
    ElseIf currentFind.Address = firstFind.Address Then
        Exit While
    End If
    
  6. Définir l’apparence de la plage trouvée.Set the appearance of the found range.

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true; 
    
    With currentFind.Font
        .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
        .Bold = True
    End With
    
  7. Effectuer une autre recherche.Perform another search.

    currentFind = Fruits.FindNext(currentFind); 
    
    currentFind = Fruits.FindNext(currentFind)
    

    L'exemple suivant montre la méthode complète.The following example shows the complete method.

ExempleExample

private void DemoFind() 
{
    Excel.Range currentFind = null; 
    Excel.Range firstFind = null; 

    Excel.Range Fruits = Application.get_Range("A1", "B3");
    // You should specify all these parameters every time you call this method,
    // since they can be overridden in the user interface. 
    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing); 

    while(currentFind != null) 
    { 
        // Keep track of the first range you find. 
        if (firstFind == null)
        {
            firstFind = currentFind; 
        }

        // If you didn't move to a new range, you are done.
        else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
              == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
        {
            break;
        }

        currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
        currentFind.Font.Bold = true; 

        currentFind = Fruits.FindNext(currentFind); 
    }
}
Private Sub DemoFind()
    Dim currentFind As Excel.Range = Nothing
    Dim firstFind As Excel.Range = Nothing

    Dim Fruits As Excel.Range = Me.Application.Range("A1", "B2")
    ' You should specify all these parameters every time you call this method, 
    ' since they can be overridden in the user interface.
    currentFind = Fruits.Find("apples", , _
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)

    While Not currentFind Is Nothing

        ' Keep track of the first range you find.
        If firstFind Is Nothing Then
            firstFind = currentFind

        ' If you didn't move to a new range, you are done.
        ElseIf currentFind.Address = firstFind.Address Then
            Exit While
        End If

        With currentFind.Font
            .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
            .Bold = True
        End With

        currentFind = Fruits.FindNext(currentFind)
    End While
End Sub

Voir aussiSee Also

Utilisation des plages Working with Ranges
Comment : appliquer des Styles à des plages dans les classeurs par programmation How to: Programmatically Apply Styles to Ranges in Workbooks
Comment : faire référence par programmation aux plages de feuille de calcul dans le Code How to: Programmatically Refer to Worksheet Ranges in Code
Paramètres optionnels dans les solutions OfficeOptional Parameters in Office Solutions