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

  1. 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 Function
    qui demande d'ajouter "Microsoft VBScript Regular Expressions" dans les références du projet
    1
    1. LucieDiter Messages postés 6 Statut Membre
       
      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
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > LucieDiter Messages postés 6 Statut Membre
         
        merci. il faut utiliser "basic" pour le vba.
        entretemps, j'ai ajouté une suggestion.
        0
    2. LucieDiter Messages postés 6 Statut Membre
       
      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
      0