|
|
|
|
Répondre à amigo
|
Re,
Option Explicit
Public RunWhen As Double
Public Const cRunIntervalSeconds = 1 ' 1 seconde
Public Const cRunWhat = "Macro1" ' the name of the procedure to run
Sub StartTimer()
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
End Sub
Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
End Sub
Sub Macro1()
'''''''''''''''''
' Your Code Here
'''''''''''''''''
UserForm1.Label1.Caption = Time
' Call StartTimer to schedule the procedure again
StartTimer
End Sub
2) Sur une UserForm (UserForm1) j'ai mis 2 boutons (CommandButton1 et CommandButton2), et 1 Label (Label1). Dans le code de la Userform j'ai mis ça: Option Explicit Private Sub CommandButton1_Click() StartTimer End Sub Private Sub CommandButton2_Click() StopTimer End Sub Private Sub UserForm_Terminate() StopTimer End Sub 3) J'affiche UserForm1, Clic sur bouton1, l'horloge démarre. Clic sur bouton2, l'horloge s'arrête. Dans Public Const cRunIntervalSeconds tu règles l'intervalle. Dans macro1 à la place de MsgBox, tu peux mettre la procédure à exécuter à chaque interruption Timer. J'espère que ça te dépannera. Salut.
|
Bonjour,
Dans un module de feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Pour exemple d'application Démarre/Arrète le timer à chaque changement de cellule.
'mais peu être mis sur un bouton
TimeOnOFF = Not TimeOnOFF
If TimeOnOFF Then Timer
End Sub
Dans un module public
Public TimeOnOFF As Boolean
Sub Timer()
Dim S As Integer
While TimeOnOFF = True
If Second(Now) > S Or Second(Now) = 0 Then
'Exécution du code
'pour exemple
Sheets("Feuil1").Range("A1").Value = Time
S = Second(Now)
End If
DoEvents
Wend
End Sub
A+ |
Bonjour,
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False se trouve dans la procédure StopTimer, elle est sensée stoper l'execution des taches planifiée (Schedule). Tu remarqueras que dans la procédure, cette ligne de code est précédée par On Error Resume Next, ce qui veut dire que l'auteur a prévu que l'execution de Schedule:=False pouvait occasionner une erreur. Pour arrêter le Timer, appelle StopTimer, normalement il ne devrait plus y avoir de problème. Arrête le Timer quand tu ferme la feuille ( Private Sub UserForm_Terminate() ). De plus l'appel à la procédure StartTimer qui prépare le Timer pour l'interuption suivante doit être à la dernière ligne de la macro qui execute ton code. Sub Macro1() '<- nom de la macro initialisée dans la constante cRunWhat ' les instructions de ta macro à executer '... '... StartTimer '<- dernière instruction End Sub A+.
|
Salut
|
Bonjour,
Public RunWhen1 As Double
Public RunWhen2 As Double
Sub StartTimer(HeureExec as double, MaMacro as String)
Application.OnTime EarliestTime:=HeureExec, Procedure:=MaMacro, Schedule:=True
End Sub
Tu règle l'heure et tu déclenche la planification de tes taches en appelant StartTimer. RunWhen1= Now + TimeSerial(0,0,5) 'execution dans 5 secondes ' ou encore RunWhen1=TimeSerial(12,0,0) ' execution à 12h précises StartTimer(RunWhen1,"macro1") RunWhen2= Now + TimeSerial(0,1,0) 'execution dans 1 minute StartTimer(RunWhen2,"macro2") Ensuite tes macros déclenchent une nouvelle programmation après execution <code> Sub Macro1() ' les instructions de ta macro1 à executer RunWhen1= Now + TimeSerial(0,0,5) 'nouvelle execution dans 5 secondes StartTimer(RunWhen1,"macro1") End Sub Sub Macro2() ' les instructions de ta macro2 à executer RunWhen2= Now + TimeSerial(0,1,0) ' nouvelle execution dans 1 minute StartTimer(RunWhen2,"macro2") End Sub Pour arreter le Timer c'est la meme chose
Sub StopTimer(HeureExec as double, MaMacro as String)
On Error Resume Next
Application.OnTime EarliestTime:=HeureExec, Procedure:=MaMacro, Schedule:=False
End Sub
Appel de StopTimer StopTimer(RunWhen1,"macro1") StopTimer(RunWhen2,"macro2") Je n'ai pas testé, mais d'aprés l'article, si j'ai bien compris, c'est comme que ça marche. A+.
|