J'ai besoin qu'une macro se répète en permanence, j'y suis arrivé avec Application.OnTime mais je n'arrive pas à stopper le chrono, il y a plein de sujet sur le net mais rien y fait, je n'arrive pas à faire ce que je souhaite, cette fonction à l'air assez particulière
J'aimerai aussi qu'il ne soit pas possible de relancer le chrono plusieurs fois lorsqu'il l'est déjà
Merci d'avance pour votre aide
Code:
Sub MaMacro()
(ici ma macro à relancer)
End Sub
Sub Chrono()
Application.OnTime Now + TimeValue("00:00:01"), "MaMacro"
End Sub
Sub StopChrono()
Application.OnTime Now + TimeValue("00:00:01"), "Chrono", , False
End Sub
Donc dans mon cas ça serait bien le chronomètre, mais je n'arrive pas a comprendre où est mon erreur,
je n'ai plus de bug quand je lance mon StopChrono mais ça n’arrête toujours pas le chrono
Dim temps
Sub MaMacro()
MsgBox "1"
Chrono
End Sub
Sub Chrono()
temps = Now + TimeValue("00:00:10")
Application.OnTime temps, "MaMacro"
End Sub
Sub StopChrono()
On Error Resume Next
Application.OnTime temps, Procedure:="MaMacro", Schedule:=False
End Sub
Super, j'avais presque tout bon lol sauf que javais tous mis a l'envers
Et pour interdire la relance du chrono comme j'avais demandé, ca n'est peut etre pas possible
Existe-t-il quelque chose du genre "si chrono actif alors ..." ?
Car là sur un chrono de 10sec, si je clique 3 fois sur le bouton, j'aurais 3 fois la macro toutes les 10sec !
Mais bon le plus important c’était de faire fonctionner le StopChrono
Bonsoir
Au StopChrono, après Application.OnTime Temps … Schedule:=False, mettez :
VB:
Temps = Empty
Mettez le aussi dans MaMacro devant l'appel à Chrono qui devra opérer pour qu'elle soit relancée.
Comme ça vous saurez s'il est actif: Le Chrono ne relancera rien si vous y faites d'abord :
Dim temps
Sub MaMacro()
MsgBox "1"
If Not IsEmpty(temps) Then Exit Sub
Chrono
End Sub
Sub Chrono()
temps = Now + TimeValue("00:00:05")
Application.OnTime temps, "MaMacro"
End Sub
Sub StopChrono()
On Error Resume Next
Application.OnTime temps, Procedure:="MaMacro", Schedule:=False
temps = Empty
End Sub
Donc comme ceci?
J'ai l'impression que ca la lance une fois, puis que ça arrête tous
Dim Temps
Sub LancerMaMacro()
If Not IsEmpty(Temps) Then Exit Sub
MaMacro
End Sub
Sub StopperMaMacro()
If IsEmpty(Temps) Then Exit Sub
Application.OnTime Temps, Procedure:="MaMacro", Schedule:=False
Temps = Empty
End Sub
Sub MaMacro()
MsgBox "1"
Temps = Now + TimeValue("00:00:05")
Application.OnTime Temps, "MaMacro"
End Sub
Mais évidemment ça ne pourrait pas empêcher un petit malin d'instaurer plusieurs cycles simultanés en lançant directement MaMacro au lieu de la lancer via LancerMaMacro.
J'ai lu votre fil.
Les classeurs que je vous joins ne sont pas de moi. Ils sont du forum et encore un grand merci.
Ils peuvent peut-être vous être utiles.