Ouverture automatique d'un combobox

Bonjour à tous,

Meilleurs voeux à tout nos chers contributeurs et à toute l'équipe

Je cherche un moyen d'afficher une liste de choix dans un controle, à priori un combobox, qui serait chargé par les éléments d'une table access recueillis par DAO sur une fraction de texte

xx = Me.ComboBox1.Value 'saisie partielle de l'utilisateur, par exemple il cherche la valeur "SAINT EUSTACHE", il a saisi "EUST"
Set rs = dtb.OpenRecordset("select * from T_MARQUES order by num")
Do While Not rs.EOF
zz = rs!marque 'champ de la table Access qui contient entre autre la valeur SAINT EUSTACHE
y = InStr(zz, xx)
If y > 0 Then
Me.ComboBox1.AddItem rs!num & " " & rs!marque
End If
rs.MoveNext
Loop
rs.Close

Je voudrais donc déployer le combobox pour que l'utilisateur puisse selectionner SAINT EUSTACHE parmi les retours de la requete sans avoir a developper le combo avec le petit triangle.

J'espère que la question est claire, merci par avance

Bonjour,

La méthode "DropDown" ouvre la liste, la propriété "ListRows" défini le nombre de lignes visible dans la liste :

Private Sub CommandButton1_Click()

Dim I As Integer

    With ComboBox1

        For I = 1 To 20

            .AddItem I

        Next I

        .ListRows = I
        .DropDown

    End With

End Sub

Hervé.

Bonjour Hervé.

Merci pour ta réponse, cela fonctionne très bien, le combo s'ouvre avec la procédure "ComboBox1_Change()"

Par contre, l'utilisateur ne peut pas sélectionner d'item, il n'a pas "la main"

Cela ne fonctionne pas avec la procédure "Sub ComboBox1_AfterUpdate"

Sub ComboBox1_AfterUpdate()
'End Sub
'Sub ComboBox1_Change()
If Me.ComboBox1.Value = "" Then Exit Sub
Dim dtb As Database
Dim rz As Recordset
fic = "\\a203psb101\BDD\esperanto"
Set dtb = OpenDatabase(fic & "\dtb_esperanto.mdb", False, False, "MS ACCESS;PWD=euro")
    Me.ComboBox1.Clear
    'me.ComboBox1.d
    xx = Me.ComboBox1.Value
    Set rs = dtb.OpenRecordset("select * from T_MARQUES order by num")
        Do While Not rs.EOF
            zz = rs!marque
                y = InStr(zz, xx)
            If y > 0 Then
                Me.ComboBox1.AddItem rs!num & "   " & rs!marque
            End If
        rs.MoveNext
    Loop
    Me.ComboBox1.DropDown
rs.Close
End Sub

Merci beaucoup

Stanislas

Et avec une ListBox ?

Hervé.

Oui, j'ai essayé aussi, en créer un à la volée, mais je n'ai pas trouvé le code.

Si je le créé en "dur", j'ai un pb de focus:

quand l'événement "_Change" du TextBox principal ouvre le ListBox secondaire en non modal, le curseur ne se repositionne pas sur la saisie partielle.. Il faut recliquer dessus pour ajouter une nouvelle lettre.

Merci pour ton interet.

Stanislas

Je n'utilise pas DAO mais ADO et je viens de faire un essai sur une base de données Access avec la procédure évènementielle "Change" du ComboBox et une fois la liste remplie et ouverte, je peux sélectionner une valeur mais et il y a un "Mais", il te faut utiliser un drapeau afin d'empêcher l'exécution de la proc qui est relancée au moment du choix dans la liste et c'est pour cette raison que tu n'as pas la main.

Je n'ai pas pus tester ce que je poste mais en gros, la proc popule la combobox seulement si il y a moins de 4 caractères de saisie dans le champ. Il te faut adapter dans le cas où il risque d'y avoir des valeurs dans la listes qui peuvent être égales à 3 caractères ou même moins. Ceci évite la relance de la proc sur un choix dans la liste :

'en tête de module
Dim Rempli As Boolean

Sub ComboBox1_Change()

    Dim dtb As Database
    Dim rz As Recordset
    Dim fic As String

    If Me.ComboBox1.Text = "" Then Exit Sub

    'remet à False seulement si il n'y a pas plus de 3 caractères de saisie, à adapter et tester...
    If Len(Me.ComboBox1.Text) <= 3 Then Rempli = False

    'si le combobox n'a pas encore été rempli, autorise son populage
    If Rempli = False Then

        fic = "\\a203psb101\BDD\esperanto"

        Set dtb = OpenDatabase(fic & "\dtb_esperanto.mdb", False, False, "MS ACCESS;PWD=euro")

            Me.ComboBox1.Clear
            'en utilisant >WHERE marque LIKE '" & ComboBox1.Text & "%'< seuls les champs correspondant seront retournés mais
            'à tester car je ne connais pas bien DAO
            Set Rs = dtb.OpenRecordset("SELECT * FROM T_MARQUES WHERE marque LIKE '" & ComboBox1.Text & "%' ORDER BY num")

                Do While Not Rs.EOF

                    Me.ComboBox1.AddItem Rs!num & "   " & Rs!marque

                    Rs.MoveNext

                Loop

        Rs.Close

        Me.ComboBox1.DropDown

        'une fois la liste récupérée, interdit un second populage
        Rempli = True

    End If

End Sub

Hervé.

çà y est...

je comprend pourquoi tu as toutes ces étoiles sur ton profil..

A une ou deux adaptations prés, c'est exactement ce que je voulais obtenir, respect!...

Merci beaucoup, et pour le temps que tu as pris, et pour ton expérience dont j'ai pu profiter.

Aussi amicalement que respectueusement,

Stanislas.

Hou là, j'ai les chevilles qui enflent !

Heureux d'avoir pu te rendre service et bonne continuation.

Hervé.

Rechercher des sujets similaires à "ouverture automatique combobox"