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).ValueLe 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 SubPour 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 Subj'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 Subfinalement 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
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 Subpour 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 SubBonjour 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 ThenRé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
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) + IndColex: 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 ColFinHla 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 + 1pour 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 Functionj'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
