Bonjour,
Code VBA minimal pour plus de confort : assurer mise à jour de la base : tri + extraction liste pays...
Sub MajBase()
[LstPays].Offset(1).ClearContents
With [PaysPlat]
.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
.Resize(, 1).AdvancedFilter xlFilterCopy, , .Cells(1, 4), True
End With
End Sub
LstPays : nom de la liste Pays sans doublon extraite par filtrage avancé de la base, qui alimente la liste déroulante Pays. Le nom est dynamique :
=DECALER(Feuil1!$D$2;;;NBVAL(Feuil1!$D:$D)-1)
PaysPlat : nom de la base (dynamique également) :
=DECALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A);2)
La liste déroulante de Plats, dépendante du Pays, est définie par formule :
=DECALER(PaysPlat;EQUIV(A2;DECALER(PaysPlat;;;;1);0)-1;1;NB.SI(DECALER(PaysPlat;;;;1);A2);1)
Lors d'une modification du choix de pays, une proc. évènementielle efface le choix éventuel de Plat (qui deviendrait inadéquat).
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Row < 2 Then Exit Sub
If Not Intersect(Target, Me.Columns("A")) Is Nothing Then
Target.Offset(, 1).ClearContents
End If
End Sub
Cordialement.