définir des en-têtes pour une listbox
Bonjour,
En parcourant le site j'ai trouvé un excellent tuto pour faire des en-têtes à une listbox -->Un grand Merci à SilkyRoad.
Mon souci est que je n'ai pas su adapter le code pour définir non seulement la plage (A1;F3000)mais aussi la feuille pour la base de données .
Help!;)
Merci à vous.
Voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Private Sub UserForm_Initialize()
Dim Plage As Range
Dim Tableau As Variant
Dim i As Integer
Dim Lbl As Control
'Plage de cellules contenant les données:
'Le contenu de la première ligne (A1:C1) va servir d'en-tête.
Set Plage = Range("A1:f3000")
Tableau = ScindePlage(Plage)
With ListBox1
.ColumnCount = UBound(Tableau, 2)
'En option (à adapter)
.Top = 20
.Width = 92 * UBound(Tableau, 2)
DoEvents
.List() = Tableau
End With
For i = 1 To UBound(Tableau, 2)
Set Lbl = Me.Controls.Add("Forms.Label.1")
With Lbl
.Left = ListBox1.Left + 7 + ((i - 1) * 92)
.Top = ListBox1.Top - 10
.Width = 92
.Height = 10
.Caption = Plage.Cells(1, i)
End With
Next i
End Sub
Function ScindePlage(Cible As Range) As Variant
Dim Pl As Range
Set Pl = Cible.Offset(1, 0).Resize(Cible.Rows.Count - 1)
ScindePlage = Pl.Value
End Function |
Wahou après un bon moment de galère voilà que ce bout de code vient de me soulager
Citation:
Envoyé par
Philippe Tulliez
Bonjour,
Pour que les étiquettes de colonnes apparaissent dans un contrôle
ListBox ou
ComboBox, il faut utiliser la propriété
RowSource du contrôle, donner à la propriété
ColumnHeads du même contrôle la valeur
True et éventuellement modifier la propriété
ColumnCount en lui donnant comme valeur le nombre de colonnes à afficher.
Si la première cellule de la liste de données commence en
A1 et que la première ligne de cette liste contient bien les étiquettes de colonnes, le plus simple est d'utiliser la méthode
CurrentRegion et ensuite pour déterminer la partie données de cette liste utiliser les propriétés
Offset et
Resize
Exemple
Code:
1 2 3 4 5 6 7 8 9 10
| Option Explicit
Dim rngData As Range
Private Sub UserForm_Initialize()
Set rngData = ThisWorkbook.Worksheets("bd").Range("A1").CurrentRegion
With rngData
ComboBox1.RowSource = .Offset(1).Resize(.Rows.Count - 1).Address(external:=True) ' Les données
ComboBox1.ColumnHeads = True
ComboBox1.ColumnCount = .Columns.Count
End With
End Sub |