Chris développe une macro Excel qui affiche une série d’éléments à l’utilisateur. Il aimerait introduire un délai dans la macro, disons, d’une seconde entre chaque information qu’il affiche, et il se demande s’il existe un moyen simple d’ajouter un tel délai.

Il existe plusieurs façons d’introduire un délai dans votre macro. La méthode traditionnelle consiste à utiliser la méthode Wait, qui est utilisée avec l’objet Application. Vous l’utilisez pour introduire un délai d’une seconde de cette manière:

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

Notez que le paramètre requis par la méthode Wait est l’heure à laquelle vous souhaitez que votre macro reprenne son exécution. En d’autres termes, c’est le temps «d’attente». C’est pourquoi l’exemple ci-dessus utilise l’heure actuelle (à partir de la fonction Now) incrémentée d’une seule seconde.

Si vous préférez ne pas utiliser la méthode Wait (pour une raison quelconque), vous pouvez également simplement utiliser une boucle pour attendre votre heure:

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")

Do While Now < WaitTime Loop

Une variante de cette approche repose sur la fonction Timer, qui renvoie le nombre de secondes depuis minuit:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint Loop

Lorsque vous utilisez une boucle de cette manière, ce ne sera probablement pas un gros problème si vous ne retardez qu’une seconde. Si vous avez besoin de retarder plus longtemps, vous voudrez probablement placer la fonction DoEvents dans la boucle:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint     DoEvents Loop

La raison est simple: si vous ne le faites pas, Excel ne répondra à aucun autre événement pendant la boucle. Cela peut donner l’impression que votre système s’est bloqué ou s’est bloqué en attendant.

Si vous avez besoin de plus de précision sur vos délais (jusqu’à la plage de la milliseconde), vous pouvez vous fier à la fonction Sleep, qui fait partie de l’API Windows. (Il ne fait pas partie de VBA.) Pour l’utiliser, vous devrez inclure une déclaration au début de votre module, dans la zone des déclarations, avant toute procédure:

#If VBA7 And Win64 Then     Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#Else     Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#End If

Ensuite, dans votre macro, vous pouvez utiliser la fonction Sleep de cette manière:

Sleep(1000)

Cela met le système en pause pendant 1000 millisecondes, soit 1 seconde.

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (5134) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.