🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel FIND et SEARCH — Localiser du texte par contenu (FIND vs SEARCH, et le piège

|

Excel FIND et SEARCH — Localiser du texte par contenu (FIND vs SEARCH, et le piège

En brefFIND (français : TROUVE) et SEARCH (français : CHERCHE) ne découpent pas une chaîne — elles vous indiquent commence un de ses morceaux, sous forme de nombre. FIND("@", A2) renvoie la position du @ ; vous fournissez ce nombre à MID/LEFT pour découper par contenu au lieu d'une fragile position codée en dur. Deux différences décident laquelle utiliser : FIND est sensible à la casse et n'accepte aucun caractère générique ; SEARCH ignore la casse et accepte * et ?. Et le piège qui fait rougir des colonnes entières : en l'absence de correspondance, les deux renvoient #VALUE! — jamais 0, jamais vide — alors enveloppez-les dans IFERROR ou testez avec ISNUMBER. Toutes les versions d'Excel.

=FIND("@", A2)                  ' position du @ (sensible à la casse, exacte)
=SEARCH("st", A2)               ' position de "st"/"ST"/"St" (insensible à la casse)
=ISNUMBER(SEARCH("paid", A2))   ' VRAI si A2 contient "paid", quelle que soit la casse

FIND et SEARCH sont les fonctions que les gens utilisent le moins seules et le plus à l'intérieur d'autres formules — et c'est précisément tout l'intérêt. Ce sont le GPS qui rend l'extraction de texte fiable. Comprenez-les et la fâcheuse habitude du RIGHT(A2, 4) fragile disparaît.

Ce que vous allez apprendre

  • Pourquoi FIND/SEARCH renvoient une position, pas le texte — et quoi en faire
  • Les deux vraies différences : la sensibilité à la casse et les caractères génériques
  • Pourquoi une correspondance manquante renvoie #VALUE!, et les deux façons de la gérer
  • L'idiome ISNUMBER(SEARCH(...)) pour un test « est-ce que ça contient ? » propre
  • Utiliser le 3e argument pour trouver la deuxième occurrence

Le modèle mental : un détecteur de repère, pas un découpeur

LEFT, MID et RIGHT découpent. FIND et SEARCH localisent. Elles répondent à une seule question — « à quelle position de caractère commence cette sous-chaîne ? » — et renvoient un nombre. Pris isolément, ce nombre paraît inutile ; son rôle est de devenir le start_num d'un MID ou l'argument de longueur d'un LEFT :

' Obtenir le domaine d'un e-mail : tout ce qui suit le @
=MID(A2, FIND("@", A2) + 1, 99)

' Obtenir le prénom : tout ce qui précède le premier espace
=LEFT(A2, FIND(" ", A2) - 1)

C'est l'association qui transforme un découpage basé sur la position en un découpage basé sur le contenu. Vous arrêtez de dire « prends les caractères 1 à 5 » et vous commencez à dire « prends tout jusqu'à l'espace, où qu'il soit ». La découpe suit désormais les données au lieu d'en supposer la forme.

La règle qui débloque tout : FIND vs SEARCH, ce sont deux différences, pas une

Les gens retiennent « FIND est sensible à la casse » et oublient la seconde différence, tout aussi importante. Voici le tableau complet :

Casse Génériques (* ?)
FIND Sensible — "a""A" Non pris en charge (traité littéralement)
SEARCH Insensible — "a" = "A" Pris en charge

Donc :

=FIND("s", "Sales")     ' 5  — le s minuscule ; le S majuscule est ignoré
=SEARCH("s", "Sales")   ' 1  — correspond au S majuscule, casse ignorée
=SEARCH("a?c", A2)      ' trouve "a", n'importe quel caractère, "c" — seul SEARCH fait ça
=FIND("a?c", A2)        ' cherche le texte littéral "a?c"

Le choix à faire est simple : prenez FIND quand la casse compte ou quand votre motif de recherche contient des caractères qui agiraient sinon comme des génériques ; prenez SEARCH quand vous voulez une correspondance indulgente et humaine. Pour « est-ce que cette cellule mentionne 'paid' dans n'importe quelle graphie ? », SEARCH est le bon outil.

Le piège #VALUE! : une absence de correspondance est une erreur, pas un zéro

Voici le comportement qui surprend tout le monde. Quand la sous-chaîne n'est pas là, FIND et SEARCH ne renvoient ni 0 ni chaîne vide — elles renvoient #VALUE!. Glissez-en une dans une colonne où certaines lignes n'ont pas la sous-chaîne et la colonne entière s'illumine de rouge, entraînant dans sa chute toute formule qui la référence.

Deux correctifs propres, selon ce que vous faites :

' Extraction, mais certaines lignes n'ont peut-être pas le délimiteur :
=IFERROR(MID(A2, FIND("-", A2) + 1, 99), A2)   ' repli sur la chaîne entière

' Simple test de présence — sans rien extraire :
=ISNUMBER(SEARCH("urgent", A2))                ' VRAI / FAUX, ne renvoie jamais d'erreur

Ce second idiome est celui à mémoriser. ISNUMBER(SEARCH(needle, haystack)) (français : ESTNUM) est la façon dont Excel réalise un test « contient » insensible à la casse — associez-le à IF, FILTER ou à la mise en forme conditionnelle pour signaler chaque ligne qui mentionne un mot. C'est plus propre et plus rapide que n'importe quelle acrobatie avec les génériques de COUNTIF, et ça ne renvoie jamais d'erreur.

Le 3e argument : trouver la deuxième occurrence

Les deux fonctions acceptent un start_num facultatif — la position à partir de laquelle commencer la recherche. Son usage principal est de dépasser la première correspondance pour trouver la suivante :

=FIND("-", A2)                       ' position du 1er trait d'union
=FIND("-", A2, FIND("-", A2) + 1)    ' position du 2e trait d'union

Imbriquer ainsi pour atteindre la n-ième occurrence, c'est là que ces formules cessent d'être lisibles. Si vous vous surprenez à compter les occurrences, c'est le signal de passer à TEXTSPLIT (français : FRACTIONNER.TEXTE — découper sur le délimiteur et prendre le morceau voulu) ou à Power Query.

Le bon réflexe

FIND et SEARCH n'apparaissent presque jamais seules — si vous en utilisez une isolément, vous voulez probablement le test de présence ISNUMBER(SEARCH()) plutôt qu'une position brute. Leur véritable place est à l'intérieur d'un MID/LEFT/REPLACE (français : REMPLACER), où elles fournissent la position pour que la découpe suive le contenu. Choisissez FIND pour une correspondance exacte, sensible à la casse et littérale ; choisissez SEARCH pour une correspondance indulgente, avec génériques et humaine. Et n'écrivez jamais l'une ou l'autre sans décider de ce qui se passe en l'absence de correspondance — #VALUE! n'est pas un « oups », c'est le comportement documenté. Quand l'imbrication atteint trois niveaux, arrêtez et découpez plutôt la chaîne.

Comment ExcelMaster vous aide

Les domaines d'e-mail, le texte entre le deuxième et le troisième trait d'union, la partie d'une adresse après la dernière virgule — ce sont des casse-têtes FIND/SEARCH, et la partie délicate, ce sont les décalages +1/-1 et la gestion de l'absence de correspondance. ExcelMaster écrit l'expression complète à partir d'une description en français courant — les bons points d'ancrage, la garde IFERROR ou ISNUMBER déjà en place, et le choix FIND vs SEARCH selon vos besoins de sensibilité à la casse. Vous nommez le repère ; il fait les calculs de position.

Foire aux questions

Quelle est la différence entre FIND et SEARCH dans Excel ?

Deux différences. FIND est sensible à la casse et traite */? comme des caractères littéraux ; SEARCH ignore la casse et prend en charge ces caractères génériques. Utilisez FIND pour des correspondances exactes et sensibles à la casse, et SEARCH pour des correspondances indulgentes.

Pourquoi FIND renvoie-t-il #VALUE! ?

Parce que la sous-chaîne que vous cherchez n'est pas dans le texte. FIND et SEARCH renvoient #VALUE! en l'absence de correspondance, plutôt que 0 ou vide. Enveloppez la formule dans IFERROR(...) ou testez d'abord avec ISNUMBER(SEARCH(...)).

Comment vérifier qu'une cellule contient un texte précis ?

Utilisez =ISNUMBER(SEARCH("word", A2)), qui renvoie VRAI ou FAUX et ignore la casse. Pour une vérification sensible à la casse, remplacez SEARCH par FIND. Cela ne renvoie jamais d'erreur, contrairement à l'usage direct de la position.

Comment trouver la deuxième occurrence d'un caractère ?

Passez le 3e argument facultatif (start_num) pour commencer la recherche après la première correspondance : =FIND("-", A2, FIND("-", A2) + 1) renvoie la position du deuxième trait d'union. Au-delà de la deuxième occurrence, envisagez TEXTSPLIT pour la lisibilité.

FIND ou SEARCH prennent-ils en charge les caractères génériques ?

Seul SEARCH. SEARCH("a?c", A2) correspond à un « a », n'importe quel caractère unique, puis un « c ». FIND traite ? et * comme des caractères littéraux à trouver.

Testé dans

Testé dans : Excel 365 (Windows 11) — dernière vérification le 2026-06-29.

Guides associés : Excel LEFT, RIGHT et MID · Excel SUBSTITUTE et REPLACE · Excel TEXTSPLIT · Excel IFERROR