XL 2010 Problème avec une expression régulière

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'essaie de dompter le Pattern suivant :
Je veux découper une chaîne de caractères de telle sorte que seuls les mots commençant par une majuscule et précédés d'un espace aillent, avec les textes en minuscules qui les suivent, à la ligne dans une même cellule.
Exemple : Romina Gudule aux grands pieds Cunégonde la folle Úrsula
Romina
Gudule aux grands pieds
Cunégonde la folle
Úrsula

VB:
Sub SuperposerItemsChaine()

Dim cel As Range, c As Range

    Application.ScreenUpdating = False
    For Each cel In Selection
        cel = Application.WorksheetFunction.Trim(cel)  'suppression de tous les éventuels espaces superflus de la chaîne
        With CreateObject("VBScript.RegExp")
            .Pattern = "( )([A-ZÀ-Ÿ])"  'un espace suivi d'une lettre majuscule. Tient compte des majuscules diacritées
            .IgnoreCase = False
            .Global = True
            For Each c In cel
                c.Value = .Replace(c.Value, "$1" & Chr(10) & "$2")
            Next
        End With
    Next
    [C2500].Select: Application.ScreenUpdating = True
End Sub

J'ai pratiquement résolu le problème, mais je me heurte avec les mots en minuscules commençant par une voyelle diacritée comme à é í ú etc.
Comment résoudre ce problème ?
 

Pièces jointes

  • Expression Régulière.xlsm
    21.5 KB · Affichages: 32
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonjour Yeahou,

Je n'avais pas vu ton post. Pas rafraîchi.
Comme quoi, l'art des Patterns est subtil.
Ce fil m'aura paru intéressant :
1/ avec du temps et de la patience on peut toujours trouver le bon Pattern,
2/ les RegExp sont lents.

Merci pour ton intervention. Comme on dit ici : sos un capo.
Que tengas un buen día.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour le fil, le forum

Comme quoi, l'art des Patterns est subtil.
Ce fil m'aura paru intéressant :
1/ avec du temps et de la patience on peut toujours trouver le bon Pattern,
Oui, mais il n'y a pas plus puissant pour analyser une chaîne de caractères, les compilateurs et traducteurs sont tous basés sur les expressions régulières. C'est aussi pour cela qu'elles sont intégrées dans pratiquement tous les langages de programmation et fréquemment utilisées pour la vérification de la validité des mots de passe ou des adresses mail.

Bien cordialement et bonne journée, @+
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
heu.. désolé les gars mais perso avec le regex je vais plus vite que vous tous
testé sur le fichier de @job75
je met presque (pile poil) 2 fois moins de temps que la version sans regex de @job75
je met 2,5 fois moins de temps que la version avec regex
version sans regex 8.33 sec
votre version regex 11.58 sec
ma version 4.27
il faut dire que je travaille sur un tableau et non directement sur la cells a chaque tour
je sais même pas si le blocage du screenupdating va changer quelque chose ,je ne l'ai pas bloqué

et la fonction est réutilisable pour un autre travail unitaire ou tableau

VB:
Dim regex As Object
Sub testPatricktoulon()
    Dim motif$, i&, tablo, Tim#
    motif = "( )([A-ZÀ-Ý])"  'un espace suivi d'une lettre majuscule. Tient compte des majuscules diacritées
    'test sur un tableau
    tablo = [Source].Offset(7).Resize(5000).Value
    Tim = Timer
    For i = 1 To UBound(tablo)
        tablo(i, 1) = coupeItemChaine(CStr(tablo(i, 1)), motif)
    Next
    '-------------------------
    Cells(10, "B").Resize(5000).Value = tablo

    MsgBox "temps de travail: " & Format(Timer - Tim, "0.00 \sec")
    Set regex = Nothing
End Sub

Function coupeItemChaine(cel As String, PatternX, Optional Lacase As Boolean = False, Optional Globale As Boolean = True)
    If regex Is Nothing Then Set regex = CreateObject("VBScript.RegExp"): regex.IgnoreCase = Lacase: regex.Global = Globale: regex.Pattern = PatternX
    coupeItemChaine = regex.Replace(Trim(cel), "$1" & Chr(10) & "$2")
End Function
 

Pièces jointes

  • fichier Comparaison de job75.xlsm
    59 KB · Affichages: 5
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour @job75

la version regex du post 10
1622538105706.png


ta version sans regex du post 10
1622538330669.png


et ma version du regex
1622538176126.png
 

Statistiques des forums

Discussions
314 491
Messages
2 110 180
Membres
110 690
dernier inscrit
Zeppelin