Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/12/2012, 14h47   #1
toumack
Membre du Club
 
Homme Claude Larocque
Développeur informatique
Inscription : mai 2009
Messages : 78
Détails du profil
Informations personnelles :
Nom : Homme Claude Larocque
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 78
Points : 54
Points : 54
Par défaut Vérifier les spécifications des mots de passe

Bonjour,
Les mots de passes que je désire utiliser doivent contenir:
a) Un minimum de 7 caractères
b) Au moins une lettre majuscule
c) Au moins un chiffre

Donc, Claude1954 serait un mot de passe valide.

Voici une image pour plus d'informations, par la suite, le code utilisé
sur le bouton CmdOK
ChangerMotDePasse.jpg

Code:
Code :
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Private Sub CmdOK_Click()
On Error GoTo ErrTrap
    Dim QueryName As String
    Dim QueryName2 As String
    Dim Txt As String
 
    QueryName = IIf(Nz(Me.OpenArgs, "") = "Adm", _
                        "LoginPasswordAdm", "LoginPassword")
    QueryName2 = IIf(Nz(Me.OpenArgs, "") = "Adm", _
                        "LoginHistorique", "LoginHistorique")
    Txt = ""        ' Default
    If Len(Me.TxtUserID) > 0 And Len(Me.TxtPwd) > 0 Then
        Txt = Nz(DLookup("LoginMotDePasse", QueryName, _
                    "UTilisateurID = '" & Me.TxtUserID & "'"), "")
    End If
 
    If Len(Txt) > 0 And StrComp(Me.TxtPwd, _
                                            Txt, 0) = 0 Then
    Else
        MsgBox "Password Not Valid For This UserID"
        Me.TxtPwd.SetFocus
        GoTo ExitPoint
    End If
 
    If Len(Me.TxtPwdNew_1) > 0 And _
                Len(Me.TxtPwdNew_2) > 0 And _
                StrComp(Me.TxtPwdNew_1, _
                Me.TxtPwdNew_2, 0) = 0 Then
        P_SetNewPassword QueryName
        P_SetNewDate QueryName
        P_SetNewHistorique
        MsgBox "Password Changed Successfully"
        DoCmd.Close acForm, Me.Name
    Else
        MsgBox "New Passwords 1 & 2 Do Not Match"
        Me.TxtPwdNew_1.SetFocus
    End If
 
ExitPoint:
    On Error GoTo 0
    Exit Sub
 
ErrTrap:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitPoint
End Sub
 
Private Sub P_SetNewPassword(ByVal TgtQueryName As String)
On Error GoTo ErrTrap
    Dim Qst As String
    Dim db As DAO.Database
 
    Set db = DBEngine(0)(0)
 
    Qst = "UPDATE " & TgtQueryName & _
            " SET LoginMotDePasse = '" & Me.TxtPwdNew_1 & _
            "' Where UTilisateurID = '" & Me.TxtUserID & "';"
 
    db.Execute Qst, dbFailOnError
 
ExitPoint:
    Set db = Nothing
    On Error GoTo 0
    Exit Sub
 
ErrTrap:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitPoint
End Sub
 
Private Sub P_SetNewDate(ByVal TgtQueryName As String)
 
On Error GoTo ErrTrap
    Dim Qst As String
    Dim db As DAO.Database
 
    Set db = DBEngine(0)(0)
 
    Qst = "UPDATE " & TgtQueryName & _
            " SET MotDePasseLastChanged = '" & Now() & _
            "' Where UTilisateurID = '" & Me.TxtUserID & "';"
                CurrentDb.Execute Qst, dbFailOnError
 
    db.Execute Qst, dbFailOnError
 
ExitPoint:
    Set db = Nothing
    On Error GoTo 0
    Exit Sub
 
ErrTrap:
    MsgBox Err.Number & " - " & Err.Description
    Resume ExitPoint
End Sub
 
Private Sub P_SetNewHistorique()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
 
'On Error GoTo ErrTrap
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("LoginHistorique", dbOpenDynaset)
 
With rst
.AddNew
!UTilisateurID = Me.TxtUserID
!MotDePasse = Me.TxtPwdNew_1
!Nom = "User change login password"
.Update
End With
 
 
'ExitPoint:
'    Set dbs = Nothing
 '   Set rst = Nothing
 '   rst.Close
 '   dbs.Close
 
 
'ErrTrap:
'    MsgBox Err.Number & " - " & Err.Description
'    Resume ExitPoint
End Sub
Merci d'avance à tous pour votre aide, de plus, ce code pourrait être utile à plusieurs utilisateurs qui recherchent un module de connexion

Claude du Québec, Canada
toumack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 16h03   #2
loufab
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 846
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 846
Points : 14 115
Points : 14 115
Bonjour,

