Public DF As Range 'déclare la variable DF (Déjà Fait)
Public O As Worksheet 'déclare la variable O (Onglet)
Public TTV As Variant 'déclare la variable TTV (Tableau de Toutes les Villes)
Sub Macro1()
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dinctionnaire)
Dim L As String 'déclare la variable L (Liste)
Dim TMP As Variant 'déclare la variable TMP (TeMPoraire)
Set O = Worksheets("Feuil1") 'définit l'onglet O
Set DF = O.Range("XFD1") 'définit la variale DF
TTV = O.Range("A1").CurrentRegion 'définit le tableau de toutes les villes TTV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TTV, 1) 'boucle sur toutes les lignes I de TTV (en partant de la seconde)
D(TTV(I, 2)) = "" 'alimente le dictionnaire D avec les données en colonne 2 de TTV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
L = "Toutes," & Join(TMP, ",") 'définit la liste L
With Range("E5").Validation 'prend en compte la validation de données de la cellule E5
.Delete 'efface un éventuelle ancienne validation de données
.Add xlValidateList, Formula1:=L 'définit la liste L comme liste de validation de donnée
End With 'fin de la prise en compte de la validation de données de la cellule E5
DF.Value = "oui" 'définit la valeur de DF
End Sub
Sub Macro2()
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TVP As Variant 'déclare la variable TVP (Tableau des Villes ayant Participé)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TEST As Boolean 'déclare la variable TEST
Dim J As Integer 'déclare la variable J (incrément)
Dim MSG As String 'déclare la variable MSG (MeSsaGe)
Set O = Worksheets("Feuil1") 'définit l'onglet O
TTV = O.Range("A1").CurrentRegion 'définit le tableau de toutes les villes TTV
DL = Range("J" & Application.Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne J
TVP = O.Range("J1:J" & DL) 'définit le tableau des villes ayant participé TVP
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
Select Case Range("E5").Value 'agit en fonction de la valeur de la cellule E5
Case "Tous" 'cas "Tous"
For I = 2 To UBound(TTV, 1) 'boucle 1 : sur toutes les lignes I de TTV (en partant de la seconde)
TEST = False 'initialise la variable TEST
For J = 2 To UBound(TVP, 1) 'boucle 2 sur toutes les lignes J de TVP (en partant de la seconde)
If TTV(I, 1) = TVP(J, 1) Then 'Consition si...
TEST = True 'redéfinit la variable TEST
Exit For 'redéfinit la variable TEST
End If 'redéfinit la variable TEST
Next J 'redéfinit la variable TEST
'si TEST est [Faux], définit le message MSG (ajoute la ville TTV(I,I) au message)
If TEST = False Then MSG = IIf(MSG = "", TTV(I, 1) & vbCr, MSG & TTV(I, 1) & vbCr)
Next I 'prochaine ligne de la boucle 1
Case Else 'les autres cas
For I = 2 To UBound(TTV, 1) 'boucle 1 : sur toutes les lignes I de TTV (en partant de la seconde)
'si TV(I,2 ) est égale à la valeur de E5, alimente le dictionnaire D avec les données en colonne 1 de TTV
If TTV(I, 2) = Range("E5").Value Then D(TTV(I, 1)) = ""
Next I 'prochaine liigne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For I = 0 To UBound(TMP) 'boucle sur tous les élément du tableau TMP
TEST = False 'initialise la variable TEST
For J = 2 To UBound(TVP, 1) 'boucle 2 sur toutes les lignes J de TVP (en partant de la seconde)
If TMP(I) = TVP(J, 1) Then 'condition : si TMP(I) est égale à TVP(J,1)
TEST = True 'redéfinit la variable TEST
Exit For 'redéfinit la variable TEST
End If 'redéfinit la variable TEST
Next J 'redéfinit la variable TEST
'si TEST est [Faux], définit le message MSG (ajoute la ville TMP(I) au message)
If TEST = False Then MSG = IIf(MSG = "", TMP(I) & vbCr, MSG & TMP(I) & vbCr)
Next I 'prochaine ligne de la boucle 1
End Select 'fin de l'action en fonction de ...
MsgBox MSG 'affiche le message MSG
End Sub