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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
 .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.