Bonjour le forum,
J'aimerai faire un point concernant la fonction Application.OnTime qui permet d'exécuter une macro excel à une heure prédéterminée.
Mon besoin :
Exécuter une macro excel tous les jours à 17h15 sauf le samedi et le dimanche.
A savoir que le PC est constamment allumé, excel est toujours ouvert de même que le fichier contenant la macro.
Ma méthode actuelle :
J'ai joint un fichier excel pour l'exemple ...
Sous l'objet, ThisWorkbook, je donne une première instruction Application.OnTime dans une procédure Workbook_Open()
Sous l'objet Module1, se trouve la macro 'macro1' qui doit être exécutée chaque jour. A la fin de cette macro je redonne une instruction Application.OnTime pour l'exécution du lendemain.
Mon problème :
1. La 'macro1' s'exécute bien à l'heure prévue, le jour de l'ouverture du fichier. Donc la procédure Private Sub Workbook_Open() fonctionne parfaitement bien, cependant à la fin de la 'macro1' je redonne l'instruction pour le lendemain à la même heure mais parfois (pas tous les jours) la 'macro1' s'exécute deux fois de suite. Pourtant la dernière instruction, Application.OnTime, de la 'macro1', qui indique à Excel de relancer la macro 'macro1' à 17h15m00s s'exécute quelques secondes après 17h15m car il faut le temps d'exécuter toutes les instructions de la 'macro1'. Là il n'y a qu'une MsgBox mais dans mon cas précis la macro1 tourne en environ 15 secondes.
Donc si à 17h15m15s je reéxecute une instruction Application.OnTime à 17h15m00s je m'attend à ce qu'elle ne s'exécute que le lendemain et pas une deuxième fois juste après la première !!!!
2. Ma macro a tourné le samedi et le dimanche me causant des problèmes de dates dans mes fichiers de sorties .... car dans ma vraie 'macro1' celle-ci créé des fichiers csv
Conclusion :
Je ne parviens pas à stabiliser cette instruction Application.OnTime, si vous avez des conseils pour moi, peut-être que je l'utilise mal ou que j'ai oublié quelque chose ?
La solution que j'espère ne doit pas faire appel au Gestionnaire des tâches de Windows.
je epux éventuellement faire tourner la macro toutes les heures et en début de macro faire des tests (jour de la semaine et heure) pour vérifier s'il faut vraiment exécuter le code ou pas ... qu'en pensez-vous ?
merci d'avance de votre soutien,
David
J'aimerai faire un point concernant la fonction Application.OnTime qui permet d'exécuter une macro excel à une heure prédéterminée.
Mon besoin :
Exécuter une macro excel tous les jours à 17h15 sauf le samedi et le dimanche.
A savoir que le PC est constamment allumé, excel est toujours ouvert de même que le fichier contenant la macro.
Ma méthode actuelle :
J'ai joint un fichier excel pour l'exemple ...
Sous l'objet, ThisWorkbook, je donne une première instruction Application.OnTime dans une procédure Workbook_Open()
Sous l'objet Module1, se trouve la macro 'macro1' qui doit être exécutée chaque jour. A la fin de cette macro je redonne une instruction Application.OnTime pour l'exécution du lendemain.
Mon problème :
1. La 'macro1' s'exécute bien à l'heure prévue, le jour de l'ouverture du fichier. Donc la procédure Private Sub Workbook_Open() fonctionne parfaitement bien, cependant à la fin de la 'macro1' je redonne l'instruction pour le lendemain à la même heure mais parfois (pas tous les jours) la 'macro1' s'exécute deux fois de suite. Pourtant la dernière instruction, Application.OnTime, de la 'macro1', qui indique à Excel de relancer la macro 'macro1' à 17h15m00s s'exécute quelques secondes après 17h15m car il faut le temps d'exécuter toutes les instructions de la 'macro1'. Là il n'y a qu'une MsgBox mais dans mon cas précis la macro1 tourne en environ 15 secondes.
Donc si à 17h15m15s je reéxecute une instruction Application.OnTime à 17h15m00s je m'attend à ce qu'elle ne s'exécute que le lendemain et pas une deuxième fois juste après la première !!!!
2. Ma macro a tourné le samedi et le dimanche me causant des problèmes de dates dans mes fichiers de sorties .... car dans ma vraie 'macro1' celle-ci créé des fichiers csv
Conclusion :
Je ne parviens pas à stabiliser cette instruction Application.OnTime, si vous avez des conseils pour moi, peut-être que je l'utilise mal ou que j'ai oublié quelque chose ?
La solution que j'espère ne doit pas faire appel au Gestionnaire des tâches de Windows.
je epux éventuellement faire tourner la macro toutes les heures et en début de macro faire des tests (jour de la semaine et heure) pour vérifier s'il faut vraiment exécuter le code ou pas ... qu'en pensez-vous ?
merci d'avance de votre soutien,
David