Résolu j'aimerais comprendre cette différence de temps d’exécution

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 :oops: :eek: smiley interrogateur

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
 

Fichiers joints

Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bon ben j'ai trouvé tout seul
en effet @Iznogood1 utilise .value et moi .text pour la valeur de la cellule(je pensait que c’était plus approprié)

la gestion mémoire en lecture du .value ou .text ne doit pas être la même en interne dans vba même si la valeur est la même en fait
en même temps je suis pas étonné c'est pas nouveau que string est plus lourd que long ou integer
mais dans ce contexte je pensais pas que ça avait une importance :oops: :eek:
 

Iznogood1

XLDnaute Impliqué
Je ne sais plus pourquoi, mais j'utilise toujours ".value" :rolleyes:.
Je ne me souviens pas non plus avoir eu besoin un jour de ".text"....
Question d’habitudes...
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Iznogood1

ben en fait pour moi c’était plus logique le .text puisque l'on traite du string mais visiblement c'est plus rapide avec value
en tout cas bravo pour l'idée de l'index de instr incrémenté
en gros le while fait seulement le nombre de tours correspondant au nombre d’occurrence
c'est ce qui rend plus rapide la chose en fait par raport a une boucle sur len
fallait y penser a incrémenter l'index de départ de chaîne dans instr
bravo encore ;)
 

_Thierry

XLDnaute Barbatruc
Bonjour Patrick, @Iznogood1

ben en fait pour moi c’était plus logique le .text puisque l'on traite du string mais visiblement c'est plus rapide avec value
Moi aussi je fais souvent CellSource.Text quand je sais pertinemment que je cherche une String dans une Cellule... Bon à savoir ...

En extrapolant je suppose que d'écrire en abrégé :
TextBox1 = CellSource
Equivaut à écrire
TextBox1.Value = CellSource.Value
(Le .Value étant par défaut) ... Right ?

En morale de l'histoire, donc les "fénéants" qui n'écrivent
T = C vont plus vites que les autres !!!
C'est pas juste !! LoL !!

Bonne journée
@+Thierry
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

La propriété Text renvoie ce qu'on voit dans la cellule. Il faut sans doute qu'Excel examine le format de la cellule, l'applique à sa valeur (.Value) pour retourner le "texte".

Alors que .Value est la valeur de la cellule. C'est la valeur par défaut et elle doit être directement à disposition d'Excel puisque c'est cette valeur qui sert à Excel dans les calculs que ce soit un nombre ou texte.

Il est à noter qu'Excel possède aussi .Value2 utile quelquefois quand on traite de date ou de monnaie.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas