Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim CD As Workbook 'déclare la variable DD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets("Validations 2022-2023") 'définit l'onglet source OS
CA = CS.Path & "\" 'définit le chemin d'accès CA
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes éditées I du tableau des valeurs TV (en partant de la seconde)
D(TV(I, 25)) = "" 'alimente le dictionnaire D avec les données en colonne 25 (=> colonne Y)
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 doublonds (les clés)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les élement du teblaeu temporaire TMP (les villes de la colonne Y)
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes éditées I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 25) = TMP(J) Then 'condition : si la donnée ligne I colonne 25 de TV est égale à l'élément J de TMP (la même ville)
Set CD = Application.Workbooks.Open(CA & TMP(J) & ".xlsm") 'définit le classeur destination (à adapter car tu n'a rien précisé !...)
Set OD = CD.Worksheets(1) 'définit l'onglet de destination (ici le premier...)
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
OS.Rows(I).Copy DEST 'copie la ligne I de l'onglet source et la colle dans DEST de l'onglet destination
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
CD.Close True 'ferme le classeur destination CD en enregistrant les modifications
Set CD = Nothing 'vide la variable CD
Next J 'prochain élément de la boucle 1
End Sub