Extraire une partie d'une chaine de caractere

Bonjour à tous

Je souhaite extraire le sous répetoire d'une chaine de caractere.

Dans la cellule C2, J'ai la chaine suivante:

C:\Users\xxxxx\OneDrive - xxxxx\Documents\2- PRODUITS\1- Fiche Technique\Pain\

Mon but est d'extraire "Pain".

J'ai essayer plusieurs formule (et variante...) rien ne fonctionne...

Formule essayé:

=STXT(C2;TROUVE("@";SUBSTITUE(C2;"\";"@";NBCAR(C2)-NBCAR(SUBSTITUE(C2;"\";""))))+1;NBCAR(C2)-TROUVE("~";SUBSTITUE(C2;"\";"@";NBCAR(C2)-NBCAR(SUBSTITUE(C2;"\";"")))))

Résultat: Rien ne s'affiche!

Autre formule:

=DROITE(C3;NBCAR(C3)-TROUVE("@";SUBSTITUE(C3;"\";"@";NBCAR(C3)-NBCAR(SUBSTITUE(C3;"\";"")))))

Résultat: Rien ne s'affiche!

Merci de votre aide

Bonjour,

S'il faut juste extraire les 4 caractères avant le \

=GAUCHE(DROITE(C2;5);4)

Bonjour blackjack ,

Essayer :

=SUBSTITUE(DROITE(SUBSTITUE(C2;"\";REPT("\";111));222);"\";"")

Bonjour à tous !

Vraiment trop simple vos formules ! Je vous propose la mienne :
=STXT(A1;MAX(SIERREUR(TROUVE("\";STXT(A1;1;NBCAR(A1)-1);LIGNE(1:256));0))+1;NBCAR(A1)-MAX(SIERREUR(TROUVE("\";STXT(A1;1;NBCAR(A1)-1);LIGNE(1:256));0))-1)

@ bientôt

LouReeD

Bonjour à tous,

Bien sûr si la forme de la chaine en C2 évolue, ma formule ne convient plus. Les formules proposées seront plus adaptées.

Bonne journée

Re,

La même formule très légèrement modifiée pour prendre aussi en compte le cas où le texte ne se terminerait pas par un anti-slash.

=SI(C2="";"";SUBSTITUE(DROITE(SUBSTITUE(C2;"\";REPT("\";111));SI(DROITE(C2;1)="\";222;111));"\";""))

edit : Bonjour Eric_angers , LouReeD ,

Bonjour à tous !

Pour le plaisir et surtout travailler les expressions régulières, la formule suivante retourne la valeur attendue pour une chaîne placée en A1 (M365) :

=REGEXEXTRACT(A1; "[^\\]+(?=\\?$)")

Bonjour et merci pour toutes ces réponses.

Je viens de faire un test vite fait...

Alors:

=GAUCHE(DROITE(C2;5);4) le nombres de caracteres n'etant pas forcement le meme.... donc!

=SUBSTITUE(DROITE(SUBSTITUE(C2;"\";REPT("\";111));222);"\";"")

Fonctionne parfaitement par contre je comprend pas trop le REPT avec 111 et le DROITE avec 222...

=STXT(C3;MAX(SIERREUR(TROUVE("\";STXT(C3;1;NBCAR(C3)-1);LIGNE(2:257));0))+1;NBCAR(C3)-MAX(SIERREUR(TROUVE("\";STXT(C3;1;NBCAR(A2)-1);LIGNE(2:257));0))-1)

Fonctionne jusqu'a la ligne 96....apres il me renvoi le chemin complet sans le dernier \

=SI(C2="";"";SUBSTITUE(DROITE(SUBSTITUE(C2;"\";REPT("\";111));SI(DROITE(C2;1)="\";222;111));"\";""))
Fonctionne parfaitement
=REGEXEXTRACT(A1; "[^\\]+(?=\\?$)")

Me renvoi #Nom!

Encore merci

Bonjour à tous de nouveau !

=REGEXEXTRACT(A1; "[^\\]+(?=\\?$)")

Me renvoi #Nom!

Comme indiqué dans mon message, cette contribution n'est opérationnelle qu'avec Microsoft 365 (M365)

Bonjour,
Et une petite dernière ?
Cdlt.

=TRANSPOSE(FILTRE.XML("<t><s>" & SUBSTITUE(GAUCHE(C2; NBCAR(C2)-1); "\"; "</s><s>") & "</s></t>"; "//s[lasT()]"))

Bonjour,

pour ma part si vous avez copier ici la formule de votre classeur alors il y a "mélange des genres" car pour une données en C3, il faut également rechercher le nombre de caractères en C3 :
=STXT(C3;MAX(SIERREUR(TROUVE("\";STXT(C3;1;NBCAR(C3)-1);LIGNE(2:257));0))+1;NBCAR(C3)-MAX(SIERREUR(TROUVE("\";STXT(C3;1;NBCAR(A2)-1);LIGNE(2:257));0))-1)

@ bientôt

LouReeD

Re,

blackjack a écrit :

=SUBSTITUE(DROITE(SUBSTITUE(C2;"\";REPT("\";111));222);"\";"")

Fonctionne parfaitement par contre je comprend pas trop le REPT avec 111 et le DROITE avec 222...

Explication succincte :

1) Supposons que C2 contienne : c:\xxxx\aaa bbb \ccc\

2) On remplace chaque « \ » par la suite de 111 caractères « \ »

avec la formule SUBSTITUE(C2;"\";REPT("\";111)) ce qui donne :

c: \\\\\\\\\\\\\\\\\\\\\xxxx\\\\\\\\\\\\\\\\\\\\\aaa bbb \\\\\\\\\\\\\\\\\\\\\ccc\\\\\\\\\\\\\\\\\\\\\
-------------111 car----------------------111 car-----------------------------111 car----------------------111 car

3) On prend 222 caractères partir de la droite

avec la formule DROITE(SUBSTITUE(C2;"\";REPT("\";111));222) ce qui donne :

\\\\\\\\\\\\\\\\\\ccc\\\\\\\\\\\\\\\\\\\\\
----------108 car----3 car------------- 111 car (108 car + 3 car + 111 car = 222 car)

4) On remplace tous les caractères « \ » par rien

avec la formule =SUBSTITUE(DROITE(SUBSTITUE(C2;"\";REPT("\";111));222);"\";"") ce qui donne :

ccc

Bonjour,

Un peu hors propos mais au vu de la difficulté des formules présentées, une approche via UDF :

Function TROUVERDOSSIER(addresse As String) As String
  Dim outputStr As String

  outputStr = Right(addresse, Len(addresse) - InStrRev(addresse, "\", Len(addresse) - 1))
  outputStr = Left(outputStr, Len(outputStr) - 1)

  TROUVERDOSSIER = outputStr
End Function

Bonjour à tous,

Sans me vanter, je crois que j'ai la plus longue

=STXT(SUBSTITUE(C2;"\";"#";7);TROUVE("#";SUBSTITUE(C2;"\";"#";7);1)+1;NBCAR(SUBSTITUE(C2;"\";"#";7))-(TROUVE("#";SUBSTITUE(C2;"\";"#";7);1)+1))

Ceci dans l'optique que c'est toujours dans le même répertoire, à savoir qu'on cherche toujours après le 7ème \

Bonsoir JB_ !

Non non c'est bien moi qui ait la plus longue et capillotractée !

image

@ bientôt

LouReeD

Bonsoir à tous,

@LouReeD : à 10mm prés

Je crois qu'on a fait peur à BlackJack...

Rechercher des sujets similaires à "extraire partie chaine caractere"