Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim zone As Range, plage As Range, d As Object, c As Range
Set zone = [B:F] 'à adapter éventuellement
Set plage = Intersect(Target, zone)
If Not plage Is Nothing Then
If plage.Rows.Count = 2 And plage.Columns.Count = zone.Columns.Count Then
Set d = CreateObject("Scripting.Dictionary")
For Each c In plage.Rows(2).Cells
If Application.CountIf(plage.Rows(1), c) Then d(c.Value) = c.Value
Next
UserForm1.ListBox1.List = d.keys
UserForm1.Show
End If
End If
End Sub