Petit probleme vba excel

Résolu
Thordek -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'amerais, non je veux, supprimer dans une case tous les caractéres majuscules si il y en a plus de 2 à la suite : exemple

Bonjour à TOUS -> je veux supprimer "TOUS"

merci de votre aide.

Thordek

1 réponse

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    un essai : supprime le mot si au moins 2 majuscules en début de mot
    texte testé:
    BOnjour à Tata, TONTOn, Mamy

    Function supprim_Si_2maj(texto As String)
    separe = Split(texto)
    For cptr = 0 To UBound(separe)
         Set reg = CreateObject("vbscript.regexp")
        reg.Global = False
        reg.Pattern = "(\b[A-Z]{2,})"
        
        Set extraction = reg.Execute(separe(cptr))
        For Each maj In extraction
            verif = maj.Value
        Next maj
        If verif <> 0 Then separe(cptr) = ""
        verif = 0
    Next
    supprim_Si_2maj = Join(separe)
    End Function
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour michel,
      Super top les expressions rationnelles. Tu avais raison, c'est difficilement accessible mais le principe et surtout les résultats sont épatants.
      Pour parfaire ta fonction, je me suis permis de modifier légèrement la dernière ligne, juste pour un souci esthétique, j'espère que tu ne m'en tiendras pas rigueur...
      J'ai testé et aperçu des espaces indésirables... Rien de bien dramatique en soi ;-). Alors, juste la dernière ligne :
      supprim_Si_2maj = Application.WorksheetFunction.Trim(Join(separe))
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      bonjour,
      Merci pour le trim

      mais je voudrais éliminer un mot avec 2 majuscules non au debut comme cCM par ex

      si tu as une idée, peut ^tre avec global à true...
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Non le global à true ne règle pas le problème. C'est la position qu'il faut changer. Donc simplement virer le /b du Pattern.

      Function supprim_Si_2maj(texto As String) 
      separe = Split(texto) 
      For cptr = 0 To UBound(separe) 
          Set reg = CreateObject("vbscript.regexp") 
          reg.Global = False 
          reg.Pattern = "([A-Z]{2,})" 
           
          Set extraction = reg.Execute(separe(cptr)) 
          For Each maj In extraction 
              verif = maj.Value 
          Next maj 
          If verif <> 0 Then separe(cptr) = "" 
          verif = 0 
      Next 
      supprim_Si_2maj = Application.WorksheetFunction.Trim(Join(separe)) 
      End Function
      0
    4. Thordek
       
      Merci,

      Bon weekend
      0
    5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Ok, Pijaku, Bien vu !!!
      Un grand Merci
      Bon WE
      0