Mise à jour mot de passe

Bonjour forum

voilà mon problème,pour pouvoir faire une réservation l'utilisateur doit s'identifier par le biais d'un userform qui lui demande son nom et son mot de passe.

le nom est stocké dans la feuille "params" colonne A et le mot de passe dans la colonne F de la même feuille.

j'ai bien réussi à faire le lien pour la liste déroulante des noms mais je n'arrive pas à faire une vérification après saisie du mot de passe.

merci de votre aide

Bonjour,

- Tu peux utiliser la propriété PasswordChar de ton textebox pour mettre un * qui masquera le mot de passe. Tu as juste à entrer le caractère de masquage que tu veux ( *, -, % , etc...)

- Tu peux utiliser la propriété RowSource pour donner les valeurs à afficher dans ton combobox:

ComboNomUtilisateur.RowSource = "Params!A2:A" & Sheets("Params").Range("A65536").End(xlUp).Row

- Pour le mot de passe, j'ai utiliser la propriété listindex du combobox qui retoune l'index de l'item sélectionné. Si on dit que le premier Item (BCM) est égale à 0 et que dans la feuille params il est sur la ligne 2, et que tous les items du combobox et de la feuille params sont dans le même ordre ( ce qui est le cas vu la façon de remplir le combo) tu peux trouver facilement le mot de passe comme ceci:

MotPasse = Sheets("Params").Cells(Me.ComboNomUtilisateur.ListIndex + 2, 6).Value

Le code complet:

Private Sub UserForm_Initialize()
    ComboNomUtilisateur.RowSource = "Params!A2:A" & Sheets("Params").Range("A65536").End(xlUp).Row
End Sub

Private Sub BnAnnuler_Click()
  Me.Hide
End Sub

Private Sub BnValider_Click()
  If ValideMotPasse(Me.CodeUtilisateur) Then
    'Continuer le traitement
  Else
    MsgBox "Mot de passe invalide", vbCritical
  End If
End Sub

Private Function ValideMotPasse(PasseTest As String) As Boolean
    Dim MotPasse As String

    MotPasse = Sheets("Params").Cells(Me.ComboNomUtilisateur.ListIndex + 2, 6).Value

    If LCase(PasseTest) = LCase(MotPasse) Then
        ValideMotPasse = True
    Else
        ValideMotPasse = False
    End If
End Function

Bonjour Math et le forum,

merci de ta rapidité, j'ai essayé le code mais il doit manquer un morceau car quand je saisie le mot de passe il ne lance pas le userform de réservation.

bon courage et bonne journée

-- 27 Avr 2010, 10:08 --

Rebonjour Math,

J'ai résolu le problème en partie,ca marche sauf que lorsque tu t'es identifié une première fois il ne te demande plus de mot de passe et tu peux créer une réservation ou supprimer sans identification.Je pense que c'est un problème d'initialisation en sortie.

Par contre je souhaiterai que la personne qui s'identifie ne puisse consulter que ce qui le concerne lors de la suppression de réservation. cette information est stockée dans la feuille "data" peux tu m'aider

bon courage et bonne journée

J'ai testé ton fichier et il me demande de m'identifier à chaque fois que je clique sur le bouton Réservations. Par contre tu pourrais ajouté ce code à ton userform d'identification pour empêcher de quitter par le X dans le coin supérieur droit de la fenêtre ( ça permettais de faire une réservation sans se logger ).

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then Cancel = 1
End Sub

Pour la suppression, j'ai modifié la procedure Initialize du userform pour afficher uniquement le nom de l'usager logger ou tous les usagers quand le mode admin est activé.

Private Sub UserForm_Initialize()
    Dim Cell As Range
    With Sheets("Params")
        'Si le mode admin est activé, afficher tous les usagers
        If ModeAdm Then
            For Each Cell In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
            ComboNom.AddItem (Cell)
            Next
        Else
            'Sinon afficher uniquement l'usage loggé
            ComboNom.AddItem (NomUser)
        End If

        For Each Cell In .Range("B2:B" & .Range("B65536").End(xlUp).Row)
        ComboDate.AddItem (Cell)
        Next
    End With

     With lstResultat.ColumnHeaders
        'Supprime les anciens entêtes
        .Clear

        'Ajoute les colonnes
        .Add Text:="No", Width:=0
        .Add Text:="Salle", Width:=100
        .Add Text:="HeureDebut", Width:=60
        .Add Text:="HeureFin", Width:=60
        .Add Text:="Plage", Width:=0
    End With
End Sub

j'oubliais, j'ai créé une variable public pour contenir le nom de l'usager loggé.

Public ModeAdm ' Permet de passer en mode administration
Public ModeUtil ' Permet de passer en mode utilisateur
Public NomUser As String 'Le nom de l'utilisateur connecté

dans le module 1

et dans UsFormUtil

Private Sub BnValider_Click()
  If Me.CodeUtilisateur = Sheets("Params").Cells(Me.ComboNomUtilisateur.ListIndex + 2, 6) Then
    MsgBox "Le mot de passe est correct"
    NomUser = Me.ComboNomUtilisateur.Value
    ModeUtil = True
  Else
    MsgBox "Le mot de passe n'est pas correct"
    NomUser = ""
    ModeUtil = False
  End If
  Unload Me
End Sub

finalement tu peux simplifier le procedure qui appelle les userforms qui demande une identification

Sub AccèsUtilisateur()
  UsFormUtil.Show
  If ModeUtil Then UserFormRéservation.Show
End Sub
5classeur1.xlsx (10.53 Ko)

Bonjour Math et le forum,

j'ai intégré tes codes mais il y a un soucis sur initialisation

Private Sub UserForm_Initialize()
    Dim Cell As Range
    With Sheets("Params")
        'Si le mode admin est activé, afficher tous les usagers
       If ModeAdm Then
            For Each Cell In .Range("A2:A" & .Range("A65536").End(xlUp).Row)
            ComboNom.AddItem (Cell)
            Next
        Else
            'Sinon afficher uniquement l'usage loggé
           ComboNom.AddItem (NomUser)
        End If

        For Each Cell In .Range("B2:B" & .Range("B65536").End(xlUp).Row)
        ComboDate.AddItem (Cell)
        Next
    End With

     With lstResultat.ColumnHeaders
        'Supprime les anciens entêtes
       .Clear

        'Ajoute les colonnes
       .Add Text:="No", Width:=0
        .Add Text:="Salle", Width:=100
        .Add Text:="HeureDebut", Width:=60
        .Add Text:="HeureFin", Width:=60
        .Add Text:="Plage", Width:=0
    End With
End Sub

pour le reste,je suis entrain de regarder, faut il changer le ComboNom en ComboNomUtilisateur.

Le problème est résolu mais je n'arrive pas à récupérer le nom utilisateur pour alimenter le champ dans userformReservation et userformsuppression

Serait il possible de pouvoir valider la saisie par la touche enter du clavier

A+

bonne journée

j'ai pas été assez précis, la procedure initialize était pour la form fSuppReserv. Mais il faut que tu fasses aussi la même chose pour UserFormRéservation.

Pour la saisie par enter dans un textbox, tu peux utiliser l'évènement Keydown. Il te donne une propriété keycode qui correspond au code de la touche appuyé ( 13 pour enter ). Voici un exemple pour la form UsFormUtil

Private Sub BnValider_Click()
  Validation
End Sub

Private Sub CodeUtilisateur_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then Validation
End Sub

Private Sub Validation()
    If Me.CodeUtilisateur = Sheets("Params").Cells(Me.ComboNomUtilisateur.ListIndex + 2, 6) Then
    MsgBox "Le mot de passe est correct"
    NomUser = Me.ComboNomUtilisateur.Value
    ModeUtil = True
  Else
    MsgBox "Le mot de passe n'est pas correct"
    NomUser = ""
    ModeUtil = False
  End If
  Unload Me
End Sub

Bonjour Math et le forum,

J'ai intégré ton code pour la touche enter qui fonctionne très bien

Par contre, la récupération du nom utilisateur ne semble pas fonctionner

merci de ton aide

Bonne journée

Ça devrait fonctionner

Re,

merci Math pour ton aide cela fonctionne.

J'avais pas vérifié jusque là mais a priori, il est possible de réserver pour le même utilisateur plusieurs fois la même salle à la même heure, je pensais avoir vérifié cette partie mais avec les modifs pour la saisie des codes utilisateurs ca ne marche plus. Peux être pourras tu me renseigner

D'autre part ,j'ai lu dans le forum qu'il fallait mettre "Option Explicit" en tête de module car sans cela,ca peut facilement générer des problèmes plus importants que de définir le type adéquat des variables.

Je l'ai fait dans le fichier que tu viens de me joindre et effectivement ca génère des erreurs de compilation dans le module 1 et 2, pourquoi

A+ et merci

Bonjour,

désolé pour le délais, j'ai eu un peu moins ces dernières semaines.

Est-ce que tu as réussi à résoudre ton problème avec les réservations ? Si non, dis moi où tu es rendu on pourrait regarder ça.

Dans le code il y a des variables qui ne sont pas défini, c'est pour ça que lors de la compilation, ça donne une erreur.

Ex dans le module 1

Réponse = MsgBox("Confirmez vous la suppression de : " & NomFeuille & " ?", vbYesNo)
If Réponse = vbYes Then

Réponse n'est pas défini nul part, ce qui donne une erreur. Un truc pour cette ligne, tu peux avoir le même résultat sans passer par une variable:

If MsgBox("Confirmez vous la suppression de : " & NomFeuille & " ?", vbYesNo) = vbYes Then

Bonjour Math,

Je n'ai pas réussi à résoudre mon problème de réservations par 2 pers de la même salle le même jour à la même heure.

Ne tiens pas compte du bouton et des cases à cocher qui ne fonctionnent pas, se sont des tests que je fais pour la récurrence des réservations

liste deroulante souhaitee hatmac

Il y a une problème dans ces lignes de la fonction ValidationRéservation

  ' Calcul la colonne d'heure DEBUT
  IndCol = Abs(Minute(Me.ComboHeureDébut) = 30) ' Augmente d'une colonne si heure de début contient 1/2 heure
  ColDebH = ((Int(HeureDebut * 24) - 7 + 1) * 2) + IndCol
  '
  ' Calcul la colonne d'heure FIN
  IndCol = IIf(Minute(Me.ComboHeureFin) = 30, 0, -1) ' Diminue d'une colonne si heure de début contient 1/2 heure
  ColFinH = ((Int(HeureFin * 24) - 7 + 1) * 2) + IndCol

ex: Pour une réservation de 7:00 à 8:00, ColDebH = 2 ( ce qui est correct ) mais ColFinH = 1 ( mais devrait donner 3). Ensuite quand le code arrive à

For Col = ColDebH To ColFinH

la boucle arrête.

pour trouver les colonnes, tu pourrais utiliser l'index du combobox qui donne l'index de l'item sélectionné:

  ColDebH = Me.ComboHeureDébut.ListIndex + 2
  ColFinH = Me.ComboHeureFin.ListIndex + 1

pour trouver le jour de l'année, tu peux utiliser DatePart

LigDeb = 3 + DatePart("y", MaDateDeb)

finalement, au lieu de tester si la couleur de la cellule n'est pas vide et est égale à celle de l'usager, tu pourrais simplement tester s'il y a du texte dans la cellule

Voici le code au long:

Public Function ValidationReservation(Nom As String, MaDateDeb As Date, HeureDebut As Date, MaDateFin As Date, HeureFin As Date) As Boolean
  Dim MaFeuille As Worksheet, TabF As String
  Dim IsLibre As Boolean

  ' Remplissage du tableau des feuilles à ne pas prendre en compte
  TabF = "Jours ouvrés;Menu;Data;Params;Cadre;Impression"
  '
  ' Calcul de la ligne de date de DEBUT
  LigDeb = 3 + DatePart("y", MaDateDeb)
  LigFin = 3 + DatePart("y", MaDateFin)
  '
  ' Calcul la colonne d'heure DEBUT
  ColDebH = Me.ComboHeureDébut.ListIndex + 2
  '
  ' Calcul la colonne d'heure FIN
  ColFinH = Me.ComboHeureFin.ListIndex + 1
  '
  ' Vider la listbox de choix
  Me.ListBoxVh.Clear
  ' Pour chaque feuille du classeur
  For Each MaFeuille In Worksheets
    IsLibre = True  ' Mettre la variable à VRAI ici
    ' Si c'est une feuille de planning
    If InStr(1, TabF, MaFeuille.Name, vbTextCompare) = 0 Then
      ' Pour chaque ligne de réservation
      For Lig = LigDeb To LigFin
        ' Pour chaque colonne
        For Col = ColDebH To ColFinH
          ' Si la cellule n'est pas vide
          If MaFeuille.Cells(Lig, Col).Value <> "" Then
            IsLibre = False
            Exit For
          End If
        Next Col
      Next Lig
      ' La réservation est-elle possible
      If IsLibre Then Me.ListBoxVh.AddItem (MaFeuille.Name)
    End If
  Next MaFeuille

  ValidationReservation = (Me.ListBoxVh.ListCount > 0)
End Function

j'ai fait quelques tests et ça fonctionnait

Bonjour Math et le fourm,

Pour Math

Merci de ton aide cela fonctionne parfaitement

De plus ,le code est simplifié

Problème résolu

Bon WE et bon courage à tous

Rechercher des sujets similaires à "mise jour mot passe"