ListBox sur feuille Excel

F

Fanfan68

Guest
Bonjour,

Malgré que le sujet sur les listesBox ont été énormément abordé, je n'ai pas trouvé un exemple se rapprochant de mon souci.

Je voudrai créer directement sur ma feuille, une listeBox comportant 3 colonnes.

Le problème c'est que les données qui devront s'y mettre se trouvent sur une autre feuille(MATERIALS) dans les rangées A, B et C.

Le second problème c'est que je connais ma cellule de départ pour chaque colonne(A3, B3, C3) mais pas la dernière cellule, j'ai donc créé pour chaque colonne des noms.
Par exemple 'TOTO' pour la rangée A3:A25, ainsi si une ligne est insérée entre ma rangée 'TOTO' s'actualisera.

Donc en gros pour simplifier, les rowsources de ma listeBox se trouvant sur ma feuille 1 devrait être, pour ma première colonne :
sheets('MATERIALS').range('TOTO')
sheets('MATERIALS').range('TATA') représentant B3:B25 pour la seconde
Et sheets('MATERIALS').range('TITI') représentant C3:C25 pour la seconde.

Mais je sais pas comment faire.

J'espère avoir été assez claire, j'avoue que même moi, j'ai du mal à me relir.....
 

Hervé

XLDnaute Barbatruc
Bonjour fanfan

Une proposition en pièce jointe.


le code :


Private Sub ListBox1_GotFocus()
Dim i As Byte
Dim j As Integer, x As Integer
With ListBox1
        .Clear
        .ColumnCount = 3
        .ColumnWidths = '25;25;25'
End With
With Sheets('feuil2')
       
For i = 1 To 3
                x = 0
               
For j = 3 To .Cells(65536, i).End(xlUp).Row
                        ListBox1.AddItem
                        ListBox1.List(x, i - 1) = .Cells(j, i)
                        x = x + 1
               
Next j
       
Next i
End With
End Sub

salut
[file name=Classeur8.zip size=12533]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur8.zip[/file]
 

Pièces jointes

  • Classeur8.zip
    12.2 KB · Affichages: 65
F

Fanfan68

Guest
Merci Hervé,

c'est exactement ce qu'il me fallait, néanmoins, il y a un petit hic, en effet, pour la première et troisième colonne, pas de soucis, par contre sur la deuxième, j'ai une cellule renseignée (montant HT) qui ne doit pas apparaitre dans ma liste, cette cellule sera toujours la dernière cellule renseignée de la colonne.

C'est pourquoi, je pensais qu'il fallait mieux travailler sur des Noms, en supposant que dans ma deuxième colonne je définisse comme Nom 'Libellé' en référence aux cellules B3:B25, sachant comme je l'ai déja dis, que ma plage 'libellé' s'actualisera si on insère des lignes entre, n'est-il pas possible de remplacer dans ton code :

For j = 3 To .Cells(65536, i).End(xlUp).Row

Par un for each cell in range('Libellé').....quelque chose comme ça mais peut-être n'est-ce pas possible.

Merci
 
F

Fanfan68

Guest
Re-bonjour Hervé,

Au risque d'exagérer, j'ai vu que dans les propriétés, il était possible d'afficher des en-têtes de colonnes en mettant la propriété 'ColumnHeads' à true.

Ma question est la suivante : est-il possible, pour ces en-têtes de colonnes, de définir une cellule en particulier, exemple les A2, B2 et C2 de ma feuille source

Merci
 

Hervé

XLDnaute Barbatruc
Bonjour fanfan.


ce que tu demande peut etre réalisé par la méthode listfillrange :

Utilises ce code en lieu et place de celui précédent :


Private Sub ListBox1_GotFocus()
With ListBox1
        .ListFillRange = ''
'vide la listbox
        .ColumnCount = 3
'nombre de colonne
        .ColumnWidths = '30;30;30'
'taille de chacune des colonnes
        .ColumnHeads =
True 'entete (oui ou non)
        .ListFillRange = 'Feuil2!toto'
'données
End With
End Sub

La plage nommée toto correspond à tes données en feuille 2, les entetes correspondent aux entetes de tes colonnes. celles-ci ne doivent pas être incluses dans la plage nommée.

salut
 

Discussions similaires

Statistiques des forums

Discussions
312 347
Messages
2 087 504
Membres
103 564
dernier inscrit
Paul 1