Série aléatoire sans doublons

Bonjour

je suis confronté a un problème et je bloque....

je dois générer en VBA dans une colonne excel une série de code aléatoire de 6 caractères

mélangeant chiffres et lettres ( à l'exeption du zero et de certaines lettres) et commençant obligatoirement par un E majuscule

Jusqu' là j'y suis arrivé..mais mon problème est qu'il ne faut pas que cela génère des doublons

Et là je seche

si quelq'un a une idée..?

Voici mon code actuel qui fonctionne, sans géstion des doublons

Sub code_alea()

Dim NbLig As Variant

Range("A2").Select

NbLig = Range("A2", Selection.End(xlDown)).Cells.Count

For x = 2 To NbLig + 1

Randomize

carac = "abcdefhjkmnpqrstuvwxyz123456789BCDEFGHJKMNPQRSTUVWXYZ"

lettre_aleatoire = ""

For i = 1 To 5

nombre_aleatoire = Int(Len(carac) * Rnd) + 1

lettre_aleatoire = lettre_aleatoire & Mid(carac, nombre_aleatoire, 1)

If i = 5 Then lettre_aleatoire = "E" & lettre_aleatoire

Next

Cells(x, 3) = lettre_aleatoire

Next

End Sub

Merci !!!

Bonjour le forum,

Voir le fichier joint.

130serie-aleatoire.xlsm (17.90 Ko)

Hola déjà.. quelle rapidité !!

je vais voir cela

Grand merci

Bonjour,

Les permutations de 5 caractères choisis parmi 53 donnent : 344 362 200 combinaisons.

La solution la plus rationnelle me paraît de vérifier à chaque tirage s'il n'a pas déjà été sorti, ce qui ne devrait pas se produire souvent... Une recherche avec Find est une solution qui semble tout à fait fonctionnelle.

Cordialement.

Bonjour

Merci de ta réponse

j'ai essayé avec un fichier de 10 000 lignes et j'avais 450 doublons environ

je vais voir du coté de Find

cdlt

Tu les as comptés ?

Normalement cela devrait être transparent : tu fais une boucle qui opère du début à la fin et qui teste avant de lui donner cours le tirage effectué, s'il n'est pas validable, elle le recommence.... Le seul effet visible est le temps global pour parvenir au résultat final.

bonjour

j'ai utilisé la fonction "supprimer les doublons"..

oui c'est bien l'idée, merci

mais je bloque sur la construction de la boucle pour l'instant

Ta macro un peu modifiée (je n'ai retenu que les modifications qui me paraissaient des améliorations indispensables (déclarations des variables, ordre des instructions, inhibition de la mise à jour de l'affichage, qualification d'objet systématique, suppression de Select, etc. sans oublier l'indentation qui fait gagner au moins 75% de temps de lecture d'une macro, sans compter les erreurs que cela permet d'éviter...)

Sub code_alea()
    Dim dl&, x&, nombre_aleatoire%, i%, carac$, lettre_aleatoire$
    With ActiveSheet
        dl = .Range("A2").End(xlDown).Row
        carac = "abcdefhjkmnpqrstuvwxyz123456789BCDEFGHJKMNPQRSTUVWXYZ"
        Randomize
        Application.ScreenUpdating = False
        For x = 2 To dl
            For i = 1 To 5
                nombre_aleatoire = Int(53 * Rnd) + 1
                lettre_aleatoire = lettre_aleatoire & Mid(carac, nombre_aleatoire, 1)
            Next i
            lettre_aleatoire = "E" & lettre_aleatoire
            If .Range("C1:C" & x - 1).Find(lettre_aleatoire, , , xlWhole) Is Nothing Then
                .Cells(x, 3) = lettre_aleatoire
            Else
                x = x - 1
            End If
            lettre_aleatoire = ""
        Next x
        Application.ScreenUpdating = True
    End With
End Sub

Cordialement.

Bonjour

Grand merci

je n'en attendais pas autant.. je suis épaté

cela fonctionne parfaitement et en plus je n'ai rien à faire de plus

chapeau bas et merci de m'avoir fait gagner un temps précieux

Je te suis redevable.

Bonne continuation.

Merci

A toi aussi

cordialement

Rechercher des sujets similaires à "serie aleatoire doublons"