suite de numéros aléatoires

Num

XLDnaute Nouveau
Bonjour à tous.
Avis à tous les super pro d'excel ! ;)
Voici ce que je souhaiterai réaliser dans un onglet excel :

De la cellule A1 à A10 (par exemple) je souhaiterai avoir des numéros aléatoires alphanumériques codé sur 10 caractères.
En suite je souhaiterai refaire la même manipulation mais de la cellule C15 à C40 (par exemple).
Par contre je souhaites que des numéros aléatoires uniques dans tout l'onglet !
donc la suite de C15 à C40 doit être différente de celle de A1 à A10.
Le but étant de réaliser plusieurs suite de numéro aléatoire dans un onglet.

Je pense qu'il faut réaliser un macro avec comparaison des nombres créés dans l'onglet, mais la moi je cale :(

Merci d'avance pour vos réponses. :)
 

Staple1600

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Bonjour


Je te laisse t'inspirer de :
Code:
Sub RandomPassword()
'auteur: Dave Hawley
    Dim strPassword As String
    Dim i As Integer
    For i = 1 To 10
        If i Mod 2 = 0 Then
            strPassword = Chr(Int((90 - 65 + 1) * Rnd + 65)) & strPassword
        Else
            strPassword = Int((9 * Rnd) + 1) & strPassword
        End If
    Next i
     MsgBox strPassword
End Sub
• Pour générer par formule
(en reprenant l'exemple VBA)

=CAR(ENT(90-65+1)*ALEA()+65)&CAR(ENT(90-65+1)*ALEA()+65)

Génère deux lettres aléatoires

Tu peux aussi employer des formule nommée
Insertion/Noms/Définir
Ex: LALEA
=CAR(ENT(90-65+1)*ALEA()+65)
Puis
DIXLettresA

=LALEA&LALEA&
LALEA&LALEA&LALEA&LALEA&LALEA&LALEA&LALEA&LALEA

Ensuite dans une cellule tu saisis:
=DIXLettresA


Edition: bonjour Pierrejean, bonjour Pierrot93
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : suite de numéros aléatoires

bonjour Num

Je ne suis pas super pro , donc je ne ferai qu'une suggestion
Creer des le depart un tableau (sans doublon) de numeros alphanumeriques suffisament important , et ensuite puiser dans ce tableau au fur et a mesure des besoins
As-tu une idée du nombre maximum de numeros a creer ?
Y a t il des regles a respecter pour la constitution des numeros ?

Edit : Salut Staple :)
 

Pierrot93

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Bonjour Num, PierreJean, Jean-Marie

une autre solution, la bonne idée d'utiliser la fonction "choose" dans ce cas est de l'ami Didier:) :

