Médiaforma

VBA Excel – Exécuter une procédure à une certaine heure

Partagez cet article sur vos réseaux

Vous pouvez demander à VBA d’exécuter une procédure à une heure donnée en utilisant la méthode Application.OnTime :

Application.OnTime heure, "proc"

heure est un objet Time qui définit l’heure d’exécution de la procédure proc.

Exécuter une procédure à une heure fixe

Vous appellerez la méthode Application.OnTime dans la procédure Workbook_Open().

Ouvrez la fenêtre Microsoft Visual Basic pour Applications du classeur concerné. Double-cliquez sur ThisWorkbook dans la fenêtre Projet (1) et sélectionnez Workbook dans la liste déroulante Objet (2). La procédure Workbook_Open() est automatiquement créée. Il ne vous reste plus qu’à la compléter (3) :

Lorsque vous ouvrirez le classeur, le code placé dans la procédure Workbook_Open() sera automatiquement exécuté. Voici le code utilisé :

Private Sub Workbook_Open()

  Application.OnTime TimeValue("12:30:00"), "manger"

End Sub

Ici, nous utilisons la fonction TimeValue() pour obtenir un objet Time à partir d’une chaîne au format hh:mm:ss. Cet objet définit l’heure d’exécution de la procédure manger().

Il ne reste plus qu’à définir la procédure manger(). Sous Module, double-cliquez sur Module1 et définissez la procédure manger() :

Sub manger()

  MsgBox "Il faudrait peut-être penser à aller manger !"

End Sub

A 12 heures 30, une boîte de message rappellera que c’est l’heure du repas :

Exécuter une procédure un certain laps de temps après l’ouverture du classeur

En utilisant la procédure Application.OnTime, vous pouvez également exécuter une procédure un certain laps de temps après l’ouverture du classeur.

La procédure Workbook.Open() est la très proche de celle utilisée dans l’exemple précédent, si ce n’est qu’ici, on ajoute le délai (TimeValue) à l’heure actuelle (Now). Dans cet exemple, la procédure alerte() s’exécutera une minute après l’ouverture du classeur :

Private Sub Workbook_Open()

  Application.OnTime Now + TimeValue("00:01:00"), "alerte"

End Sub

Voici le code de la fonction alerte() :

Sub alerte()

  MsgBox "Le classeur est ouvert depuis une minute."

End Sub
 
Commentaires

Bonjour
Comment faire pour exécuter une macro à heure fixe dans un fichier qui reste constamment ouvert ?
Merci pour votre aide

Laissez un commentaire