Protection / déprotection VBA

dn35

XLDnaute Occasionnel
Bonjour le forum !!!

C'est toujours aussi plaisant de se ballader parmis vos post afin de trouver de nouvelles astuces mais aujourd'hui me voici coincée avec un probème très certainement très très simple !!!

Je ne met pas de bout de fichier dans l'immédiat mais au besoin j'en prépare un (l'original faisant quelques 15 mo ...)
C'est pourtant une procédure que j'applique régulièrement mais là je coince et je ne trouve pas la solution qui est très certainement sur le bout de mon nez ...

Alors voilà sur une des feuille de mon classeur j'ai un togglebutton qui me permet de protéger/déprotéger le contenu de la feuille

Voici le code associé au bouton :
Code:
Private Sub ToggleButton1_Click()

If ToggleButton1 = True Then
ToggleButton1.Caption = "feuille déprotégée"
UserForm2.Show
Else
ToggleButton1.Caption = "feuille protégée"
Feuil19.Protect "1956"
End If

End Sub

Voici le code contenu dans le module :
Code:
Public mdp As String

Public Sub qb_c1(bouton As String)
UserForm2.Show
 If mdp Like "1956" Then
 okgo
 Cancel = True
 Else
 MsgBox "Mauvais mot de passe", vbCritical, "ERREUR"
 On Error Resume Next
 On Error GoTo 0
 Exit Sub
 End If
End Sub


Private Sub okgo()
Feuil19.Unprotect "1956"
End Sub

Et enfin le code associé au bouton ok de l'userform :
Code:
Private Sub bouton1_Click()

mdp = UserForm2.TextBox1.Text
UserForm2.Hide
Unload UserForm2
End Sub

La procédure semble se dérouler sans encombre mais après "déprotection" de la feuille, lorsque je veux apporter une modification, Excel me signifie que la feuille est toujours protégée :confused::confused::confused:

Voyez vous l'erreur dans mon code.
Encore une fois au besoin, je file préparer un bout de fichier exemple si besoin n'hésitez pas à me le dire.
Merci d'avance pour votre aide et bonne journée à tous !

DN35
 

tbft

XLDnaute Accro
Re : Protection / déprotection VBA

Bonjour

Pourrais tu me dire pourquoi tu as écris ça, stp?
dans la partie alors du si
Code:
Cancel = True
et dans la partie sinon
Code:
 On Error Resume Next
 On Error GoTo 0
 Exit Sub
Pourrais tu éclairer ma lanterne,stp?
d'avance merci..
 

dn35

XLDnaute Occasionnel
Re : Protection / déprotection VBA

Bonjour TBFT

Je ne suis pas experte en VBA loin de là et toutes les procédures que j'applique ou adapte m'ont été transmises par les XLDiens de ce site qui aident les pauvres débutants comme moi. C'est pourquoi apparaissent ces bouts de codes au fil de mes interventions ici.


Pour la propriété cancel, tout simplement pour permettre à un moment donné d'arrêter la procédure et de revenir à l'état initial ...

Pour le gestionnaire d'erreur :

On error resume next :
Lorsqu'une erreur d'exécution survient, le contrôle est transmis à l'instruction qui suit immédiatement celle où l'erreur s'est produite, et l'exécution continue.
On error GoTo 0 :
Invalide dans la procédure en cours tout gestionnaire d'erreurs validé.

J'ai reçut ce conseil d'un des pros qui transitent ici... lorsque pour la première fois j'ai eut besoin de construire cette procédue . En l'absence d'instruction On Error, toute erreur d'exécution est fatale ; un message d'erreur apparaît et l'exécution s'arrête.

Elle n'est peut-être pas pertinente à tout les coups mais depuis, je l'intègre systématiquement.

Bonne journée
 

dn35

XLDnaute Occasionnel
Re : Protection / déprotection VBA

Voici petit fichier pour illustrer le problème ... Et c'est pas l'absence continuelle du soleil breton ces derniers temps qui va me remonter le moral ... je m'arrache les cheveux et je suis pourtant convaincue que la réponse est jsute devant mon nez :confused::confused::mad::mad::mad:
 

Pièces jointes

  • essaiTB.xls
    35.5 KB · Affichages: 90
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Protection / déprotection VBA

Bonjour DN35, TbFt, Efgé :),
Efgé ayant laissé une légère erreur (en cas de mauvais mot de passe, le Toogle affiche "Feuille déprotégée" :p), je propose une version racourcie :
Code:
Private Sub ToggleButton1_Click()
If ToggleButton1 = True Then
    UserForm1.Show
    If mdp = "1956" Then
        Me.Unprotect mdp
        ToggleButton1.Caption = "feuille déprotégée"
    Else
        MsgBox "Erreur de mot de passe !", vbCritical
        Exit Sub
    End If
Else
    Feuil1.Protect "1956"
    ToggleButton1.Caption = "feuille protégée"
End If
End Sub
qui se suffit à elle même :rolleyes:.
Dans l'USF, .Hide ne sert à rien vu qu'il est UnLoad juste derrière :rolleyes:.
Il serait peut-être intérressant de mettre dans la propriété PasswordChar une * pour cacher la saisie du MdP :D.
Où tant qu'à faire, pourquoi ne pas utiliser une simple InputBox ?
Bonne journée :cool:
 

dn35

XLDnaute Occasionnel
Re : Protection / déprotection VBA

Salut Efgé,

Et merci. Si j'essaye de comprendre c'est donc toutes ces précautions afin d'éviter des erreurs qui bloquaient la procédure ???

En attendant ta proposition fonctionne à merveille mais j'aimerais beaucoup comprendre ce qui bloque dans la mienne étant donné qu'elle est appliqué dans pas mal de mes fichiers !

Merci encore
Bonne fin de journée

DN35

EDIT : JNP je n'avais pas vu ta réponse, merci à toi aussi en particulier pour l'astuce concernant l'état du togglebuton à l'ouverture ...
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Protection / déprotection VBA

Re au fil, Bonjour JNP,
Il est vrai que je n'aurai pas utilisé un userForme pour déprotéger une feuille, donc je n'avais pas tout fu. (Merci JNP de la rectif)

dn35
Pour le problème du fichier, ce n'est pas la gestion des erreurs qui était en défaut , bien que dans ce contexte elle ne serve à rien, mais le fait que tu utilisait Public Sub qb_c1(bouton As String) et que tu n'appelai jamais ce bout de code. Je l'appel dans le Private Sub bouton1_Click().
Cordialement
 

Discussions similaires

Réponses
6
Affichages
264

Statistiques des forums

Discussions
312 500
Messages
2 089 013
Membres
104 004
dernier inscrit
mista