Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Utilisation d'un "compteur temps" pour une macro avec l'Option Explicit

Narfe

XLDnaute Nouveau
Bonjour à toutes et à tous,

je rencontre un petit problème sur l'utilisation de la fonction "Application.OneTime".

L'objectif recherché est le suivant : à l'ouverture de mon fichier excel, une tempo se met en place pour venir activé une macro toutes les 2 secondes. J'ai inclus cette même fonction pour qu'elle s’arrête lors de la fermeture du fichier.

Lorsque je mets en commentaire la fonction d’arrêt de cette tempo, le fichier fonctionne mais que sur une seule période. Puis il me renvoit ce message : "Impossible d’exécuter la macro 'XXXXXX'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées."

Avez vous déjà rencontré ce problème ?

Voici la structure de ma macro (qui est dans la "ThisWorkbook") :

Private Sub Lancer()
Dim interval As Date
interval = "00:00:02"
Application.OnTime Now + TimeValue(interval), "Miaou"
End Sub


Sub Miaou()
Call Ecriture_Parts_Number_Automatique
Lancer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime interval, "ExecuterTimer", schedule:=False
End Sub

Private Sub Workbook_Open()

Lancer
Call Miaou
Workbook_BeforeClose


End Sub


Ps : la fonction Miaou, elle fonctionne comme il se doit quand elle est lancé séparément. Vu que l'on est dans "ThisWorksbook" j'ai bien fait attention de mentionner les onglets dans lesquels cette fonction vient prendre ses informations ( " Sheets("IPE").Range("A1") ") afin qu'il n'y est pas de perte d'information si on change d'onglet (arrêter moi si je me trompe ???).

En vous remerciant d'avance !

Cordialement.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour que l'exécution d'une Application.OnTime DateHeure, Commande, Schedule:=False soit couronnée de succès, il faut impérativement que DateHeure et Commande soient exactement ceux spécifiés lors de l'Application.OnTime DateHeure, Commande, Schedule:=True correspondant.
Pour Commande ce n'est généralement pas un problème parce que c'est une constante String, mais DateHeure doit être une variable globale (déclarée en tête du module de préférence par Public ou Private plutôt que par Dim) et non pas locale (déclarée par Dim dans une procédure)
De toute façon l'utilisation d'un Application.OnTime dans un module objet tel que ThisWorkbook est un peu délicate.
C'est pourquoi j'ai écrit un module standard MPlanificateur utilisé seulement par un module de classe Planification muni d'un évènement Échoit.
Il sont dans le classeur joint.
On y trouve aussi un exemple d'utilisation d'un WithEvents PlanFermeture As Planification dans l'UserForm UFmProg.

Dans un module standard c'est plus simple à mon avis :
VB:
Option Explicit
Private HeureOT As Date
Sub Miaou()
   Call Ecriture_Parts_Number_Automatique
   HeureOT = Now + TimeSerial(0, 0, 2)
   Application.OnTime HeureOT, "Miaou"
   End Sub
Sub ArrêtMiaou()
   If HeureOT = 0 Then Exit Sub
   Application.OnTime HeureOT, "Miaou", Schedule:=False
   HeureOT = 0
   End Sub
La procédure Miaou peut être exécutée de n'importe où une première fois, et elles se relance toutes les 2 secondes jusqu'à ce qu'on exécute ArrêtMiaou, de n'importe où aussi, y compris ThisWorkbook.
 

Pièces jointes

  • Progression.xlsm
    170.2 KB · Affichages: 19
Dernière édition:

Narfe

XLDnaute Nouveau
Bonjour,

merci pour votre réponse ! Mais malheureusement le code ne fonctionne pas : il me renvoie comme quoi la variable "HeureOT" n'est pas déclarer (alors qu'elle est bien déclaré avant le Sub Miaou()).

J'ai donc fait le test de déplacer cette déclaration dans le Sub Miaou() mais je me retrouve avec mon ancien message d'erreur "Impossible d’exécuter la macro 'XXXXXX'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées."

Il ne me fait donc qu'une seule boucle lorsque la macro est appeler via un bouton. Donc la même chose qu'avec l'ancien code ou la macro été appeler directement à l'ouverture du fichier.

Je ne comprends pas pourquoi il perd cette "référence".
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…