Extraire d'une cellule plusieurs chaines de caractères entre 2 caractères =/= [Résolu]

Signaler
Messages postés
4
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
18 février 2020
-
Messages postés
4
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
18 février 2020
-
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.

Configuration: Windows / Chrome 79.0.3945.130

2 réponses

Messages postés
12851
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
716
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 Function
qui demande d'ajouter "Microsoft VBScript Regular Expressions" dans les références du projet
Messages postés
4
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
18 février 2020

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
Messages postés
12851
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
716 >
Messages postés
4
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
18 février 2020

merci. il faut utiliser "basic" pour le vba.
entretemps, j'ai ajouté une suggestion.
Messages postés
4
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
18 février 2020

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
Messages postés
12795
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
29 octobre 2020
2 050
Bonjour

Fonction possible :
Function extract(plage As Range)
chaine = Application.WorksheetFunction.Substitute(plage, ";", "-")
 dec = Split(chaine, " - ")
 For n = 0 To UBound(dec)
 If Left(dec(n), 1) = "#" Then result = result & dec(n) & " "
 Next
 extract = result
End Function

On remplace d'abord le ; par un -
On découpe la chaine selon les -
On boucle sur les items découpés et on concatène ceux commençant par #

Cdlmnt
Via

Messages postés
4
Date d'inscription
dimanche 16 février 2020
Statut
Membre
Dernière intervention
18 février 2020

Ca marche aussi très bien merci en effet !

Si je comprends bien en fait soit on découpe la chaîne initiale, soit on parcourt la chaîne !

Merci à tous !

Lucie