Le setfocus ne fonctionne pas... [Résolu]

cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 11:14 - Dernière réponse : fgazier 7 Messages postés samedi 15 novembre 2003Date d'inscription 14 avril 2009 Dernière intervention
- 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...)
Afficher la suite 

22 réponses

Répondre au sujet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 mars 2008 à 12:18
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 18 mars 2008 à 12:24
+3
Utile
çà 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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 18 mars 2008 à 12:57
+3
Utile
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>
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de LIBRE_MAX
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 18 mars 2008 à 11:27
0
Utile
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)
Commenter la réponse de cs_Jack
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 mars 2008 à 11:31
0
Utile
ou as tu mis le SetFocus ? montres nous ton code

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 mars 2008 à 11:33
0
Utile
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
Commenter la réponse de jrivet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 18 mars 2008 à 11:35
0
Utile
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
Commenter la réponse de jrivet
cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 11:39
0
Utile
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
Commenter la réponse de cs_Fabian123
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 mars 2008 à 11:45
0
Utile
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
Commenter la réponse de Renfield
cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 11:54
0
Utile
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!
Commenter la réponse de cs_Fabian123
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 18 mars 2008 à 11:58
0
Utile
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
Commenter la réponse de PCPT
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 mars 2008 à 12:01
0
Utile
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
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 18 mars 2008 à 12:06
0
Utile
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
Commenter la réponse de Renfield
cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 12:11
0
Utile
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!
Commenter la réponse de cs_Fabian123
cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 12:50
0
Utile
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'...
Commenter la réponse de cs_Fabian123
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 18 mars 2008 à 13:04
0
Utile
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>
Commenter la réponse de LIBRE_MAX
cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 13:06
0
Utile
Merci!!!!
Commenter la réponse de cs_Fabian123
cs_Fabian123 180 Messages postés vendredi 18 janvier 2008Date d'inscription 22 novembre 2013 Dernière intervention - 18 mars 2008 à 13:10
0
Utile
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!
Commenter la réponse de cs_Fabian123
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 18 mars 2008 à 13:19
0
Utile
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>
Commenter la réponse de LIBRE_MAX
fgazier 7 Messages postés samedi 15 novembre 2003Date d'inscription 14 avril 2009 Dernière intervention - 14 avril 2009 à 19:11
0
Utile
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
Commenter la réponse de fgazier

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

le setfocus ne fonctionne pas... - page 2