Bonjour le Fil,
@H2so4, Mafraise, Stéphane1972
Les méthodes avec RegEx sont très très lentes chez moi. Pour une boucle de 1 000 000, les temps d'exécution sont rédhibitoires (sup. à 9 minutes)
Encore faudrait-il savoir utiliser ou modifier un Regex pour ne pas divulguer des Fakes News!
@Dysorthographie, ne soit pas désolé, tous les chemins mènent à Rome. Selon X Cellus bien sur.
Impressionnant ! Je pensais qu'une solution utilisant les expressions régulières serait plus rapide
Dans l'exemple le texte fait 116 caractères dont le dernier et le 114 ième font Match.
Et dans le cas d'un texte de 255 caractères le Regex sera bien plus rapide qu'une boucle Mid.
Et ci-dessous le Regex modifié en utilisant une boucle
Sub Only()
'Point d'exclamation jusqu'au caractére &h7F éliminés
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "[!-]"
Tps = Timer
For k = 2 To 50000
If Len(.Replace(Range("A2"), "")) > 0 Then Range("A1") = Round(Timer - Tps, 2) & " secondes": MsgBox "Trouvé": Exit Sub
Next k
End With
End Sub
Principe: Une fois l'objet Regex et son Pattern établi (une bonne fois pour toute). On ne boucle pas sur celui-ci, ce qui reviendrait chaque fois refaire le même moule.
On ne boucle uniquement sur le texte qui va utiliser le moule (l'objet) pour solutionner le besoin.
Imaginez un moule pour des chocolats qui va servir plusieurs fois. On ne va pas à chaque fois refaire le moule pour chaque chocolat. Sinon ceux de Noël on les aura à Pâques.