Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Extraire une chaine de caractère entre deux caractères différents

Al1_44

XLDnaute Junior
Bonsoir le forum,

Certainement un problème simple pour vous, je veux isoler une chaine de caractères contenu entre deux caractères spéciaux.

Exemple:
Machin chose,19875 Bidule TRUC (mois 2013, aert de gfe) hfu

En partant de la droite, extraire le texte à gauche de la virgule jusqu'au caractère ")" soit : "aert de gfe" , actuellement je passe par deux formules successives, voir fichier joint.

Merci beaucoup et à bientôt

AL1_44
 

Pièces jointes

  • Classeur1.xlsx
    9.3 KB · Affichages: 7
Solution
Bonjour Al,
Un essai en PJ avec la fonction perso en VBA :
VB:
Function Extrait(C$)
    Extrait = Trim(Split(Split(C, ",")(UBound(Split(C, ","))), ")")(0))
End Function
Syntaxe : =Extrait(Chaine)

ou peut être plus rapide :
VB:
Function Extrait2(C$)
    Extrait2 = Trim(Mid(C, InStrRev(C, ",") + 1, InStr(C, ")") - InStrRev(C, ",") - 1))
End Function
Syntaxe : =Extrait2(Chaine)

Le problème est que "cherche par la droite" existe en VBA (InStrRev) mais pas en formule.
Sinon si le VBA vous rebute, vous pouvez concaténer vos deux formules :
VB:
=GAUCHE(SUPPRESPACE(DROITE(SUBSTITUE(A1;",";REPT(" ";NBCAR(A1)));NBCAR(A1))); TROUVE(")"; SUPPRESPACE(DROITE(SUBSTITUE(A1;",";REPT(" ";NBCAR(A1)));NBCAR(A1))))-1)

ou un poil plus court ...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Al,
Un essai en PJ avec la fonction perso en VBA :
VB:
Function Extrait(C$)
    Extrait = Trim(Split(Split(C, ",")(UBound(Split(C, ","))), ")")(0))
End Function
Syntaxe : =Extrait(Chaine)

ou peut être plus rapide :
VB:
Function Extrait2(C$)
    Extrait2 = Trim(Mid(C, InStrRev(C, ",") + 1, InStr(C, ")") - InStrRev(C, ",") - 1))
End Function
Syntaxe : =Extrait2(Chaine)

Le problème est que "cherche par la droite" existe en VBA (InStrRev) mais pas en formule.
Sinon si le VBA vous rebute, vous pouvez concaténer vos deux formules :
VB:
=GAUCHE(SUPPRESPACE(DROITE(SUBSTITUE(A1;",";REPT(" ";NBCAR(A1)));NBCAR(A1))); TROUVE(")"; SUPPRESPACE(DROITE(SUBSTITUE(A1;",";REPT(" ";NBCAR(A1)));NBCAR(A1))))-1)

ou un poil plus court :
VB:
=SUPPRESPACE(STXT(STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1);CHERCHE(",";STXT(A1;TROUVE("(";A1)+1;TROUVE(")";A1)-TROUVE("(";A1)-1))+1;10^3))

C'est indigeste mais ça marche.
 

Pièces jointes

  • Classeur1 V4.xlsm
    15.4 KB · Affichages: 6
Dernière édition:

Al1_44

XLDnaute Junior
Bonjour Sylvanu,

Je n'ai que l'embarras du choix, toute les solutions me conviennent.
Pour un coté plus simpliste, je vais travailler avec la fonction VBA.
Mais j'approuve la première formule, car c'est ce que je cherchais à
mettre en œuvre, sans succès.
Merci.

Bon WE à tous.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…