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

XL 2019 Extraction d'une chaine de caractère

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 !

Electronull

XLDnaute Nouveau
Bonjour,

Je cherche à trouver en vba le moyen d'extraire une chaine de caractère depuis la droite vers la gauche jusqu'au caractère \
Ex : c:\jfkkjdfkjd\dljhldf\kjlkjldf.xlx
pour avoir que kjlkjldf.xlx

Merci
 
Bonsoir le Forum


VB:
' ByRef signifie que la fonction reçoit une référence sur la variable d'origine, ce qui permet (si besoin) de modifier la variable appelante.
' ByVal signifie que la fonction reçoit une copie de la valeur et ne peut donc pas modifier la variable d'origine.
Function ExtraireNom(ByVal C As String) As String
' Solution A (Avec l'extension)
    A = Mid(C, InStrRev(C, "\") + 1)
' Solution B1 (Sans l'extension)
    B1 = Mid(C, InStrRev(C, "\") + 1, InStrRev(C, ".") - InStrRev(C, "\") - 1)
' Solution B2 (Sans l'extension)
    B2 = Split(Split(C, ".")(0), "\")(UBound(Split(Split(C, ".")(0), "\")))
' CHoix A Ou B1 0u B2
    ExtraireNom = B2
End Function

Sub Essai()
    MsgBox ExtraireNom(Range("A1"))
End Sub
 
Re,

Points forts de cette solution :
✔ Ultra compacte (1 ligne)
✔ Compatible Excel 2019, 2016, 2013, 2010... (aucune fonction moderne)
✔ Fonctionne même si le fichier contient plusieurs "." et "\" dans la chaîne de caractères
✔ Pas besoin de colonnes intermédiaires

=STXT(A1;TROUVE("¤";SUBSTITUE(A1;"\";"¤";NBCAR(A1)-NBCAR(SUBSTITUE(A1;"\";""))))+1;TROUVE("¤";SUBSTITUE(A1;".";"¤";NBCAR(A1)-NBCAR(SUBSTITUE(A1;".";""))))-TROUVE("¤";SUBSTITUE(A1;"\";"¤";NBCAR(A1)-NBCAR(SUBSTITUE(A1;"\";""))))-1)
 
Bonsoir à tous,

Si on désire extraire le texte après un dernier caractère C, on pourra utiliser (toutes versions) :
=REPT(SUBSTITUE(DROITE(SUBSTITUE(A1;C;REPT(CAR(1);300));300);CAR(1);"");ESTNUM(CHERCHE("\";A1)))

  • nota 1 : pour la question posée, C vaut "\"
  • nota 2 : si l'expression dans la cellule A1 ne contient par le caractère C alors on retourne la chaine vide ""
 
Dernière édition:
Bonjour le fil

Il manquait une approche PQ
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Colonne1", type text}}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Type modifié", "Colonne1", Splitter.SplitTextByEachDelimiter({"\"}, QuoteStyle.Csv, true), {"Colonne1.1", "Colonne1.2"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Colonne1.1", type text}, {"Colonne1.2", type text}}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié1",{"Colonne1.1"})
in
    #"Colonnes supprimées"

Et pour la route une autre formule possible
=DROITE(A2;NBCAR(A2)-1-MAX(SIERREUR(CHERCHE("\";A2;LIGNE($1:$255));0))+1)

EDITION:
Et une formule alambiquée pour les 365istes
=PRENDRE(FRACTIONNER.TEXTE(A2;"\");;-1)

NB: Je commence en A2 parce que pour tester la piste PQ, j'ai d'abord transformé la plage de données en Tableau
(Insertion/Tableau)

Reste aussi la piste Données/Convertir à explorer (mais simplement par gourmandise car plus chronophage)
 
Dernière édition:
Re

Une version PQ plus mieux (suite à un échange en MP)
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
   A = Table.TransformColumns(Source, {{"Colonne1", each Text.AfterDelimiter(_, "\", {0, RelativePosition.FromEnd}), type text}})
in
    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

Discussions similaires

Réponses
20
Affichages
717
Réponses
5
Affichages
420
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…