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

Macros et VBA Excel Discussion :

Formulaire mot de passe [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut Formulaire mot de passe
    Bonjour à tous,

    Je cherche à mettre en place un formulaire qui aura 2 utilités. La première, saisir un nom d'utilisateur et un mot de passe, et la deuxième, en cliquant sur un optionbutton, afficher des textboxs qui permettront de changer le mot de passe de l'utilisateur.
    Donc si je résume :

    A l'affichage de l'UF, 3 contrôles dans l'UF, 2 TxtBoxs (Utilisateurs + MP) et optbutton (changer de mot de passe)

    Si clique sur OptButton, alors, les 3 premiers contrôles sont cachés et laissent la place à 4 nouveaux (4 TxtBoxs (Utilisateur + Ancien MP + Nouveau MP + Confirmation nouveau MP)

    Les mots de passe et utilisateurs seront saisis dans un feuille de calcul invisible (XlVeryHidden).

    Auriez-vous un modèle à me proposer s'il vous plait ?

    Pas le code, uniquement l'UF

    Merci par avance pour votre aide.

    Cordiales salutations

    PS : Je ne peux pas faire de recherche sur le Net, problème sur mon ordinateur, je ne sais pas pourquoi...

  2. #2
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonsoir à tous,

    Voilà j'ai progressé dans mon projet. J'ai donc mis en place un formulaire de saisies pour mot de passe.
    Cependant, lorsque que je clique sur le bouton d'appel du formulaire, le message suivant apparaît :
    Erreur de compilation
    Type d'argument ByRef incompatible
    L'erreur se produit sur la ligne ici en gras soulignée (ligne 18)
    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
    Private Sub CommandButton1_Click()
    'Si Combo est vide
    If ComboUtil = "" Then
        'Message à l'utilisateur
        MsgBox "Saisie du nom d'utilisateur obligatoire.", vbInformation
        'sortie de la procédure
        Exit Sub
    End If
    'Même chose avec TxtMpasse
    If TxtMpasse = "" Then
        MsgBox "Saisie du mot de passe obligatoire.", vbInformation
        Exit Sub
    End If
    'Lance la fonction VerifMDP en utilisant :
        '- Combo comme paramètre "utilisateur"
        '- TextBox comme paramètre "MdP"
    'Si la fonction renvoie FAUX :
    If VerifMDP(ComboUtil, TxtMpasse) = False Then
        'c'est que le mot de passe ou l'utilisateur est faux donc message à l'utilisateur
        MsgBox "Erreur Mot de passe et/ou utilisateur. Merci de le saisir à nouveau.", vbInformation
        'on vide les 2 contrôles
        ComboUtil = ""
        TxtMpasse = ""
        'on sort de la procédure
        Exit Sub
    End If
    'A partir d'ici, le code ne se déroule que lorsque MdP et NOM sont corrects.
    'On peut donc afficher les feuilles correspondant à l'utilisateur saisi
    
    AfficheFeuilles ComboUtil
    'masque l'UserForm
    UserForm1.Hide
    End Sub
    Je vous joint mon fichier complet
    EssaiProteg(2).xlsm

  3. #3
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Je n'ai toujours pas trouvé la solution à mon problème même en remplaçant la Combo par une Textbox.

    J'ai beau regarder le code dans tous les sens, je ne comprends pas d'où vient l'erreur.

    Pouvez-vous éclairer ma lanterne s'il vous plait ?

    Je vous en remercie par avance

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    Bonjour,

    En fait il faut
    - d'une part travailler le code de validation dans l'UserForm1, et dans cet userform il faut indiquer que les contrôles sont de l'userform (et pas d'un autre objet) en indiquant Me.NomDuContrôle
    - d'autre part il faut sélectionner non pas le comboBox, mais l'item sélectionné: Me.ComboUtil.SelText

    En attaché, une version qui fonctionne. Voir aussi le code qui se trouve dans ThisWorkbook.

    Recommandation: toujours utiliser Option Explicit.

    Bonne continuation.
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir

    Sur ton fichier tu supprime le label 3 et le textbox mdp actuel

    Dans le module de ton userform
    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
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
    Me.TxtMpasse.PasswordChar = "*"
    Me.TxtNewMP.PasswordChar = "*"
    Me.TxtConfNewMP.PasswordChar = "*"
     
    Me.TxtConfNewMP.Visible = False
    Me.TxtNewMP.Visible = False
    Me.Label4.Visible = False
    Me.Label5.Visible = False
    Me.CheckBox1.Visible = False
    With Me
        .Width = 366
        .Height = 107
    End With
    End Sub
     
    Private Sub ComboUtil_Change()
     
    Me.CheckBox1.Visible = Me.ComboUtil.ListIndex > -1
    End Sub
     
    Private Sub CheckBox1_Click()
    Dim bB As Boolean
     
    bB = Me.CheckBox1.Value
    Me.TxtConfNewMP.Visible = bB
    Me.TxtNewMP.Visible = bB
    Me.Label4.Visible = bB
    Me.Label5.Visible = bB
     
    With Me
        .Width = 366
        .Height = IIf(bB, 160, 107)
    End With
    End Sub
     
    Private Sub CommandOk_Click()
    Dim Lig As Long
     
    If Me.ComboUtil.ListIndex > -1 And Me.TxtMpasse.Value <> "" Then
        If VerifMDP(Me.ComboUtil.Value, Me.TxtMpasse.Value) Then
            If Me.CheckBox1.Value Then
                If Me.TxtNewMP.Value <> "" And Me.TxtNewMP.Value = Me.TxtConfNewMP.Value Then
                    Lig = Me.ComboUtil.ListIndex + 2
                    Worksheets("Paramétrage").Cells(Lig, 2).Value = Me.TxtNewMP.Value
                    MsgBox "Mot de passe changé"
                    Unload Me
                Else
                    MsgBox "Mots de passe incohérents"
                    Me.TxtNewMP.Value = ""
                    Me.TxtConfNewMP.Value = ""
                End If
            Else
                AfficheFeuilles Me.ComboUtil.Value
                Unload Me
            End If
        Else
            MsgBox "Mauvais mdp"
            Me.TxtMpasse.Value = ""
        End If
    Else
        MsgBox "Veuillez saisir l'utiisateur et le mdp"
    End If
    End Sub
    Dans ton module standard
    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
    Option Explicit
     
    'J'ai fait le choix d'une fonction car il ne s'agit que de savoir si le mot de passe correspond à l'utilisateur.
    'par conséquent, il nous faut une procédure qui compare les 2 et qui renvoie VRAI ou FAUX (d'où la fonction déclarée As Boolean).
    'ICI : (Utilisateur As String, MdP As String)sont des paramètres envoyés lors du clic sur le bouton
     
    Function VerifMDP(ByVal Utilisateur As String, ByVal MdP As String) As Boolean
    Dim rngTrouve As Range
    VerifMDP = False                                      'par défaut, renvoie FAUX
     
    With Sheets("Paramétrage")                            'dans la feuille Paramétrage
        'cherche, colonne A, le nom d'utilisateur saisi
        Set rngTrouve = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole)
        If rngTrouve Is Nothing Then                      'si il ne trouve pas
            VerifMDP = False                              'la fonction renvoie faux
        Else                                              's'il le trouve
            'vérifie que le mot saisi feuille Paramétrage colonne B est identique
            'au mot de passe saisi dans l'USF
            If rngTrouve.Offset(0, 1) <> MdP Then
                VerifMDP = False                          'si FAUX
            Else
                VerifMDP = True                           'si VRAI
            End If
        End If
    End With
    End Function
     
    Sub AfficheFeuilles(ByVal Utilisateur As String)
    Dim Col As Integer, i As Integer
    Dim Feuille As String
    Dim Lig As Integer
     
    With Sheets("Paramétrage")                            'dans la feuille Paramétrage
        'comme on va boucler de la colonne 3 à la dernière colonne, on stocke le n° de la dernière colonne :
        Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
        'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
        Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
        For i = 3 To Col
            Feuille = .Cells(1, i).Value
            If UCase(.Cells(Lig, i)) = "X" Then           'si on trouve un "X" dans la cellule
                Sheets(Feuille).Visible = True            'on affiche la feuille
            Else
                Sheets(Feuille).Visible = xlSheetVeryHidden    'sinon on la masque
            End If
        Next i
    End With
    End Sub
    Dans ton tableau de la feuille paramétrage, tu écris le nom des feuilles

    Accueil----- Info-------- Tableau---- Facture---- Paramétrage

  6. #6
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour à tous,

    Bonjour EricDgn, Bonjour mercatog,

    Merci beaucoup pour votre aide. Le fichier d'Eric fonctionne très bien et je vais partir là-dessus. mercatog, je garde ton code dans mes archives il me servira par ailleurs.
    Si je peux me permettre une dernière question, comment dois-je procéder pour le remplacement des mots de passe ?

    Je pensais faire comme suit :
    - Rechercher la ligne de l'utilisateur indiqué dans la Combo
    - Vérifier que l'ancien mot de passe est le bon
    - Vérifier que les 2 nouveaux mots de passe soient identiques
    - Remplacer le contenu de la colonne B de la ligne de l'utilisateur par le contenu de la textbox "TxtNewMP"

    Merci par avance pour vos idées
    Amicalement

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    Bonjour,

    Cela me semble être la bonne façon de faire.
    Je pense juste qu'il n'est pas nécessaire d'avoir 2 fois le mot de passe actuel (TxtMPasse et TxtOldMP), le 1er suffit.

    Bonne continuation.

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

Discussions similaires

  1. Formulaire Mot de passe oublié JavaScript & PHP
    Par goku19 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/01/2012, 09h21
  2. Formulaire mot de passe et utilisateur
    Par Jacques-Henri dans le forum Sécurité
    Réponses: 6
    Dernier message: 02/05/2008, 23h22
  3. Formulaire mots de passe utilisateur
    Par FCL31 dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/08/2007, 21h30
  4. [Formulaire] Mot de passe
    Par rantanplan81 dans le forum IHM
    Réponses: 4
    Dernier message: 20/04/2007, 07h34
  5. Réponses: 1
    Dernier message: 03/01/2006, 21h38

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