[EXCEL] suppression de caractères

Résolu
Bonjour,

je souhaiterai pouvoir supprimer tout les mots de moins de XXX lettres dans une cellule de texte
Ex: Cellule avant traitement " Salut ça va c'est moi"
Cellule après traitement (si XXX=3) : "Salut c'est moi"

Merci par avance pour votre aide
Cordialement,
greg

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour

    fonction personnalisée: ne garde que les mots dans la cellule (texto) de plus de XXX lettres (seuil)
    actuellement, elle supprime les doublons de mots: me dire si on veut les garder

    Option Explicit
     
    Function extraire_mots(texto As String, seuil As Byte)
     'Michel_M mai 2006
        Dim reg As Object
        Dim texte As Object
        Dim mot As Object
        Dim coll As Collection
        Dim cptr As Byte
         
         'instancie
            Set coll = New Collection
            Set reg = CreateObject("vbscript.regexp")
        ' on travaille sur tout le texte
            reg.Global = True
        'définition du modèle : on cherche des mots  d'au moins  N caractères {seuil, infini } avec les accentués
            reg.Pattern = "(\b[a-zA-Z0-9çàâäéèêëïîôöùû]{" & seuil & ",})"
        
        'exécution de la recherche
        Set texte = reg.Execute(texto)
        'collecte les mots  sans doublons
        For Each mot In texte
            On Error Resume Next
            coll.Add mot.Value, mot.Value
            On Error GoTo 0
        Next mot
       'extrait les mots de longueur >= seuil
       For cptr = 1 To coll.Count
            extraire_mots = extraire_mots & coll(cptr) & "  "
       Next
       Set reg = Nothing
       Set coll = Nothing
    End Function
    
    1. Bonjour,
      Je me fais une copie pour étudier cette superbe procédure.
      Merci.
      1. Boujour michel_m,
        C'est avec plaisir que je vais prendre du temps sur mes heures de retraité... !
        Salutations.
        Le Pingou
    2. Bonjour michel_m,
      Je pense que je commence à comprendre le fonctionnement, c'est super intéressant, alors si on ajoute le caractère (`) apostrophe au motif (Pattern) soit :
      reg.Pattern = "(\b[a-zA-Z0-9çàâäéèêëïîôöùû']{" & seuil & ",})"

      Pour l'exemple " Salut ça va c'est moi"
      on obtiendra " Salut c'est moi"
      et non pas " Salut est moi"
      A une prochaine