Bonjour galopin01, LouReeD,
Galopin01 ayant évoqué le "dictionary", j'ai fait une petite version avec un dictionnaire. L'avantage est que les données sources ne doivent pas être forcément triées.
Pour mes test, j'ai fait une petite procédure Init qui initialise des données ( environ 30 000 villes, environ 360 000 noms (tous différents) et 60 000 lignes de données sources.
Pour le dictionary, j'ai utilisé une méthode qui pour chaque ville (la clef) construit un item qui est la concaténation de la ville et des noms de cette ville séparés par des points-virgules. Les items sont transférés dans la première colonne sur la feuille résultat. On effectue ensuite l'équivalent d'un "convertir" pour distribuer la première colonne dans les cellules. Ca prend environ un peu plus de 2 s sur ma bécane.
nota : pour une ville donnée, on a éliminé les doublons de noms. Cependant si on veut garder les doublons, il suffit d'effacer l’instruction If InStr(elem, t(i, j)) = 0 Then
Le code est dans module1.