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
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 !
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.
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
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" ), 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 .
Dans l'USF, .Hide ne sert à rien vu qu'il est UnLoad juste derrière .
Il serait peut-être intérressant de mettre dans la propriété PasswordChar une * pour cacher la saisie du MdP .
Où tant qu'à faire, pourquoi ne pas utiliser une simple InputBox ?
Bonne journée
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 ...
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