Ne pas prendre en compte les clics souris !

Résolu
cs_kmi59 Messages postés 7 Date d'inscription mercredi 16 novembre 2005 Statut Membre Dernière intervention 19 novembre 2005 - 18 nov. 2005 à 15:32
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Derniè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!

10 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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?)

PCPT [AFCK]
3
cs_kmi59 Messages postés 7 Date d'inscription mercredi 16 novembre 2005 Statut Membre Dernière intervention 19 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


Merci pcpt pour l'idée du DoEvents !!!
3
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
18 nov. 2005 à 15:59
Perso, j'aurais plutot fait un truc comme ca:

Private Sub Calculer_Click()
me.Enabled=false
.
. 'Calculs...
.
me.enabled=true

End Sub

mais je suis pas sur que ca resolve le probleme.

++

BasicInstinct
0
cs_kmi59 Messages postés 7 Date d'inscription mercredi 16 novembre 2005 Statut Membre Dernière intervention 19 novembre 2005
18 nov. 2005 à 16:23
Salut
Nan, ça marche pas... avant j'avais essayé ça :

Private Sub Calculer_Click()
MonUserForm.Enabled = False
.
. 'Calculs...
.
MonUserForm.Enabled = True

End Sub

... et ton truc revient au même : une fois la Sub finie, je ne peux plus interagir sur MonUserForm... je suis donc bloqué !!!

Merci qd même!!! Si t'as d'autres idées... lol
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
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...
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
18 nov. 2005 à 20:35
le Enabled devrait marcher pourtant.

sinon il y a encore çà:

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long


Daniel
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
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

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
cs_kmi59 Messages postés 7 Date d'inscription mercredi 16 novembre 2005 Statut Membre Dernière intervention 19 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...

Merci quand même de votre aide
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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



<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>

++
PCPT [AFCK]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 nov. 2005 à 16:02
ok
0
Rejoignez-nous