Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 SetFocus dans un ComboBox

Emile63

XLDnaute Junior
Bonjour à tous,
J'ai parcouru le forum, mais n'ai pas trouvé ma solution.
Je suis en train de programmer un Quizz (questionnaire / jeu), ou du moins j'essaie.
Dans un textbox "AnswerTxt_in" d'un userform "Quiz_Usf" qui compte plusieurs labels, boutons et boutons radios, j'écris une donnée (réponse au Quizz) sur le textbox "AnswerTxt_in" et se lance alors la procédure du jeu, vérifiant si la réponse est correcte ou non. Si tout est correct, on passe à la question suivante.
Donc quand c'est terminé, je souhaite que le curseur revienne sur le même textbox "AnswerTxt_in" (qui a été nettoyé entretemps) , j'ai donc ajouté à ma procédure suivante:
SetFocus. Je précise que je valide ma réponse dans le textbox avec [Enter]

Private Sub AnswerTxt_in_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Bla,bla,bla..
'Bla,bla,bla..

Quiz_Usf.AnswerTxt_in.SetFocus

End Sub

Mais ça ne fonctionne pas... C'est le bouton qui à l'index suivant qui est toujours sélectionné, une fois ma réponse répondue dans le textbox.
Comment faire pour le faire revenir en arrière d'un index puisque apparemment le SetFocus ne fonctionne pas dans mon cas?
Merci d'avance pour votre aide à tous et bonne journée.
Emile
 

Emile63

XLDnaute Junior
Bonjour Patricktoulon,
Merci pour ton aide!
J'ai testé:

Private Sub AnswerTxt_in_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Quiz_Usf.AnswerTxt_in.SetFocus
End Sub

Mais ça ne change rien, le focus va au bouton suivant quand même...
 

job75

XLDnaute Barbatruc
Bonjour Emile63, patricktoulon,

Il y a l'argument Cancel, servez-vous en :
VB:
Private Sub AnswerTxt_in_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True
End Sub
A+
 

Emile63

XLDnaute Junior
Bonjour Job75,
Merci pour votre aide. Je l'ai testé, malheureusement ça n'a pas fonctionné, tel quel ...
1) Le curseur ne reviens pas dans le label (Quiz_Usf.AnswerTxt_in)
2) L'UserForm qui continue d'être actif pour la suite du Quizz, n'a plus de possibilité de changer d'un bouton à l'autre (Tab ne fonctionne plus)
Je pense qu'il faut le mettre (Cancel) sur True à un certain moment, et sur False après, mais je ne vois pas bien comment le faire...
 

job75

XLDnaute Barbatruc
Bonjour Emile63,
Je pense qu'il faut le mettre (Cancel) sur True à un certain moment, et sur False après
Oui, en utilisant une variable Public, par exemple avec ce code dans Module1 :
VB:
Public bloque As Boolean 'mémoriqe la variable

Sub USF()
RAZ
UserForm1.Show
End Sub

Sub RAZ()
bloque = False
End Sub
Et dans l'UserForm :
Code:
Private Sub AnswerTxt_in_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
bloque = True
'---suite du code---
End Sub

Private Sub AnswerTxt_in_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not bloque Then Exit Sub
Cancel = True
Application.OnTime 1, "RAZ" 'déclenchement quand la macro Exit est terminée
End Sub
A+
 

Emile63

XLDnaute Junior
Bonjour Job75,

Je te remercie pour ton aide. J'avoue que je ne comprends pas "comment ça marche" mais
J'ai placé le code que tu m'as suggéré (en espérant ne pas m'être trompé), , voir ci-après, mais malheureusement, ça n'a pas l'aire de fonctionner, je n'ai toujours pas le focus dans ce Lbl :

Private Sub AnswerTxt_in_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

MonIndex = Quiz_Usf.AnswerTxt_in.TabIndex
bloque = True

If KeyCode.Value = 13 Then
If Me.AnswerTxt_in.Value = "" Then
MsgBox "Saisissez votre réponse.", vbOKOnly + vbInformation, "Manque réponse"
Else
Call ValidateReponse ' Lance la procédure du contrôle de la réponse
Call AskQuestion 'Lance la procédure de la question
End If
End If
Quiz_Usf.AnswerTxt_in.SetFocus ' Fonctionne pas ici, le focus ne revient pas dans ce Label

End Sub


Private Sub AnswerTxt_in_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If Not bloque Then Exit Sub
Cancel = True
Application.OnTime 1, "RAZ" 'déclenchement quand la macro Exit est terminée
Quiz_Usf.AnswerTxt_in.SetFocus' Fonctionne pas ici, le focus ne revient pas dans ce Label

End Sub
 

job75

XLDnaute Barbatruc
Bonjour Emile63,

Je n'ai mis SetFocus nulle part, on n'en a pas besoin.

Le focus reste dans la TextBox après validation par la touche Entrée.

La variable bloque doit être déclarée Public dans Module1.

A+
 

Emile63

XLDnaute Junior
(re) Bonjour Job75,

Oui, bien sûr. Les deux procédures sont sur sur le module1 déclaré Public.

Public bloque As Boolean 'mémorise la variable
Sub USF()
RAZ
Quiz_Usf.Show
End Sub

Sub RAZ()
bloque = False
End Sub

J'ai enlevé les SetFocus, mais ça ne change rien, le focus ne reste pas dans le Lbl.

Peut-être un début d'explication:
Quand je lance la procédure d'initialisation depuis l'interface VBE -> Userform -> F5
Ta proposition fonctionne. (A l'exception du mode Modal..)

Le problème c'est que je lance l'initialisation de l'Userform depuis le module1 avec des boutons qui se situent sur les feuille de calcul avec la procédure suivante:

Sub UserForm_Initialize() '
'Permet de lancer l'Userform depuis les boutons de la Feuil2 et Feuil3
Feuil2.Select
[A1].Select
Call DimensionQuiz_Usf ' Place l'Userform par rapport à l'écran
Load Quiz_Usf
Quiz_Usf.Show 0
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…