IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

remplir une combobox depuis un recordset


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Par défaut remplir une combobox depuis un recordset
    Bonjour,

    J'essai de remplir une combobox avec un recordset. J'ai ma base de donnée avec une table comme ceci :

    idOperation1 nom1 prenom1
    idOperation2 nom2 prenom2
    idOperation3 nom3 prenom3

    J'ai besoin d'afficher dans la combobox : "nom1 prenom1", "nom2 prenom2", "nom3 prenom3" ...

    Ca ne pose pas de problème avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    requetteSQL = "SELECT idOperateur,nom,prenom " _
    & " FROM operateur;"
     
    rst.Open requetteSQL, conn
     
     
    While Not rst.EOF
     
        Me.ComboBox2.AddItem (rst.Fields("nom") & " " & rst.Fields("prenom"))
     
        rst.MoveNext
     
     
    Wend
     
    rst.Close
    Mais si je selection "nom2 prenom2" et que je clic ensuite sur un boutton, ou qu'il se produit n'importe quelle autre evenement, j'aimerai y associer "idOperation2". idOperation est ma clé primaire.

    Comment puis-je faire quelque chose de ce type svp ? Je ne veux pas faire de la concaténation ou utiliser un tableau sur ma feuille. Je suis sûr qu'il existe une solution propre.

    Merci de vos éclairages !

  2. #2
    Membre éprouvé Avatar de zebulon2212
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    met une autre combobox avec la propriété visible à false a coter de la premiere
    tu la rempli en meme temps que la premiere mais uniquement avec idOperation.
    ensuite tu te sert de combobox1.listindex pour recuperer l'idoperation correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox2.List(ComboBox1.ListIndex)

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Tu peux utiliser une combobox multicolonne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    With ComboBox1  'Remplir la liste
        .ColumnCount = 2
        .AddItem 1
        .List(0, 1) = "Nom1"
        .AddItem 2
        .List(1, 1) = "Nom2"
        .BoundColumn = 2        'Defini la 2eme colonne comme source de Value
        .ColumnWidths = "0;"    'Masque la 1ere colonne
    End With
     
    With ComboBox1  'Lire la liste
        MsgBox .List(.ListIndex, 0) 'Renvoie la cle (1ere colonne)
        MsgBox .Value               'Renvoie la valeur affichée
    End With
    Cordialement,

    Tirex28/

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Par défaut
    Merci l'affectation marche. Mais pour récuperer ensuite les valeurs, j'obtiens l'erreur suivante : 'Impossible de lire la propriété list. Index de table de propriété non valide.'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    requetteSQL = "SELECT idOperateur,nom,prenom " _
    & " FROM operateur;"
     
    rst.Open requetteSQL, conn
     
    i = 0
    'Dim tableau As Variant
    'tableau = rst.GetRows
    ComboBox2.ColumnCount = 2
    ComboBox2.BoundColumn = 2
     
    While Not rst.EOF
     
     
        With ComboBox2  'Remplir la liste
            .AddItem (rst.Fields("nom") & " " & rst.Fields("prenom"))
            .list(i, 1) = rst.Fields("idOperateur")
            .BoundColumn = 2        'Defini la 2eme colonne comme source de Value
            .ColumnWidths = ";0"    'Masque la 2ème colonne
         End With
     
        rst.MoveNext
        i = i + 1
     
    Wend
     
    rst.Close
     
    With ComboBox2  'Lire la liste
        MsgBox .list(.ListIndex, 1) 'Renvoie la cle (1ere colonne)
        MsgBox .Value               'Renvoie la valeur affichée
    End With


    Je ne comprends pas trop comment récuperer la valeur associé à l'affichage de ma ComboBox2. J'ai essayé de placer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       MsgBox .list(.ListIndex, 1) 'Renvoie la cle (1ere colonne)
        MsgBox .Value               'Renvoie la valeur affichée
    dans ComboBox2_Change () (pour avoir sélectionné une ligne précise avant), mais je ne peux toujours pas afficher le couple clé/valeur.

    Je ne comprends pas non plus la documentation d'Excel sur .List et .ListIndex. Ces méthodes sont associés à ComboBox2, MsgBox peut les utiliser comme cela ? Je ne trouve pas le doc d'Excel très clair sur ce sujet.

    Merci encore !

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Re,

    Comme ca tu gagneras du temps:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        With ComboBox2
            .ColumnCount = 2
            .BoundColumn = 2
            .ColumnWidths = ";0"    'Masque la 2ème colonne
            While Not rst.EOF
                .AddItem (rst.Fields("nom") & " " & rst.Fields("prenom"))
                .List(i, 1) = rst.Fields("idOperateur")
                rst.MoveNext
                i = i + 1
            Wend
        End With

    Je ne comprends pas trop comment récuperer la valeur associé à l'affichage de ma ComboBox2
    Il n'y a pas grand chose a comprendre si ce n'est que List compte les lignes et les colonnes a partir de zero, ListIndex les lignes a partir de zero mais renvoie -1 si aucune ligne n'est selectionne, alors que Listcount compte les lignes a partir de 1. Apres on se bat un peu avec les indices avant de finir par y arriver.

    Essaye d'ajouter ceci dans ton evenement change:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .ListIndex = -1 Then Exit Sub
    Bon courage,

    Tirex28/

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Par défaut
    Super ça marche !

    effectivement, il n'y avait pas trop à se casser la tête. J'ai fais plus simple dans un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
     
    If Not IsNull(saisi.ComboBox2.Value) Then
        MsgBox saisi.ComboBox2.Value
    End If
     
     
    End Sub

    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir une ComboBox depuis Sql Server
    Par Jinkas dans le forum Windows Forms
    Réponses: 30
    Dernier message: 20/06/2013, 13h01
  2. Remplir une [Combobox] avec un [recordset] [ADODB]
    Par LaMontagne dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/09/2008, 13h57
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo