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 deDoEvents
).
É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 surTrue
, 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
.