XL pour MAC Codes à 6 chiffres sans doublons

Artchi29

XLDnaute Nouveau
Bonjour,

Je cherche un moyen de créer une liste de 240 000 codes uniques à 6 chiffres. Les codes pouvant être composés de chiffres allant de 1 à 9.

Le but étant de mettre en place un jeu avec des codes gagnants. Aucun doublon n'est donc possible. Si vous avez des solutions je suis preneur.

Merci beaucoup,

Arthur
 

patricktoulon

XLDnaute Barbatruc
maintenant je peux me venter d'avoir la plus petite
et sans zero

VB:
Sub testxy()
Dim tblmemo(1 To 999999), tbl(1 To 240000, 1 To 1), tblnumero(1 To 6)
Do
For n = 1 To 6: tblnumero(n) = Int(1 + (Rnd * 8)): Next: num = Join(tblnumero, "")
If tblmemo(num) = "" Then tblmemo(num) = num: i = i + 1: tbl(i, 1) = num
Loop Until i = 240000
Cells(1, 1).Resize(240000).Value = tbl
End Sub

:p :p :p :p :p :p

une variable tableau en guise de dictionnaire y a qu'un toulonnais percher pour faire ça
:p :p :p :p
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour mapomme
purée pourquoi je n'ai pas vu quelque chose d'aussi simple
Social Media and My Need to Be Liked | Emoticone, Smiley heureux ...

la même avec une seule boucle avec mon idée de tableau dico
VB:
Sub ListeAlea240000pat()     'mapomme
    Dim i&, n&, t0, m&, x&, t(1 To 531441, 1 To 1) As Long, dico(1 To 999999)
    t0 = Timer: Randomize
    Do
        i = 111111 + Int(Rnd * (999999 - 111111))
        If InStr(i, 0) = 0 And dico(i) = "" Then n = n + 1: t(n, 1) = i: dico(i) = i
    Loop Until n = 240000

    Range("a1").Resize(240000) = t
    MsgBox "Liste établie en " & Format(Timer - t0, "0.00 \s"), vbInformation
End Sub

le temps est quasi identique
mais c'est quand même étonnant et surprenant( quoi que!!) moi arrêtant la boucle à 240000 je mette autant que toi bouclant 531441 pour chopper les nombres et une 2d fois sur 240000 pour le désordre
comme quoi les if et rnd peuvent être très lourds
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
mais c'est quand même étonnant et surprenant( quoi que!!) moi arrêtant la boucle à 240000 je mette autant que toi bouclant 531 441 pour chopper les nombres et une 2d fois sur 240000 pour le désordre
comme quoi les if et rnd peuvent être très lourds
Une explication peut-être ? :

Dans ton dernier code (qui n'est pas de mapomme), tu ne contrôles pas le nombre de fois où on passe dans la boucle DO. J'ai fait un test avec 400 000 éléments à tirer au sort. On passe en moyenne plus de 1 million de fois dans la boucle DO pour atteindre 400 000 nombres différents, soit près de deux fois le nombre max d'éléments sans doublon possible qui est 531 441. En fait, plus il y a de nombres à tirer, plus le nombre de passages va augmenter car on tombera de plus en plus fréquemment sur des doublons.

C'est d'ailleurs pour ça aussi que pour ce type de boucle, on définit souvent un nombre de passage max dans la boucle pour ne pas y tourner "indéfiniment" quand on tire un grand nombre de numéro proche du maximum (531 441 dans notre cas)

Pour les tirages au sort, je me suis aperçu que les méthodes étaient "rapides" dans des plages de quantité à tirer. Certaines sont plus rapides avec un grand nombre d'élément à tirer mais pénalisées quand le nombre à tirer est plutôt faible et pour d'autres méthodes, c'est le contraire. Il n'y a pas une méthode meilleure dans tout les cas.
 
Dernière édition:

Statistiques des forums

Discussions
314 761
Messages
2 112 598
Membres
111 616
dernier inscrit
visual