CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 2018
-
16 avril 2010 à 20:10
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 2018
-
16 avril 2010 à 20:47
Salut à tous,
Je sèche grave...
Une Form, non Modal, est appelée par .show, pendant qu'une boucle For/Next est lancée.
Un bouton dans la Form DOIT permettre de mettre fin à la boucle... Sauf que même avec Load, SetFocus... le bouton reste désepérément inactif (comme l'accès à VB Editor d'ailleurs...)le temps que la boucle soit finie
Le classeur comprend 1 Module et 2 Form
Form 1 "MemData"
= > 2 TextBox "Mem1" et "Mem2"
Form 2 "Alerter" NON MODAL avec 1 bouton "Encore"
=> caption "Cliquer pour continuer"
=> le code Private
Private Sub Encore_Click()
'= > Relance la temporistaion de fermeture automatique
Relancer
End Sub
Module "Tempo" Code
Option Explicit
Public Tp10s, Tp180s, WbC As Variant, T As Long
Sub StartTempo()
' => Lancement de la durée d'accès libre (3 minutes avant alerte de relance)
Tp180s = Now + TimeValue("00:03:00") 'définit la durée de 180 secondes avant de lancer la prodédure de fermeture automatique
Application.OnTime Tp180s, "AlerteFin" 'appelle la procédure de fermeture automatique
MemData.Mem1.Value = "1" 'mémoire tempo Tp180s activée
End Sub
'************************************************************************************
Sub AlerteFin()
'=> Appel de la Form Alerter (Message de Relance pour Arrêt Automatique engagé dans les 10 secondes)
MemData.Mem1 = "0" 'Mémoire tempo Tp180s échue
MemData.Mem2 = "1" 'Mémoire tempo Tp10s activée
Alerter.Show 'affichage du temps restant et du bouton de relance
Décompter 'lance le décompte final es 10 dernières secondes
End Sub
'************************************************************************************
Sub Décompter()
Application.ScreenUpdating = True
Dim i
For i = 1 To 10 'comptage
Application.Wait (Now + TimeValue("00:00:01")) '1 seconde
T = 10 - i 'nombre de secondes restant
Alerter.Caption = " Fermeture dans " & T & " Secondes"
If MemData.Mem2 = "0" Then Exit Sub
Next i
MemData.Mem1 = "0" 'RAZ Mémoire Tempo Tp180s
MemData.Mem2 = "0" 'RAZ Mémoire Tempo Tp10s
Alerter.Caption = " Fermeture dans 10 Secondes"
Alerter.Hide 'ferme l'affichage
Application.DisplayAlerts = False 'inhibe le message d'enregistrement
WbC = Workbooks.Count 'compte les classeurs ouverts
If WbC < 2 Then 'si aucun autre classeur ouvert
' Workbooks("Tempo.xls").Save 'enregistre le classeur
' Application.Quit 'ferme Excel
Else 'si d'autres classeurs sont ouverts
' Workbooks("Tempo.xls").Save 'enregistre le classeur
' Workbooks("Prog.xls").Close 'ferme seulement le classeur
End If
End Sub
'************************************************************************************
Sub Relancer()
'=> Arrêt du processus automatique de fermeture et relance
Alerter.Hide
On Error Resume Next
Application.OnTime Tp180s, "AlerteFin", , False 'arrêt de tempo Tp180 si engagée
MemData.Mem1 = "0" 'RAZ Mémoire tempo Tp180s
MemData.Mem2 = "0" 'RAZ Mémoire tempo Tp10s
StartTempo 'engage la relance
End Sub
'************************************************************************************
Sub StopTempo()
'=> Arrêt du processus automatique de fermeture
On Error Resume Next
Application.OnTime Tp180s, "AlerteFin", , False 'arrêt de tempo Tp180 si engagée
MemData.Mem1 = "0" 'RAZ Mémoire tempo Tp180s
MemData.Mem2 = "0" 'RAZ Mémoire tempo Tp10s
End Sub
'************************************************************************************
Mais pourquoi donc ce bouton n'est pas opérant ? Bien sûr, si je ne lance pas la boucle For/Next, le bouton marche...
J'ai cherché à procéder autrement (Do, Execute, While, EnableCancelKey... ) mais sans plus de succès, hélas