Rechercher par programmation du texte dans les plages de feuilles de calcul

La Find méthode de l’objet Range vous permet de rechercher du texte dans la plage. Ce texte peut également être l’une des chaînes d’erreur qui peuvent apparaître dans une cellule de feuille de calcul telle que #NULL! ou #VALUE!. Pour plus d’informations sur les chaînes d’erreur, consultez Valeurs d’erreur de cellule.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets au niveau du document et aux projets de complément VSTO pour Excel. Pour plus d’informations, consultez Fonctionnalités disponibles par application Office lication et le type de projet.

L’exemple suivant recherche une plage nommée Fruits et modifie la police pour les cellules qui contiennent le mot « apples ». Cette procédure utilise également la FindNext méthode, qui utilise les paramètres de recherche définis précédemment pour répéter la recherche. Vous spécifiez la cellule après laquelle effectuer une recherche, et la FindNext méthode gère le reste.

Remarque

La FindNext recherche de la méthode revient au début de la plage de recherche une fois qu’elle a atteint la fin de la plage. Votre code doit s’assurer que la recherche ne s’encapsule pas dans une boucle infinie. L’exemple de procédure montre un moyen de gérer cela à l’aide de la Address[] propriété.

Pour rechercher du texte dans une plage de feuilles de calcul

  1. Déclarez des variables pour le suivi de la plage entière, de la première plage trouvée et de la plage trouvée actuelle.

    Excel.Range currentFind = null; 
    Excel.Range firstFind = null;
    
  2. Recherchez la première correspondance, en spécifiant tous les paramètres à l’exception de la cellule à rechercher après.

    currentFind = Fruits.Find("apples", missing,
        Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, 
        Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false,
        missing, missing);
    
  3. Poursuivez la recherche tant qu’il y a des correspondances.

    while(currentFind != null)
    
  4. Comparez la première plage trouvée (firstFind) à Nothing. Si firstFind elle ne contient aucune valeur, le code stocke la plage trouvée (currentFind).

    if (firstFind == null)
    {
        firstFind = currentFind; 
    }
    
  5. Quittez la boucle si l’adresse de la plage trouvée correspond à l’adresse de la première plage trouvée.

    else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1)
          == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
    {
        break;
    }
    
  6. Définissez l’apparence de la plage trouvée.

    currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
    currentFind.Font.Bold = true;
    
  7. Effectuez une autre recherche.

    currentFind = Fruits.FindNext(currentFind);
    

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

Exemple

    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); 
        }
    }