Combobox multi-colonnes et tableau structuré
Bonjour le Forum,
Je souhaiterais alimenter les items d'une zone de liste modifiable à partir de certaines colonnes d'un tableau structuré.
Pour ce faire, j'ai envisagé plusieurs solutions
1ère solution: Alimentation par variable tableau.
Ici, je déploie Listcolumns afin d'utiliser un bloc With, en lieu et place de l'écriture habituelle Range("letablo[lacolonne]")
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
| Option Explicit
Public Sub gestion_famille_1()
Dim i As Long
With Sht_Famille.ListObjects("T_Famille")
ReDim montablo(1 To 3, 1 To .ListRows.Count) As Variant
For i = 1 To .ListRows.Count
montablo(1, i) = .ListColumns("Prénom").DataBodyRange.Cells(i, 1).Value
montablo(2, i) = .ListColumns("Ville").DataBodyRange.Cells(i, 1).Value
montablo(3, i) = .ListColumns("Vacances").DataBodyRange.Cells(i, 1).Value
Next i
End With
With Usf_famille
With .Cbx_équipe
.Clear
.ColumnCount = 3
'.Width = 200
.ColumnWidths = "45;55;465"
.List = Application.WorksheetFunction.Transpose(montablo)
'Valeur du combobox après sélection
.TextColumn = 1
'Nombre de lignes affichées lors de la sélection
.ListRows = UBound(montablo, 2)
'1er item sélectionné
.ListIndex = 0
End With
.Show 0
End With
Erase montablo
End Sub |
Or, j'évite tant que possible les boucles.
J'ai donc envisagé une astuce
2ème solution: masquer une colonne de la Combobox en lui affectant une largeur égale à 0.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ublic Sub gestion_famille_2()
With Usf_famille
With .Cbx_équipe
.Clear
.ColumnCount = Range("T_Famille").ListObject.ListColumns.Count
'.Width = 200
.ColumnWidths = "45;55;0;65"
.List = Range("T_Famille").Value
'Valeur du combobox après sélection
.TextColumn = 1
'Nombre de lignes affichées lors de la sélection
.ListRows = Range("T_Famille").ListObject.ListRows.Count
'1er item sélectionné
.ListIndex = 0
End With
.Show 0
End With
End Sub |
Ma question:
Sans cette astuce.
Peut-on alimenter une par une chaque colonne de la Combobox en lui affectant directement une colonne du tableau?
L'écriture
Code:
.List(,1) = Range("T_Famille[Prénom]").Value
me retournat un message d'erreur.
Par avance, merci pour vos lumineuses lumières :)
Bonne journée à tous.