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:
Si vous voulez attendre une minute, le code sera:
… 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:
- la fonction Now() qui nous indique l'heure actuelle
- 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:
Et donc pour une minute, le code sera:
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".
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:
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub TestPauseEnVBA() ' par Excel-Malin.com (https://excel-malin.com) 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 maintenant un exemple pour une suspension d'exécution d'une macro jusqu'à un moment précis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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)) '... la suite du code ici ... ThisWorkbook.RefreshAll ThisWorkbook.Save End Sub |
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) :
- Liste de toutes les fonctions disponibles en VBA
- Envoyer un email avec VBA
- Gestion des dates et heures en VBA
- Explication comment utiliser RECHERCHEV directement en VBA
- Tutoriel sur le Tableau croisé dynamique Excel – maîtrisez le TCD en moins d'une heure…
- Nouvelle fonction phare d'Excel: RECHERCHEX
Et pour finir, la page officielle de Microsoft concernant la méthode .Wait
.
4 commentaires sur “VBA: Marquer une pause / suspendre la macro”
tout simplement génial !!!!!!!
merci
Bonjour,
à mon niveau (W 10 + Excel 365) les infos du tableau Excel se mette dans le code VBA, mais pas dans le formulaire …
Vous auriez une solution ?
Merci d'avance
l'application Wait marque une pause , mais ne donne pas la main sur les feuilles excel pendant la pause. Y-a-t-il un moyen d'intervenir sur les feuilles?
Excellent 🙂