cs_kmi59
Messages postés7Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention19 novembre 2005
-
18 nov. 2005 à 15:32
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
19 nov. 2005 à 16:02
Hello
Dans mon prog, lors d'un calcul je ne veux pas que l'utilisateur puisse intervenir sur mon UserForm, ainsi je fais :
Private Sub Calculer_Click()
For Ctl = 0 To (Controls.Count - 1)
Controls(Ctl).Enabled = False
Next Ctl
.
. 'Calculs...
.
For Ctl = 0 To (Controls.Count - 1)
Controls(Ctl).Enabled = True
Next Ctl
End Sub
... mais le soucis, c'est que lors du calcul, si je clique sur mon UserForm, par ex sur un CommandButton, il "enregistre" le clic et le traite une fois mon calcul fini... mais au contraire, je ne veux PAS prendre en compte les clics ou entrées clavier durant mon calcul?!
Y a t-il une fonction qui spécifie ça?
Merci!
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 18 nov. 2005 à 21:47
salut,
si le click a tout de même été pris en compte, c'est que ton calcul a empêché la désactivation des enabled.
autrement dit, il est possible qu'un simple DoEvents avant ton calcul suffise.
sinon, tu peux aussi simplement utiliser un booléen (déclarations générales)
Private Sub Calculer_Click()
CanIClick = False
.
. 'Calculs...
.
CanIClick = True
End Sub
et dans tous tes évènements Click, en première ligne
If Not CanIClick Then Exit Sub
sans oublier un CanIClick = True au Form_Init (Load?)
cs_kmi59
Messages postés7Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention19 novembre 2005 19 nov. 2005 à 15:56
Re
J'ai trouvé une solution qui a l'air de fonctionner :
Private Sub Calculer_Click()
For Ctl = 0 To (Controls.Count - 1)
Controls(Ctl).Enabled = False
Next Ctl
DoEvents 'Ainsi, je vois bien que mes contrôles sont inactifs...
.
. 'Calculs...
.
DoEvents 'Comme ça, mes éventuels clics souris enregistrés sont traités... avant de remettre actifs mes contrôles!
For Ctl = 0 To (Controls.Count - 1)
Controls(Ctl).Enabled = True
Next Ctl
End Sub
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 18 nov. 2005 à 19:05
La je suis blasé !
Au pire:
Private Sub Calculer_Click()
For Ctl = 0 To (Controls.Count - 1)
Controls(Ctl).Hide = False
Next Ctl
.
. 'Calculs...
.
For Ctl = 0 To (Controls.Count - 1)
Controls(Ctl).Hide = True
Next Ctl
End Sub
Mais c'est pas très esthétique...
Si tu en veux vraiment, met quelque chose de transparent au dessus de ta form. Peut être qu'un simple contrôle image suffirait...
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 19 nov. 2005 à 00:36
Lut,
Y'a pas de raison .....
Tentes en spécifiant ton userform pour ta colection de controles
With UserForm1
For Ctl = 0 To (.Controls.Count - 1)
Controls(Ctl).Enabled = False
Next Ctl
.
. 'Calculs...
.
For Ctl = 0 To (.Controls.Count - 1)
Controls(Ctl).Enabled = True
Next Ctl
End with
End Sub
De plus tout dépand d'ou tu lances ton calcul tu seras peut-être obligé de mettre ta UserForm non Modale sinon le code ne s'exécutera pas
cs_kmi59
Messages postés7Date d'inscriptionmercredi 16 novembre 2005StatutMembreDernière intervention19 novembre 2005 19 nov. 2005 à 15:18
Hello
rt15 : nan, ça ne fonctionne pas de cacher mes contrôles... en fait ils sont toujours visibles tt le temps de mon calcul...
Gobillot : j'ai pas bien compris ce qu'étais cette fonction...
pcpt : avec le booléen, non plus, ça revient au même...
valtrase : idem...
---> donc en gros, mon problème c'est le même à chaque fois : comme le dit pcpt, mon calcul empêche sûrement au système de traiter les événements... ainsi j'ai espéré en utilisant le DoEvents... mais nan, ça change rien, ça permet juste de constater visuellement certains événements (par ex. que durant mon calcul, mes contrôles sont inactifs ou invisibles... alors que sans le DoEvents, je voyait rien comme changement...). Au final, le clic est toujours enregistré et est traîté une fois ma Sub terminée... donc j'ai beau faire tt ce que je veux à l'intérieur, rien n'y fait...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 19 nov. 2005 à 16:01
re,
ouai sauf qu'il parraît normal que le 1er click soit comptabilisé, puisque ton calcul est lancé PAR ET DANS le bouton CALCULER....
exemple VB6, 3boutons par défaut.
essaie de clicker sur le 2 et le 3, puis pareil en cliquant d'abord sur le 1.
normalement, çà devrait t'aider....
Option Explicit
'
Dim CanIClick As Boolean 'pour bouton 3
'
'
Private Sub Command1_Click()
'rend le bouton 2 disabled. un, ou boucle pour tous....
Command2.Enabled = False
' boolean false pour le bouton 3
CanIClick = False
' lance le calcul qui dure environ 5 secondes
Call SUBCALCULER
' dégrise, blablabla
CanIClick = True
Command2.Enabled = True
End Sub
'
'
Private Sub Command2_Click()
MsgBox "Click sur Bouton 2"
End Sub
'
'
Private Sub Command3_Click()
If Not CanIClick Then Exit Sub
MsgBox "Click sur Bouton 3"
End Sub
'
'
'
Private Sub SUBCALCULER()
DoEvents
Dim i As Long
' masque le bouton 1 pour savoir....
Command1.Enabled = False
Debug.Print "début du calcul"
' tes opérations..... (5 secondes +/-)
For i = 0 To 1500000
DoEvents
Next i
' affiche le bouton 1 pour savoir....
Command1.Enabled = True
Debug.Print "fin du calcul"
End Sub