[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

  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
    1. Bonjour,
      Au passage, combien de cellules à traiter ... ?
      0
      1. Bonjour,
        Je me fais une copie pour étudier cette superbe procédure.
        Merci.
        0
        1. Boujour michel_m,
          C'est avec plaisir que je vais prendre du temps sur mes heures de retraité... !
          Salutations.
          Le Pingou
          0
      2. Super merci beaucoup ça marche nickel !!!!
        0
        1. 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
          0