Ne pas prendre en compte les clics souris !

[Résolu]
Signaler
Messages postés
7
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 novembre 2005
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
7
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 novembre 2005

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
12
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
Messages postés
7
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 novembre 2005

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
@+
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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...
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
29
le Enabled devrait marcher pourtant.

sinon il y a encore çà:

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


Daniel
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
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é
Messages postés
7
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 novembre 2005

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
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]
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
ok