Fonctions VBA Wait & Sleep - Pause / Retarder le code VBA

Ce didacticiel montrera comment mettre en pause/retarder le code à l'aide des fonctions Wait et Sleep dans VBA.

Lorsque nous créons de grands programmes VBA qui effectuent de nombreux calculs, ou peut-être même appelons un programme externe à exécuter, nous pouvons exiger que notre code VBA arrête de s'exécuter pendant une durée spécifique pendant que le processus externe se déroule. VBA a quelques méthodes disponibles pour y parvenir.

Utilisation de la méthode Application.Wait

Si nous devons suspendre l'exécution de notre macro pendant un certain temps ou jusqu'à ce qu'un temps spécifié soit atteint avant d'exécuter l'étape suivante, nous pouvons utiliser le Application.Attendez méthode. Cela pourrait être utile, par exemple, si nous avons automatisé un processus de connexion à un site Web et devons attendre quelques secondes jusqu'à ce que la page soit chargée avant que notre macro continue de s'exécuter.

Attendez 1 seconde

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

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

Attendre jusqu'à

Dans certains cas, vous devrez attendre une heure précise. Avec cette ligne en dessous, votre macro ne se poursuivra pas avant 9h :

1 Application.Attendez "09:00:00"

Veuillez noter que le Application.Attendez n'accepte pas les délais inférieurs à 1 seconde.

Programmation VBA | Le générateur de code fonctionne pour vous !

Utilisation de la méthode du sommeil

Si vous avez besoin d'un moyen plus précis de mettre votre macro en pause, vous pouvez utiliser la méthode Sleep.

Le sommeil est une fonction de l'API Windows, c'est-à-dire qu'il ne fait pas partie de VBA. Il est accessible en utilisant une instruction de déclaration spéciale.

Si vous utilisez la version 64 bits de Microsoft Office, vous pouvez insérer l'instruction suivante dans un nouveau module ou au début du module (pas directement dans le sous-programme) dans lequel vous souhaitez utiliser la fonction Sleep :

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

Avec la version 32 bits, utilisez cette ligne :

1 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 sous-programmes comme ceci :

1 Dormir 10000

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

Utiliser une boucle avec les é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 en attendant que la macro continue. Un utilisateur pourrait penser qu'Excel a cessé de répondre et alors que l'utilisateur peut alors utiliser Ctrl+Pause pour interrompre la macro, cela va à l'encontre du but de mettre une pause dans la macro pour commencer.

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

1234567 Sous-test public()Dim j'aussi longtempsPour i = 1 à 20000Plage ("A1").Valeur = iFaireEvénementsEnsuite jeFin du sous-marin

Maintenant, pendant qu'Excel exécute la macro ci-dessus, l'utilisateur peut continuer à interagir avec Excel - nous pouvons modifier les onglets ou formater les cellules par exemple - en gros, la macro continue de s'exécuter mais l'écran Excel n'est pas figé. Nous pourrions utiliser une boucle similaire pour créer une fonction de minuterie dans Excel et incorporer le FaireEvénements méthode en ce que pour dégeler l'écran pendant que la minuterie est en cours d'exécution.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave