Comment : rechercher du texte dans les plages de la feuille de calcul par programmation
La méthode Find de l'objet Microsoft.Office.Interop.Excel.Range vous permet de rechercher du texte dans la plage.Ce texte peut également correspondre à n'importe quelle chaîne d'erreur susceptible d'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 de niveau document et de niveau application pour Excel 2013 et Excel 2010. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.
L'exemple suivant recherche une plage nommée Fruits et modifie la police des cellules contenant le mot « apples ».Cette procédure fait également appel à la méthode FindNext, qui utilise les paramètres de recherche définis précédemment pour poursuivre la recherche.Vous spécifiez la cellule à partir de laquelle la recherche doit commencer et la méthode FindNext gère le reste.
[!REMARQUE]
La recherche de la méthode FindNext revient au début de la plage de recherche lorsqu'elle en a atteint la fin.Votre code ne doit pas décrire une boucle infinie.L'exemple de procédure indique comment éviter cela à l'aide de la propriété Address.
Pour une démonstration vidéo connexe, consultez Comment faire pour utiliser la méthode Find dans un complément Excel ? (page éventuellement en anglais).
Pour rechercher du texte dans une plage de feuille de calcul
Déclarez les variables pour le suivi de la plage complète, de la première plage trouvée et de la plage trouvée actuelle.
Dim currentFind As Excel.Range = Nothing Dim firstFind As Excel.Range = Nothing
Excel.Range currentFind = null; Excel.Range firstFind = null;
Recherchez la première correspondance, en spécifiant tous les paramètres à l'exception de la cellule à partir de laquelle la recherche doit commencer.
currentFind = Fruits.Find("apples", , _ Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, _ Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)
currentFind = Fruits.Find("apples", missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, missing, missing);
Poursuivez la recherche tant que vous trouvez des correspondances.
While Not currentFind Is Nothing
while(currentFind != null)
Comparez la première plage trouvée (firstFind) à Nothing.Si firstFind ne contient aucune valeur, le code stocke la plage trouvée (currentFind).
If firstFind Is Nothing Then firstFind = currentFind
if (firstFind == null) { firstFind = currentFind; }
Si l'adresse de la plage trouvée correspond à celle de la première plage trouvée, le code sort de la boucle.
ElseIf currentFind.Address = firstFind.Address Then Exit While End If
else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1) == firstFind.get_Address(Excel.XlReferenceStyle.xlA1)) { break; }
Définissez l'apparence de la plage trouvée.
With currentFind.Font .Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red) .Bold = True End With
currentFind.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); currentFind.Font.Bold = true;
Procédez à une autre recherche.
currentFind = Fruits.FindNext(currentFind)
currentFind = Fruits.FindNext(currentFind);
L'exemple suivant illustre la méthode complète.
Exemple
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
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);
}
}
Voir aussi
Tâches
Comment : appliquer des styles à des plages dans les classeurs par programmation
Comment : faire référence aux plages de la feuille de calcul dans le code par programmation