Private Sub Worksheet_Change(ByVal Target As Range)
Dim OC As Worksheet 'déclare la variable OC (Onglet Codepostal)
Dim TCO As Variant 'déclare la variable TCO (Tableau des COdes)
Dim TCL As Variant 'déclare la variable TCL (Tableau des CLubs)
Dim I As Long 'déclare la variable I (Incrémemt)
Dim L As String 'déclare la variable L (Liste)
Dim N As Integer 'déclare la variable N (Nombre)
On Error GoTo fin 'gestion des erreurs (en cas d'erreur va à l'étiquette "fin")
If Target.Row = 1 Then Exit Sub 'si le changement a lieu dans la ligne 1 sort de la procédure
Set OC = Worksheets("codepostal") 'définit l'onglet OC
TCO = OC.Range("A1").CurrentRegion 'définit le tableau TCO
TCL = OC.Range("E1").CurrentRegion 'définit le tableau TCL
Select Case Target.Column 'agit en fonction de la colonne où a lieu le changement
Case 3 'cas 3 (=C)
Target.Offset(0, 1).Resize(1, 2).ClearContents 'supprime une éventuelle validation de données dans les colonnes 4 et 5
Target.Offset(0, 1).Resize(1, 2).Validation.Delete 'efface les cellules en colonnes 4 et 5 (cela génèrera pour la cas 4 une erreur)
For I = 2 To UBound(TCO, 1) 'boucle sur toutes les lignes I du tableau TCO (en partant de la seconde)
'si la donnée ligne I colonne 2 de TCO est égale au code de la cellue modifiée, redéfinit la liste L et incrémente le nombre N
If TCO(I, 2) = Target.Value Then L = IIf(L = "", TCO(I, 1), L & "," & TCO(I, 1)): N = N + 1
Next I 'prochaine 'ligne de la boucle
If N = 1 Then 'condition : si N vaut 1
Target.Offset(0, 1).Value = L 'renvoie L dans la cellule en colonne 4
Else 'sinon
Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de donnée dans la cellule en colonne 4
CreateObject("wscript.shell").SendKeys "%{DOWN}" 'déroule la liste
End If 'fon de la condition
Target.Offset(0, 1).Select 'sélectionne la cellue en colonne 4
Case 4 'cas 4 (=D)
Target.Offset(0, 1).Validation.Delete 'supprime une éventuelle validation de données dans la colonne 5
Target.Offset(0, 1).ClearContents 'efface la cellule en colonne 5
L = "": N = 0 'efface L, initialise N
For I = 2 To UBound(TCL, 1) 'boucle sur toutes les lignes I du tableau TCL (en partant de la seconde)
'si la donnée ligne I colonne 5 de TCL est ágale à la cellue modifiée, redéfinit la liste L et incrémente N
If TCL(I, 2) = Target.Value Then L = IIf(L = "", TCL(I, 3), L & "," & TCL(I, 3)): N = N + 1
Next I 'prochaine 'ligne de la boucle
If N = 0 Then Exit Sub 'si N vaut zéro, sort de la procédure
If N = 1 Then 'si N vaut 1 renvoie L dans la cellule en colonne 5
Target.Offset(0, 1).Value = L
Else 'sinon
Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de donnée dans la cellule en colonne 5
CreateObject("wscript.shell").SendKeys "%{DOWN}" 'déroule la liste
End If 'fin de la condition
Target.Offset(0, 1).Select 'sélectionne la cellue en colonne 5
End Select 'fin de l'action en fonction de la colonne où a lieu le changement
fin: 'étiquette
End Sub