Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

créer 17 000 000 de codes aléatoires et dédoublonnés

  • Initiateur de la discussion Initiateur de la discussion creapoline
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

creapoline

Guest
Bonjour,

j'ai un gros dilème ce soir, je dois créer un fichier de 17 000 000 de codes aléatoires (8 chiffres et 1 lettre ex : 12845627A) sous excel 2003.
Et en plus les déboublonner!

est ce possible?

si oui comment faire etant donné que je n'ai que 65 536 ligne sous 2003!

Je réflechis mais je vois aps trop comment faire...merci pour votre aide!
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Bonsoir


Oui c'est possible.

Il faut commencer part chercher l'info ou elle se trouve

1) Sur les fils de discussions existants sur XLD

2) Sur le net (ailleurs, si XLD pas suffisant)

PS: 17 000 000/65536 = 260 feuilles (environ)
mais ...65536*256=16 777 216
 
Dernière édition:
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

bonsoir,

merci pour cette réponse, j'ai chercher un peu partout sur le net et j'avoue que je suis très novice sur Excel...et je ne comprends pas tout.
pour le moment j'arrive a créer les codes et je les mets sur colonnes
le problème c'est de déboublonner...

J'ai beau chercher je ne trouve pas j'ai tenter plusieur prog je n'y arrive pas...
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Re

Tu as calculé le nombre de combinaisons/permutations possibles ?

Un exemple issu du net pour génerer 123 "codes"
Lancer la macro : test
VB:
Public Function RL(Cnt1 As Integer, Cnt2 As Integer, MySet As Integer)
'source: mdmackillop
    Dim Rand$, i&, RndNo%, XSet%, MyCase%
    Application.Volatile
    Select Case MySet
    Case Is = "1" 'Upper case
        MyCase = 65: XSet = 26
    Case Is = "2" 'Numeric digits
        MyCase = 48: XSet = 10
    End Select
    RndNo = Int((Cnt2 + 1 - Cnt1) * Rnd + Cnt1)
    Do
        i = i + 1
        Randomize
        Rand = Rand & Chr(Int((XSet) * Rnd + MyCase))
    Loop Until i = RndNo
    RL = Rand
End Function
VB:
Sub test()
Dim i&
For i = 1 To 123
Cells(i, 1) = RL(8, 8, 2) & RL(1, 1, 1)
Next i
End Sub
 
Dernière édition:
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Re


Si tu cherches des infos sur les permutations et les combinaisons, je pense que cela t'aidera à mieux comprendre

Une question : pourquoi dois-tu générer 17 000 000 de codes ?
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Bonsoir.
Aïe, elle donne des doublons, ta solution, Staple1600 !
Je me suis amusé à chercher "à l'arrache" une solution à la question posée par creapoline (c'est pour un bizutage ?), et ça donne ça :
Code:
Sub test()
    Dim n, i, Nbre As Single
    Dim Txt, Lettre As String
    Dim Tablo() As String
    Dim Debut As Single
    
Rem top chrono
    Debut = Timer

Rem initialise le tableau
    ReDim Tablo(0)
    
Rem cherche 10 000 codes sans doublons
    Do While n < 10000
        ' boulègue
        Randomize
        ' nombre aléatoire entre 1 et 17 000 000 inclus
        Nbre = Int((17000000 * Rnd) + 1)
        ' lettre aléatoire entre A et Z inclus
        Lettre = Chr((26 * Rnd) + 65) '65 à 90
        ' code aléatoire : nombre + lettre - formaté pour une meilleure lisibilité
        Txt = Format(Nbre, "00,000,000") & " " & Lettre
        ' vérifie que le code n'existe pas déjà
        For i = 0 To UBound(Tablo())
            If Tablo(i) = Txt Then
                ' ne sotcke pas le code s'il existe déjà dans le tableau
                GoTo ignore
            End If
        Next
        ' stocke le code dans le tableau s'il n'y est pas déjà
        n = n + 1
        ReDim Preserve Tablo(n)
        Tablo(n) = Txt
ignore:
    Loop

Rem     Recopie le tableau dans la colonne "A" de la feuille active
    For i = 1 To UBound(Tablo())
        Cells(i, 1) = Tablo(i)
    Next
    
Rem     Trie la colonne "A" en ascendant
    Columns("A:A").Sort _
        Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Rem     Message indiquant le délai de traitement
    MsgBox "Traité en " & Timer - Debut & " seconde(s)", 64, "Bizutage"
    
End Sub

Mais c'est long, long ! 14 secondes (sur ma machine, qui n'est quand même pas un vieux ravan) pour 10 000 codes sans doublons, combien pour 17 000 000 ? Et n'y aura-t-il pas dépassement de capacité au delà d'un certain nombre de codes ?

