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
Eh ! Eh ! C'est vrai que 5000, c'est beaucoup, surtout pour quelqu'un qui n'utilise JAMAIS de base de données ou de tableaux interminables.Elles ne sont pas lentes si l'objet n'est créé qu'une fois, voir le post #10.
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.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,
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
Bonjour à tous,re
bonjour @job75
la version regex du post 10
Regarde la pièce jointe 1107165
ta version sans regex du post 10
Regarde la pièce jointe 1107168
et ma version du regex
Regarde la pièce jointe 1107167
Oui mais depuis le temps que je suis dans ce forum, je suppose que tu connais mon niveau en VBAre
Bonjour @Etoto
ben c'est simple
avant la boucle tu met Tim= timer
après la boucle et le transfert sur cells tu met msgbox format((timer-tim),"0.00 /sec")
j'ai rien inventé
tout le monde ou presque fait comme ça