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 listbox 3 colonnes depuis résultat requête [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Par défaut Remplir listbox 3 colonnes depuis résultat requête
    Bonjour à tous,

    Débutante en VBA excel, je sèche depuis pas mal de temps sur la manière de remplir une listbox à partir du résultat d'une requête SQL.
    J'ai besoin de 3 colonnes dans ma liste et je souhaite pouvoir récupérer la valeur de la première.

    Début de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set resultat = Database.OpenRecordset("SELECT * FROM clients", DAO.dbOpenSnapshot)
    ListBox1.ColumnCount = 3
    ListBox1.ColumnWidths = "10;80;80"
    If resultat.RecordCount > 0 Then
        resultat.MoveFirst
        i =1
        Do While resultat.EOF = False
            ListBox1.AddItem
            ListBox1.List(i, 0) = resultat!num_clt
            ListBox1.List(i, 1) = resultat!nom_clt
            ListBox1.List(i, 2) = resultat!prenom_clt
            i = i + 1
            resultat.MoveNext
       Loop
    Bien sur, ça ne fonctionne pas. Coté requête, tout va bien. C'est sur la partie ListBox1.List(i, 0) que ça bloque.
    Apres avoir regardé un tas de forums, je n'ai toujours pas trouvé la solution car j'ai du mal à comprendre le fonctionnement de cette listbox.

    Qui pourrait m'aider ?
    Avec mes remerciements.
    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par corinne24 Voir le message
    Bonjour,

    I doit démarrer à 0, de la même manière que vous avez démarré à 0 pour la colonne.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Par défaut Toujours pas bon
    Merci pour ce conseil que j'ai suivi à la lettre.
    Malheureusement, après avoir mis i à 0, j'ai un message d'erreur :
    "Impossible de définir la proprieté list. Le type ne corresponds pas".

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par corinne24 Voir le message
    Comment avez-vous déclaré la variable I ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Par défaut variable
    Citation Envoyé par Eric KERGRESSE Voir le message
    Comment avez-vous déclaré la variable I ?
    i est déclaré comme integer.
    J'ai aussi tenté le byte mais le résultat est le même.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par corinne24 Voir le message

    Si vous utilisez le code de Thumb down, l'incrémentation I = I+1 est mal placée. Il faut mettre cette ligne comme dans votre premier code.

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    voila ce que cela donnerait avec Ado et pas DAO!

    cet exemple est avec Excel quel type de base de données as tu?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ListBox1.ColumnCount = 3
    ListBox1.ColumnWidths = "10;80;80"
    With CreateObject("Adodb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0;HDR=YES'"
        Me.ListBox1.Column = .Execute("select * from [clients$]").getrows
        .Close
     End With

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    Bonjour,
    recordCount donnera toujours 0 sauf si tu fais un moveLast avant, mais dans ton cas c’est inutil vue que tu fais Do While resultat.EOF = False



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    i=0
    ListBox1.ColumnCount = 3 
    
    ListBox1.ColumnWidths = "10;80;80"
    Do While resultat.EOF = False
     i = i + 1         
    ListBox1.AddItem  resultat!num_clt         
    ListBox1.List(i, 2) = resultat!nom_clt         
    ListBox1.List(i, 3) = resultat!prenom_clt                
     resultat.MoveNext    
    Loop

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Par défaut suite
    Apres correction, toujours un probleme avec la propriété list.
    Maintenant l'erreur est "Impossible de definir la propriete list. Index de table de proprietes non valide".

  10. #10
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 575
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ListBox1.ColumnCount = 3
    ListBox1.ColumnWidths = "10;80;80"
    With CreateObject("Adodb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\MyRep\Access\Database1.accdb;Persist Security Info=False;'"
        Me.ListBox1.Column = .Execute("select * from [clients]").getrows
        .Close
     End With

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ListBox1.ColumnCount = 3
    ListBox1.ColumnWidths = "10;80;80"
    With CreateObject("Adodb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\MyRep\Access\Database1.accdb;Persist Security Info=False;'"
        Me.ListBox1.Column = .Execute("select * from [clients]").getrows
        .Close
     End With
    Ca fonctionne parfaitement !
    Un grand merci !

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,


    Exemple en ADO


    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
    Private Sub UserForm_Initialize()
      Dim rs As ADODB.Recordset
      Set cnn = New ADODB.Connection
      répertoire = ThisWorkbook.Path
      fichier = "Article3.xls"
      cnn.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & répertoire & "\" & fichier & ";HDR=Yes';"
      Set rs = cnn.Execute("SELECT DISTINCT designation FROM BD WHERE designation<>'' ORDER BY designation")
      a = Application.Transpose(rs.GetRows)
      Me.ComboBox1.List = a
    End Sub
    Private Sub ComboBox1_Change()
      Dim rs As ADODB.Recordset
      Set cnn = New ADODB.Connection
      répertoire = ThisWorkbook.Path
      moncode = Me.ComboBox1
      fichier = "Article3.xls"
      cnn.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & répertoire & "\" & fichier & ";HDR=Yes';"
      Set rs = cnn.Execute("SELECT * FROM BD WHERE designation='" & moncode & "'")
      Me.ListBox1.Clear
      i = 0
      Do While Not rs.EOF
            Me.ListBox1.AddItem rs(0)
            Me.ListBox1.List(i, 1) = rs(1)
            Me.ListBox1.List(i, 2) = rs(2)
            rs.MoveNext
            i = i + 1
       Loop
       cnn.Close
       Set rs = Nothing
       Set cnn = Nothing
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [AC-2010] Remplir des champs étiquettes depuis une requete
    Par Gautch dans le forum IHM
    Réponses: 5
    Dernier message: 21/03/2014, 09h36
  2. [AC-2003] Remplir listBox 2 colonnes
    Par tarnx dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/06/2010, 14h48
  3. [JTable] Remplir depuis une requete sql
    Par icicmoi dans le forum Composants
    Réponses: 2
    Dernier message: 11/08/2008, 00h49
  4. Vérifier si colonne nulle dans résultat requete
    Par ouiskie dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/03/2007, 07h45
  5. Afficher résultat requete dans Excel depuis Access.
    Par nighthawksf117a dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 23h18

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