Bonne nuit.
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Re, bonsoir Lermiton


Je demande l'aide d'un matheux

pour déterminer le nombre de combinaisons possibles

A mon vue de nez, il y en beaucoup moins que 17 000 000

Pour 8 chiffres on a : =FACT(8) = 40 320

reste à déterminer le nombre de combinaisons en ajoutant une lettre à la fin .

Mais là STOP, je vais dodo

La migraine aura été la plus forte.

PS: Lis bien mes messages, Lermiton , ce n'était pas ma solution.
 
Dernière édition:
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Re, bonsoir Staple1600

Désolé, j'aurais du écrire "la solution que tu cites". J'ai écris trop vite !

Et pour les maths, il doit s'agir d'arrangements, si mon souvenir est bon, mais les cours de maths sont si loin ... et je ne sais plus où j'ai fourré mon pense-bête de formules.

Sur ce, bonne nuit, il est temps !
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Je dois faire ça pour un jeu concours...je dois créer 17 million de code unique parceque j'ai 17 million de produits

j'ai réussit a faire les codes grace a la concaténation

j'ai donc a faire 65536*26 colonnes*10feuilles. uff ça va etre long!

mais pour dédoublonner c'est là que je ne vois pas comment faire...
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Bonjour à tous
(...)

j'ai donc a faire 65536*26 colonnes*10feuilles. uff ça va etre long!

mais pour dédoublonner c'est là que je ne vois pas comment faire...
Ca risque effectivement d'être très, très, très long... ... et très encombrant !

Pour ce qui est de "dé-doublonner", vous pouvez l'éviter en suivant la voie indiquée par Lermiton, qui consiste à éliminer les doublons dès l'engendrement des codes.

Voici un code vraisemblablement un peu plus rapide :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim i&, j&, n&, tmp$, oDat$(), oColl As New Collection
Dim t! [COLOR="Sienna"]'*[/COLOR]
t = Timer [COLOR="Sienna"]'*[/COLOR]
  n = 65536
  ReDim oDat(1 To n, 0)
  Randomize
  On Error Resume Next
  Do
    tmp = Format(Int(100000000 * Rnd), "00000000") & "-" & Chr(65 + 26 * Rnd)
    oColl.Add tmp, tmp
    If Err.Number = 0 Then j = j + 1: oDat(j, 0) = tmp Else Err.Clear
  Loop While j < n
  On Error GoTo 0
  Set oColl = Nothing
MsgBox Timer - t [COLOR="Sienna"]'*[/COLOR]
t = Timer [COLOR="Sienna"]'*[/COLOR]
  [A1].Resize(n, 1).Value = oDat
  Erase oDat
MsgBox Timer - t [COLOR="Sienna"]'*[/COLOR]
End Sub[/B][/COLOR]
Ce code crée une colonne complète sans doublon (et je me garderai d'aller au-delà...)

Les lignes marquées d'une étoiles peuvent être supprimées. Elles sont là pour montrer que le temps de calcul est raisonnable (moins d'une seconde sur ma machine plutôt lente...) et que le problème vient de la faiblesse de l'interface d'Excel. Vous constaterez que presque tout le temps nécessaire est dû à l'inscription du résultat dans la feuille (plus de cinquante secondes).​
ROGER2327
#4282


