XL 2010 Savoir si on a appuyé sur une touche déterminée en présence d’un UF

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Un UF apparaît en « modal ». Est-il possible de savoir que l’on a appuyé sur la touche clavier « Enter » ? Je voudrais récupérer cette éventualité dans une condition :

If x = 1 And OnVientDapputerSurEnter Then…
 
C

Compte Supprimé 979

Guest
Salut Magic_Doctor,

Tu peux utiliser l'évènement KeyDown et la valeur 13 pour Enter
VB:
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Debug.Print KeyCode
End Sub

@+
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
si il est modal il est donc actif seul les events dans ce userform sont possible de capter
alors la question est simple
si la touche doit être capté en toute circonstances il te faut utiliser les events keydown sur (13 pour ENTER)des object y compris celui de l'userform
alors ca fait beaucoup si tu a 36 combo,36 textbox,36...etc....
il te faut alors subclasser et tu peux le faire a l’intérieur de l'userform
exemple
VB:
Public WithEvents TxtB As MSForms.TextBox
Public WithEvents Combo As MSForms.ComboBox
Public WithEvents LISTE As MSForms.ListBox
Public WithEvents CHECK As MSForms.CheckBox
Public WithEvents uf As UserForm

Dim cl() As New UserForm1 ' instance de classe a l'interieur du module userform

Private Sub TxtB_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): GoOneEvent TxtB, KeyCode: End Sub
Private Sub uf_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): GoOneEvent uf, KeyCode: End Sub
Private Sub LISTE_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): GoOneEvent LISTE, KeyCode: End Sub
Private Sub CHECK_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): GoOneEvent CHECK, KeyCode: End Sub
Private Sub Combo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): GoOneEvent Combo, KeyCode: End Sub

Private Sub UserForm_Activate()
Dim ctrl, I&
ComboBox1.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
ComboBox2.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
ComboBox3.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
ListBox1.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

For Each ctrl In Me.Controls
Select Case TypeName(ctrl)
Case "TextBox": I = I + 1: ReDim Preserve cl(1 To I): Set cl(I).TxtB = ctrl
Case "ComboBox": I = I + 1: ReDim Preserve cl(1 To I): Set cl(I).Combo = ctrl
Case "Listbox": I = I + 1: ReDim Preserve cl(1 To I): Set cl(I).LISTE = ctrl
Case "CheckBox": I = I + 1: ReDim Preserve cl(1 To I): Set cl(I).CHECK = ctrl
'case.....
End Select
Next
I = I + 1: ReDim Preserve cl(1 To I): Set cl(I).uf = Me
End Sub


' ET C EST ICI QUE TU GERE LA TOUCHE <<ENTER>> DE TOUT LES CONTROLS QUI POSSEDENT L'EVENT KEYDOWN
Public Sub GoOneEvent(ctrl, KeyCode)
If KeyCode = 13 Then MsgBox "vous avez appuyé sur <<ENTER>>  dans " & ctrl.Name
End Sub
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir BrunoM45, patricktoulon,

En effet, BrunoM45, j’aurais dû glisser un fichier.
Merci patricktoulon pour cette explication. J’ai essayé d’utiliser :
VB:
Public Sub GoOneEvent(ctrl, KeyCode)
    If KeyCode = 13 Then MsgBox "vous avez appuyé sur <<ENTER>>  dans " & ctrl.Name
End Sub
Sans succès…

En fait le problème est simple en apparence.
L’application fonctionne parfaitement bien sur tous les points, sauf un :
Quand l’UF s’ouvre, avant même que l’on rentre quelque mot de passe que ce soit, on peut toujours le fermer en appuyant sur la touche « Esc » et uniquement sur celle-ci. Or, quand on appuie sur la touche « Enter », l’UF se ferme. Ce que je voudrais, c’est bloquer cette dernière touche pour que l’UF ne se ferme pas.
 

Pièces jointes

  • Pb USF Touche Enter (3).xlsm
    75.4 KB · Affichages: 15
C

Compte Supprimé 979

Guest
Re,

Il faut utiliser un FLAG et le tester dans ton CommandButton_OUT
La variable est déclarée en entête d'USF et initaliser à l'ouverture de l'USF

