Generateur de codes à 5 caractères distincts

Bonjour , j'ai écris un bout de code permettant de générer un code à 5 caractères distincts avec des lettres de l'alphabet allant de "a à i" et 4 symboles : + * / = ( il marche mais j'estime qu'on peut faire surement mieux)

, il y a t il un moyen de le faire plus court par exemple ..merci .

Sub gen_code_5_chif_dist()
t = Array("a", "b", "c", "d", "e", "f", "g", "h", "i")

 x = t(Int(Rnd * 9))
' MsgBox x
 For i = 0 To UBound(t)
   If t(i) = x Then
   y = y & x
   t(i) = Replace(t(i), x, "*")
   'on reboucle dans le nouveau tableau obtenu
   '*******************************
     x = t(Int(Rnd * 9))
    ' MsgBox x
    For j = 0 To UBound(t)
      If t(j) = x Then
          y = y & x
           t(j) = Replace(t(j), x, "/")
           'on reboucle encor une 3 ieme fois :
           '********************************************
             x = t(Int(Rnd * 9))
                   'MsgBox x
                     For k = 0 To UBound(t)
                             If t(k) = x Then
                             y = y & x
                             t(k) = Replace(t(k), x, "+")
                             'on rebloucle une 4 ieme fois
                             '*******************************************
                              x = t(Int(Rnd * 9))
                                'MsgBox x
                                 For s = 0 To UBound(t)
                                     If t(s) = x Then
                                      y = y & x
                                        t(s) = Replace(t(s), x, "-")
                                        '*****************************************
                                        'on reboucle une 5 ieme fois
                                        x = t(Int(Rnd * 9))
                                             'MsgBox x
                                           For w = 0 To UBound(t)
                                              If t(w) = x Then
                                                y = y & x
                                               t(w) = Replace(t(w), x, "=")
                                              End If
                                            Next
                                        '******************************************
                                      End If
                                Next
                             '*******************************************
                             End If
           Next
           '********************************************
      End If
    Next
   '********************************
   End If
 Next
MsgBox y

End Sub

Salut Rocket,

un code-fusée qui ne vérifie pas si il y a des doublons dans le code généré...

Quelles sont les conditions à respecter?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
sFlag = ""
Do
    sFlag = sFlag & Choose(Int(Rnd * 13) + 1, "a", "b", "+", "c", "d", "*", "e", "f", "/", "g", "h", "=", "i")
Loop Until Len(sFlag) = 5

MsgBox sFlag
'
End Sub

A+

Merci pour cette réponse Curulis57 , mais le test de ton code génère bien 5 caractères , mais certains se répètent alors qu'ils doivent être tous distincts


..par contre mon code ne genere pas de doublons ( selon ta remarque )

Salut Rocket,

voilà, sans doublons...

'
sFlag = ""
Do
    Do
        iOK = 1
        scode = Choose(Int(Rnd * 13) + 1, "a", "b", "+", "c", "d", "*", "e", "f", "/", "g", "h", "=", "i")
        If InStr(sFlag, scode) > 0 Then iOK = 0
    Loop Until iOK = 1
    sFlag = sFlag & scode
Loop Until Len(sFlag) = 5

MsgBox sFlag
'

A+

En effet ! c'est plus elegant et beaucoup plus court , un grand merci à toi

Bonsoir,

ma contribution à l'exercice

Sub gen_code_5_chif_dist()
    t = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "*", "/", "+", "-")
    For i = 1 To 5
        x = Application.RandBetween(0, UBound(t) + 1 - i)
        y = y & t(x)
        t(x) = t(UBound(t) + 1 - 1)
    Next i
    MsgBox y
End Sub

Merci H2so4 , mais quel est le role de Application.RandBetween .. je ne connais pas ?

Merci


en testant ton code , j'ai une erreur sur la ligne

x = Application.RandBetween(0, UBound(t) + 1 - i)

bonsoir,

application.randbetween(x,y) permet de générer un nombre entre x et y compris.

quel message d'erreur as-tu ? car le code que je t'ai fourni fonctionne tel quel.

Rechercher des sujets similaires à "generateur codes caracteres distincts"