Code:
Option Explicit
Sub test()
Dim i As Byte, c As Byte, l As Byte, x As String, y As String, z As Byte, w As Byte
Randomize
w = 10
For c = 1 To 3 Step 2
    For l = 1 To w
        For i = 1 To 10
            x = Choose(Int((36 * Rnd) + 1), "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" _
            , "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" _
            , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
            y = y & x
        Next i
        Cells(l + z, c).Value = y
        y = ""
    Next l
z = 14
w = 26
Next c
End Sub

bon après midi.
@+
 

Num

XLDnaute Nouveau
Re : suite de numéros aléatoires

tout d'abord merci pour vos réponses si rapide !

pierrejean : il n'y a pas de structure à respecter, juste qu'il soit de 10 carractère.
Concernant le nombre je ne sais pas combien.

Je vais essayer les différentes solutions proposées et je vous tient au courant.

Ce qui me fait peur c'est que je ne vois pas qu'elle est la formule qui va controler sur tout mon onglet, qu'il n'y a pas de doublon !

Je vais tester !
 

Pierrot93

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Re

pour que tu rencontres la même chaine de 10 caractères, sauf erreur de ma part, tu as un risque sur 922 393 263 052 800 (permutations possibles)... enfin si j'ai bien compris ta demande...

@+
 

Num

XLDnaute Nouveau
Re : suite de numéros aléatoires

le code aléatoire correspond à un produit.
un code = un produit

et par onglet j'ai différente famille.
Ce qui me donne le code final suivant

"code famille" + "numéro aléatoire" + "incrémentation"

ex : EBTG 920zp3z8yq 0001
donc dans tout mon premier onglet il y aura des codes commencant par EBTG....

L'autre onglet famille suivante...

sinon j'ai testé le code de Pierrot93, il faudrait juste que je puisse lui déterminer la plage d'action, au lieu qu'il soit impossé par le code.

Par exemple je sélectionne une zone puis je lance la macro et la j'ai tous les numéros aléatoires !! le rêve quoi !

Sinon concernant le fonction "choose", comment peux ton controler qu'il ne génére pas de doublon?
 

Pierrot93

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Re

pour pouvoir sélectionner une ou plusieurs plages de cellules :

Code:
Option Explicit
Sub test()
Dim c As Range, maplage As Range, i As Byte, x As String, y As String
Randomize
On Error Resume Next
Set maplage = Application.InputBox("selectionnez une ou" & vbLf _
    & "plusieurs plage(s) de cellules !!!", , , , , , , 8)
On Error GoTo 0
If Not maplage Is Nothing Then
    For Each c In maplage
        For i = 1 To 10
            x = Choose(Int((36 * Rnd) + 1), "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" _
            , "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" _
            , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
            y = y & x
        Next i
        c.Value = y
        y = ""
    Next c
End If
End Sub

@+
 

Pierrot93

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Re

pour éviter les caractères en doublon dans une même chaîne :

Code:
Option Explicit
Sub test()
Dim c As Range, maplage As Range, i As New Collection, ii, x As String, y As String
Randomize
On Error Resume Next
Set maplage = Application.InputBox("selectionnez une ou" & vbLf _
    & "plusieurs plage(s) de cellules !!!", , , , , , , 8)
On Error GoTo 0
If Not maplage Is Nothing Then
    For Each c In maplage
        Do While i.Count < 10
            x = Choose(Int((36 * Rnd) + 1), "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" _
            , "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" _
            , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
            On Error Resume Next
            i.Add x, CStr(x)
        Loop
        On Error GoTo 0
        For Each ii In i
            y = y & ii
        Next ii
        Set i = Nothing
        c.Value = y
        y = ""
    Next c
End If
End Sub

bonne soirée
@+
 

pierrejean

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Re

Voila un essai avec garantie de non doublon

Attention cette garantie n'est valable que pour la session de l'userform


Edit: Pierrot :) Toujours heureux de te croiser
 

Pièces jointes

  • NUM1.zip
    12 KB · Affichages: 72

Pierrot93

XLDnaute Barbatruc
Re : suite de numéros aléatoires

Re,

allez dernière version pour le fun, avec recherche de doublon sur toutes les feuilles du classeurs :

Code:
Option Explicit
Sub test3()
Dim c As Range, maplage As Range, i As New Collection, ii, x As String, y As String
Dim ws As Worksheet, r As Range
Randomize
On Error Resume Next
Set maplage = Application.InputBox("selectionnez une ou" & vbLf _
    & "plusieurs plage(s) de cellules !!!", , , , , , , 8)
On Error GoTo 0
If Not maplage Is Nothing Then
    For Each c In maplage
debut:
        Do While i.Count < 10
            x = Choose(Int((36 * Rnd) + 1), "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" _
            , "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" _
            , "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
            On Error Resume Next
            i.Add x, CStr(x)
        Loop
        On Error GoTo 0
        For Each ii In i
            y = y & ii
        Next ii
        Set i = Nothing
        For Each ws In Worksheets
            Set r = ws.Cells.Find(y, , xlValues, xlPart, , , False)
            If Not r Is Nothing Then y = "": GoTo debut
        Next ws
        Set r = Nothing
        c.Value = y
        y = ""
    Next c
End If
End Sub

j'aime bien également ta solution PierreJean:)

@+
 

Discussions similaires

Réponses
9
Affichages
229
  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
462

Statistiques des forums

Discussions
312 756
Messages
2 091 737
Membres
105 060
dernier inscrit
DEDJAN Gaston