Extraire d'une cellule plusieurs chaines de caractères entre 2 caractères =/=
Résolu
LucieDiter
Messages postés
6
Statut
Membre
-
LucieDiter Messages postés 6 Statut Membre -
LucieDiter Messages postés 6 Statut Membre -
Bonjour,
J’aurais voulu savoir s’il est possible dans Excel d’extraire d’une cellule contenant une chaîne de caractères, toutes les chaines de caractères contenues entre deux caractères définis.
Par exemple dans une cellule j’ai la chaîne suivante :
graphisme - #sketchnote - Education ; e-learning ; rédacteur @tt (https://t.co/rrFis22gB) - #cercleAPI
Je voudrais extraire dans la cellule adjacente seulement les chaines de caractères commençant par "#" et finissant par " " dans l'exemple seulement #sketchnote #cercleAPI
1/ J’ai déjà trouvé sur le forum plusieurs formules qui ne marchent que pour le premier # ou lorsque les hashtags se suivent
2/ J’ai essayé de définir une fonction grâce à un code VBA trouvé ici https://excel-malin.com/codes-sources-vba/extraire-chaine-de-caracteres-delimitee/ qui me donne le résultat suivant :
sketchnote - Education ; e-learning ; rédacteur @tt (https://t.co/rrFis22gB) - #cercleAPI
Je ne sais pas comment modifier le code pour positionner la fin des chaînes à extraire correctement et faire recommencer l’opération tant qu’il reste des # dans la cellule.
Merci d’avance pour votre aide.
J’aurais voulu savoir s’il est possible dans Excel d’extraire d’une cellule contenant une chaîne de caractères, toutes les chaines de caractères contenues entre deux caractères définis.
Par exemple dans une cellule j’ai la chaîne suivante :
graphisme - #sketchnote - Education ; e-learning ; rédacteur @tt (https://t.co/rrFis22gB) - #cercleAPI
Je voudrais extraire dans la cellule adjacente seulement les chaines de caractères commençant par "#" et finissant par " " dans l'exemple seulement #sketchnote #cercleAPI
1/ J’ai déjà trouvé sur le forum plusieurs formules qui ne marchent que pour le premier # ou lorsque les hashtags se suivent
2/ J’ai essayé de définir une fonction grâce à un code VBA trouvé ici https://excel-malin.com/codes-sources-vba/extraire-chaine-de-caracteres-delimitee/ qui me donne le résultat suivant :
sketchnote - Education ; e-learning ; rédacteur @tt (https://t.co/rrFis22gB) - #cercleAPI
Je ne sais pas comment modifier le code pour positionner la fin des chaînes à extraire correctement et faire recommencer l’opération tant qu’il reste des # dans la cellule.
Merci d’avance pour votre aide.
Configuration: Windows / Chrome 79.0.3945.130
2 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, peux-tu partager ton code VBA, en utilisant les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
suggestion:Function lucie(entree As String) As String Dim regle As RegExp, retour As Match Set regle = New RegExp regle.Pattern = "#[^\s]+\s?" regle.Global = True For Each retour In regle.Execute(entree) lucie = lucie + CStr(retour.Value) Next retour End Functionqui demande d'ajouter "Microsoft VBScript Regular Expressions" dans les références du projet-
Merci de ton retour. Je mets ci-après le code que j'ai utilisé trouvé sur excel-malin.com. J'espère que j'ai bien inséré le code car je n'ai pas trouvé vba dans la liste des langages.
Je te tiens informé dès que j'ai testé ce que tu m'as envoyé.
Public Function ExtraireChaineDelimitee(ChaineSource As String, Optional LimiteAvant As String = "", Optional LimiteApres As String = "")
'par: Excel-Malin.com ( https://excel-malin.com )
On Error GoTo FunctionErreur
If InStr(1, ChaineSource, LimiteAvant) = 0 Then
ExtraireChaineDelimitee = CVErr(xlErrNA)
Exit Function
Else
ExtraitPositionDebut = InStr(1, ChaineSource, LimiteAvant) + Len(LimiteAvant)
End If
If LimiteApres = "" Then
ExtraitPositionFin = Len(ChaineSource)
Else
ExtraitPositionFin = InStr(1, ChaineSource, LimiteApres) - 1
End If
ExtraireChaineDelimitee = Mid(ChaineSource, ExtraitPositionDebut, ExtraitPositionFin - ExtraitPositionDebut + 1)
Exit Function
FunctionErreur:
ExtraireChaineDelimitee = CVErr(xlErrNA)
'ExtraireChaineDelimitee = ""
End Function -
Bonsoir,
Je viens d'essayer et ça marche super bien où que soit placée la sous-chaîne dans la chaîne ! Merci !
PS: J'ai mis un peu de temps à trouver comment ajouter "Microsoft VBScript Regular Expressions" dans les références donc pour ceux que ça pourra aider c'est dans outils / références / puis cocher Microsoft VBScript Regular Expressions 5.5
Je vais essayer d'adapter moi-même le code pour faire pareil pour les chaînes précédées de @ merci encore !
Bonne soirée
-