Envoyer les données d'une listbox vers Excel

niano Messages postés 9 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 19 septembre 2008 - 27 juil. 2007 à 09:43
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 28 juil. 2007 à 00:03
Bonjour à tous,

Je suis en train de réaliser un formulaire sous Access. Ce formulaire doit me permettre de filtrer des données d'une table (par date, par age, ...). Sur ce formulaire, j'ai une listbox (pas une listview) de type: TABLE/QUERY (ce détail est important).

Cette listbox me permet, en cliquant sur des checkbox, d'afficher une table et de filtrer les données qui s'y trouve. Une fois que le filtrage est effectué, je voudrais envoyer vers Excel les lignes qui sont apparues dans ma listbox.

Pour ce faire, j'ai suivi ce code:
http://www.vbfrance.com/codes/DONNEES-LISTBOX-VERS-FEUILLE-EXCEL_1988.aspx

Le problème est que je ne peux pas utiliser les mêmes fonctions puisque, je pense, ma listbox est de type "Table/Query" donc pas de "lstBox.List", de "lstBox.ListItems(i)" ou encore de "lstBox.SubItems".
Ces fonctions sont accessibles que si la listbox est une listview ou si elle est de type "Value list" ? Ma lisbox contient également des colonnes...

Comment pourrais-je faire pour envoyer ce qui apparait dans ma listbox vers Excel ? J'ai cherché sur internet mais je n'ai jamais trouvé la solution: certaines fonctions ne sont pas accessibles, et j'ai bien mis les librairies MS Excel Object Library MS DAO Excel Library.

Merci à tout ceux qui se plongeront dans mon problème.

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 juil. 2007 à 09:48
Quel est le rapport avec VB.NET si tu fais du VBA ???

Je deplace vers le forum approprié !
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 juil. 2007 à 11:23
Tu devrais, en principe, être capable de créer un Recordset équivalent au filtrage que te donnent tes contrôles... (?)

Une fois la requête créée, il te suffirait d'utiliser la méthode
FeuilleXL.Range("A1").CopyFromRecordset MaRequête

Si tu n'arrives pas à créer cette requête, tu peux utiliser une double-boucle qui lit les lignes et colonnes de la listbox et les transpose dans la feuille Excel.

MPi
0
niano Messages postés 9 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 19 septembre 2008
27 juil. 2007 à 11:30
Désolé de mettre trompé de section...

Par contre, j'ai complètement oublié de vous indiquer que je débute avec VBA (j'y connais rien en fait... mais je m'améliore)

La double boucle, j'ai déjà essayer (sur le lien que j'ai mis, y'a quelqu'un qui y a répondu en améliorant le code pour une listbox avec colonne) mais pas concluant du tout...

Je cherche de ce coté, il me semble que c'est le plus simple... quoique !!!
0
niano Messages postés 9 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 19 septembre 2008
27 juil. 2007 à 11:46
Alors j'ai cherché un peu et pour la double boucle, j'ai essayé ça:

For j = 0 To Me.lstBox.ListCount - 1
    For k = 0 To Me.lstBox.ColumnCount - 1
        With Appli.ActiveWorkbook.Worksheets("Feuil1")
            .Cells(j, k) = Me.lstBox.*************
        End With
    Next k
Next j

Comme vous pouvez le constater, je ne sait pas quoi mettre à la place des "*"...

Vu que je rentre cellule par cellule dans Excel, il faudrait que je puisse lire les informations cellule par cellule dans ma listbox. Le problème c'est que je crois que je ne peux que lire une ligne entière.
Peut-être que je devrais mettre à la place de ".Cells" qui pointe vers une cellule, une fonction qui pointe vers une ligne entière d'Excel ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 juil. 2007 à 12:06
Peut-être comme ceci... (?)

.Cells(j +1, k+1) = Me.lstBox.List(i, j)

En fait Excel n'a pas de ligne 0 ou colonne 0, donc ajouter 1

MPi
0
niano Messages postés 9 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 19 septembre 2008
27 juil. 2007 à 12:11
J'aurais bien aimer utiliser cette fonction "lstBox.List" mais je ne peux pas: je ne peux qu'utiliser "lstBox.ListCount" et "lstBox.ListIndex".

Est-ce parce que ma listbox est de type "Table/Query" ?
0
niano Messages postés 9 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 19 septembre 2008
27 juil. 2007 à 16:07
J'ai encore avancé un petit peu ^^

J'ai utlisé ce code:

If Me.lstBox.RowSource <> vide Then

Me.lstBox.RowSource = Me.lstBox.Column(0, i) & ";" & Me.lstBox.Column(1, i) & ";"
MsgBox "bon"

End If

Lorsque je l'exécute, un message "bon" apparait donc à priori ça fonctionne. Ce qui veut dire que maintenant, ma listbox a été tranformé: une ligne est formée comme ceci:
"unepremièrevaleur ; unedeuxièmevaleur ; ... ; uneénièmevaleur ;"

Je dois pouvoir faire quelque chose avec ça maintenant non ? Je dois pouvoir envoyer les données vers Excel en rentrant chaque valeur séparée par un ";" dans une cellule puis une autre, etc... ?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 juil. 2007 à 00:03
Non, je ne pense pas que ce soit une bonne façon
Ta listbox est probablement déjà chargée avec un RowSource, donc si tu écris
Me.lstBox.RowSource = Me.lstBox.Column(0, i) & ";" & Me.lstBox.Column(1, i) & ";"
Tu viens de changer son RowSource et donc de foutre le bordel...

Essaie de créer un Recordset qui représente ce que tu fais. Ce sera plus simple.

Et pourquoi veux-tu copier tes données dans Excel avec des ";" entre les données ?

MPi
0
Rejoignez-nous