a) Un minimum de 7 caractères

Code :
if len(password)>=7 then 'content
b) Au moins une lettre majuscule

Code :
if password like "*[A-Z]*" then ' content
c) Au moins un chiffre

Code :
if password like "*[0-9]*" then ' content
Il y a un tuto sur l'opérateur Like. Pour du plus complexe il y a également un tuto sur les Regex.

Cordialement,
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/12/2012, 21h35   #3
toumack
Membre du Club
 
Homme Claude Larocque
Développeur informatique
Inscription : mai 2009
Messages : 78
Détails du profil
Informations personnelles :
Nom : Homme Claude Larocque
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : mai 2009
Messages : 78
Points : 54
Points : 54
Par défaut Ce code ne vérifie que la longueur du champ qui est de 7

Bonjour,
Voilà, au moins je peux changer un mot de passe et une erreur se produit lorsque ce nouveau mot de passe n'a pas 7 caractères de long.

Est-ce que tu peux voir pourquoi après avoir vérifié la longueur du champ, ce code ne vérifie pas les autres elseIf.

Lorsque le champ est de 7 caractères que ce soit 1111111 ou aaaaaaa ou AAAAAAA le mot de passe est accepté.
Moi j'essai:
1- Lorsque le mot de passe contient 7 caractères, vérifie s'il contient au moins 1 caractère alphabétique minuscule.

2- Lorsque ce dernier est vérifié, vérifie s'il contient au moins 1 caractère alphabétique minuscule et 1 caractère alphabétique majuscule.

3- Lorsque ces 2 derniers sont vérifiés, vérifie s'il contient au moins 1 caractère alphabétique minuscule, 1 caractère alphabétique majuscule, 1 caractère numérique et une longueur de 7 caractères.

À chaque étape si le mot de passe n'est pas valide, un message (formulaire) nommé "MessageMotDePasseInvalide" doit apparaître.

Je me sers de "DoCmd.OpenForm "MessageMotDePasseInvalide" dans ce code que voici:

J'ai placé ce code dans l'évènement après MAJ:

Code :
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
Private Sub TxtPwdNew_1_AfterUpdate()
     Dim q
     Dim special As Boolean
     Dim no As Boolean
     Dim str As Boolean
     Dim test As Integer
     Dim invalid As Boolean
     Dim pwrdTest As Boolean
     Dim pwd As String
 
     Const minCharacters = 7
 
     invalid = False
     special = False
     no = False
     str = False
     pwrdTest = False
 
     pwd = Me.TxtPwdNew_1
 
    If Len(pwd) >= minCharacters Then
    For q = 1 To Len(pwd)
         test = Asc(Mid(pwd, q, 1))
         If test > 97 And test < 122 Then 'check lower case alpha
                   str = True
         ElseIf test >= 65 And test <= 90 Then 'check upper case alpha
                   str = True
         ElseIf test >= 48 And test <= 57 Then 'check number
                   no = True
         ElseIf test = 32 Then 'invalid
                   invalid = True
         End If
    Next
    If str And no And Not invalid Then
           pwrdTest = True
    End If
Else
    DoCmd.OpenForm "MessageMotDePasseInvalide"
    Me.TxtPwdNew_1.SetFocus
    Exit Sub
End If
End Sub
J'ai essayé avec ce que tu m'as fait parvenir auparavant, mais cela ne marchait pas, serais-tu assez aimable pour faire les changements dans ce code.

Merci
Claude du Québec
toumack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 09h02   #4
loufab
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 846
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 846
Points : 14 115
Points : 14 115
Pourquoi tu utilises une boucle for alors que tu peux t'en passer ?

Utilises le code que je t'ai fourni.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
If contient 7 then
   if contient majuscule then
     if contient nombre then
        c'est bon 
     else
        problème
     endif
   else
       problème
   endif
else 
 problème
endif
ou sinon

Code :
1
2
3
4
 
If not contient 7 then goto problème
if not contient majuscule then goto problème
if not contient nombre then goto problème
Le plus rapide et le plus simple est souvent le meilleur.

Cordialement,
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2012, 09h08   #5
loufab
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 846
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 846
Points : 14 115
Points : 14 115
En ce qui concerne ton code :

Cette approche est fausse. En effet tu affecte vrai dès la première vérification sans te soucier des autres.

Exemple : si la première vérification est vrai :
Code :
1
2
If test > 97 And test < 122 Then 'check lower case alpha
                   str = True
A aucun moment tu ne n'affirme que l'une des suivantes peut être fausse.

Si tu traces il devrait passer partout mais comme c'est déjà vrai ça le reste même si les autres sont fausses.

Cordialement,
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h51.


 
 
 
 
Partenaires

Hébergement Web