Fonctions VBA Wait et Sleep – Pause / Délai Code VBA

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on mai 6, 2023

Ce tutoriel montre comment mettre en pause / délayer un code en utilisant les fonctions Wait et Sleep dans VBA.

Lorsque nous créons de grands programmes VBA qui effectuent de nombreux calculs, ou peut-être même que nous appelons un programme externe à s’exécuter, nous pouvons avoir besoin que notre code VBA s’arrête de fonctionner pendant une durée spécifique alors que le processus externe est en cours. VBA dispose de quelques méthodes pour y parvenir.

Utilisation de la méthode Application.Wait

Si nous devons interrompre l’exécution de notre macro pendant un certain temps ou jusqu’à ce qu’une durée déterminée soit atteinte avant d’exécuter l’étape suivante, nous pouvons utiliser la méthode Application.Wait. Cela peut être utile, par exemple, si nous avons automatisé un processus de connexion à un site web et que nous devons attendre quelques secondes jusqu’à ce que la page soit chargée avant que notre macro ne continue à s’exécuter.

Attendre 1 Seconde

En insérant la ligne ci-dessous dans votre macro, son exécution sera interrompue pendant environ 1 seconde :

Application.Wait (Now + TimeValue("0:00:01"))

Attendre Jusqu’à ce que

Dans certains cas, vous devrez attendre une heure précise. Si vous insérez cette ligne dans votre macro, celle-ci ne s’exécutera pas avant 9 heures du matin :

Application.Wait "09:00:00"

Veuillez noter que l’ Application.Wait n’accepte pas les délais inférieurs à 1 seconde.

Utilisation de la Méthode Sleep

Si vous avez besoin d’une méthode plus précise pour mettre votre macro en pause, vous pouvez utiliser la méthode Sleep.

Sleep est une fonction de l’API Windows, c’est-à-dire qu’elle ne fait pas partie de VBA. Il est possible d’y accéder en utilisant une déclaration spéciale.

Si vous utilisez la version 64 bits de Microsoft Office, vous pouvez insérer la déclaration suivante dans un nouveau module ou au début du module (pas directement dans la procédure) dans lequel vous souhaitez utiliser la fonction Sleep :

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Avec la version 32 bits, utilisez cette ligne :

Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Après avoir déclaré la fonction Sleep, vous y avez accès dans vos programmes comme ceci :

Sleep 10000

Avec cette ligne ci-dessus, votre macro sera mise en pause pendant 10 000 millisecondes, c’est-à-dire 10 secondes.

Utilisation d’une Boucle avec des Événements Do

Le gros inconvénient de l’utilisation des méthodes Wait et Sleep est que l’utilisateur ne peut rien faire dans Excel pendant que la macro est en pause. Un utilisateur pourrait penser qu’Excel a cessé de répondre et, bien que l’utilisateur puisse alors utiliser Ctl+Break pour interrompre la macro, cela va à l’encontre de l’objectif initial de mettre en pause la macro.

Pour résoudre ce problème, nous pouvons utiliser une boucle avec une méthode appelée DoEvents.

Public Sub Test()
    Dim i As Long
    For i = 1 To 20000
        Range(“A1”).Value = i
        DoEvents
    Next i
End Sub

Maintenant, pendant qu’Excel exécute la macro ci-dessus, l’utilisateur peut continuer à interagir avec Excel – nous pouvons changer les onglets ou formater les cellules par exemple – fondamentalement, la macro continue à s’exécuter mais l’écran Excel n’est pas bloqué. Nous pourrions utiliser une boucle similaire pour créer une fonction de minuterie dans Excel et y incorporer la méthode DoEvents pour libérer l’écran pendant que la minuterie est en cours d’exécution.

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA