IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Générateur de mot de passe [AC-2007]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Générateur de mot de passe
    Bonjour,

    Je travail sur une table important des données utilisateurs depuis un fichier Excel.
    Lors de l'import, je dois attribuer à chaque utilisateur un mot de passe générer aléatoirement.

    J'ai trouvé une fonction VBA afin de générer les mots de passe ainsi qu'une requête sql afin d'appeler la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Function MOTDEPASSE(Optional Longueur As Long = 8, Optional Nbre_chiffres As Integer = 0, Optional Nbre_symboles As Integer = 0) As String
     
    ' Déclaration des constantes '
    ' On limite à 10 le nombre maximal de chiffres et de symboles '
    Const maxChiffres = 10
    Const maxSymboles = 10
     
    ' Déclaration des variables '
    Dim i, j, n, debut, fin As Long
    Dim strLettres, strChiffres, strSymboles, strChaine, strMot As String
    Dim varTab, varTemp As Variant
     
    ' Chaînes de caractères contentant lettres, chiffres et symboles '
    strLettres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    strChiffres = "0123456789"
    strSymboles = "@#&§%$£€(){}[]\`~_<>=+-*/!?;.:"
    strChaine = strLettres & strChiffres & strSymboles
     
    ' On limite le nombre total de chiffres '
    If Nbre_chiffres > maxChiffres Then
        Nbre_chiffres = maxChiffres
    ' On limite le nombre total de chiffres à la longueur du mot de passe '
    ElseIf Nbre_chiffres > Longueur Then
        Nbre_chiffres = Longueur
    End If
     
    If (Nbre_symboles + Nbre_chiffres) > Longueur Then
        Nbre_symboles = Longueur - Nbre_chiffres
    ' On limite le nombre total de symboles '
    ElseIf Nbre_symboles > maxSymboles Then
        Nbre_symboles = maxSymboles
    ' On limite le nombre total de symboles à la longueur du mot de passe '
    ElseIf Nbre_symboles > Longueur Then
        Nbre_symboles = Longueur
    End If
     
    ' On redéfinit la taille du tableau en fonction de la longueur du mot de passe '
    ReDim varTab(Longueur)
     
    ' Si l’argument Nbre_chiffres est renseigné '
    If Nbre_chiffres > 0 Then
        ' On détermine les positions de début et de fin de la chaîne '
        debut = CLng(Len(strLettres) + 1)
        fin = CLng(debut + Len(strChiffres) - 1)
        ' Boucle permettant de stocker les chiffres dans un tableau '
        For i = 1 To Nbre_chiffres
            varTab(i) = Mid(strChaine, (Rnd() * (fin - debut) + debut), 1)
        Next i
    End If
     
    ' Si l’argument Nbre_symboles est renseigné '
    If Nbre_symboles > 0 Then
        ' On détermine les positions de début et de fin de chaîne '
        debut = CLng(Len(strLettres + strChiffres) + 1)
        fin = CLng(debut + Len(strSymboles) - 1)
        ' Boucle permettant de stocker les symboles dans un tableau '
        For i = 1 To Nbre_symboles
            varTab(CLng(i + Nbre_chiffres)) = Mid(strChaine, (Rnd() * (fin - debut) + debut), 1)
        Next i
    End If
     
    ' Si la longueur du mot de passe est supérieure au nombre de chiffres et symboles '
    If (Longueur > (Nbre_symboles + Nbre_chiffres)) Then
        ' Boucle permettant de stocker les lettres dans un tableau '
        For i = 1 To (Longueur - (Nbre_symboles + Nbre_chiffres))
            varTab(CLng(i + Nbre_chiffres + Nbre_symboles)) = Mid(strChaine, (Rnd() * (Len(strLettres) - 1) + 1), 1)
        Next i
    End If
     
    ' Tri aléatoire du tableau contenant lettres, chiffres et symboles '
    Randomize
    For n = LBound(varTab) To UBound(varTab)
        j = CLng(((UBound(varTab) - n) * Rnd) + n)
        If n <> j Then
            varTemp = varTab(n)
            varTab(n) = varTab(j)
            varTab(j) = varTemp
        End If
    Next n
     
    ' Reconstitution du mot de passe après tri aléatoire '
    For i = LBound(varTab) To UBound(varTab)
        strMot = strMot & varTab(i)
    Next i
     
    ' On renvoie le mot de passe '
    MOTDEPASSE = strMot
     
    End Function
    La requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE USERS
    SET [1STPWD] = MOTDEPASSE()
    WHERE 1STPWD is null;

    Le problème est que la requête me met le même mot de passe pour toutes lignes mises à jour.

    Comment faire pour avoir un mot de passe par ligne?

    Merci

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Dobby7,

    Effectivement et cela est tout à fait normal, Access optimise ta requête et ne rentre q'une fois dans le générateur de mot de passe. Afin de forcer le passage systématique dans ton générateur, il suffit de lui transmettre un argument lors de l'appel de ta fonction (un iduser par exemple). En transformant ta fonction ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Function MOTDEPASSE(iduser As Long, Optional Longueur As Long = 8, Optional Nbre_chiffres As Integer = 0, Optional Nbre_symboles As Integer = 0) As String
     
    ' Déclaration des constantes '
    ' On limite à 10 le nombre maximal de chiffres et de symboles '
    Const maxChiffres = 10
    Const maxSymboles = 10
     
    ' Déclaration des variables '
    Dim i, j, n, debut, fin As Long
    Dim strLettres, strChiffres, strSymboles, strChaine, strMot As String
    Dim varTab, varTemp As Variant
     
    ' Chaînes de caractères contentant lettres, chiffres et symboles '
    strLettres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    strChiffres = "0123456789"
    strSymboles = "@#&§%$£€(){}[]\`~_<>=+-*/!?;.:"
    strChaine = strLettres & strChiffres & strSymboles
     
    ' On limite le nombre total de chiffres '
    If Nbre_chiffres > maxChiffres Then
        Nbre_chiffres = maxChiffres
    ' On limite le nombre total de chiffres à la longueur du mot de passe '
    ElseIf Nbre_chiffres > Longueur Then
        Nbre_chiffres = Longueur
    End If
     
    If (Nbre_symboles + Nbre_chiffres) > Longueur Then
        Nbre_symboles = Longueur - Nbre_chiffres
    ' On limite le nombre total de symboles '
    ElseIf Nbre_symboles > maxSymboles Then
        Nbre_symboles = maxSymboles
    ' On limite le nombre total de symboles à la longueur du mot de passe '
    ElseIf Nbre_symboles > Longueur Then
        Nbre_symboles = Longueur
    End If
     
    ' On redéfinit la taille du tableau en fonction de la longueur du mot de passe '
    ReDim varTab(Longueur)
     
    ' Si l’argument Nbre_chiffres est renseigné '
    If Nbre_chiffres > 0 Then
        ' On détermine les positions de début et de fin de la chaîne '
        debut = CLng(Len(strLettres) + 1)
        fin = CLng(debut + Len(strChiffres) - 1)
        ' Boucle permettant de stocker les chiffres dans un tableau '
        For i = 1 To Nbre_chiffres
            varTab(i) = Mid(strChaine, (Rnd() * (fin - debut) + debut), 1)
        Next i
    End If
     
    ' Si l’argument Nbre_symboles est renseigné '
    If Nbre_symboles > 0 Then
        ' On détermine les positions de début et de fin de chaîne '
        debut = CLng(Len(strLettres + strChiffres) + 1)
        fin = CLng(debut + Len(strSymboles) - 1)
        ' Boucle permettant de stocker les symboles dans un tableau '
        For i = 1 To Nbre_symboles
            varTab(CLng(i + Nbre_chiffres)) = Mid(strChaine, (Rnd() * (fin - debut) + debut), 1)
        Next i
    End If
     
    ' Si la longueur du mot de passe est supérieure au nombre de chiffres et symboles '
    If (Longueur > (Nbre_symboles + Nbre_chiffres)) Then
        ' Boucle permettant de stocker les lettres dans un tableau '
        For i = 1 To (Longueur - (Nbre_symboles + Nbre_chiffres))
            varTab(CLng(i + Nbre_chiffres + Nbre_symboles)) = Mid(strChaine, (Rnd() * (Len(strLettres) - 1) + 1), 1)
        Next i
    End If
     
    ' Tri aléatoire du tableau contenant lettres, chiffres et symboles '
    Randomize
    For n = LBound(varTab) To UBound(varTab)
        j = CLng(((UBound(varTab) - n) * Rnd) + n)
        If n <> j Then
            varTemp = varTab(n)
            varTab(n) = varTab(j)
            varTab(j) = varTemp
        End If
    Next n
     
    ' Reconstitution du mot de passe après tri aléatoire '
    For i = LBound(varTab) To UBound(varTab)
        strMot = strMot & varTab(i)
    Next i
     
    ' On renvoie le mot de passe '
    MOTDEPASSE = strMot
     
    End Function
    et ton code SQL de cette manière tu pourras générer un mot de passe différent à chaque utilisateur :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE USERS
    SET USERS.[1STPWD] = MOTDEPASSE([iduser])
    WHERE (((USERS.[1STPWD]) IS NULL));


    Après exécution de la requête un exemple de sortie :

    iduser nom 1STPWD
    -------------------------
    1 a uQQMkNZb
    2 b RPgBScHn
    3 c HNkmtKkS
    4 d rCFcRxHc

    Bonne continuation

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Bonjour Jimbolion,

    J'ai failli lâcher une larme en voyant que ça fonctionne grâce à tes modifications.

    Merci beaucoup pour ton aide précieuse !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Votre avis sur ce code - Générateur de mot de passe
    Par austin57 dans le forum Tkinter
    Réponses: 4
    Dernier message: 22/09/2012, 23h34
  2. Générateur de Mot de Passe
    Par forum dans le forum Téléchargements
    Réponses: 0
    Dernier message: 03/06/2011, 16h32
  3. générateur de mot de passe
    Par cyborgtun dans le forum VB.NET
    Réponses: 0
    Dernier message: 19/05/2010, 21h10
  4. générateur de mot de passe
    Par zais_ethael dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 18/05/2006, 15h47
  5. Générateur de mot de passe
    Par christel1982 dans le forum ASP
    Réponses: 2
    Dernier message: 16/11/2005, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo