Remplissage d'une combo box au fur et à mesure d'une saisie de texte

cs_manueg Messages postés 13 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 30 octobre 2002 - 8 janv. 2002 à 09:15
sperot51 Messages postés 2 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 13 juin 2007 - 8 déc. 2003 à 16:23
Bonjour,

J'ai une combo box que j'initialise à partir de valeurs issues d'une BD

L'utilisateur saisie du texte dans cette combo, l'objectif est que au fur et à mesure de sa saisie
on lui complète la fin par ce qui est trouvé en base...

exemple : je recherche toto en base
Je tape "t" et s'affiche alors "tata" dans combo
je tape "t"(déjà fait) et "o" s'affiche "tonton"
je tape "t" et "o" et "t" s'affiche alors "toto"

Merci de votre aide

7 réponses

cs_oliver68 Messages postés 117 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 10 mars 2003
8 janv. 2002 à 09:38
ben si ta combo se trie toute seule (option sort ou un truc comme ça) ça doit se faire non ?
0
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
8 janv. 2002 à 09:42
J'ai pas vérifier mais voila l'idée de base :

Private Sub Combo1_Change()
     Dim i As Long
     Dim sel As Long
     Dim trouv As Boolean
     
     For i = 0 To Combo1.ListCount - 1
        sel = Len(Combo1.Text)
        If (StrComp(Left$(Combo1.List(i), sel), Combo1.Text, vbTextCompare) = 0) Then
            Combo1.ListIndex = i
            Combo1.SelStart = sel
            Combo1.SelLength = Len(Combo1.Text) - sel
            Exit For
        End If
    Next i
End Sub


Si t'as un pb mail moi j'y regarderai

A++
Hervé
0
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
8 janv. 2002 à 09:45
Non c'est sous Access que ça le fait.

A++
Hervé
0
cs_oliver68 Messages postés 117 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 10 mars 2003
8 janv. 2002 à 10:57
Ah bon ça passe pas en VB ? Je sais qu'en VBA c'est OK. Je croyais que...
Autant pour moi alors !
@+
0

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

Posez votre question
cs_manueg Messages postés 13 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 30 octobre 2002
8 janv. 2002 à 14:39
Bonjour et merci

c'est exactement le résultat que j'escomptais, donc tout baigne....

encore merci
0
cs_asd Messages postés 32 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 5 novembre 2003
9 janv. 2002 à 17:08
Salut,

J'ai résolu le problème sous VB en 2 étapes :

1/ Lorsque tu initialises ton combo avec tes données, tu rajoutes dans le tag l'information sur laquelle tu feras ta recherche. Dans l'exemple, c'est sur le nom de l'imprimante :
'Init du combo
Dim sSqlPrinters As String
Dim CboPrinters As ComboItem
Dim lngCpt As Long

lngCpt = 1sSqlPrinters "SELECT * FROM PRINTERS WHERE PRINTERS.BOODELETE 0 ORDER BY PRINTERS.NOMPRINTERS;"
Set rsPRINTERS = New ADODB.Recordset
rsPRINTERS.Open sSqlPrinters, cnx, adOpenForwardOnly, adLockReadOnly
ImgCboPrinters.ComboItems.Clear
Do While Not rsPRINTERS.EOF
Set CboPrinters = ImgCboPrinters.ComboItems.Add(, "P" & rsPRINTERS("IPRINTERS"), rsPRINTERS("NOMPRINTERS"))
ImgCboPrinters.ComboItems.Item(lngCpt).Tag = rsPRINTERS("NOMPRINTERS")
lngCpt = lngCpt + 1
rsPRINTERS.MoveNext
Loop
If rsPRINTERS.State = 1 Then rsPRINTERS.Close
'================================

2/Ensuite, sur le "KeyUp" de ton combo(important de le mettre sur le KeyUp, sinon il a toujours une lettre de retard si tu utilises le "KeyPress"), tu rajoutes le code suivant qui fait appel à une fonction(dans mon cas, c'est ce que j'ai fais car je m'en sert une dizaine de fois!) où tu passes en paramètres le texte saisi et le nom de ton form

'======================
Private Sub ImgCboPrinters_KeyUp(KeyCode As Integer, Shift As Integer)
CherchePrinters ImgCboPrinters.Text, FICHECOPIESPRINT
End Sub
'=======================

Et voici la fonction miracle :

'=======================
Public Function CherchePrinters(strCleRecherche As String, frmNomForm As Form)
Dim lngCle As Long
Dim lngCpt As Long
Dim lngNb As Long
Dim CboPrinters As ComboItem

lngCpt = 1
For Each CboPrinters In frmNomForm.ImgCboPrinters.ComboItems
lngNb = Len(strCleRecherche)
If Mid(frmNomForm.ImgCboPrinters.ComboItems.Item(lngCpt).Tag, 1, lngNb) = strCleRecherche Then
lngCle = Mid(CboPrinters.Key, 2)
Set frmNomForm.ImgCboPrinters.SelectedItem = frmNomForm.ImgCboPrinters.ComboItems("P" & lngCle)
frmNomForm.ImgCboPrinters.SelStart = lngNb
frmNomForm.ImgCboPrinters.SelLength = Len(frmNomForm.ImgCboPrinters.Text) - lngNb
Exit For
End If
lngCpt = lngCpt + 1
Next

End Function
'===================

Mail-moi si tu as besoin, ou si tu as mieux, mais en tout cas çà marche!

A+
0
sperot51 Messages postés 2 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 13 juin 2007
8 déc. 2003 à 16:23
moi personnelement j'ai fait plus simple
le test se fait sur les elements du combo (en 3 lignes)
si la lettre tapée n'amene pas sur un element du combobox la frappe est anulé sinon ca ecrit le 1er dispo avec selection de la fin du mot au fur et a mesure (selection de moins en moins grande) et le tout avec un simple combobox

si ca interresse qqn mailez moi
0
Rejoignez-nous