Ensuite si on appuie sur la touche entrée, on le met à faux
VB:
Private Sub CommandButton_OUT_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then FlgExit = False
End Sub
Et on le teste lors du "click" sur le bouton
Code:
Private Sub CommandButton_OUT_Click()  '--> CommandButton "OUT" (occulte)
  If basta = 1 Then Exit Sub
  ' Si le FLAG est à vrai = touche entrée, on sort
  If FlgExit = False Then Exit Sub
        
  Stop_Code = True               'arrête le défilement du texte dans le TextBox "TextBoxMotPasse"
  basta = 0
  Unload Me                      'ferme l'USF "USF_MotDePasse"
End Sub

@+
 

Pièces jointes

  • Magic_Doctor_pb USF Touche Enter.xlsm
    36.4 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
tiens ne m'en veut pas j'ai virer tout ton truc et j'en ai refait un
tu click tu textbox le defilement c'arrete et tu peux taper le bouton est alors débloqué
si c'est pas bon on passe a la phrase et couleur différente au prochain click sur textbox
au bout de 3 pareil c'est bloqué on passe a la phrase 4 bye bye!!
si le mot de passe est bon on sort tranquille
l'action à faire si oui ou non se fera ou lancera a partir de "sortie"
voila
il faudra y remettre ton action pour oui ou non et ta touche esc
la touche enter n'est plus un soucis elle est définitivement bloquée
 

Pièces jointes

  • mdp version pat.xlsm
    28.1 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
et pourquoi il est triste bruno ?, :p :p
c'est pas plus propre? un textbox et un bouton basta et le tout dans un seul module l'userform
et ben mon ami :rolleyes:..........
sincèrement mettre des flags partout wouahouhhh
alors qu'il suffisait simplement d'enlever le takefocusonclick au bouton et voila
pour la simple et bonne raison que quand le userform s'ouvre le premier controls focusable prend le focus et justement je te le donne dans le mille c'est le quel ben le textbox
et qu'est ce qui se produit justement quand on tape enter dans un textbox ?
la aussi je te le donne dans le mille ça passe au control suivant donc le bouton prend le focus
et qu'est ce qui se passe dans quand on tape enter sur un bouton ben ca exite l'event click
et voila ton userform se ferme
donc si tu met a false cette propriété du bouton ben tu n'a plus de soucis
et pas besoins de falg ou je ne sais quoi d'autre
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

[excel est fils de "soixantehuitard" : il est interdit d'interdire" ]
Echinez vous, échinez vous à cassez ou ne pas cassez
(avec ou sans drapeau)
• J'ouvre le classeur sans activer les macros
ou je l'ouvre dans LibreOffice
et j'appuie ou pas sur Enter si je veux ;)
[/excel est fils de "soixantehuitard" : il est interdit d'interdire" ]

NB: Pour être clair :
Où est le gain à dépenser énérgie et neurone pour développer des procédures VBA de protection sous Excel quand on sait que celui-ci permet de les outrepasser sans la même dépense d'énergie ?
Je pose la question et je vais me recoucher ;)
 

patricktoulon

XLDnaute Barbatruc
re
bonjour a tous
tiens @bruno45 et @Magic_Doctor puisque l'on y est
faisons des choses plus propres
voila le modèle avec un vrai timer pour le roulling(phrase)
pas de soucis avec ENTER
la touche ESC pour sortir
et mon compteur W7 monte beaucoup moins haut!!!! beaucoup moins !!!!!!!!!!!!
voir même ne décolle pas il reste entre 1 et 3%

au final la sub sortie(dans le userform) pilotera
  1. l'action a faire si le mot de passe est bon
  2. l'action a faire si c'est pas bon

Avouez que c'est moins chaotique comme code
 

Pièces jointes

  • mdp version pat.xlsm
    31.3 KB · Affichages: 5

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

=>patricktoulon
Loin du chaos, avec juste deux touches ;)
Lorsque s'affiche l'userform
CTRL+PAUSE
Mise en commentaires des codes VBA
(CTRL+A puis ajout des tites guillemets avec le bouton idoine)

Y travaille un petit peu avec ses doigts (avec ce petit ajout)
VB:
Private Sub CommandButton_OK_Click()
Unload Me
End Sub
ALT+F11 (retour dans Excel)
Y clic sur le bouton vert sur la feuille qui affiche l'USF
puis sur le OK de l'USF sans jamais saisir de mot de passe
(Et y peut recommencer jusqu'à la fin du confinement ;))

PS: J'ai rédigé ce post en portant mon tee-shirt "Sous les pavés, la plage"
;)
 

Discussions similaires

Statistiques des forums

Discussions
312 270
Messages
2 086 685
Membres
103 370
dernier inscrit
pasval