Comment on fait pour redéfinir un nouveau mot de passe utilisateur

Bonjour,

Je viens vers vous dans l’espoir de trouvé de l'aide pour paramétrer ce usrform, pour un classeur excel que j'ai crée et qui s'ouvre avec un Login et un mot de passe au démarrage du classeur.

une fois l'utilisateur authentifier, je voudrai :

- Qu'il ait la possibilité de personnaliser son propre mot de passe, pour chaque utilisateur vérifié par le nom d'utilisateur qui est connecté au classeur.

- Une fois le nouveau mot de passe saisi, qu'il soit stocké et modifier dans le tableau qui se trouve dans le feuille "Admin". (invisible).

-

un aperçu du Usrform déjà crée

excel 2018 10 12 20 13 33

Merci d'avance pour votre aide, et impatient de vous lire .

Bonjour,

Je pense qu'il n'y a pas que cela, car il manque beaucoup de codes et certains sont d'ailleurs mal placés.

Je vais donc repartir d'une base que j'avais faite et je vais ajouter le modification du mdp qui est une très bonne idée !

ok merci Steelson, merci, oui ça m'étonne pas qu'il soit mal placé, car je suis débutant en Excel, mais par contre je suis un bon élève quand on m'explique des trucs j'apprends vite et je retiens

Voici une application complète

Je te rappelle que tu avais mis

User = Admin

Mdp = 123

Il faudra aussi que tu verrouille le code VBA pour éviter qu'on ne vienne tout ouvrir d'un coup de baguette magique !

edit : fichier modifié

erreur sur fichier, désolé

41mdp-change.xlsm (29.41 Ko)

Trop trop fort Steelson, merci beaucoup pour ton aide et ta rapidité, c'est exactement ce que je cherchais depuis 3 jours,sans succès, en quelques heures, tu me renvoies le fichier fonctionnel, refait simple et Épuré, joli travail.

Merci encore, problème résolu.

Oui, j'ai mis ces identifiants pour test, et pour le code s'est fait, je l'ai verrouillé pour éviter les manipulations.

J'ai une dernière demande Steelson, peux-tu s'il te plaît si ça te dérange pas, commenter le code VBA de ce classeur, afin que je puisse comprendre le fonctionnent. Merci encore a toi c'est gentil de ta part.

D'abord, dans ThisWorkBook

Private Sub Workbook_Open()
Dim Ws As Worksheet

' à l'ouverture, pour chaque feuille sauf Start, la rendre super cachée
' bon, ce n'est normalement pas utile car on le fait surtout à la fermeture
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "Start" Then Ws.Visible = xlSheetVeryHidden
Next Ws

End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Ws As Worksheet

' on rend Start visible car il faut absolument avoir au moins une feuille visible
Sheets("Start").Visible = True

' à la fermeture, pour chaque feuille sauf Start, la rendre super cachée
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "Start" Then Ws.Visible = xlSheetVeryHidden
Next Ws

' on force la fermeture avec changements (c'est surtout pour éviter le message "voulez-vous enregistrer ?)
ActiveWorkbook.Close savechanges:=True

End Sub

Pour entrer (sans changer le mot de passe) :

Sub ENTRER()

' on teste si la zone USER est bien renseignée, sinon message et sortie de la procédure
If [USER] = "" Then
    MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
    Exit Sub
End If

' on teste si la zone MdP est bien renseignée, sinon message et sortie de la procédure
If [MdP] = "" Then
    MsgBox "Saisie du mot de passe obligatoire.", vbInformation
    Exit Sub
End If

' on vérifie par une sous procédure que le MdP est ok, sinon message et sortie avec remise à blanc des zones
If VerifMDP([USER], [MdP]) = False Then
    MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
    [USER] = ""
    [MdP] = ""
    [NewMdP] = ""
    [USER].Select
    Exit Sub
End If

' on remet le focus dans la première zone
[USER].Select

' on affiche les feuilles adhoc dans une sous procédure
AfficheFeuilles [USER]

' on remet à blanc les zones
[USER] = ""
[MdP] = ""
[NewMdP] = ""

End Sub

Pour entrer en changeant le mot de passe : mêmes commentaires que précédemment plus l'appel à la sous-procédure de changement du MdP

Sub CHANGERetENTRER()

If [USER] = "" Then
    MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
    Exit Sub
End If

If [MdP] = "" Then
    MsgBox "Saisie du mot de passe obligatoire.", vbInformation
    Exit Sub
End If

If [NewMdP] = "" Then
    MsgBox "Saisie du nouveau mot de passe obligatoire.", vbInformation
    Exit Sub
End If

If VerifMDP([USER], [MdP]) = False Then
    MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de saisir à nouveau.", vbInformation
    [USER] = ""
    [MdP] = ""
    [NewMdP] = ""
    [USER].Select
    Exit Sub
Else
' sous procédure de changement du mot de passe
    ChangerMDP [USER], [NewMdP]
End If

[USER].Select

AfficheFeuilles [USER]
[USER] = ""
[MdP] = ""
[NewMdP] = ""

End Sub

On aurait pu l'éclrre sans le else puisqu'il y a un exit sub juste auparavant !

3 sous procédures :

Vérification du mot de passe

Cette fonction renvoie True si OK, False dans le cas contraire

En documentant, je lm'aperçois qu'on aurait pu l'écrire avec moins de lignes redondantes !

Function VerifMDP(Utilisateur As String, MdP As String) As Boolean
' rngTrouve donnera la cellule où est recherchée le User
Dim rngTrouve As Range
' on met False a priori
VerifMDP = False

With Sheets("Admin")
' dans la feuille Admin, on cherche en colonne 1 le User
    Set rngTrouve = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole)
    ' si pas trouvé ...
    If rngTrouve Is Nothing Then
        VerifMDP = False
    ' si trouvé ...
    Else
    ' on compare alors le MdP au contenu de la cellule  droite (offset(0,1)) du User
        If rngTrouve.Offset(0, 1) <> MdP Then
        ' si pas ok
            VerifMDP = False
        Else
        ' si ok
            VerifMDP = True
        End If
    End If
End With

End Function

Changement du MdP

Sub ChangerMDP(Utilisateur As String, NewMdP As String)
Dim rngTrouve As Range

With Sheets("Admin")
' on cherche dans la feuille Admin, colonne 1, le nom du User
    Set rngTrouve = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole)
    If rngTrouve Is Nothing Then
    ' si pas trouvé, ici recherche superflue (normalement déjà testé auparavant)
        Exit Sub
    Else
    ' on change la valeur à droite du User
        rngTrouve.Offset(0, 1).Value = NewMdP
    End If
End With

End Sub

Affichage des feuilles adhoc

Sub AfficheFeuilles(Utilisateur As String)
Dim Col As Byte, i As Byte, Lig As Integer

With Sheets("Admin") 'dans la feuille paramétrage
    Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column 'dernière colonne par balayage à gauche depuis l'extrémité de la feuille
    Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row 'ligne correspondant au User par recherche dans la colonne 1
    For i = 3 To Col
        If UCase(.Cells(Lig, i)) = "X" Then 'si on trouve un "X" dans la cellule
            Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
        Else
            Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
        End If
    Next i
End With

' on masque la feuille Start
Sheets("Start").Visible = False

End Sub

Merci Steelson pour ton superbe travail et ton aide. je comprend mieux maintenant le fonctionnement et c'est vraiment très bien fait Merci aussi pour le temps que tu as consacré pour la réalisation de ce code et les explications clair et précises.

Rechercher des sujets similaires à "comment fait redefinir nouveau mot passe utilisateur"