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

Application.OnTime ne veut pas marcher

turnoff

XLDnaute Nouveau
Bonjour à toutes et à tous.

Je butte sur l’utilisation de « Application.OnTime ». Je souhaite faire quelques milliers d’acquisitions toutes les 5 à 300s, en utilisant cette méthode. Mais j’obtiens une erreur ! J’ai parcouru le Forum sans trouver de solution à mon besoin. Je me suis fait un petit fichier de Test. avec 2 boutons start et stop

La première utilisation conforme à l’excellent article Publié par myDearFriend! le 12-06-2006 (47641 lectures).
Option Explicit
Dim Tps As Date

Public Sub Tempo()
Tps = Now + TimeValue("00:00:05")
Application.OnTime Tps, "Tempo"
Sheets(1).Range("A1").Value = Format(Now, "hh:nn:ss")
End Sub

Public Sub StopTempo()
On Error Resume Next
Application.OnTime Tps, "Tempo", , False

End Sub

Cela tourne parfaitement, mais il me semble qu’on fait appel à la récursivité. Comme cela doit se répéter souvent je crains un débordement de pile.

Je l’ai réécrite sous une nouvelle forme, qui ne fonctionne pas !

Public Sub Tempo2()
Tps = Now + TimeValue("00:00:05")
Application.OnTime Tps, "Aff2"
End Sub

Public Sub Aff2()
Sheets(2).Range("A1").Value = Format(Now, "hh:nn:ss")
Tempo2
End Sub

Public Sub StopTempo2()
On Error Resume Next
Application.OnTime Tps, "Aff2", , False

End Sub
Dès la première échéance j’obtiens le message d’erreur :

Je ne comprends pas, toutes les macros sont validées.

Pourriez vous me dire ou est l’erreur ? Et comment faire sans utiliser le timer Merci beaucoup.
 

Pièces jointes

  • TESTl.xlsm
    28.2 KB · Affichages: 16

turnoff

XLDnaute Nouveau
Bonsoir Job75
Merci d'avoir répondu, je corrige. mais je ne penses pas que ce soit la cause du message d'erreur. J'utilise Aff2 ds l'exemple, mais dans la procédure réelle ( fichier très lourd) le nom est différent et j'obtiens le même message d'erreur?
En Mars dernier, vous m'aviez déjà bien aidé sur un sujet similaire...
A+
 

MJ13

XLDnaute Barbatruc
Bonjour à tous

Voici un code que j'adapte quand je veux utiliser On time.

Le problème est si le temps n'est plus défini lors d'une édition d'une cellule par exemple. Il vaut donc mieux lancer ce genre de routine dans une instance d'Excel isolée.

VB:
Public heure
Sub Actualiser()
'Range("J" & Range("A65536").End(xlUp).Row + 1) = Now
    heure = Now + TimeValue("00:00:30")
    Application.OnTime heure, "MiseAjour_Cliquer"
End Sub
Sub MiseAjour_Cliquer()
'code à lancer ici
MsgBox "ok"
Actualiser
End Sub
Sub ActualiserStop()
On Error Resume Next
Application.OnTime EarliestTime:=heure, Procedure:="MiseAjour_Cliquer", Schedule:=False
End Sub
 

turnoff

XLDnaute Nouveau
Bonsoir Job75 , Michel, le forum.

Merci beaucoup pour votre aide.

Une erreur peut en cacher une autre.

Dans le fichier principal l’application « ONTIME » ne fonctionnait pas. Pour l’isoler, j’ai créé un petit fichier « TEST » dans le lequel j’ai recopié la version de Mydearfriend et une alternative qui tente de palier à un éventuel débordement de pile. Dans l’exemple j’ai commis l’erreur de dénomination, qui n’a pas échappé à Job75.

Le « TEST » fonctionnait alors, mais toujours pas l’application principale dans laquelle ce n’était pas l’appellation qui posait problème (elle était différente et correcte); mais maintenant je savais que cette application pouvait et devait fonctionner avec mon matériel.

La seule différence entre les deux versions était que dans le « Test » les procédures étaient dans un module, alors que dans le programme principal les procédures étaient dans le code de la feuille dans laquelle étaient les boutons qui permettaient de les commander. Une fois le code déménagé dans un module, tout baigne ! Quel soulagement !

Je rapporte cette erreur, dans le cas très rare ou il y aurait aussi maladroit que moi.

Bien que je n’aie pas confirmation de la possibilité de débordement de pile avec la première méthode, Je note que « Michel »procède de façon similaire. Par contre il m’apprend que si on « édite une cellule » la procédure ne s’exécute pas ! Sinon à la fin de l’édition, non?

Je ne comprends pas ce qu’on entend par « Instance isolée »d’Excel ? Sinon un dossier dans lequel, toute édition par l’utilisateur est impossible (comment ?)

Pourrais-je modestement ajouter qu’il faut veiller à « verrouiller »les « boutons d’activation, genre « MiseAjour_Cliquer() ». Sous peine de cumuler les instances de ONTIME ; Ce qui n’aura échappé à personne.

Merci encore à tous.
 

Discussions similaires

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