Configuration MsgBox + Verrouillage Feuille

Résolu
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai une macro qui (normalement) se déclenche à l'ouverture de d'un classeur Excel et qui me demande le mot de passe de la feuille.
Si celui-ci est bon la feuille s'ouvre normalement, si celui-ci est faux la feuille reste protégée (donc read only).

De plus à la fermeture du classeur, la macro reverrouille (normalement) la feuille automatiquement.

Cependant cela ne se passe pas toujours comme prévu :

1. La feuille ne se reverouille pas automatiquement

2. La feuille ne s'ouvre pas en read-only lorsque le mdp est incorrecte (probablement lié au problème N°1, résoudre l'un résoudra l'autre je pense)

3. Et j'aimerais que lors de la saisie du mot de passe, les caractères ne s'affichent pas. Que l'ont vois seulement des ****, c'est tout de même plus pratique lors de projection !

4. Autre amélioration, j'aimerais si possible que le bouton "annuler" soit remplacé par un bouton "Pas de mdp" et que ceux-ci ne se situe plus à droite mais en dessous de la barre de saisie.

Ci-dessous mon code actuel :
Private Sub Workbook_Open()

textetitre = InputBox(Title:="Bonjour", _
Prompt:="Veuillez saisir le code d'accès.")
If textetitre = "1234" Then
Worksheets(1).Unprotect Password:="natnat"

Else
msg = "Mot de passe incorrect."
StyleBoîteDialogue = vbOKOnly + vbQuestion
Title = "Accès réglementé."
réponse = MsgBox(msg, StyleBoîteDialogue, Title)
Exit Sub

End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   
    Worksheets("Base RDP").Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True
    Worksheets("Base RDP").EnableSelection = xlNoSelection
    
End Sub


Merci d'avance
A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Plusieurs choses.
1- ton mot de passe "feuill" c'est natnat :
Worksheets(1).Unprotect Password:="natnat"

Or, à la fermeture du classeur, tu sauvegardes avec 1234 comme mot de passe :
Worksheets("Base RDP").Protect Password:="1234"


D'où ton "merdouillage" au niveau de la protection...
Tu as mélangé le mot de passe d'ouverture et celui de protection...

2- si tu veux une boite de dialogue toute paramétrable (*** au lieu du mdp, bouton "pas de mdp" etc...) oriente toi vers les UserForm.
J'te bricole un exemple...
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
0
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
 
Ahah, enfaite j'ai voulu changer le mot de passe pour ne pas mettre le "vrai" ici
Mais j'ai oublié de la changé à un endroit... Dans mon code il est bien identique.
Je jette un oeil à ton fichier, et te redis ce qu'il en est.

Merci.
0
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
 
Effectivement fichier correspond à ce que je souhaite.

Cependant il reste 2 problèmes :

1. Lorsque la personne clique sur "Pas de MdP" il ne faut pas que la base se ferme, il faut que la personne puisse la consulter mais pas la modifier (lecture seule)

2. Le second problème (et pas le moindre) c'est que je suis débutant en VBA et je n'ai pas la moindre idée de comment je peux transposer ton userform à mon fichier (pour être honnête je ne sais même pas comment créer un userform, ni ce que cela permet)

Merci d'avance.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
je n'ai pas la moindre idée de comment je peux transposer ton userform à mon fichier
Alors, un peu de lecture s'impose :

Les UserForms

Les contrôles de UserForm

Lorsque la personne clique sur "Pas de MdP" il ne faut pas que la base se ferme, il faut que la personne puisse la consulter mais pas la modifier (lecture seule)
Ne sachant pas ce que tu voulais, j'ai pensé fermer le fichier.
Mais bon si tu veux l'ouvrir, sans ôter la protection de ta feuille, il n'y a aucun souci :
à l'ouverture du classeur, tu protège ta feuille et lace l'userform :
Private Sub Workbook_Open()
Worksheets(1).Protect Password:="natnat", DrawingObjects:=True, Contents:=True, Scenarios:=True 'protège la feuille 1
UserForm1.Show 'affiche l'userform
End Sub


Dans le code du bouton "Pas de MdP", tu fermes simplement l'userform (ta feuille étant protégée, pas de souci) :
Private Sub CommandButton2_Click()
Unload Me 'ferme l'userform
End Sub


Le code du bouton "Valider" est sensiblement équivalent à ton code initial :
Private Sub CommandButton1_Click()
If TextBox1.Value = "1234" Then
    Worksheets(1).Unprotect Password:="natnat"
    Unload Me 'Décharge l'userform
Else
    msg = "Mot de passe incorrect."
    StyleBoîteDialogue = vbOKOnly + vbQuestion
    Title = "Accès réglementé."
    MsgBox msg, StyleBoîteDialogue, Title
    TextBox1 = ""
Exit Sub
End If
End Sub


La différence tient surtout dans le code d'ouverture de l'UserForm :
Private Sub userForm_Initialize()
Dim hwnd As Long

'enlève la croix de fermeture de l'userform
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF

With Me.TextBox1 'le textbox1
    .PasswordChar = "*" 'naffiche que des *
    .Value = "" 'au chargement, il est vide
End With
End Sub
0
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
 
Merci beaucoup.

Ton aide va m'être très précieuse afin d'un peu mieux comprendre et utiliser VBA.

Merci également pour ton aide pour le code, il est parfait comme ça.

Je passe donc en résolu, bonne journée.
0