Vos données contiennent des chaînes comme REF-(AB-123)-2024, [CODE] Produit (variante) ou Prix : 49€ (HT) — et vous voulez juste extraire la partie entre parenthèses, entre crochets, ou entre deux tirets.
En apparence, c’est simple. En pratique, Excel vous réserve une surprise.
La formule native pour ce cas existe, mais elle ressemble à ça :
=SIERREUR(STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1);"")
Lisible ? Non. Maintenable ? Difficilement. Explicable à un collègue ? Bonne chance.
Dans cet article, on décortique comment cette formule fonctionne, quand elle atteint ses limites, et comment l’écrire en une seule fonction lisible grâce à une approche formula-based.
Comment Excel extrait du texte : comprendre STXT et TROUVE
Avant de passer aux solutions, il est utile de comprendre les deux fonctions sur lesquelles tout repose.
La fonction STXT
STXT(texte; position_départ; nombre_caractères) extrait un nombre défini de caractères à partir d’une position dans une chaîne.
=STXT("Bonjour monde"; 9; 5)
→ "monde"
Elle est simple en soi. Le problème : elle demande une position de départ et un nombre de caractères fixes. Dans des données réelles, ces positions varient d’une cellule à l’autre.
La fonction TROUVE
TROUVE(texte_cherché; texte; [départ]) renvoie la position d’un caractère dans une chaîne.
=TROUVE("("; "REF-(AB-123)-2024")
→ 5
C’est TROUVE qui permet de rendre STXT dynamique. Mais combiner les deux pour extraire ce qui se trouve entre deux délimiteurs crée inévitablement une formule imbriquée à plusieurs niveaux.
La formule native STXT + TROUVE : comment ça marche (et où ça coince)
Construction pas à pas
Pour extraire le texte entre ( et ) dans la cellule A1 :
Étape 1 — Trouver la position du délimiteur ouvrant :
=TROUVE("("; A1) → position du "("
Étape 2 — Le caractère à extraire commence juste après :
=TROUVE("("; A1) + 1 → position du premier caractère à extraire
Étape 3 — Calculer le nombre de caractères entre les deux délimiteurs :
=TROUVE(")"; A1) - TROUVE("("; A1) - 1
Étape 4 — Combiner dans STXT :
=STXT(A1; TROUVE("(";A1)+1; TROUVE(")";A1)-TROUVE("(";A1)-1)
Étape 5 — Ajouter SIERREUR pour gérer les cellules sans délimiteur :
=SIERREUR(STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1);"")
Chaque étape est logique. Leur combinaison produit une formule que personne ne peut relire d’un coup d’œil.
Les limites de cette approche
Occurrences multiples : Si votre chaîne contient plusieurs paires de délimiteurs ((A) et (B)), la formule extrait toujours entre la première occurrence. Gérer la deuxième ou la troisième nécessite d’imbriquer une nouvelle couche de TROUVE avec un paramètre de départ — la formule double de longueur.
Délimiteurs différents gauche/droite : Entre [ et ], entre { et }, entre < et > — chaque variante demande sa propre formule. Pas de paramètre générique.
Sensibilité à la casse : TROUVE est sensible à la casse. Pour une recherche insensible, il faut remplacer par CHERCHE, ce qui allonge encore la formule.
Lisibilité en équipe : Une formule de 70 caractères avec trois appels imbriqués à TROUVE est une bombe à retardement dans un fichier partagé. Personne n’ose la modifier. Tout le monde la contourne.
Cas pratiques avec la formule native
Extraire entre parenthèses
=SIERREUR(STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1);"")
| Cellule A1 | Résultat |
|---|---|
REF-(AB-123)-2024 |
AB-123 |
Produit (ref: XL) |
ref: XL |
Sans parenthèses |
(vide) |
Extraire entre crochets
=SIERREUR(STXT(A1;TROUVE("[";A1)+1;TROUVE("]";A1)-TROUVE("[";A1)-1);"")
| Cellule A1 | Résultat |
|---|---|
[CODE-42] Description produit |
CODE-42 |
Statut [EN COURS] - Priorité haute |
EN COURS |
Extraire entre deux tirets
=SIERREUR(STXT(A1;TROUVE("-";A1)+1;TROUVE("-";A1;TROUVE("-";A1)+1)-TROUVE("-";A1)-1);"")
Ici on cherche le deuxième tiret à partir de la position du premier — la formule commence à devenir vraiment difficile à maintenir.
La solution formula-based : =PF.EXTRAIRE.DELIM()
HexFormula propose une fonction dédiée qui fait exactement la même chose, en une syntaxe lisible :
=PF.EXTRAIRE.DELIM(texte; delim_gauche; delim_droite; [occurrence]; [sensible_casse])
Paramètres
| Paramètre | Description | Obligatoire |
|---|---|---|
texte |
La cellule ou chaîne source | Oui |
delim_gauche |
Le délimiteur ouvrant | Oui |
delim_droite |
Le délimiteur fermant | Oui |
occurrence |
Quelle occurrence extraire (défaut : 1) | Non |
sensible_casse |
VRAI/FAUX (défaut : FAUX) | Non |
Les mêmes cas pratiques, en lisible
Entre parenthèses :
=PF.EXTRAIRE.DELIM(A1; "("; ")")
→ AB-123
Entre crochets :
=PF.EXTRAIRE.DELIM(A1; "["; "]")
→ CODE-42
Entre tirets — deuxième occurrence :
=PF.EXTRAIRE.DELIM(A1; "-"; "-"; 2)
→ extrait entre le 2e et le 3e tiret
Insensible à la casse :
=PF.EXTRAIRE.DELIM(A1; "(a"; ")"; 1; FAUX)
N’importe quel collègue peut lire cette formule et comprendre ce qu’elle fait sans ouvrir la documentation.
Avantages concrets en équipe
- Auditabilité : La logique est visible dans la cellule
- Modification simple : Changer le délimiteur = modifier une chaîne de texte
- Gestion des occurrences : Un seul paramètre supplémentaire, pas une formule réécrite
- IntelliSense intégré : La description des paramètres s’affiche en direct dans Excel
[INTERNAL LINK: /fonctions/texte « Voir toutes les fonctions texte HexFormula »]
Comparatif des approches
| Critère | STXT + TROUVE | =PF.EXTRAIRE.DELIM |
|---|---|---|
| Lisibilité | ❌ Difficile | ✅ Immédiate |
| Gestion des occurrences | ❌ Imbrication complexe | ✅ Paramètre simple |
| Délimiteurs variables | ❌ Formule à réécrire | ✅ Paramètre texte |
| Maintenable en équipe | ❌ Risqué | ✅ Oui |
| Sans add-in | ✅ Oui | ❌ Requiert HexFormula |
| Performance | ✅ Natif | ✅ C# (rapide) |
FAQ
Peut-on extraire du texte entre deux mots (et pas seulement des symboles) ?
Oui. =PF.EXTRAIRE.DELIM(A1; "Prix : "; " €") extrait la valeur numérique entre « Prix : » et » € ». Les délimiteurs peuvent être des mots ou des expressions, pas uniquement des caractères uniques.
Que se passe-t-il si le délimiteur est absent de la cellule ?
La fonction renvoie une chaîne vide par défaut, sans afficher d’erreur. Pas besoin d’envelopper dans SIERREUR.
Comment extraire la dernière occurrence quand il y en a plusieurs ?
Passez -1 comme paramètre d’occurrence : =PF.EXTRAIRE.DELIM(A1; "("; ")"; -1) extrait entre la dernière paire de parenthèses.
Est-ce que la formule fonctionne sur des colonnes entières ?
Oui, comme n’importe quelle formule Excel. Vous pouvez l’appliquer sur toute une colonne, dans un tableau structuré, ou dans une formule matricielle.
La formule STXT + TROUVE est-elle vraiment plus lente ?
Sur des fichiers de moins de 10 000 lignes, la différence est imperceptible. Sur de grands volumes de données, les fonctions C# de HexFormula offrent un avantage mesurable puisqu’elles ne sont pas interprétées comme les formules VBA.
Conclusion
Extraire du texte entre deux délimiteurs dans Excel est techniquement faisable avec les fonctions natives. Mais la formule résultante — une imbrication de STXT et TROUVE — est difficile à lire, à maintenir et à expliquer.
Pour des fichiers que vous gérez seul et qui ne changeront plus, la formule native fait le travail. Pour tout le reste — fichiers partagés, modèles réutilisables, données variables — une approche formula-based comme =PF.EXTRAIRE.DELIM() élimine la complexité sans sacrifier la puissance.

