patricktoulon
XLDnaute Barbatruc
bonjour a tous
je suis tomber sur une discussion
et tester le code de @Iznogood1 que j'ai trouvé très rapide
je l'ai simplifié textuellement (des noms de variables simples)
et il se trouve qu'elle devient plus lente
1,05 secondes pour ma version sur 5000 lignes
0,5 secondes pour la version de isnogood1 sur 5000 lignes
je suis dubitatif devant ce résultat
code de @Iznogood1
ma version
je suis tomber sur une discussion
et tester le code de @Iznogood1 que j'ai trouvé très rapide
je l'ai simplifié textuellement (des noms de variables simples)
et il se trouve qu'elle devient plus lente
1,05 secondes pour ma version sur 5000 lignes
0,5 secondes pour la version de isnogood1 sur 5000 lignes
je suis dubitatif devant ce résultat
code de @Iznogood1
VB:
Option Explicit
Sub Demo()
Dim r As Range
Const MARQUEUR_DEBUT = "{{c1::"
Const MARQUEUR_FIN = "}}"
Dim T
Dim Position_Debut As Integer
Dim Position_Fin As Integer
Dim Longueur_Marqueur_Debut As Integer
Longueur_Marqueur_Debut = Len(MARQUEUR_DEBUT)
T = Timer
For Each r In Range("A1:A" & Range("A1").CurrentRegion.Rows.Count)
Position_Debut = 1
While InStr(Position_Debut, r.Value, MARQUEUR_DEBUT) <> 0
Position_Debut = InStr(Position_Debut, r.Value, MARQUEUR_DEBUT)
Position_Fin = InStr(Position_Debut, r.Value, MARQUEUR_FIN)
If Position_Fin <> 0 Then
r.Characters(Position_Debut + Longueur_Marqueur_Debut, Position_Fin - Position_Debut - Longueur_Marqueur_Debut).Font.Color = vbRed
End If
Position_Debut = Position_Debut + 1
Wend
Next r
MsgBox "durée:" & Timer - T
End Sub
ma version
VB:
Option Explicit
Sub test2()
Dim x%, y%, indice1$, indice2$, cel As Range, T#, lg1%
indice1 = "{{c1::"
lg1 = Len(indice1)
indice2 = "}}"
T = Timer
For Each cel In Range("A1", Cells(Rows.Count, "A").End(xlUp))
With cel
x = 1
While InStr(x, .Text, indice1) <> 0
x = InStr(x, .Text, indice1)
y = InStr(x, .Text, indice2)
If y <> 0 Then .Characters(x + lg1, y - x - lg1).Font.Color = vbRed
'If y <> 0 Then .Characters(x + Len(indice1), y - x - Len(indice1)).Font.Color = vbRed
x = x + 1
Wend
End With
Next
MsgBox "durée:" & Timer - T
End Sub
Pièces jointes
Dernière édition: