Bonjour à tous,
Je crois entrevoir le besoin...
Si on tire 20 fois un jeton dans une boite qui contient 20 jetons différents, en remettant à chaque fois le jeton dans la boite après l'avoir regardé, on a de grandes chances de tirer plusieurs fois le même.
C'est équivalent à ce que fait la formule :
=INDEX($B$3:$B$22;ALEA()*LIGNES($B$3:$B$22)+1)
Et c'est ce que Gothc ne veut pas
Il veut générer une liste de 20 nombres
différents au hasard.
Un algorithme simple consiste à partir d'une liste de 20 nombres différents (mettons 1, 2, 3,..., 19, 20), puis de réaliser "un certain nombre" de permutations aléatoires de deux nombres de cette liste.
Ce que fait ListeAleasSansDoublon dans ce petit programme :
Public Sub ListeAleasSansDoublon(n%, ByRef liste%())
Dim i%, j%, k%, u%
ReDim liste(1 To n)
For i = 1 To n: liste(i) = i: Next i
Randomize Timer
For k = 1 To n
i = 1 + Int(Rnd * n): j = 1 + Int(Rnd * n)
u = liste(i): liste(i) = liste(j): liste(j) = u
Next k
End Sub
Public Sub Test()
Dim li%(), nb%, i%
nb = 20
ListeAleasSansDoublon nb, li
For i = 1 To nb: Debug.Print li(i): Next i
End Sub
Le "certain nombre" de permutations (la boucle For k = 1 To n) doit au minimum être égal au nombre d'éléments de la liste (20 dans notre cas). Mais plus on fait de permutations, mieux c'est (on peut prendre 10 x n si on n'a pas des milliers d'éléments)
Je laisse de côté l'animation
Bonne soirée