Créer un chronomètre, Excel VBA

Créer un chronomètre, Excel VBA

Voici un code détaillé en VBA pour créer un chronomètre dans Excel, accompagné d’une explication approfondie de son fonctionnement.
Étape 1 : Comprendre les exigences
Un chronomètre dans Excel doit :

  • Commencer à compter le temps lorsqu’il est déclenché.
  • Se mettre en pause et reprendre lorsqu’il est nécessaire.
  • Se réinitialiser à zéro.
  • Afficher le temps écoulé de manière dynamique.
  • Fonctionner sans figer Excel (en utilisant Application.OnTime au lieu de DoEvents).

Étape 2 : Créer l’interface utilisateur (UI)
Avant d’écrire le code VBA, créons une interface simple dans une feuille Excel :
1. Insérer des boutons (en utilisant les contrôles de formulaire) et associer des macros à ces boutons :

  • Bouton Start (nommé par exemple "btnStart")
  • Bouton Pause (nommé par exemple "btnPause")
  • Bouton Reset (nommé par exemple "btnReset")

2. Désigner une cellule pour l’affichage :

  • Sélectionnez une cellule (par exemple, B2) pour afficher le temps écoulé.

Étape 3 : Écrire le code VBA
Maintenant, écrivons le code VBA pour le chronomètre.
1. Déclarer les variables
Nous devons suivre :

    • L’heure de départ
    • Le temps écoulé avant la pause
    • Si le chronomètre est en cours d’exécution
Option Explicit 
Dim startTime As Double 
Dim elapsedTime As Double 
Dim isRunning As Boolean 
Dim nextTick As Date

2. Démarrer le chronomètre
Cette macro initialise le chronomètre et commence à mettre à jour l’affichage toutes les secondes.

Sub StartStopwatch()
    If Not isRunning Then
        ' Capture l'heure de départ si elle n'est pas déjà en cours
        startTime = Timer - elapsedTime
        isRunning = True
        UpdateTime
    End If
End Sub

Explication :

  • Si le chronomètre n’est pas en cours, on capture l’heure de départ (Timer renvoie le nombre de secondes écoulées depuis minuit).
  • On soustrait le elapsedTime enregistré précédemment (pour permettre de reprendre là où on s’est arrêté).
  • isRunning est défini sur True, et la mise à jour du temps commence.

3. Mettre à jour le temps affiché
Cette procédure met à jour en continu le temps écoulé.

Sub UpdateTime()
    If isRunning Then
        elapsedTime = Timer - startTime
        Sheet1.Range("B2").Value = Format(elapsedTime, "0.00") & " sec"
        ' Planifie la mise à jour suivante
        nextTick = Now + TimeValue("00:00:01")
        Application.OnTime nextTick, "UpdateTime"
    End If
End Sub

Explication :

  • Calcule le temps écoulé en temps réel.
  • Met à jour la cellule assignée (B2).
  • Programme la prochaine mise à jour dans 1 seconde grâce à Application.OnTime.

4. Mettre le chronomètre en pause
Cette macro arrête temporairement le chronomètre.

Sub PauseStopwatch()
    If isRunning Then
        isRunning = False
        Application.OnTime nextTick, "UpdateTime", , False
    End If
End Sub

Explication :

  • Arrête les mises à jour programmées via Application.OnTime.
  • Enregistre l’elapsedTime pour pouvoir reprendre plus tard.

5. Réinitialiser le chronomètre
Cette macro réinitialise tout à zéro.

Sub ResetStopwatch()
    isRunning = False
    elapsedTime = 0
    Sheet1.Range("B2").Value = "0.00 sec"
    Application.OnTime nextTick, "UpdateTime", , False
End Sub

Explication :

  • Arrête le chronomètre.
  • Réinitialise le elapsedTime à zéro.
  • Efface les événements Application.OnTime programmés.

Étape 4 : Assigner les macros aux boutons
1. Clique-droit sur chaque bouton.
2. Sélectionnez « Assigner une macro ».
3. Associez-les comme suit :

  • "StartStopwatch" → Bouton Start
  • "PauseStopwatch" → Bouton Pause
  • "ResetStopwatch" → Bouton Reset

Étape 5 : Tester le chronomètre
1. Cliquez sur Start → Le temps devrait commencer à s’afficher.
2. Cliquez sur Pause → Le temps s’arrête mais reste visible.
3. Cliquez sur Start à nouveau → Le chronomètre reprend là où il s’était arrêté.
4. Cliquez sur Reset → Le chronomètre se réinitialise à zéro.
Remarques finales

  • Application.OnTime garantit qu’Excel reste réactif.
  • Le format "0.00 sec" rend l’affichage du temps lisible.
  • La logique permet de mettre en pause et de reprendre, ce qui est impossible avec des boucles basées sur DoEvents.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x