VBA: Marquer une pause / suspendre la macro

VBA: marquer une pause

Vous avez besoin de faire une pause dans votre macro VBA pour une raison ou une autre? Suspendre une macro est bien sûr possible et le code nécessaire est très simple car VBA contient une méthode dédiée pour le faire. Il s'agit de la méthode .Wait de la classe Application.

Vous pouvez mettre votre macro en pause de deux manières:

  • soit pour une durée spécifique (en secondes, minutes, etc.)
  • soit marquer une pause jusqu'à une heure précise (par exemple jusqu'à "16:30:00")

Nous allons maintenant voir ces deux méthodes en détail…

A) Code VBA pour marquer une pause d'une durée spécifique dans l'exécution d'une macro

Ce cas-ci sera utile lorsque vous voulez mettre une pause pour effectuer une autre opération dont vous connaissez la durée approximative (par exemple démarrer une application spécifique) et aussi dans les cas où la macro n'est pas lancée selon un horaire précis.

Ici, l'utilisation de la méthode .Wait ne requiert que l'indication de la durée de la pause. Pour marquer une pause d'une seconde, le code VBA sera le suivant:

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

Si vous voulez attendre une minute, le code sera:

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

… et ainsi de suite.

Ceci est un cas simple qui suspend l'exécution de la macro. Cela peut être utile, par exemple si vous copiez des fichiers externes volumineux et vous ne voulez pas que la macro aille "trop vite".

Explications concernant le code VBA utilisé

Si vous voulez savoir, comment cela fonctionne, voici le détail du code. La méthode .Wait suspend l'exécution du code VBA jusqu'à un moment précis dans le temps. Par exemple, jusqu'à 14h32 et 15 secondes. Pour pouvoir utiliser un délai plutôt qu'une heure précise, on fait appel à deux fonctions VBA:

  1. la fonction Now() qui nous indique l'heure actuelle
  2. et la fonction TimeValue() qui transforme un texte (ici = indication du délai) en temps qui sera ajouté à l'heure actuelle

On détermine alors l'heure précise à laquelle le code atteint l'endroit de l'exécution de la pause et on y ajoute une durée souhaitée.

Attention: il est aussi possible d'utiliser la fonction TimeSerial() plutôt que TimeValue(). Cela dépend de la situation dans laquelle vous exécutez votre code VBA. Dans ce cas, les codes à utiliser ressembleront à:

Pour une seconde:

Application.Wait(Now + TimeSerial(0, 0, 1))

Et donc pour une minute, le code sera:

Application.Wait(Now + TimeSerial(0, 1, 0))

 

Illustration: on veut ajouter une pause de 2 minutes. On exécute la macro et la pause se déclenche à 14:25:18 ( Now() ). On ajoute donc à cette heure précise une durée de 2 minutes ( + TimeValue("00:02:00") ) ce qui indiquera à la méthode .Wait le temps précis du redémarrage du code – 14:27:18. C'est-à-dire exactement 2 minutes plus tard…

B) Code VBA pour marquer une pause dans l'exécution d'une macro jusqu'à une heure précise

Ceci est le second cas possible. Il est utile par exemple quand vous avez besoin qu'un département de votre entreprise délivre des données. Ou qu'une information nécessaire pour le programme qui se trouve sur internet soit disponible (par. exemple les cours de clôture de la bourse). L'avantage de cette approche est que peu importe à quel moment vous lancez la macro, elle attendra jusqu'à l'heure indiquée.

En ce qui concerne le code VBA, il est (encore) plus simple que pour la durée précise d'une pause. Il vous suffit d'indiquer l'heure précise à laquelle la macro doit "redémarrer".

Application.Wait "14:30:00"

Ceci est la forme la plus basique.

Si vous voulez être sûr d'éviter des problèmes liés aux formats, je vous conseille d'utiliser (en plus), la fonction TimeSerial(). Elle vous permet d'indiquer directement les valeurs numériques des heures, des minutes et des secondes de l'heure de redémarrage. Le code VBA aura ainsi la forme suivante:

Application.Wait(TimeSerial(14, 30, 0))

Ces deux codes feront donc en sorte que l'exécution du code VBA ne reprendra qu'à 14h30.
Attention:

  • n'oubliez pas que vous devez laisser votre PC allumé jusqu'à cette heure-là 🙂 . Vous devez aussi laisser le fichier Excel ouvert pendant ce temps-là. Ce qui signifie que Excel sera "bloqué" pendant cette période (à moins que vous lanciez une nouvelle Instance d'Excel)
  • la macro se guide par l'heure système de votre machine. Si votre horloge indique mauvaise heure, la macro démarrera aussi à la mauvaise heure…

Exemples d'utilisation pratique de la pause en VBA

Voici un exemple qui vous vous montre comment cela fonctionne. Il suffit d'indiquer la durée de la pause et la macro va vous indiquer dans un MessageBox l'heure à laquelle la pause a été déclenchée et à quelle heure l'exécution du code a reprise.

 

Et maintenant un exemple pour une suspension d'exécution d'une macro jusqu'à un moment précis:

Pour aller plus loin en Excel et en VBA…

Et pour finir, voici quelques articles qui pourraient vous être utiles dans votre travail avec VBA et Excel) :

Et pour finir, la page officielle de Microsoft concernant la méthode .Wait.

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

4 commentaires sur “VBA: Marquer une pause / suspendre la macro”