Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Alimenter Listbox avec Recordset

5 réponses
Avatar
Laurent C
Bonjour à tous,
Je dois alimenter une Listbox d'un formulaire excel avec des infos situées
sur une base Access.
Je récupère ces infos via DAO dans un Recordset.
Je voudrais éviter d'alimenter cette Listbox par un traditionnel Additem,
j'ai en effet un nombre considérable d'enregistrements à récupérer
Existerait-il une manip qui permettrait de récupérer en une "seule passe"
l'intégralité du Recordset dans la Listbox ?
Merci pour votre contribution
Laurent

5 réponses

Avatar
AV
Existerait-il une manip qui permettrait de récupérer en une "seule passe"
l'intégralité du Recordset dans la Listbox ?


Une plage dans une feuille et la propriété "rowsource" de la ListBox, ça devrait
être rapide ??

AV

Avatar
michdenis
Bonjour Laurent,

la méthode la plus rapide serait avec ADO selon moi.


Voici un exemple à partir de la base de données "Comptoir.mdb"
disponible sur le CD installation.

Cet exemple initialise un combobox avec les entrées d'un champ "Société"
de la table "fournisseurs"

Les données de ton combobox ne contiendront pas de doublons et elles
seront classées par ordre alphabétique.

Tu dois ajouter à ton projet excel la référence suivante :

"Microsoft activex data objects 2.0 librairy"

'.--------------------------------
Sub InitialerUnCombobox()

Dim C As Integer
Dim cnt As New ADODB.Connection, Rst As New ADODB.Recordset
Dim A As Variant, BaseAccess, Requete1 As String

'Chemin et Base de données. Comptoir.mdb fait parti
'des bases de données exemple que l'on retrouve
'sur le CD d'installation

BaseAccess = ThisWorkbook.Path & "" & "Comptoir.mdb"

requete1 = "SELECT Fournisseurs.Société " & _
"FROM Fournisseurs " & _
"GROUP BY Fournisseurs.Société;"

'Création d'une connection avec la base de données.
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & BaseAccess

'Ouverture du recordset (exécution de la requête)
Rst.Open requete1, cnt, adOpenKeyset

A = Rst.GetRows
UserForm1.ComboBox1.List = Application.Transpose(A)

'Fermeture de la connection entre excel et la base de données
cnt.Close

'Libération de l'espace mémoire occupé par les objets
Set Rst = Nothing: Set cnt = Nothing

End Sub
'.--------------------------------


Avec DAO, tu peux utiliser ce type de boucle

Bibliothèque à ajouter :
Barre des menus / Outils/références Microsoft DAO 3.xx

En supposant que Rst est ton recordset

Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop


Si tu as plusieurs champs dans ton recordset, la propriété "List"
du combobox peut aussi être utilisé.


Salutations!



"Laurent C" a écrit dans le message de news:%23vAcF$
Bonjour à tous,
Je dois alimenter une Listbox d'un formulaire excel avec des infos situées
sur une base Access.
Je récupère ces infos via DAO dans un Recordset.
Je voudrais éviter d'alimenter cette Listbox par un traditionnel Additem,
j'ai en effet un nombre considérable d'enregistrements à récupérer
Existerait-il une manip qui permettrait de récupérer en une "seule passe"
l'intégralité du Recordset dans la Listbox ?
Merci pour votre contribution
Laurent
Avatar
Laurent C
Salut AV,

Pas si la plage à intégrer dépasse 65536 lignes.

Cordialement,

Laurent



"AV" a écrit dans le message de
news:bl3jsk$206$
Existerait-il une manip qui permettrait de récupérer en une "seule
passe"


l'intégralité du Recordset dans la Listbox ?


Une plage dans une feuille et la propriété "rowsource" de la ListBox, ça
devrait

être rapide ??

AV






Avatar
Laurent C
Bonsoir "michdenis"

Effectivement, celà marche très bien dans les 2 cas.

En fait, j'essayais de faire en DAO ce que tu proposes en ADO, et
effectivement, seul un recordset constitué en ADO peut être incorporé à une
liste. Sinon, il faut procéder par additem.

Merci beaucoup pour ton éclairage

Cordialement,
Laurent


"michdenis" a écrit dans le message de
news:
Bonjour Laurent,

la méthode la plus rapide serait avec ADO selon moi.


Voici un exemple à partir de la base de données "Comptoir.mdb"
disponible sur le CD installation.

Cet exemple initialise un combobox avec les entrées d'un champ "Société"
de la table "fournisseurs"

Les données de ton combobox ne contiendront pas de doublons et elles
seront classées par ordre alphabétique.

Tu dois ajouter à ton projet excel la référence suivante :

"Microsoft activex data objects 2.0 librairy"

'.--------------------------------
Sub InitialerUnCombobox()

Dim C As Integer
Dim cnt As New ADODB.Connection, Rst As New ADODB.Recordset
Dim A As Variant, BaseAccess, Requete1 As String

'Chemin et Base de données. Comptoir.mdb fait parti
'des bases de données exemple que l'on retrouve
'sur le CD d'installation

BaseAccess = ThisWorkbook.Path & "" & "Comptoir.mdb"

requete1 = "SELECT Fournisseurs.Société " & _
"FROM Fournisseurs " & _
"GROUP BY Fournisseurs.Société;"

'Création d'une connection avec la base de données.
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & BaseAccess

'Ouverture du recordset (exécution de la requête)
Rst.Open requete1, cnt, adOpenKeyset

A = Rst.GetRows
UserForm1.ComboBox1.List = Application.Transpose(A)

'Fermeture de la connection entre excel et la base de données
cnt.Close

'Libération de l'espace mémoire occupé par les objets
Set Rst = Nothing: Set cnt = Nothing

End Sub
'.--------------------------------


Avec DAO, tu peux utiliser ce type de boucle

Bibliothèque à ajouter :
Barre des menus / Outils/références Microsoft DAO 3.xx

En supposant que Rst est ton recordset

Do Until Rst.EOF
Me.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop


Si tu as plusieurs champs dans ton recordset, la propriété "List"
du combobox peut aussi être utilisé.


Salutations!



"Laurent C" a écrit dans le message de
news:%23vAcF$

Bonjour à tous,
Je dois alimenter une Listbox d'un formulaire excel avec des infos situées
sur une base Access.
Je récupère ces infos via DAO dans un Recordset.
Je voudrais éviter d'alimenter cette Listbox par un traditionnel Additem,
j'ai en effet un nombre considérable d'enregistrements à récupérer
Existerait-il une manip qui permettrait de récupérer en une "seule passe"
l'intégralité du Recordset dans la Listbox ?
Merci pour votre contribution
Laurent





Avatar
AV
Pas si la plage à intégrer dépasse 65536 lignes.


Bonjour la ListBox !
;-)
AV