Le plus gros problème est effectivement dans les requêtes SQL. Bien sûr, l'engin MDB n'est pas très performant, surtout pour un environnement partagé comme le Web, mais cette page devrait demander une quantité minime de ressource, surtout vu que tout est en lecture.
En gros, ton problème est dans le nombre incroyable de requêtes que tu fais à chaque chargement. Tu fais une requête au départ, puis pour chaque enregistrement, tu en fais 2-3 autres, incluant une qui est totalement redondante. Tu as déjà demandé l'information sur toutes les escortes dans ta première requête, pourquoi redemander les mêmes choses encore une fois?... donc pour seulement 24 enregistrements, tu fais près de 75 requêtes, alors qu'il serait facile de réduire ça à une requête unique! Encore pire, tu ouvres un connexion pour chaque requête, et tu gardes toutes ces connexions ouvertes jusqu'à la fin, donc tu tues la performance de tes accès...
Ta requête unique devrait ressembler à ceci :
SELECT e.*, v.*, a.* FROM tbl_Escorte e
LEFT JOIN tbl_Ville v on e.ID_Ville = v.ID_Ville
LEFT JOIN tbl_Agence a on a.ID_Agence = e.ID_Agence
avec le WHERE tbl_Escore.ID_Ville = Request.QueryString... lorsque le paramètre est là (attention aux erreurs d'injections SQL, ton code est très vulnérable). À noter que ceci est la syntaxe SQL standard, je ne connais pas les détails d'implémentation d'Access, donc la requête devra peut-être être modifiée un peu.
Je te conseille de lire un peu plus sur le SQL et les bases de données, et plus particulièrement sur les jointures (voir
http://en.wikipedia.org/wiki/Join_(SQL) en anglais, dans ton cas les left outer join)