Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2011, 19h10   #1
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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 :
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!
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 19h22   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
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+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 00h14   #3
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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 :
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 :
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 :
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!
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 10h19   #4
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
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
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h40   #5
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Citation:
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+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h43.


 
 
 
 
Partenaires

Hébergement Web