Vendredi 6 Haha 138 (Sainte Tourte, lyrique et Sainte Bévue, sociologique, SQ)
20 Vendémiaire An CCXIX
2010-W41-1T01:17:27Z
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Bonjour à tous

ROGER2327
:
Puis je vous demander, svp, de nous indiquer si mon questionnement de 00h10 est juste ou erroné ?
Et s'agit-il ici de combinaisons de permutations ou d'arrangements ?
(Et combien y-a-t il de "possibilités" pour 8 chiffres et une lettre ? )
Mon niveau de connaissances en maths ne me permets pas de répondre seul à ces questions (et les infos que j'ai cherché sur le net ne me l'ont pas permis non plus pour le moment)

Merci d'éclairer ma lanterne.

PS: Si un autre membre du forum féru de mathématiques passe par là qu'il n"hésite pas lui aussi à éclairer ma lanterne. Merci
 
Dernière édition:
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Bonjour tout le monde,

@Staple1600 : il est dit un nombre à 8 chiffres mais il n'est pas dit qu'on ne pouvait pas utiliser les chiffres de 0 à 9 ce qui laisse 100000000*26=2.6 milliards de combinaisons

Au niveau temps de calcul je pense qu'il est illusoire de vouloir tirer 17 millions de combinaisons sans doublons dans un temps raisonnable. Même en les faisant avec un dictionary... (en supposant qu'il puisse gérer 17000000 d'entrées)

Je propose une autre approche, tirer 680000 nombres de 8 chiffres aléatoires. Ce qui va être déjà très long mais moins de la journée je pense.
A titre d'exemple sur un core i7, avec dictionary, au début il en est créé 20000 à la minute, arrivé à 250000 il n'en fait plus que 6000 à la minute, à 300000 plus que 5000...) .
680000 auquels ajouter 25 lettres (pour simplifier les comptes et éliminer le O) pour arriver aux 17000000.

Si le fait qu'un nombre avec ses 25 lettres soient regroupés est rédhibitoire on peut envisager des échanges aléatoires 2 à 2 et puis laisser tourner tant qu'on a du temps ;-)

Je ne vais pas plus loin, il est temps d'aller au boulot...
Au demandeur de dire ce qu'il en pense

eric
 
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Re


Merci Eriic
Ceci n'est pas juste alors ?
Pour 8 chiffres on a : =FACT(8) = 40 320
Je voyais ceci comme un doublon (par exemple)
12345678A
87654321A

Et je pensais que les chiffres de 0 à 9 ne devaient être utilisés qu'une seule fois dans le code généré.

Si on prends cela comme contrainte: combien de codes sont possibles alors ?

PS : pourquoi 100 000 000 ?
 
Dernière édition:
Re : créer 17 000 000 de codes aléatoires et dédoublonnés

Re staple,

Ceci n'est pas juste alors ?
Pour 8 chiffres on a : =FACT(8) = 40 320

Si, c'est juste.
Même trop juste pour avoir ce qu'il faut ;-)

Mais là tu te limites aux chiffres de 1 à 8 par exemple, je pense qu'on peut utiliser les chiffres de 0 à 9 mais pour générer des nombres à 8 chiffres.
C'est à dire de 00000000 à 99999999 ce qui fait 100000000 combinaisons (ou permutations plus exactement, si roger le matheux peut confirmer, c'est loin pour moi aussi... 🙂).

Pour moi 12345678A et 87654321A ne sont pas des doublons.
Le demandeur précisera

Bonne journée
eric
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

J
Réponses
0
Affichages
815
Jonathan.uvs
J
Réponses
0
Affichages
936
G
Réponses
27
Affichages
2 K
gluon1976
G
K
Réponses
5
Affichages
14 K
K
S
Réponses
22
Affichages
18 K
sadlersmith
S
H
Réponses
6
Affichages
4 K
Helios67
H
B
Réponses
4
Affichages
2 K
B
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…