3 pièce(s) jointe(s)
Tableau structuré (mais pas vraiment) et ComboBox en cascade
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 :
Pièce jointe 537678
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) :
Pièce jointe 537682
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:
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:
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 : Pièce jointe 537686