Le setfocus ne fonctionne pas...

Résolu
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 18 mars 2008 à 11:14
fgazier Messages postés 7 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 14 avril 2009 - 14 avril 2009 à 19:50
Bonjour,

j'ai fait un setfocus sur une textbox, afin que l'utilisateur, lorsqu'il encode puisse rester sur cette textbox et qu'il ne doive pas prendre chaque fois sa souris pour venir se placer dans la textbox...

(donc, il encode dans la textbox, appuye sur 'Enter', cela transfere l'info dans une listbox. la textboxe se vide et il devrait pouvoir continuer à encoder dans cette textbox...

mais mon setfocus ne fonctionne pas, lorsqu'on appuye sur 'enter', le curseur se place sur un boutton de commande qui se trouve sur l'userform...

quelqu'un sait d'ou vient le probleme (parceque le preogramme ne plante pas...)

22 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
18 mars 2008 à 12:18
Re,
Je reviens sur ma premiere proposition qui est de jouer avec l'événement Exit du TextboX

@+: Ju£i?n
Pensez: Réponse acceptée
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 mars 2008 à 12:24
çà semble le plus propre oui

if condition then cancel = true

Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
18 mars 2008 à 12:57
Salut,

Tout à fait !
Testé et approuvé.

'Declarations
Dim MaBool As Boolean


Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If MaBool False Then Cancel True
End Sub


' Basculer MaBool à True pour perdre le focus du TextBox







<hr />

... Y'en a même qui disent qu'ils l'ont vu voler.



<hr />





/PRE>
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 mars 2008 à 11:27
Salut
La touche Entrée ne fait pas sortir le curseur d'une TextBox.
Tu as donc codé toi même cette détection.
Quel est ton programme ?

Dans le cas de la touche Entrée, si un des bouton de la forme a la propriété Default à True, c'est ce bouton qui prendra le focus et exécutera le monBouton_Click.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 mars 2008 à 11:31
ou as tu mis le SetFocus ? montres nous ton code

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
18 mars 2008 à 11:33
Salut,
Essaie en "jouant" avec l'événement Exit du TextBox cet événement te permet d'annuler la perte de focus du TextBox. en revanche il faudra savoir QUAND annuler et quand laisser faire (d'ou le therme joué)

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
18 mars 2008 à 11:35
Re,

Et bien je vais vous peu etre étonné mais il semblerait qu'en VBA le fonctionnement soit différent.
J'ai testé pour voir  (un simple Userform avec un bouton une listbox et un textbox)

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = vbKeyReturn Then
       Call ListBox1.AddItem(TextBox1.Text)
       TextBox1.Text = vbNullString
   End If
End Sub , ----
[code.aspx?ID=41455 By Renfield]
 

Et bien lors de l'appui sur entrée le focus passe à la listbox (dans mon cas)

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 11:39
J'ai vérifié, le Default de mes commandbuttons sont tous sur false.

je te met ci-dessous le code du textbox et celui du bouton sur lequel le focus se place...

Concernant mon petit programme, je vais essayer de vous expliquer mieux à quoi il doit servir! il s'agit d'un petit progr de gestion d'une boutique.

j'ai donc dans une feuille excel les infos suivantes:

 - colonneA : contient des références (4 chiffres)
 - colonneB : contient les catégories d'articles (chaque article est lié à une catégorie, il y en a trois au total (Alimentaire, NonAlimentaire et Livres)
 - colonneC : Contient les articles à vendre
 - colonne D : Contient le prix des articles.

Dans un userform j'ai placé les objets suivants:

 - une textbox
 - 2 listbox
 - 3 optionbuttons. (correspondant chacun à une catégorie d'articles)

l'userform sert donc à encoder les articles vendus. Je souhaiterais que l'utilisateur ai deux possibilités pour lui encoder les articles:
 - 1ère possibilité:
il choisi, via un des optionbutton, une catégorie d'article (alimentaire, non alimentaire ou livres) les articles (et leurs prix) de cette catégorie sont alors affiché dans la première listbox (elle affiche donc une fois chaque article). L'utilisateur double-clique alors sur un article et celui-ci est 'copié/collé' dans la seconde listbox. Il peut ainsi encoder plusieurs fois le meme article. Au final la listbox2 lui donne l'ensemble des articles vendu.
  

- 2ème possibilité:
il encode la référence de l'article (4chiffres) dans la textbox et lorsqu'il appuye sur la touche 'Enter' l'article (et sont prix) s'affiche directement dans la seconde listbox. (comme pour l'autre possibilité, il peut encoder plusieurs fois le meme article).
 
Le commandbutton sur lequel se place le focus sert à valider la vente et à transférer la listbox dans une feuille excel afin d'en garder une trace.

Voilà j'espere avoir été  un peu plus clair...

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   
    If KeyCode = vbKeyReturn Then
Dim Recherche As Range
Set Recherche = Sheets("Listing des Articles").Columns("A").Find(CLng(TextBox3), LookIn:=xlValues, LookAt:=xlWhole)
If Not Recherche Is Nothing Then
    ListBox2.AddItem
    ListBox2.List(ListBox2.ListCount - 1, 0) = Sheets("Listing des Articles").Range("C" & Recherche.Row)
    ListBox2.List(ListBox2.ListCount - 1, 1) = Sheets("Listing des Articles").Range("D" & Recherche.Row)
Else
    MsgBox "Le code n'a pas été trouvé"
End If
    TextBox3.Value = ""
    TextBox3.SetFocus 'Donne le focus a la textbox1
    End If
End Sub

Private Sub CommandButton3_Click()
 
Dim i As Integer
i = Sheets("Listing des Ventes").Range("A65535").End(xlUp).Row + 2
dteNow = Format(Now(), "dd mmm yyyy")
ClockNow = Format(Now(), "hh:mm")
For j = 0 To ListBox2.ListCount - 1
    Sheets("Listing des Ventes").Cells(i, 1).Value = dteNow
    Sheets("Listing des Ventes").Cells(i, 2).Value = ClockNow
    Sheets("Listing des Ventes").Cells(i, 3).Value = ListBox2.List(j, 0)
    Sheets("Listing des Ventes").Cells(i, 4).Value = CDbl(ListBox2.List(j, 1))
    i = i + 1
Next j
ListBox2.Clear
Label6.Caption = Format(vbNull - 1, "0.00")
TextBox2.Value = Format(CDbl(vbNull - 1), "0.00")
Label11.Caption = Format(vbNull - 1, "0.00")



End Sub
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 mars 2008 à 11:45
ah... VBA...

les controles sont dessinés et ne sont pas de vraies fenetres... chacun est obligé de preter le focus aux un et aux autres pour les redessiner, les faire réagir... (faites le test avec un Spy++)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 11:54
ce que je comprends pas c'est que lorsque le focus s'est mis sur le commandbutton, si j'appuie de nouveau sur 'enter', il lance la procédure du commandbutton (alors que logiquement elle se fait avec le click de souris...)

bizare!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 mars 2008 à 11:58
salut,
bon c'est un peu bidouille mais çà marche ^^

Private Sub ListBox1_Change()
    TextBox1.SetFocus
End Sub

ps : RenField, on obtient tout de même des handles valides avec GetFocus ;)
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 mars 2008 à 12:01
euh... c'est tout a fait normal ca ...

le Click se déclenche sur diverses actions

Enter (si bouton par défaut ou focus)
Espace (si focus)
Click souris
Alt + Lettre du raccourci  (exemple  "Sauvegarder &tout" ; ici Alt + T)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 mars 2008 à 12:06
oui, GetFocus... le controle actifest une vraie fenetre, mais une fois qu'il perds le focus, ca semble ne plus en etre une.

c'est pas clair cette histoire de controles, y'a un truc, je ne sais pas quoi, mais c'est louche... ca doit avec des raisons historiques, j'imagine...

a voir, surtout que ca doit etre mentionné a peu pres partout sur le web ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 12:11
Merci pour votre aide!

concernant le
Private Sub ListBox1_Change()
    TextBox1.SetFocus
End Sub
 
j'ai essayé mais ça ne change rien...  il se met toujours sur le bouton...
j'ai essayer de retirer ce commandbutton pour voir si c'est juste lui qui pose probleme, mais non, si je le retire le focus se place sur un autre commadbutton...

comprend pas!

je vais abandonner l'idée du focus je crois!
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 12:50
j'ai trouvé une solution (sais pas si c'est ce qu'il y a de mieux...)

je met la propriété tabstop de mes objets en false

vous y voyez un probleme de pratiquer de cette manière?

merci pour votre aide,

si vous me dite qu'il vaut mieux les laisser en 'true', je cogiterai pour jouer avec l'evenement 'exit'...
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
18 mars 2008 à 13:04
Pour perdre le focus, j' ai testé ceci:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Static compteur As Integer If compteur 3 Then MaBool True If MaBool False Then Cancel True
  compteur = compteur + 1
 
End Sub

Au 4 ième Enter, le focus passe au CommandButton.
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 13:06
Merci!!!!
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 13:10
Je prefere ne pas perdre le focus, en effet, je ne sais pas à l'avance combien d'articles vont être encodé...

Encore merci pour votre aide!
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
18 mars 2008 à 13:19
le compteur, et donc le fait de compter n' est qu' à exemple.
Tu peux choisir un autre ceritère.A toi de voir quand tu estimeras que la saisie estt terminée.

Bonne continuation.

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
fgazier Messages postés 7 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 14 avril 2009
14 avril 2009 à 19:11
Salut,

G galéré un bon petit moment car j'avais le meme pb, et j'ai fini pas trouver. Pour ceux qui songeait à un bug ... yen a pas ... C logique.

Donc le truc c juste de savoir qu'il n'est pas possible de passer le focus a qq1 qui la deja !!!

 Voila pkoi ca, ca marche !
Private Sub ListBox1_Change()
    TextBox1.SetFocus
End Sub

et pkoi ca, ca ne marche pas !

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   
    If KeyCode = vbKeyReturn Then
......
    TextBox3.Value = ""
    TextBox3.SetFocus 'Donne le focus a la textbox1 QUI LA DEJA DONC NEST PAS PRIS EN COMPTE !!!
    End If
End Sub
=> et par consequent passe le focus au lindice tab suivant à la sortie de levenement du controle.

Des fois que qq1 galere encore la dessus.

BYE
0
Rejoignez-nous