Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Set f = Sheets("data")
  If Not Intersect(Range("A2:A1000"), Target) Is Nothing And Target.Count = 1 Then
    UserForm1.ComboBox1.List = f.Range("A3:B" & f.[A65000].End(xlUp).Row).Value
    UserForm1.Show
  End If
  '-- niveau 2
  If Not Intersect(Range("C2:C1000"), Target) Is Nothing And Target.Count = 1 Then
    Tbl2 = f.Range("D3:E" & f.[D65000].End(xlUp).Row).Value
    nom = Target.Offset(, -2)
    n = f.Range(nom).Count
    Tbl1 = f.Range(nom).Value
    ReDim Tbl(1 To n, 1 To 2)
    For i = 1 To n
      For j = 1 To UBound(Tbl2)
        If Tbl1(i, 1) = Tbl2(j, 1) Then Tbl(i, 1) = Tbl2(j, 1): Tbl(i, 2) = Tbl2(j, 2)
      Next j
    Next i
    UserForm1.ComboBox1.List = Tbl
    UserForm1.Show
  End If
  '--niveau 3
  If Not Intersect(Range("E2:E1000"), Target) Is Nothing And Target.Count = 1 Then
     Tbl2 = f.Range("G3:H" & f.[G65000].End(xlUp).Row).Value
     nom = Target.Offset(, -2)
     n = f.Range(nom).Count
     Tbl1 = f.Range(nom).Value
     ReDim Tbl(1 To n, 1 To 2)
     For i = 1 To n
       For j = 1 To UBound(Tbl2)
        If Tbl1(i, 1) = Tbl2(j, 1) Then Tbl(i, 1) = Tbl2(j, 1): Tbl(i, 2) = Tbl2(j, 2)
       Next j
    Next i
    UserForm1.ComboBox1.List = Tbl
    UserForm1.Show
  End If
End Sub