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
419
Retour