OVH Cloud OVH Cloud

ADO et listbox

5 réponses
Avatar
Bruno
Bonjour à tous,

Je souhaite afficher dans un list box le contenu d'enregistrment extrait
d'une base Access.
Je souhaiterais afficher le résultat dans les colonnes du listbox
Si je listbox1.additem MONrecordset!Nom & MONrecordset!Prénom... tout vient
à la suite l'un de l'autre...
Comment faire apparaitre nom et prénom dans 2 colonnes distincts...
Merci d'avance pour votre aide et pour vos bons conseils habituels.
A+++
Bruno

5 réponses

Avatar
michdenis
Bonjour Bruno,

Dans l'exemple qui suit : tu dois adapter:

A ) la définition de la requête
B ) ajouter une 2 lignes de code avant d'entrer les informations du recordset dans ton combobox.
Userform1.Combobox.ColumnCount = 2
Userform1.Combobox.ColumnWidths = "Une largeur pour chaque colonne"


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

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
'.--------------------------------


Salutations!
Avatar
YannX
Bnsr,

désolé de te donner de faux espoirs, mais je n'ai pas la réponse....
Si je l'avais, j'aimerais bien....l'utiliser.

Bon, j'ai toutefois deux pistes/idées :
1°/ tu insère un Tab (^I = CHR(8) si je me souviens bien) entre tes champs

2°/ tu gnénères ton ListBox à partir du controle FORMS intégré à Office
(je ne sais pas exactement comment faire,
(j'imagine qu'il faudrait déclarer la référence dans VBE ?)

Et sans doute qu'une recherche " multi-colums listbox " donnerait d'autres
pistes.
J'avais trouvé une référence pour du VB (non application).
www.mvps.org/vbvision/grouped_demos.htm ListBox Columns demo.zip
Mais VB gère très mal le controle FORMS

Expect to Help
Y

"Bruno" a écrit dans le message de
news:41aa0c6c$0$9300$
Bonjour à tous,

Je souhaite afficher dans un list box le contenu d'enregistrment extrait
d'une base Access.
Je souhaiterais afficher le résultat dans les colonnes du listbox
Si je listbox1.additem MONrecordset!Nom & MONrecordset!Prénom... tout
vient

à la suite l'un de l'autre...
Comment faire apparaitre nom et prénom dans 2 colonnes distincts...
Merci d'avance pour votre aide et pour vos bons conseils habituels.
A+++
Bruno




Avatar
YannX
Voila la technique que je en savais : bravo
Y
"michdenis" a écrit dans le message de
news:ut$
Bonjour Bruno,

Dans l'exemple qui suit : tu dois adapter:

A ) la définition de la requête
B ) ajouter une 2 lignes de code avant d'entrer les informations du
recordset dans ton combobox.

Userform1.Combobox.ColumnCount = 2
Userform1.Combobox.ColumnWidths = "Une largeur pour chaque colonne"


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

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
'.--------------------------------


Salutations!




Avatar
Pat Dev VB
N'utilise pas une listbox.
Essaye une listview ou une dbgrid.
C'est plus confortable et plus adapté.


Bonjour à tous,

Je souhaite afficher dans un list box le contenu d'enregistrment extrait
d'une base Access.
Je souhaiterais afficher le résultat dans les colonnes du listbox
Si je listbox1.additem MONrecordset!Nom & MONrecordset!Prénom... tout vient
à la suite l'un de l'autre...
Comment faire apparaitre nom et prénom dans 2 colonnes distincts...
Merci d'avance pour votre aide et pour vos bons conseils habituels.
A+++
Bruno





Avatar
Clément Marcotte
Bonjour,

Essaye une listview ou une dbgrid.
C'est plus confortable et plus adapté.


Sauf qu'ils viennent avec VisualStudio. Ils ne sont pas utilisables
avec Office sans avoir installé VisualStudio.