À première ce code devrait être bon, en autant que la base est bien construite. Esasai de faire Recordset1.Move (0) puis Recordset1.Move (1) etc manuellement pour voir si c'est vraiment le "2" qui plante.
Mais c'est gourmand. Moi j'utiliserait la mémoire au lieu de me promener dans la base de tout les sens de façon aléatoire.
Un "GetRows" pour récupérer les 100 domaine dans un tableau (array). Et une simple boucle de 1 à 20 avec un "random" pour afficher les domaine au hazard. C'Est alors bien plus simple de stocker les nombre élus dans une chaine de façon à les comparer et éviter ainsi les doublons.