niano
Messages postés9Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention19 septembre 2008
-
27 juil. 2007 à 09:43
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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.
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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
niano
Messages postés9Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention19 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 !!!
niano
Messages postés9Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention19 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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
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... ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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 ?