Jay doit déterminer la cellule dans laquelle se produit une valeur de texte particulière.

Il sait qu’il peut utiliser les capacités de recherche et de remplacement d’Excel pour déterminer manuellement l’adresse des cellules contenant une valeur de texte, mais il recherche une formule pour déterminer l’adresse des cellules. Il se demande s’il existe un moyen de rechercher un morceau de texte dans une plage et de demander à Excel de renvoyer l’adresse de la cellule dans laquelle se trouve le texte.

Vous pouvez essayer deux choses. Premièrement, si vous recherchez une correspondance exacte pour le contenu des cellules, vous pouvez utiliser une formule. La formule de base est la suivante:

=ADDRESS(MATCH(C2,A:A,0),1)

Dans cet exemple, la cellule C2 contient la valeur que vous recherchez et la colonne A est la plage de cellules recherchée. La formule renvoie un résultat indépendamment de la capitalisation de C2 ou des valeurs de la colonne A.

Ainsi, si C2 contient «pomme», la formule correspondra positivement aux cellules contenant «pomme», «pomme» ou «APPLE». En effet, tout mélange de capitalisation correspondra.

Cette formule ne renverra pas d’adresse pour une cellule qui contient ce que vous recherchez parmi un autre texte. Donc, si vous recherchez « pomme » (cellule C2), il ne renverra pas l’adresse d’une cellule qui contient l’expression « pomme croustillante ». Vous pouvez modifier un peu ce comportement en ajoutant des caractères génériques à la cellule de recherche. Par exemple, si vous recherchez « pomme », la formule renvoie l’adresse d’une cellule qui contient « pomme », même si elle est précédée ou suivie par d’autres caractères.

Il est à noter que cette formule ne renvoie que l’adresse de la première cellule de la plage qui répond aux critères. Si vous voulez réellement les adresses de toutes les cellules qui répondent aux critères, vous devrez vous fier à une macro. Voici un bon exemple:

Function FindMe(x As Range, y As String) As String     Dim r As Range     Dim sResults As String     Dim sSearch As String

Application.Volatile     sSearch = LCase(y)

For Each r In x         If InStr(1, LCase(CStr(r.Value)), sSearch) > 0 Then             sResults = sResults & r.Address & ", "

End If     Next r     If Len(sResults) > 2 Then         FindMe = Left(sResults, Len(sResults) - 2)

Else         FindMe = ""

End If End Function

Vous utilisez la fonction en fournissant simplement la plage que vous souhaitez rechercher avec ce que vous souhaitez rechercher:

=FindMe(A:A, "apple")

Si vous utilisez une plage étendue (comme dans cet exemple, la totalité de la colonne A), ne soyez pas surpris si la fonction prend un certain temps pour renvoyer un résultat. Cela a du sens, car il doit rechercher dans chaque cellule de la plage, qu’il y ait quelque chose dans la cellule ou non.

Vous n’avez pas non plus besoin d’utiliser de caractères génériques avec cette fonction; il suppose qu’une correspondance se produit si ce que vous recherchez se trouve n’importe où dans la cellule. Il ne fait pas non plus attention à la capitalisation de ce que vous recherchez ou à la capitalisation de quoi que ce soit dans la plage de recherche.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (10082) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.

Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

lien: / excelribbon-Where_Is_that_Text [Où est ce texte?].