Télécharger le zip
Le code est effective simple à comprendre. Il bien d'autres méthodes sur VBFrance, mais celle-ci permet à un débutant de comprendre le code. J'en profite donc pour proposer une variante, avec mise en majuscule de certaines lettres et mélange des lettres et des chiffres, toujours en utilisant la méthode Rnd.Il s'agit d'une fonction à appeler. L'étape supplémentaire serait de supprimer la partie Select Case par un appel à la table de l'alphabet par son numéro :Public Function GeneratePassword(ByVal nbCharacter As Integer, ByVal nbNumber As Integer) As String Dim valueNumber As Integer, charLetter As String Dim posNumber As Integer, ct As Integer GeneratePassword = vbNullString If nbCharacter <= 0 And nbNumber <= 0 Then Exit Function Call Randomize For ct = 1 To nbCharacter Select Case 1 + Int(26 * Rnd) Case 1 charLetter = "a" Case 2 charLetter = "b" Case 3 charLetter = "c" Case 4 charLetter = "d" Case 5 charLetter = "e" Case 6 charLetter = "f" Case 7 charLetter = "g" Case 8 charLetter = "h" Case 9 charLetter = "i" Case 10 charLetter = "j" Case 11 charLetter = "k" Case 12 charLetter = "l" Case 13 charLetter = "m" Case 14 charLetter = "n" Case 15 charLetter = "o" Case 16 charLetter = "p" Case 17 charLetter = "q" Case 18 charLetter = "r" Case 19 charLetter = "s" Case 20 charLetter = "t" Case 21 charLetter = "u" Case 22 charLetter = "v" Case 23 charLetter = "w" Case 24 charLetter = "x" Case 25 charLetter = "y" Case 26 charLetter = "z" End Select Call Randomize GeneratePassword = GeneratePassword & IIf(Int(6 * Rnd) > 3, UCase$(charLetter), charLetter) Next ct For ct = 1 To nbNumber valueNumber = Int(9 * Rnd) Call Randomize posNumber = Int(Len(GeneratePassword) * Rnd) If posNumber >= 0 And posNumber <= Len(GeneratePassword) Then GeneratePassword = Left$(GeneratePassword, posNumber) & valueNumber & Right$(GeneratePassword, Len(GeneratePassword) - posNumber) Else GeneratePassword = GeneratePassword & valueNumber End If Next ct ct = Int(Len(GeneratePassword) * Rnd)End Function
Toujours pour les débutant, voici la même fonction mais avec la suppression du Select Case, trop long et peu optimisé. Cette variante utilise un alphabet et la fonction Mid$. Tout ceci peut encore être amélioré pour réduire la taille du code :Public Function GeneratePassword(ByVal nbCharacter As Integer, ByVal nbNumber As Integer) As String Dim valueNumber As Integer, charLetter As String Dim posNumber As Integer, ct As Integer GeneratePassword = vbNullString If nbCharacter <= 0 And nbNumber <= 0 Then Exit Function For ct = 1 To nbCharacter Call Randomize charLetter = Mid$("abcdefghijklmnopqrstuvwxyz", 1 + Int(26 * Rnd), 1) GeneratePassword = GeneratePassword & IIf(Int(6 * Rnd) > 3, UCase$(charLetter), charLetter) Next ct For ct = 1 To nbNumber valueNumber = Int(9 * Rnd) Call Randomize posNumber = Int(Len(GeneratePassword) * Rnd) If posNumber >= 0 And posNumber <= Len(GeneratePassword) Then GeneratePassword = Left$(GeneratePassword, posNumber) & valueNumber & Right$(GeneratePassword, Len(GeneratePassword) - posNumber) Else GeneratePassword = GeneratePassword & valueNumber End If Next ct ct = Int(Len(GeneratePassword) * Rnd)End Function
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 873 990 membres 22 nouveaux aujourd'hui 16 151 membres club