La déprotection par boîte de dialogue

phyx

XLDnaute Nouveau
Bonjours ami confère,

me voilà avec mon blocage/
D'abord, je vous explique mon objectif :
- dé protéger des feuilles à l'aide d'une boite de dialogue.

Avant cette macro de dé protection, j'ai fait une macro de protection pour les feuilles du classeur où j'utilise un InputBox (jusqu'ici, pas de problème), comme ceci :
Code:
Sub GPROTECT()
'
' Protection de toutes les feuilles du classeur (quelque soit le nombre)
' Le mot de passe est ici choisi
'
Dim Passe As String
Passe = InputBox(" Le mot de passe ? ", " Protection des feuilles du classeur ", "Taper votre mot de passe ici", 100, 50)
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then MsgBox "C'est mieux de mettre un mot de passe, tu peux recommencer l'instruction. T'inquiètes pas, ça viendra avec le temps..."
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then Exit Sub

For Each feuille In Sheets
    feuille.Protect Password:=Passe, DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowSorting:= _
        True, AllowFiltering:=True, AllowUsingPivotTables:=True
    feuille.EnableSelection = xlUnlockedCells
    Next feuille

End Sub

Bon, ça peut encore être amélioré mais bon, ça suffit pour le moment.

Maintenant, j'ai voulut faire une macro de dé protection dans le même genre, mais, le problème survient lorsque excel se rend compte que le mot de passe n'est pas correct. Il balance une boite de dialogue toute pourri qui demande le déblocage ou non. (hors, ce que je souhaiterais mettre, c'est une boite du dialogue qui "anticipe" ce buggage prévisible et que l'utilisateur de la macro ne se retrouve pas devant un code, qu'il n'y comprenne rien et qu'il me charcute tout ça à coup de touche de clavier ....)

Vous voyez le dilemme, mais, avec le code, ça devrait mieux passer :
Code:
Sub GDéPROTECT()
'
' Déprotection de toutes les feuilles du classeur (quelque soit le nombre)
' Le mot de passe est ici choisi
'
Dim Passe As String
Passe = InputBox(" Le mot de passe ? ", " Protection des feuilles du classeur ", "Taper votre mot de passe ici", 100, 50)
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then bouton = MsgBox(" Faut au moins mettre une lettre pour déprotéger, hein, sinon ...", 64, "Bah, t'as pas le code ?")
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then Exit Sub

For Each feuille In Sheets
    ' SI le mot de passe est faute, ça buggera ICI
    feuille.Unprotect Password:=Passe
Next feuille
ActiveWorkbook.Unprotect Password:=Passe

End Sub
***
Enfin, ça bugge ICI lorsque j'ai mit des instructions apparemment fausses et
comme ça, le code est bon, mais, il manque l'instruction qui pourrait ne plus me pourrir la vie...
Moi, j'ai essayé avec :
- If feuille.Unprotect Password <> Passe Then Exit Sub : là, il attend un Then ou GoTo alors que pour moi, ayant a un.
ou
- If feuille.Password <> Passe Then Exit Sub : et là, y dit rien, mais après, il me dit " propriété ou méthode non gérée par cet objet "

Donc, ça morche poo, le VBA souhaite quelque chose mais, je sais pas quoi.
Je me posais la question des booleen, avec un truc du style :

If ( feuille.Unprotect Password:=Passe ) := False Then : mais, ça morche poo aussi....

Donc, là, je suis en manqe d'inspiration.
et pis, les seuls trucs que l'on me refile sur le net sont des logiciel pour récupérer des passes or ici, je cherche juste à la gérer sans le connaitre ce que VBA n'a pas l'air d'aimer.

Enfin bon, si vous avez une idée, n'hésiter pas à répondre, moi, je cède la plume...
Bonne réflexion !
 

Staple1600

XLDnaute Barbatruc
Re : La déprotection par boîte de dialogue

Re


Ca marche mieux là (en tout cas OK sous XL2K)
Code:
Sub GPROTECT()
'
' Protection de toutes les feuilles du classeur (quelque soit le nombre)
' Le mot de passe est ici choisi
[B] Dim feuille As Worksheet[/B]
Dim Passe As String
Passe = InputBox(" Le mot de passe ? ", " Protection des feuilles du classeur ", "Taper votre mot de passe ici", 100, 50)
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then MsgBox "C'est mieux de mettre un mot de passe, tu peux recommencer l'instruction. T'inquiètes pas, ça viendra avec le temps..."
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then Exit Sub

For Each feuille In Sheets
    feuille.Protect Passe
    feuille.EnableSelection = xlUnlockedCells
    Next feuille

End Sub
 

pierrejean

XLDnaute Barbatruc
Re : La déprotection par boîte de dialogue

bonjour phyx

Salut Staple

A tester:

Code:
Sub GDéPROTECT()
'
' Déprotection de toutes les feuilles du classeur (quelque soit le nombre)
' Le mot de passe est ici choisi
'
Dim Passe As String
Passe = InputBox(" Le mot de passe ? ", " Protection des feuilles du classeur ", "Taper votre mot de passe ici", 100, 50)
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then bouton = MsgBox(" Faut au moins mettre une lettre pour déprotéger, hein, sinon ...", 64, "Bah, t'as pas le code ?")
If Passe = "" Or Passe = "Taper votre mot de passe ici" Then Exit Sub
 
For Each feuille In Sheets
' SI le mot de passe est faute, ça buggera ICI
[COLOR=blue]On error goto fin[/COLOR]
feuille.Unprotect Password:=Passe
Next feuille
ActiveWorkbook.Unprotect Password:=Passe
[COLOR=blue]Exit sub[/COLOR]
[COLOR=blue]fin:[/COLOR]
[COLOR=blue]Msgbox("Mauvais mot de passe")[/COLOR]
[COLOR=blue]on error Goto 0[/COLOR]
End Sub
 

phyx

XLDnaute Nouveau
Re : La déprotection par boîte de dialogue

Les deux méthodes marchent. Pour le moment, je comprend plus la 2ième que la 1er, mais, je vais m'atteler à les retravailler.
Merci pour votre aide, vous venez de répondre en à peine 20s et 2min une recherche de à peut près 3-4 heures. ça laisse rêveur...
 

Discussions similaires

Réponses
10
Affichages
504
Réponses
6
Affichages
392

Statistiques des forums

Discussions
314 644
Messages
2 111 529
Membres
111 189
dernier inscrit
Laurent.