NykoKurapika
Messages postés37Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention10 janvier 2008
-
22 févr. 2005 à 16:05
cs_ITALIA
Messages postés2169Date d'inscriptionvendredi 20 avril 2001StatutMembreDernière intervention30 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
'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 !
'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
IfLCase(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
EndSub
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 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 :
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 ...
NykoKurapika
Messages postés37Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention10 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cqui789
Messages postés261Date d'inscriptionjeudi 13 janvier 2005StatutMembreDernière intervention18 mai 20093 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_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