"Focus UserForm" ou OnKey "{ENTER}" ?

chewi

XLDnaute Junior
Bonjour à tous,

J'ai créé un UserForm contenant une TextBox1 et un CommandButton1.
Principe: On entre un texte dans la TextBox puis on clique sur le bouton de commande.
Un code analyse alors le contenu de la TextBox.

Ce que je voudrais, c'est lorsque je puisse appuyer sur la touche "ENTER" pour valider.

Mais lorsque l'on appuie sur la touche "ENTER", le focus étant sur la TextBox, il faut appuyer 1fois pour que le focus passe sur le bouton de commande et une 2ème fois pour "appuyer" sur le bouton de commande.

Est-il possible que lorsque j'appuie sur "ENTER", cela revienne à cliquer sur mon bouton?

J'ai regardé pour passer par "OnKey" mais je ne suis pas sur que ce soit la meilleure méthode.

Pouvez-vous m'aider ? je suis dans le flou.

Merci,

Chewi
 

Catrice

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Bonjour,

ci-joint un exemple basé sur l'évènement KeyDown.
 

Pièces jointes

  • Classeur1.xls
    30 KB · Affichages: 127
  • Classeur1.xls
    30 KB · Affichages: 142
  • Classeur1.xls
    30 KB · Affichages: 133

mutzik

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

bonjour a tous,

l'évenement TextBox1_AfterUpdate() te permet d'executer un code quand tu appuie sur la touche entrée (validation de ton textbox)

nb: j'évite au maximum les sendkeys ... toujours source de prob
 

Catrice

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Re,

Le code de PierreJean modifié pour éviter le SendKeys :

Private Sub CommandButton1_Click()
MsgBox ("ok")
End Sub

Private Sub TextBox1_AfterUpdate()
CommandButton1_Click
End Sub
 

chewi

XLDnaute Junior
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Bonjour Catrice, Pierrejean, Mutzik,

Un grand merci à tous les 3 pour ces réponses rapides.

Je me suis basé sur un peu toutes vos méthodes:

Code:
Private Sub CommandButton1_Click()
If TextBox1.Text = "Ok" Then
    Unload UserForm1
Else
    TextBox1.SetFocus
End If
End Sub
'__________________

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
    CommandButton1_Click
End If
End Sub
'__________________

Private Sub UserForm_Activate()
    TextBox1.SetFocus
End Sub

Reste une petite fioriture à apporter:

Après avoir appuyer sur ENTER, lorsque le texte n'est pas bon, le focus se met sur le bouton de commande. L'idéal serait que le focus reste sur ma TextBox.

Cela est-il possible? Comment faire?

Merci à tous,

Chewi
 

chewi

XLDnaute Junior
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Re,

Lorsque j'utilise:
Code:
Private Sub TextBox1_AfterUpdate()
If TextBox1.Text = "Ok" Then
    Unload UserForm1
Else
    'TextBox1.SetFocus
End If
End Sub
,
j'ai une erreur: "Run-time error '-2147417848(80010108)', Automation error
"The object invoked has disconnected from its clients"

lorsque le texte est bon et s'il n'est pas bon, je n'ai pas d'erreur mais j'ai le même problème de focus. ;)

Voilà un peu pourquoi je préfère garder mon code et adapter ce qu'il manque pour le focus.

Merci,

Chewi

Edit: je ne vois pas où je fais une manip de plus ?
 

mutzik

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Re,

le fait de devoir appuyer sur un bouton, c'est cela que je considère comme une manip de plus

j'ai mis un exemple à tout hasard ...

ton erreur provient du fait que tu 'unload' ton usf alors que le code qui lui est associé n'est pas completement terminé de s'exécuter (traitement du End if et End Sub)
 

Pièces jointes

  • ed.xls
    31 KB · Affichages: 79
  • ed.xls
    31 KB · Affichages: 91
  • ed.xls
    31 KB · Affichages: 89
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Re,

J'ai constaté la meme erreur que toi.
Ci-joint une solution qui fonctionne mais on peut peut etre repenser globalement le concept. Je ne sais pas exactement ce que tu veux faire.
 

Pièces jointes

  • Classeur1.xls
    32 KB · Affichages: 88
  • Classeur1.xls
    32 KB · Affichages: 86
  • Classeur1.xls
    32 KB · Affichages: 79

pierrejean

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

re

le même legerement simplifié

part du principe qu'apres le unload userform1 la macro ne doit plus y faire reference. Solution le mettre le plus a la fin possible
 

Pièces jointes

  • Classeur1.xls
    27 KB · Affichages: 75
  • Classeur1.xls
    27 KB · Affichages: 86
  • Classeur1.xls
    27 KB · Affichages: 86

chewi

XLDnaute Junior
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

Re tous les 3,

1) Mutzik, excuse moi si je passe pour un râleur (j'en suis désolé) mais avec mon code, je ne dois appuyer sur rien d'autre non plus, seulement l'enfoncement de la touche ENTER, tout comme avec ton code.
L'avantage est qu'ici je peux unloader mon UserForm sans chipotage.

2) Catrice, merci! C'est exactement cela qu'il me manquait.
Voici le code final:
Code:
Private Sub CommandButton1_Click()
If TextBox1.Text = "Ok" Then
    Unload UserForm1
Else
    UserForm1.Hide
    UserForm1.TextBox1.Value = ""
    UserForm1.TextBox1.SetFocus
    UserForm1.Show
End If
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
    CommandButton1_Click
End If
End Sub

Private Sub UserForm_Activate()
    TextBox1.SetFocus
End Sub

3) Pierrejean, es-tu certain d'avoir mis le bon classeur en annexe ?:D

Merci à vous tous!!!
 

pierrejean

XLDnaute Barbatruc
Re : "Focus UserForm" ou OnKey "{ENTER}" ?

re

arf des classeur1.xls j'en ai partout !!!

voila le bon (enfin j'espere!!)
 

Pièces jointes

  • Classeur1.xls
    24.5 KB · Affichages: 85
  • Classeur1.xls
    24.5 KB · Affichages: 97
  • Classeur1.xls
    24.5 KB · Affichages: 97

Discussions similaires

Réponses
1
Affichages
156
Réponses
2
Affichages
234

Statistiques des forums

Discussions
312 836
Messages
2 092 630
Membres
105 475
dernier inscrit
ramzi slama