cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 novembre 2013
-
18 mars 2008 à 11:14
fgazier
Messages postés7Date d'inscriptionsamedi 15 novembre 2003StatutMembreDernière intervention14 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...)
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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é)
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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)
cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 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")
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202171 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++)
cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 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...)
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201849 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
cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 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...
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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>
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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>
fgazier
Messages postés7Date d'inscriptionsamedi 15 novembre 2003StatutMembreDernière intervention14 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.