Utilisation de la touche entrée dans un comboBox

NykoKurapika Messages postés 37 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 10 janvier 2008 - 22 févr. 2005 à 16:05
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 - 23 févr. 2005 à 16:57
Salut !
Je cherche coment faire pour que la touche Entrée valide la sélection trouvée en tapant quelque lettres sans utiliser la fleche pour obtenir le menu déroulant ou l'on clique habituellement !

mon code pour l'instant à cette tête là !

Code:,
----

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Private Const CB_FINDSTRING = &H14C

Private Type aide
qst As String
End Type
Dim Taide(1 To 20) As aide

Dim Trouve As Long
Dim Position As Integer
Dim Taille As Integer
Dim strTemp As String
Dim i, z, p

'-----------------------------------------------------------------------------------

Private Sub Form_Load()
' ajout de donnée dans le combo
Combo1.AddItem "Afficher une personne répertoriée"
Combo1.AddItem "Ajouter une nouvelle personne"
Combo1.AddItem "Modifier une personne"
Combo1.AddItem "Supprimer une personne"
Taide(1).qst = "Toto"
Taide(2).qst = "momo"
Taide(3).qst = "gfndvf"
Taide(4).qst = "dgbgb"
p = 4
End Sub

'----------------------------------------------------------------------------------

Private Sub Combo1_Click()
For i = 0 To p
z = (i + 1)
If (Combo1.ListIndex = i) Then
Label1.Caption = Taide(z).qst
End If
Next i
End Sub

'-------------------------------------------------------------------------------

'Tout le reste du code se situe dans la procédure de l'événement KeyPress, qui a lieu chaque fois qu'un caractère est entré :
Private Sub Combo1_KeyPress(KeyAscii As Integer)

With Me.Combo1
If KeyAscii = 8 Then
If .SelStart = 0 Then Exit Sub
.SelStart = .SelStart - 1
.SelText = ""
Else
Position = .SelStart
strTemp = .Text
End If
.SelText = Chr(KeyAscii)
Trouve = SendMessage(.hwnd, CB_FINDSTRING, 0, ByVal .Text)
If Trouve = -1 Then
'les trois lignes suivantes doivent être enlevées en cas de non correspondance possible
.Text = strTemp
.SelStart = Position
.SelLength = (Len(.Text) - Position)
KeyAscii = 0
Exit Sub
Else
Position = .SelStart
Taille = Len(.List(Trouve)) - Len(.Text)
.SelText = .SelText & Right(.List(Trouve), Taille)
.SelStart = Position
.SelLength = Taille
KeyAscii = 0
End If
End With

End Sub
'

Voilà, si quelqun pouvait me débloquer se serait génial !

11 réponses

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
22 févr. 2005 à 16:51
Bon alors j'ai pas vraiment lu ton code (j'ai la flemme lol) mais voilà ce que moi je ferais :

Private Sub Combo1_KeyPress(KeyAscii As Integer)

dim s as string
dim i as integer
i = 0
sel = vbnullstring

sel = combo1.text

' Ensuite, on parcours tout les éléments :
for i = 0 to combo1.count -1
if left(combo1.list(i), len(sel)) = sel then

' On a donc une correspondance, il suffit de séléctionner le ligne :
combo1.listindex = i

' On quitte la boucle :
exit sub

end if
next

End Sub

En éspérant qu'il n' y est pas de bugs...

Bonne prog, @+, Scalpweb
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
22 févr. 2005 à 17:07
Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)

'Saisie semie-automatique
If KeyCode = vbKeyBack Then Exit
Sub
Dim inc1 As
Integer
Wcount = Len(Combo1.Text)
If Combo1.Text = "" Then Exit
Sub
For inc1 = 0 To Combo1.ListCount - 1
If LCase(Combo1.Text) = LCase (Left(Combo1.List(inc1), Wcount))
Then
Combo1.Text = Combo1.Text & Mid(Combo1.List(inc1), Combo1.SelStart + 1)
Combo1.SelStart = Wcount
Combo1.SelLength = Len(Combo1.Text)
Exit
For
End
If
Next inc1
End Sub

