For/Next vs Bouton dans Form UnModal

Résolu
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 16 avril 2010 à 20:10
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 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

Merci pour toute aide

Cdt
Rataxes64
A voir également:

2 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 avril 2010 à 20:24
essaye en rajoutant un DoEvents dans ta boucle For

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
16 avril 2010 à 20:47
Ben où il est passé mon message ?
RE Grrrrrand Merrrrrci à toi Casy !


Rataxes64
0
Rejoignez-nous