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

XL 2016 Générateur mot de passe

ReneDav14000

XLDnaute Occasionnel
Bonjour à tous,

J'ai trouvé ce code sur Internet qui permet de générer un mot de passe. Ce code est l'œuvre de patricktoulon que je remercie.
Ma question est la suivante :
Est-il possible grâce à ce code de générer un MP automatiquement lorsque l'utilisateur tape un NOM dans une TextBox ?
Par exemple : il tape LEGRAND dans la TextBox et après tabulation le MP de créé dans une autre TextBox sans qu'il ait besoin d'intervenir dans l'objet.
Merci par avance pour votre (j'ai un peu de temps avant mon départ).
VB:
'Code créé par patricktoulon

Private Sub CommandButton1_Click()
    Dim tablo, chaine As String, cpt As Long, dico As Object
    Dim strLettres, strChiffres, faire, lettre As String, chiffre As String, symb As String, ind As Long
    
    strLettres = Split(StrConv("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", vbUnicode), Chr(0))
    strChiffres = Split(StrConv("0123456789", vbUnicode), Chr(0))
  
    Randomize
    
    ReDim tablo(Val(NBMP), 2)
    Set dico = CreateObject("Scripting.Dictionary")
    
    Do    ' boucle general pour le nombre de mots de passe
        cpt = cpt + 1: chaine = "": faire = dico.RemoveAll()
        
        Do    'boucle pour les caracteres
            lettre = strLettres(Rnd * UBound(strLettres))
            If Not dico.exists(lettre) Then dico(lettre) = "": chaine = chaine & lettre
        Loop Until dico.Count = Val(NBCA)
        
        Do    'boucle pour les chiffres
            chiffre = strChiffres(Rnd * UBound(strChiffres))
            If Not dico.exists(chiffre) Then dico(chiffre) = "": chaine = chaine & chiffre
        Loop Until dico.Count = Val(NBCA) + Val(NBCH)
        
      
        faire = dico.RemoveAll()
        Do    ' boucle pour mettre en desordre les carateres
            ind = Round(Rnd * Len(chaine)): If ind = 0 Then ind = 1
            lettre = Mid(chaine, ind, 1)
            If Not dico.exists(lettre) Then dico(lettre) = "": tablo(cpt - 1, 0) = tablo(cpt - 1, 0) & lettre
        Loop Until dico.Count = Len(chaine)
        
        tablo(cpt - 1, 1) = Len(tablo(cpt - 1, 0)) & " caracteres "
    
    Loop Until cpt = Val(NBMP)
    ListBox1.ColumnCount = 2: ListBox1.List = tablo
End Sub
 
Solution
re
voici adapter et remastérisée en function
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    With TextBox2
        'nombre de lettre au hasard (entre 6 et 12) ,nombre de chifre au hazard(entre 2 et 5)
        '.value = createpasword

        'ou
        '10 lettre ou symbole  au hasard et 4 chiffres au hasard
        .Value = createpasword(10, 4)
        .SelStart = 100
    End With
End Sub
Function createpasword(Optional nbchar& = 0, Optional nbNum& = 0)
Dim x&, i&, t

    If nbchar = 0 Then nbchar = 6 + (Round(Rnd * 6))
    If nbNum = 0 Then nbNum = 2 + (Round(Rnd * 3))

    Set dico = CreateObject("Scripting.Dictionary")
    strlettres =...

patricktoulon

XLDnaute Barbatruc
re
voici adapter et remastérisée en function
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    With TextBox2
        'nombre de lettre au hasard (entre 6 et 12) ,nombre de chifre au hazard(entre 2 et 5)
        '.value = createpasword

        'ou
        '10 lettre ou symbole  au hasard et 4 chiffres au hasard
        .Value = createpasword(10, 4)
        .SelStart = 100
    End With
End Sub
Function createpasword(Optional nbchar& = 0, Optional nbNum& = 0)
Dim x&, i&, t

    If nbchar = 0 Then nbchar = 6 + (Round(Rnd * 6))
    If nbNum = 0 Then nbNum = 2 + (Round(Rnd * 3))

    Set dico = CreateObject("Scripting.Dictionary")
    strlettres = Split(StrConv("abcdefg/hijklmnopqrst|uvwxyzABCD_EFGH?IJKLMN-OPQRS.TUVWXYZ", vbUnicode), Chr(0))
    strChiffres = Split(StrConv("0123456789", vbUnicode), Chr(0))


    'recupération des lettres au hazard(nombre de lettre =nbchar)
    Do While dico.Count < nbchar
        x = Round(Rnd * UBound(strlettres))
        dico(strlettres(x)) = ""
    Loop
    'recupération des chiffres au hazard(nombre de chiffre =nbnum)
    Do While dico.Count < nbchar + nbNum
        x = Round(Rnd * UBound(strChiffres))
        dico(strChiffres(x)) = ""
    Loop

    'mélange des caractères obtenus
    t = dico.keys
    For i = 1 To 10
        x1 = Round(Rnd * UBound(t))
        x2 = Round(Rnd * UBound(t))
        xx = t(x1)
        t(x1) = t(x2): t(x2) = xx
    Next
    createpasword = Join(t, "")
End Function
démo
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…