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.OnTimeau 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 (
Timerrenvoie le nombre de secondes écoulées depuis minuit). - On soustrait le
elapsedTimeenregistré précédemment (pour permettre de reprendre là où on s’est arrêté). isRunningest 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’
elapsedTimepour 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.OnTimeprogrammé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.OnTimegarantit 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.