VBA: Marquer une pause / suspendre la macro 2


Vous avez besoin de faire une pause dans votre macro VBA pour une raison ou une autre? C'est bien sûr possible et le code nécessaire est très simple car VBA contient une méthode spécifique pour cela. 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'à "14:30:00").

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. fonction Now() qui nous indique l'heure actuelle
  2. 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 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 ca possible. 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 en une mauvaise heure…

Exemples d'utilisation 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.

Sub TestPauseEnVBA()
<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>' par Excel-Malin.com (https://excel-malin.com)<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_end"></span>

Dim MaPause As String
Dim HeurePauseDebut As Date
Dim HeurePauseFin As Date

On Error GoTo TestPauseErreur
MaPause = "00:00:04" 'indiquez ici la durée de la pause

HeurePauseDebut = Time
Application.Wait (Now + TimeValue(MaPause))
HeurePauseFin = Time

MsgBox "Début de la pause: " & HeurePauseDebut & Chr(13) & Chr(10) & "Fin de la pause: " & HeurePauseFin
Exit Sub

TestPauseErreur:
MsgBox "Une erreur s'est produite..."
End Sub

 

Et un exemple pour une attente d'un moment précis:

Sub TestPauseJusque()
' par Excel-Malin.com (https://excel-malin.com)

   '... votre code ici...

'attendre 19h30 pour actualiser les données et sauvegarder le fichier
Application.Wait (TimeSerial(19, 30, 0))

ThisWorkbook.RefreshAll
ThisWorkbook.Save

End Sub

Pour aller plus loin en Excel et en VBA…

Voici encore quelques articles qui pourraient vous être utiles:

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

 

52 0

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

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