VBA extraire chaine de caractère entre "-"

Bonjour le forum,

Je souhaite extraire une chaine de caractère de nom de fichier.

Exemple:

Nom de fichier : CBon - CaMarche - Bien.xlsm

Comme on le voit mon nom de fichier est séparé en trois partie.

J'ai trois textbox, et je souhaite récupérer chaque partie dans une textbox.

Return "CBon" ce qui se trouve avant le premier "-"

Return "CaMarche" ce qui se trouve entre les deux "-"

Return "Bien" ce qui se trouve après le dernier "-" mais sans le ".xlsm"

Sachant que le nombre de caractère de chaque Return est complètement variable.

J'arrive à récupérer le dernier en partie,

Dim NomFichier As String = "CBon - CaMarche - Bien.xlsm"
        TextBox1.Text = Mid(NomFichier, InStrRev(NomFichier, "-") + 1)

Si toute fois vous avez une idée je suis preneur !! :)

Merci d'avance,

Sebyg

Bonjour,

La fonction Split est prévue pour !

Sub Test()

Dim TabRes As Variant, MonTxt As String, i As Integer

MonTxt = "CBon - CaMarche - Bien.xlsm"
TabRes = Split(MonTxt, " - ")
For i = LBound(TabRes) To Ubound(TabRes)
    MsgBox TabRes(i)
Next i

End Sub

Le résultat de Split est un tableau, tu peux extraire directement un élément spécifique comme ceci (exemple pour "CaMarche") : Split(MonTxt, " - ")(1)

Bonjour Pedro22,

Ça fonctionne, merci bien.

Un seul soucis mon:

Split(MonTxt, " - ")(2)

Le "(2)" renvoi avec le ".xlsm"

Un seul soucis mon:

Split(MonTxt, " - ")(2)

Le "(2)" renvoi avec le ".xlsm"

Tu peux le virer avec un MonTxt = Replace(MonTxt, ".xlsm", "") ou encore MonTxt = Left(MonTxt, Len(MonTxt) - 5)

Mais si le fichier n'est pas forcément un .xlsm mais un .xlm ou .pdf je ne sais pas...

J'ai testé avec la fonction Left, tout ce qui se trouve a gauche du "." suite au tableau "Split(NomFichier, " - ")(2)"

Mais la fonction n'est pas prise en compte

EDIT: J'ai réussi erreur de ma part désolé !! C'est parfait merci beaucoup !

Mais si le fichier n'est pas forcément un .xlsm mais un .xlm ou .pdf je ne sais pas...

Tu peux re-splitter le dernier élément à partir du ".", et ne garder que le premier élément obtenu :

MonTxt = Split(Split(NomFichier, " - ")(2), ".")(0)

Ah ouii !! Je n'avais pas pensé a re-exécuter cette fonction... Mais c'est une solution effectivement à garder en tête ;)

Mais c'est bon avec la fonction Left je viens de réussir finalement. Merci de ta réactivité Pedro22

Bonjour Sebyg, Pedro22,

NomFichier = Left(NomFichier, InStr(1, NomFichier, ".") - 1)

Permet de ne pas prendre le type de fichier

Bonne continuation.

Rechercher des sujets similaires à "vba extraire chaine caractere entre"