Si vous déclarez Private TVilles(0 To 500, 1 To 4) en tête de l'UserForm vous aurez à votre disposition un tableau en mémoire dans lequel vous pourrez ranger 500 villes trouvées pour un code postal.
L'accès à un élément de tableau est des dizaines de milliers de fois plus rapide qu'un accès à une cellule. Voire à 10000 cellules d'ailleurs, c'est pareil que pour une seule cellule: c'est lent. Mais du coup il faut toujours accéder le moins souvent possible aux plages de cellules, et tout charger et décharger d'un coup dans des tableaux dynamiques. Si vous voulez déclarer un tableau dynamique, ne précisez pas les dimensions, juste les parenthèses: Private TVilles()
À la limite TVille = Feuil3.ListObjects(1).DataBodyRange.Value pour charger toutes les villes en mémoire, point barre.