[VBA] Désactiver deux OnTime en cours

  • Initiateur de la discussion Initiateur de la discussion F22Raptor
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F22Raptor

XLDnaute Impliqué
Hello,
Sur le fichier joint, en cliquant sur le bouton de lancement, on lance par une procédure qui se relancera elle-même X secondes plus tard par OnTime (avec un affichage de msgbox). Subtilité, il y a un second ontime qui lance une sous-proc.

Je souhaite qu'en lançant le UserForm de paramétrage du nombre de secondes, si on valide, on désactive les deux OnTime en cours.

J'ai essayé avec EarliestTime et Schedule=False, mais ça bloquait ... (msg d'erreur).

Une idée ?
 

Pièces jointes

Dernière édition:
Re : [VBA] Désactiver deux OnTime en cours

suite à quelques tests, je me demande si le pb ne viendrait pas du fait que je veux désactiver les OnTime dans me code du UF, alors qu'ils font référence à des procédures d'un Module ...

Du coup, il faudrait peut être préciser le nom de la procédure d'une autre manière que "MaProc" ?
Quelque chose que "Module1!MaProc" ?
 
Re : [VBA] Désactiver deux OnTime en cours

Bonjour,

Une autre approche en s'intéressant à qui appelle la procédure "LancementMsgBoxOntime".
On filtre le OnTime selon le cas qui se présente.

1) Code du UserForm
Code:
Private Sub UserForm_Initialize()
Me.TextBox1 = Range("A1").Value
Me.StartUpPosition = 0
Me.Top = Application.Top + ((Application.Height) / 2) - (Me.Height / 2)
Me.Left = Application.Left + ((Application.Width) / 2) - (Me.Width / 2)
End Sub

Private Sub CommandButton1_Click()
Range("A1").Value = Application.Max(2, TextBox1.Value)  'au moins 2 secondes pour le OnTime !!!
Unload Me

'/// Peut être faut-il ici relancer la procédure
'/// LancementMsgBoxOntime. Si oui, retirer le flag

'Call LancementMsgBoxOntime

End Sub

2) Code du module1
Code:
Sub ParametrageUserForm()
UserForm1.Show
End Sub

Sub MiseAJour()
ActiveSheet.Calculate
End Sub

Sub LancementMsgBoxOntime()
Dim Temps1, Temps2
Dim boolFaire As Boolean
'---
'### On teste qui appelle la routine LancementMsgBoxOntime ###
Select Case TypeName(Application.Caller)
  '--- C'est le code qui a appelé (Application.OnTime) ---
  Case "Error"
    boolFaire = True
      
  '--- C'est un contrôle qui a appelé ---
  Case "String"
    '°°° Si c'est le Bouton 1 (lancement Routine), on fait °°°
    If Application.Caller = "Bouton 1" Then boolFaire = True
    
    '°°° Si c'est le Bouton 2 (paramètrage timing), on ne fait pas °°°
    If Application.Caller = "Bouton 2" Then boolFaire = False
End Select
'---
If boolFaire Then
  MsgBox "Toto"
  Temps1 = "00:00:" & Format(Range("A1").Value - 1, "00")  'on lancera le CALCULATE une seconde avant le relancement de la MsgBox
  Temps2 = "00:00:" & Format(Range("A1").Value, "00")
  Excel.Application.OnTime Now + TimeValue(Temps1), "MiseAJour "  'on lance une procédure intermédiaire une seconde avant
  Excel.Application.OnTime Now + TimeValue(Temps2), "LancementMsgBoxOntime"  'on repart pour un tour
End If
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour