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

VBA Access Discussion :

Remplissage d'une ListBox avec des éléments d'un Recordset [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut Remplissage d'une ListBox avec des éléments d'un Recordset
    Bonsoir tout le monde,

    J'ai un petit problème que je n'arrive pas à résoudre pour définir les éléments d'une listbox à partir d'un recordset (qui est le résultat d'une requête Access).

    Je précise que j'utilise DAO. Le plus bizarre c'est que je remplis une listbox juste avant dans le même code (sans problème).
    Mais avec celle-ci, j'ai plein de blancs et une série de 1 pour finir (alors que je devrais obtenir une liste qui va de 1 à environ 160 par pas de 1). Le pire c'est que lorsque je regarde ce qui se passe en mode pas-à-pas, "CStr(rstCoursesList.Fields("course_id").Value)" (cf. ci-dessous) prend bien les valeurs que j'attends...mais ce n'est pas ce qui apparaît après dans la listbox!

    Voici le code incriminé, lors de l'initialisation du userform dans lequel se trouve ma listbox:

    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
     
    Private Sub UserForm_Initialize()
     
    Dim i As Long
    For i = 1 To 9
        lbxSections.AddItem (CStr(i))
    Next
     
    Do While Not rstCoursesList.EOF
     
        lbxCourses.AddItem (CStr(rstCoursesList.Fields("course_id").Value))
        rstCoursesList.MoveNext
     
    Loop
     
    End Sub
    Merci d'avance!

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Où est défini et surtout initialisé rstCoursesList ?

    Tu peux faire peurt-être plus simple en mettant directement le nom de la requête dans la source de ta liste. Access va charger les données sans aucune ligne de code.

    A+

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Où est défini et surtout initialisé rstCoursesList ?
    Alors pour préciser les choses, rstCoursesList est déclaré en "Public" dans le module d'où le code est extrait (c'est pas très "propre" mais je ne sais pas comment on fait pour passer un objet à la procédure d'initialisation d'un userform en VBA!):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Option Explicit
     
    Public rstCoursesList As Recordset
     
    Public sub main()
     
    ...
    Je débute avec les recordsets donc j'ai peut-être utilisé un mauvais type...toujours est-il que c'est initialisé comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'Instanciation d'une requête pour lister les courses
    Dim qdfEnumCourses As DAO.QueryDef, sqlString As String
        sqlString = "SELECT course_id " & _
                    "FROM " & rstSource.Name & _
                    " GROUP BY course_id;"
        Set qdfEnumCourses = myDB.CreateQueryDef("lister_courses", sqlString)
     
    'Récupértion du résulat de la requête dans un recordset
    Set rstCoursesList = myDB.OpenRecordset(qdfEnumCourses.Name, dbOpenForwardOnly, dbReadOnly)
    "myDB" étant défini comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Option Explicit
     
    Public myDB As DAO.Database
     
    Public Sub main()
     
    [...]
     
    Set myDB = DBEngine.OpenDatabase(myPath)
    Citation Envoyé par marot_r Voir le message
    Tu peux faire peurt-être plus simple en mettant directement le nom de la requête dans la source de ta liste. Access va charger les données sans aucune ligne de code.

    A+
    Par contre je ne connais pas du tout cette stratégie, donc si tu peux m'en dire un peu plus ou me dire ce qu'il faut que je demande à mon ami Google...


    Merci en tout cas!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Points : 251
    Points
    251
    Par défaut
    En fait ça fonctionne très bien...il s'agissait juste d'un problème d'affichage de la listbox. La prochaine fois je regarderai de plus près

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Tu peux faire peurt-être plus simple en mettant directement le nom de la requête dans la source de ta liste. Access va charger les données sans aucune ligne de code.
    2 façons :
    1. Créer une requête avec l'éditeur de requête.
      Definir la propriété Origine Source à Table/Requête
      Définir la propriété Contenu à NomDeTaRequete (ex : lister_courses)
    2. Definir la propriété Origine Source à Table/Requête
      Définir la propriété Contenu au SQL de ta requête (ex : select TaTable.* from TaTable).


    A+

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

Discussions similaires

  1. Simuler une listbox avec des couleurs
    Par Invité dans le forum Contribuez
    Réponses: 9
    Dernier message: 19/03/2020, 20h49
  2. Remplissage d'une feuille avec des références similaires.
    Par Potzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/06/2010, 10h51
  3. Réponses: 1
    Dernier message: 27/01/2010, 17h04
  4. Blend : Personnaliser une listbox avec des donneés bindées
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 29/03/2009, 09h17
  5. Où trouver une listbox avec des checkbox dedans ?
    Par zarbiman dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/09/2007, 08h59

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