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

Extraire texte depuis cellule excel se trouvant entre caract.

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MSijij7929200

XLDnaute Nouveau
Bonjour,
je me casse la tête à trouver une formule (en anglais ce serait top!😉 pour extraire une partie de texte depuis une cellule.

Je ne peux pas utiliser GAUCHE ou DROITE car mes BDD varient à souhait, ni les CHERCHE, je ne peux pas compter à parti d'un certain nombre de caractères et surtout la chaine s'arrête après d'autres caractères.

Un exemple sera plus concret:
RT CHFR 3-30j Produits [**:Tucroisquecamarche][sg:TG][ca:RC][st:blablabli][dv:uiouinon][la:FR][pa:CH][ob:camarcheencore]

Je voudrais extraire de ceci "Tucroisquecamarche" dans une autre cellule, puis "blablabli" dans une autre cellule puis "camarcheencore" dans une autre cellule etc...

Merciiiii d'avance pour votre si précieuse aide!
 
Dernière édition:
Hello

voici mes critères:
- extraire ce qui se trouve entre [**: et ] => ici "Tucroisquecamarche"
- extraire ce qui se trouve entre [sg: et ] => ici "TG"
- extraire ce qui se trouve entre [ca: et ] => ici "RC"

Mercii!
 
Bonsoir Efgé, heureux de te croiser,

Si l'on veut toujours extraire les 1er, 4ème, 8ème textes entre crochets :
Code:
Function Extract$(t$, n%)
Dim critere, i%, j%
critere = Array(1, 4, 8) 'liste des critères, à adapter
For i = 1 To Len(t)
  If Mid(t, i, 1) = "[" Then j = j + 1
  If j = critere(n - 1) Then
    If Mid(t, i + 1, 1) = "]" Then Exit Function
    For j = i + 2 To Len(t)
      If Mid(t, j, 1) = "]" Then Exit For
    Next
    t = Mid(t, i + 1, j - i - 1)
    j = InStr(t, ":")
    Extract = Trim(Mid(t, j + 1))
    Exit Function
  End If
Next
End Function
Cette fonction doit être placée dans un module standard pour pouvoir être utilisée dans la feuille.

Fichier joint.

A+
 

Pièces jointes

Re,

Avec les critères choisis dans des listes de validation en B1 C1 D1 c'est plus simple :
Code:
Function Extract$(t$, critere%)
If critere = 0 Then Exit Function
Dim i%, j%
For i = 1 To Len(t)
  If Mid(t, i, 1) = "[" Then j = j + 1
  If j = critere Then
    If Mid(t, i + 1, 1) = "]" Then Exit Function
    For j = i + 2 To Len(t)
      If Mid(t, j, 1) = "]" Then Exit For
    Next
    t = Mid(t, i + 1, j - i - 1)
    j = InStr(t, ":")
    Extract = Trim(Mid(t, j + 1))
    Exit Function
  End If
Next
End Function
Fichier (2).

A+
 

Pièces jointes

Dernière édition:
Hello

J ai pris celui de Efgé car plus accessible pour moi😉 je vais transformer tout ceci en pivot table et je souhaite savoir si la colone B2 [**: peut être renommée pour que cela fasse plus sens lors de la construction du pivot table. par exemple [**: signifie "achat", comment puis je le renommer en conservant la même formule? merci encore!
 
Bonjour Fred,

Les ;1 dans chacun des 2 TROUVE sont inutiles, en les supprimant on gagne 6 octets en mémoire.

En remplaçant NBCAR($A2) par 32767 on gagne encore 5 octets.

Au total cette formule fait donc gagner 11 octets :
Code:
=SIERREUR(STXT($A2;TROUVE("@";SUBSTITUE($A2;"[";"@";COLONNES($A:A)))+4;TROUVE("]";STXT($A2;TROUVE("@";SUBSTITUE($A2;"[";"@";COLONNES($A:A)))+4;32767))-1);"")
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…