Astuce VBA : OnTime
La méthode OnTime permet d'exécuter du code après une durée déterminée ou à une heure prédéfinie.
Utilisation :
Application.OnTime heure_d_exécution, "procédure_à_exécuter"
Par exemple, exécution de la procédure nommée "bonjour" à 10h30 :
Application.OnTime TimeValue("10:30:00"), "bonjour"
Exemple d'utilisation : exécuter une procédure dans 10 secondes
La méthode OnTime a besoin d'une heure d'exécution précise.
Pour exécuter un code dans 10 secondes, il faut donc commencer par déterminer l'heure actuelle avec Now
puis ajouter les 10 secondes d'attente + TimeValue("00:00:10")
, ce qui donne :
Application.OnTime Now + TimeValue("00:00:10"), "attente"
Dans cet exemple, OnTime lance la procédure "attente" après 10 secondes :
Sub exemple()
Application.OnTime Now + TimeValue("00:00:10"), "attente"
End Sub
Sub attente()
MsgBox "10 secondes se sont écoulées !"
End Sub
Annuler une exécution
En cas de besoin, il est possible d'annuler une exécution programmée en ajoutant un 4e argument avec la valeur False :
Sub exemple()
'Time
temps = Now + TimeValue("00:00:10")
'Programmation
Application.OnTime temps, "attente"
'Annulation
Application.OnTime temps, "attente", , False
'=> la procédure "attente" ne sera donc pas exécutée
End Sub
Exécuter une procédure avec des arguments
Bien souvent, la procédure qui doit être exécutée par OnTime nécessite de renseigner un ou plusieurs arguments.
Par exemple pour programmer l'exécution de la procédure suivante, le nombre de secondes doit être renseigné :
Sub attente(secondes)
MsgBox secondes & " secondes se sont écoulées !"
End Sub
Dans ce cas, au lieu d'entrer "attente"
comme dans les exemples précédents, il faut commencer par insérer des apostrophes "'attente'"
puis ajouter le ou les arguments (séparés par des virgules s'il y en a plusieurs) "'attente 5'"
, ce qui donne :
Sub exemple()
Application.OnTime Now + TimeValue("00:00:05"), "'attente 5'"
End Sub
Si l'argument est une valeur texte, il ne faut pas oublier les guillemets :
Sub exemple()
Application.OnTime Now + TimeValue("00:00:05"), "'attente ""Cinq""'"
End Sub
Si l'argument est une variable, il faut l'entrer comme ceci :
Sub exemple()
duree = 5
Application.OnTime Now + TimeValue("00:00:05"), "'attente " & duree & "'"
End Sub
Sans oublier les guillemets s'il s'agit d'une valeur texte :
Sub exemple()
duree = "Cinq"
Application.OnTime Now + TimeValue("00:00:05"), "'attente """ & duree & """'"
End Sub