Listbox dans excel

Résolu
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010 - 7 janv. 2006 à 14:53
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010 - 8 janv. 2006 à 15:25
marcod59

Bonjour et meilleurs voeux,

J'ai 2 Feuil. Sur la Feuil1 je voudrais mettre, sans passer par un userform, une listbox qui devra être remplie par des données misent sur la Feuil2. Les données sont misent dans la colonne E et possède des cellules vides à intervalles irréguliers.
Comment faire pour remplir ma listbox ?

Merci d'avance
@+++

10 réponses

cs_LeGrosWinnie Messages postés 47 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 18 mai 2007
7 janv. 2006 à 18:19
sans les cellules vide il sufit de modifier le code comme ceci :

For i = 1 To 40 'Plus si tu as plus de 40 données
if ListBox1.AddItem Sheets(2).Range("E" & i).Value<> "" then
ListBox1.AddItem Sheets(2).Range("E" & i).Value
end if
Next i
3
cs_LeGrosWinnie Messages postés 47 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 18 mai 2007
8 janv. 2006 à 10:47
C'est la propriété "ListWidth" par contre c'est l'échelle à la con utilisé par VB...pour 35 caractères j'ai utilisé 460

Code teste que j'ai utilisé avec 2 combobox et une listbox

Private Sub Worksheet_Activate()
Dim nI, MyData(1)
ComboBox1.ColumnCount = 2
ComboBox2.ColumnCount = 2
ListBox1.ColumnCount = 2
ComboBox1.ListWidth = 460
ComboBox2.ListWidth = 460
ListBox1.ListWidth = 460
ComboBox1.Clear
For nI = 1 To 7
MyData(0) = Sheets(2).Range("A" & nI).Value
MyData(1) = Sheets(2).Range("B" & nI).Value
ComboBox1.AddItem MyData(0) & vbTab & MyData(1)
ComboBox2.AddItem MyData(0) & vbTab & MyData(1)
ListBox1.AddItem MyData(0) & vbTab & MyData(1)
Next nI
End Sub

Pour la listbox il ne faut pas oublier que la taille du controle doit etre adaptée à la longueur des lignes à afficher.
3
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
7 janv. 2006 à 16:17
Bonjour,

Dans le menu Affichage / barre d'outils / Commandes, tu places une
ListBox sur ta Feuil2, ensuite dans VBAProject tu doublecliques sur
Feuil2(Feuil1) et tu mets.



Private Sub Worksheet_Activate()

ListBox1.Clear

Dim i

For i = 1 To 40 'Plus si tu as plus de 40 données

ListBox1.AddItem Sheets(2).Range("E" & i).Value

Next i

End Sub



jpleroisse



Si une réponse vous convient, cliquez Réponse Acceptée.
0
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010
7 janv. 2006 à 17:35
marcod59

Bonjour,

Merci pour ta réponse qui fonctionne, mais j'ai oublié de préciser qu'il fallait afficher les données sans les cellules vides.

Merci
@+++
0

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

Posez votre question
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010
7 janv. 2006 à 19:06
marcod59

Super, excuse moi mais j'ai encore besoin de tes services. Je viens de voir qu'il fallait que dans cette listbox, j'affiche 2 colonnes et que ces colonnes ne sont pas une à côté de l'autre.
J'ai essayé de mettre Listbox1.Additem sheets(2).Range("A" & i).Value en plus, mais les valeurs ce mettent une au dessus de l'autre, alors que je voudrais qu'elles soient une à côté de l'autre.

Encore merci
@+++
0
cs_LeGrosWinnie Messages postés 47 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 18 mai 2007
7 janv. 2006 à 23:04
Dans une vrai liste box tu ne peux avoir qu'une seule colone (d'ou le nom LISTE, une liste contient une SERIE de nom).

Utilise alors 2 liste box cote à cote et rajoute juste la ligne que tu as mentionné pour la 2eme listebox
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
7 janv. 2006 à 23:34
Bonsoir,

Tu peux faire ceci.



Private Sub Worksheet_Activate()

Dim i, MyData(1)

ListBox1.ColumnCount = 2

ListBox1.Clear

For i = 1 To 40 'Plus si tu as plus de 40 données

MyData(0) = Sheets(1).Range("A" & i).Value

MyData(1) = Sheets(1).Range("C" & i).Value

ListBox1.AddItem MyData(0) & vbTab & MyData(1)

Next i

End Sub



jpleroisse



Si une réponse vous convient, cliquez Réponse Acceptée.
0
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010
7 janv. 2006 à 23:48
marcod59

Il me semble que pour avoir plusieurs colonne dans une listbox on utilise
ColumnCount . Donc là je doit mettre ListBox1.ColumnCount = 2, le problème vient après. Lorsque l'on met une listbox dans un userform j'ai la propriété RowSource qui accepte un A1:B10 et qui affiche les données une à côté de l'autre. Par contre lorsque je met la listbox sur une feuille je n'ai pas cette propriété. J'ai la propriété ColumnCount, donc je pense qu'il doit y avoir un moyen de mettre les données une à côté de l'autre.

@+++
0
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010
8 janv. 2006 à 08:37
marcod59

Bonjour,

Ca marche, mais il y a encore un petit problème. La première colonne il n'y a pas de problème, c'est une date et elle est très bien. Par contre la 2ème, c'est un petit texte (jamais au dessus de 30 caractères) mais il n'affiche que 12 caractères. Faut-il régler une propriété ?

Merci
@+++
0
marcod59 Messages postés 170 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 13 juin 2010
8 janv. 2006 à 15:25
marcod59

Bonjour,

Entre temps j'ai essayé avec une MSFlexGrid qui fonctionne pas mal aussi. Voici le code :
Dim i, e, memo(1)
Dim s$
DerLigne = Sheets(4).Range("BA65536").End(xlUp).Row
MSFlexGrid1.Clear
MSFlexGrid1.Rows = 2
MSFlexGrid1.FixedRows = 1
s$ = "Date | Commentaires "
MSFlexGrid1.FormatString = s$
For e = 2 To DerLigne
If Sheets(4).Range("BA" & e).Value <> "" Then
memo(0) = Sheets(4).Range("A" & e).Value
memo(1) = Sheets(4).Range("BA" & e).Value
MSFlexGrid1.AddItem memo(0) & vbTab & memo(1)
End If
Next e

@+++
0
Rejoignez-nous