Bonjour,

A proprement parler, il ne s'agit pas d'un vrai problème, mon code fonctionnant plutôt bien.
Je voulais juste vos avis éclairés à propos de :
> cette utilisation des tableaux structurés (pas vraiment structurée)
> les éventuels manques de "protection" dans le code (risques d'erreurs que je n'aurais pas entrevu).

1- Les 2 tables de données :

La table nommée TableauVilles qui reprend, en entête, des noms d'îles, et en colonnes, les villes correspondantes :

Nom : TableauVilles.png
Affichages : 2162
Taille : 46,7 Ko

La table nommée TableauRues qui reprend, en entête, toutes les villes du 1er tableau structuré et, en colonnes, les noms des rues (comme vous pouvez le constater, j'ai masqué moultes colonnes) :

Nom : TableauRues.png
Affichages : 2132
Taille : 68,3 Ko

2- L'Userform, son module et leurs codes :

Un simple Userform (UserForm1) avec dessus, 3 Combobox : Combobox1 = îles; Combobox2 = Villes; Combobox3 = rues
Un Module avec ce code :
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
Option Explicit
 
Public Sub Appel_Userform()
    With UserForm1
        .ComboBox1.Column = Range("TableauVilles[#Headers]").Value
        .Show
    End With
End Sub
 
Public Sub Change(CbSource As MSForms.ComboBox, CbDest As MSForms.ComboBox, nomTablo As String)
    If CbSource.Value <> vbNullString Then
        With CbDest
            .Clear
            .List = getArrayFromRange(Range(nomTablo & "[" & CbSource.Value & "]"))
        End With
    End If
End Sub
 
Private Function getArrayFromRange(Item As Range)
'volée à Pierre Fauconnier
    If WorksheetFunction.CountA(Item) > 0 Then
        If Item.Cells.Count = 1 Then
            Dim t(1, 1)
            t(1, 1) = Item.Value
            getArrayFromRange = t
        Else
            getArrayFromRange = Item.SpecialCells(xlCellTypeConstants).Value
        End If
    Else
        getArrayFromRange = Array(vbNullString)
    End If
End Function
Le code de l'Userform :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Option Explicit
 
Private Sub ComboBox1_Change()
    Change ComboBox1, ComboBox2, "TableauVilles"
End Sub
 
Private Sub ComboBox2_Change()
    Change ComboBox2, ComboBox3, "TableauRues"
End Sub
Je réitère donc mes deux questions :
> trouvez-vous des failles dans les procédures de mon Module ?,
> Que dire de l'utilisation de tableaux structurés avec des colonnes non remplies, voire vides?

Pour le coup cela entraîne une troisième question : n'y a t'il pas mieux à faire?

Pour ceux qui le souhaitent, je peux laisser traîner un fichier exemple : Demo Combo Cascade.xlsm