[VBA] Désactiver deux OnTime en cours

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

  • F22desactivationOntime.xlsm
    34.8 KB · Affichages: 47
Dernière édition:

F22Raptor

XLDnaute Impliqué
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" ?
 

F22Raptor

XLDnaute Impliqué
Re : [VBA] Désactiver deux OnTime en cours

Bon apparemment ce n'est pas ce problème !
J'ai refait un fichier avec un bouton de désactivation : le code EarliestTime et Schedule=False m'a l'air propre, et identique au code de lancement, mais apparemment il n'en veut pas ...
 

Pièces jointes

  • F22desactivationOntime2.xlsm
    61.9 KB · Affichages: 44

MJ13

XLDnaute Barbatruc
Re : [VBA] Désactiver deux OnTime en cours

Bonjour F22raptor

Il faut définir en Public les temps pour pouvoir les désactiver.

Tu dois même pouvoir ne définir que temps1 au lieu de temspA1 idem pour le temsp2.
 

Pièces jointes

  • F22desactivationOntimeArret.xlsm
    46.6 KB · Affichages: 49
Dernière édition:

PMO2

XLDnaute Accro
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

  • F22desactivationOntime_pmo.xlsm
    34.5 KB · Affichages: 39

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16