Icône de ressource

Mesurer le temps d'une macro sans perturber celle ci. V1

Pour mesurer un temps en VBA on a souvent recours au Timer puis un MsgBox pour afficher le temps écoulé.
Mais le MsgBox arrête le déroulement des macros jusqu'à validation de la fenêtre.
L'astuce est d'utiliser la StatusBar pour afficher le temps sans arrêter le bon fonctionnement du logiciel.
Il suffit de creer un module VBA avec comme macro :
VB:
Public Tinstrum ' Déclaré en Public pour être mémoriser hors module.
Sub Balise0()
' Mémorise le temps de départ
    Tinstrum = Timer
End Sub
Sub Balise1()
' Mesure le temps écoulé entre Balise0 et Balise1 et l'affiche dans le StatusBar en ms.
    Application.StatusBar = "Temps entre les deux balises  : " & Round(1000 * (Timer - Tinstrum), 0) & " ms"
End Sub
Dans le code il suffit d'insérer là où on veut commencer à mesurer le temps : Balise0, et Balise1 là où on veut faire la mesure.
A noter que le temps s'affiche dans StatusBar et le restera jusqu'à ce que StatusBar soit raffraichi par l'utilisateur.
Exemple :
VB:
Sub MacroEssai()
a = 0
Balise0
    For j = 1 To 100
        For i = 1 To 10000
            a = a + Log(j) ^ 2 + Log(i)
        Next i
    Next j
Balise1
End Sub
Le temps affiché est le temps séparant Balise0 à Balise1.
La réponse est :
StatusBar.jpg

A noter que l'utilisation deux macros séparées Début et Fin est le moyen qui optimise le temps et donc perturbe le moins possible le déroulement des macros utilisateur.
Auteur
sylvanu
Haut Bas