or maybe so
Private Sub Worksheet_Activate()
Dim x, i&, s$
x = Sheets("Database").Range("A1").CurrentRegion.Value
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 2 To UBound(x, 1)
.Item(x(i, 1)) = Empty
Next i
s = Join(.keys, ",")
End With
With Range("A2:A20").Validation
.Delete
.Add Type:=xlValidateList, Formula1:=s
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Len(Target) = 0 Then Exit Sub
If Intersect(Target, Range("A2:A20")) Is Nothing Then Exit Sub
Dim x, i&, st$, s$
st = Target.Value
x = Sheets("Database").Range("A1").CurrentRegion.Value
For i = 2 To UBound(x)
If x(i, 1) = st Then s = s & "," & x(i, 2)
Next i
If Len(s) = 0 Then Exit Sub
With Target(1, 2).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=s
End With
End Sub
Bookmarks