It@li@
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
22 févr. 2005 à 19:58
Salut, je ne sais pas si j'ai bien compris ta question. Si c'est pour se positionner automatiquement sur un item d'une combobox ou d'une listbox, j'ai posté une réponse dernièrement dans le forum :

http://www.vbfrance.com/forum.v2.aspx?ID=394039

L'exemple est pour une listbox mais tu peux facilement l'adapter pour une combo.

Pour la gestion de la touche entrée, dans le keypress c'est
If KeyAscii =13 then ....
dans le keyup c'estif keycode vbreturn or keycode vbkeyseparator then ...

Loup Gris
0
NykoKurapika Messages postés 37 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 10 janvier 2008
22 févr. 2005 à 20:01
Désoler j'ai essayer toute vos proposition mais elle ne marche pas ! où tout simplement comme je débute encore un peut avec VB, JE n'est pas réussit à les faires marchées !

Je me demandais si avec ce code ca pourrait marcher mais je ne sais pas comment faire pour que la touche Entrée affiche dan le label le contenue de la variable correspondant à ligne subissant l'action de validation (Entrée !)
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn The
End If
End Sub

Merci déjà pour votre aide !
En espérant que vous continurrez à m'aider !!

Nico
0

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

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
22 févr. 2005 à 20:11
If KeyCode = vbKeyReturn Then
TonLabel.caption = tacombo.text 'ou tacombo.list(tacombo.listindex)
End If

Loup Gris
0
cqui789 Messages postés 261 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 18 mai 2009 3
22 févr. 2005 à 20:18
J'ai comme l'impression que tu te complique la vie, les 3 lignes
suivantes peuvent remplacer les 8 que tu as ecrit, j'ai pas encore lu
la suite mais apparement c'est le meme probleme:



Private Sub Combo1_Click()

Label1.Caption = Taide(Combo1.ListIndex + 1).qst



End Sub
0
NykoKurapika Messages postés 37 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 10 janvier 2008
22 févr. 2005 à 21:07
Oui c'est tout aussi simple !! Merci pour le tuyau ! (moi qui ais passé une demie heure là dessus ! Alala !)

Nico !

Sinon je planche encore sur le ce fichut Entrée !
0
NykoKurapika Messages postés 37 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 10 janvier 2008
22 févr. 2005 à 23:23
C'est bon j'ai enfin trouver !!!

C'est Grâce à toute vos Informations et celles de Gobillot que j'y sui arrivé !

Merci à tous !

Voici les différent codes !


L'une ou l'autre son bonne ! à vous de choisir !
Il faut metre Trouve = -1 dans FormLaud !

Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Label1.Caption = Taide(Trouve + 1).qst
End If
End Sub

--------------------------------------------------------------------------------------------------------

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
If Trouve > -1 Then
Label1.Caption = Taide(Trouve + 1).qst
End If
End If
End Sub

Voilà !! Encore Merci à tous !
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
23 févr. 2005 à 16:38
Ah ben ça y'est, j'ais enfin compris ce que tu veux ('fin je crois)... Bon, alors voilà ce que moi je ferais :

Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
'Si Touche Delete, on quitte :

If KeyCode = vbKeyBack Then Exit
Sub

Dim nbW as Integer

Dim i As Integer

nbW = Len(Combo1.Text)

'Si vide, on quitte :
If Combo1.Text = "" Then Exit
Sub

'Si on appuye sur la touche entrée :
If keycode = vbKeyReturn then

For i = 0 To Combo1.ListCount - 1

If UCase(Combo1.Text) = UCase(Left(Combo1.List(i), nbW)) Then

Combo1.Text = Combo1.Text & Mid(Combo1.List(i), Combo1.SelStart + 1)
Combo1.SelStart = nbW
Combo1.SelLength = Len(Combo1.Text)
Exit
For

End
If

Next i

End If

End Sub

Voilà, donc j'ai repris un peu du code d'ITALIA, et un peu du miens, et voilà ce que ça donne...

Bonne prog, @+, Scalpweb
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
23 févr. 2005 à 16:40
Oulà, bon ben j'avais peut-être rien compris alors en fait... Tant mieux pour toi si tu as trouvé.

Scalpweb
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
23 févr. 2005 à 16:57
Moi non plus !!!

It@li@
0
Rejoignez-nous