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
erreur corrigée
round devait arrondir au superieur
VB:
Function getSerie(nb&, maxChiffre&, Optional desordre As Boolean = False)
    Dim i&, c&, x&, z&, q&, valoche&
  ReDim tbl(1 To nb, 1 To 1)
    x = Val(Mid("111111111111111", 1, Abs(maxChiffre&)))
    z = Val(Mid("999999999999999", 1, Abs(maxChiffre&)))
    'q = Round((z - x) / nb, 0) : q = IIf(q < 1, 1, q)
     q = Int((z - x) / nb): q = IIf(q < 1, 1, q)
 
    For i = 1 To nb
        x = x + Abs(q)
        tbl(i, 1) = x
    Next
    If desordre Then
        For i = 1 To nb / 2
            x = 1 + (Round((Rnd * (nb - 1))))
            valoche = tbl(x, 1): tbl(x, 1) = tbl(i, 1): tbl(i, 1) = valoche
        Next
    End If
    getSerie = tbl
End Function
 

patricktoulon

XLDnaute Barbatruc
@patricktoulon ;),

Le demandeur ne veut pas de zéro dans les nombres de la liste.
Ta méthode supprime l'aléatoire puisque chaque tirage comporte les mêmes nombres (dans un ordre différent)

re
bonsoir mapomme
l'alea dépend du nombre d'items et de la distance entre le min et le max
en l’occurrence ici 240000 items avec la distance de 100000 à 999999 donne 3
j'arrondi bien sur c'est 3 et des brouettes en fait
je suis curieux
si j’enlève tout les nombres avec les zero combien de possibilité me reste t il
-1 pour unité
-9 pour dizaine
-9 pour centaine
-9 pour millier
etc...etc..
et chaque -9 puissance les autres -9
ca en fait un paquet ;) à enlever
 

patricktoulon

XLDnaute Barbatruc
Je suis d'accord mais pour le même triplet (min, max, nombre à tirer), les nombres tirés seront les mêmes à chaque exécution.
Il faudrait à chaque exécution, prendre au hasard le premier nombre entre 111111 et 111111+q ???
quelle importance ??? le désordre est opéré ensuite

seul les 3 111111+q -1 de ces 3 premiers serait manquants

avec un step de 3 max pour 240000(items/valeurs) on a pas vraiment beaucoup de possibilités
;)
presque utiliser une des fonctions alea,rnd random etc.. est superflu
je dis bien presque
dans ma version on peut mettre le q(step) en alea si tu veux (de 1 a 3) a chaque tour
mais c'est tout
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

dans ma version on peut mettre le q(step) en alea si tu veux (de 1 a 3) a chaque tour
Oui mais si on tire un nombre supérieur à la moitié des nombres possibles, on aura q=1 et on sortira toujours les mêmes nombres (qui se suivront d'ailleurs). D'un autre côté, le demandeur n'a pas parlé de nombre aléatoire o_O.

Allez il est temps de se coucher, le demandeur a suffisamment le choix et nous, nous allons faire de beaux rêves de quinté gagnant, de numéro de loto gagnant ...

Bonnet de nuit
1594072371667.png
 

patricktoulon

XLDnaute Barbatruc
re
le départ est aléatoire
le step est aléatoire
VB:
Sub textx()
   Dim Serie
   Serie = getSerie(240000, 6, False) 'mettre true pour desordre
    Cells(1, 1).Resize(240000, 1).Value = Serie
End Sub
Function getSerie(nb&, maxChiffre&, Optional desordre As Boolean = False)
    Dim i&, c&, x&, z&, q&, valoche&
  ReDim tbl(1 To nb, 1 To 1)
    x = Val(Mid("111111111111111", 1, Abs(maxChiffre&)))
    z = Val(Mid("999999999999999", 1, Abs(maxChiffre&)))
    q = Round((z - x) / nb, 0): q = IIf(q < 1, 1, q)
    x = x + Int(Rnd * Abs(q))
    For i = 1 To nb - 1
        x = x + 1 + (Abs(Rnd * (q - 1)))
        If x Mod 10 = 0 Then x = x + 1 'remplace  les sortants mod 10
        If x Mod 100 = 0 Then x = x + 1 'remplace  les sortants mod 100
      
       tbl(i, 1) = x
    Next
    If desordre Then
        For i = 1 To nb / 2
            x = Round(1 + (Rnd * nb - 1))
            valoche = tbl(x, 1): tbl(x, 1) = tbl(i, 1): tbl(i, 1) = valoche
        Next
    End If
    getSerie = tbl
End Function
 

Statistiques des forums

Discussions
312 291
Messages
2 086 841
Membres
103 399
dernier inscrit
Tassiou