DEPROTEGER FEUILLE OU CLASSEUR EXCEL

dim3311 Messages postés 13 Date d'inscription dimanche 16 septembre 2001 Statut Membre Dernière intervention 12 juillet 2007 - 26 mars 2006 à 10:01
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 29 juin 2006 à 09:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36729-deproteger-feuille-ou-classeur-excel

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
29 juin 2006 à 09:30
Salut à tous,

Nouvelle précision, pour la version "Office 2007 bêta" qui vient de sortir, le code pour la version 2003 (donné juste au-dessus) fonctionne encore parfaitement...

En fait, il me semble qu'il n'y a pas de différence sur ce point.

Amicalement,
Us.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
6 avril 2006 à 22:41
LOL... ét crite ossi... (lmu) -:);

Merci, A+
Us.
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
6 avril 2006 à 20:07
désolé, j'ai lmu trop vite.

OAXPPR c'est Adcence Office XP Password Recovery. Un logiciel payant mais très efficace. Il doit y avoir des version shareware.

++++
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
6 avril 2006 à 18:45
Euh... On dit la même chose ? nan ?

JE reprécise, pour la version 2002, si tu coches les deux dernières options, alors le code que tu proposes ne fonctionne pas. Autrement, c'est bon... J'AI vérifié avant de dire cela...

Quand AOXPPR, je ne connais pas. Peux-tu m'apporter une précision ?

Amicalement,
Us.
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
6 avril 2006 à 17:59
salut,

désolé de te contredire mais ce que je propose fonctionne sans cocher les deux dernières options.

Pour la force brute, j'ai abandonné depuis longtemps : AOXPPR déverrouille quasiment tout en une demie seconde.

++++
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
6 avril 2006 à 00:40
Salut Kalobit,

Désolé, mais ce que tu proposes ne fonctionne pas quand tu coches les deux dernières options de protection : "Modifier les objets" et "Modifier les sénarios"... C'était ce que je disais bien plus haut...

IL est à noter que pour 2002, il n'est utile de faire également la copie de cellule (seulement utile sous 97)...

En clair, la macro donne ceci :

Sub DeprotegeFeuilleExcel2002()
With ActiveSheet
.Protect vbNullString, , True, , , , , , , , , , , , , True 'VERSION 2002
.Unprotect vbNullString
End With
End Sub

=

Pour le classeur sous 2002, le code proposé ne fonctionne pas (et probablement sous d'autres verions).

Pour l'instant, je ne vois que deux possibilités. Soit de faire ce que j'ai expliqué le 1/04/2006... soit d'utiliser l'algo proposé par "chepakoidir" qui recherche un mot de passe valide par essai/erreur, beaucoup plus long bien sur... JE préfére également, ma version (non pas que, mais bon...) car en général un peu plus rapide.

Sa référence : http://www.vbfrance.com/codes/OTER-PROTECTION-FEUILLES-CLASSEUR-EXCEL-METHODE-SANS-ECHEC_36857.aspx

Voilà, pour l'instant... Avis aux amateurs !

Amicalement,
Us.
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
5 avril 2006 à 16:22
salut,

une idée pour la déprotection du classeur avec 2002 ?

pour les feuilles, j'avais posté ça la semaine dernière mais c'est pas passé :

With ActiveSheet
.Protect vbNullString, , , , , , True
.Protect vbNullString, , , , , , , , , , True
.Unprotect vbNullString
End With

merci encore
+++
et hop 10/10
K@lobit
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
4 avril 2006 à 20:24
BONJOUR A TOUS,

J'ai trouvé ! pour la version 2002, utiliser la ligne suivante :

.Protect vbNullString, , True, , , , , , , , , , , , , True 'VERSION 2002

qui permet de déprotéger une feuille, quel que soit les protections cochées...

JE pense que c'est valables pour les autres versions, mais pas essayé...

Amicalement,
Us.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 avril 2006 à 20:33
Merci, inspecteur...

J'ai trouvé une autre astuce pour les versions supérieur à 97, et où toutes les protections ont été cochées. IL suffit de passer par la Version Excel 97... Voici comment :

1) Enregistrer votre fichier sous la version 97-2002.
2) Ouvrir Excel 97 (bien sur, il faut encore le possèder) et ouvrir le fichier.
3) Enregistrez-le, afin de l'avoir en vraie version 97, et non en une version seulement compatible...
4) Appliquer les petites macros ci-dessus.
5) Enregistrer la version déprotégée.

IL vous reste plus qu'à l'ouvrir de nouveau avec votre version supérieure. Si votre fichier est un peu prés standard alors la mise en forme est conservée. Voilà, en espérant que cela vous sera utile...

Amicalement,
Us.
cs_derick Messages postés 41 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 25 août 2007
28 mars 2006 à 14:28
Avec Excel 2000, cela marche très bien ! Bravo us_30, c'est simple, mais vachement efficace... 10/10 (quand ce satané système de vote fonctionnera de nouveau, créd'jjju ;-))
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
26 mars 2006 à 23:46
Bonsoir Dim3311, y'a pas mal.

PRECISION : Cette programmation fonctionne parfaitement uniquement sous EXCEL 97.

JE viens de constater que pour EXCEL 2003, il fallait modifier la ligne Protect avec :
.Protect vbNullString, , , , , , True

Néanmoins, la situation n'est plus trés claire. En effet, si dans la longue liste des protections d'une feuille (bien plus d'objets sont présent sur cette version , que sur 97) si les deux derniers ont été cochés lors de la saisie du mot de passe, alors la déprotection ne fonctionne plus du tout !? Phénomène trés curieux, mais bon...

Et je ne sais pas sur qu'il advient pour d'autres versions. Avis aux amateurs...

Amicalement,
Us.
dim3311 Messages postés 13 Date d'inscription dimanche 16 septembre 2001 Statut Membre Dernière intervention 12 juillet 2007
26 mars 2006 à 18:02
Oki, bien compris le fonctionnement et les astuces, mes excuses
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
26 mars 2006 à 17:10
Bonjour Dim3311,

C'est avec un grand plaisir, que je vais d'expliquer un peu plus le fonctionnement du code, afin que tu comprennes mieux... -:);

=

GRAND UN ) La problématique...

Admettons que tu as protégé une feuille Excel avec un mot de passe, avec Outils>Protection>Protéger la feuille, et en plus avec toutes les options (Contenu, Objets, Scénario).

ET bien sur, que tu as oublié ton mot de passe... (c'est dur de mémoriser un mot de passe !) ET comme tu t'en doutes, tu ne peux plus rien faire sur la feuille, maintenant totalement bloquée !

=

GRAND DEUX ) Une solution ?

Le plus grand conseil, aurait été de ne jamais mettre un mot de passe ! En effet, ce dernier n'est pas obligatoire. Mais oui, mais voilà, tu n'écoutes personne !

Existe-t-il quand même un moyen ?

OUI, et ce moyen tu l'as devant les yeux ! et par chance, fonctionne parfaitement !

=

GRAND TROIS ) Comment cela fonctionne ?

Réponse : Grâce à un problème de fonctionnement des fonctions UNPROTECT et PROTECT ! si, si !! Seul la connaissance pointue du fonctionnement de VBA nous permet de faire sauter la protection !

En effet, comme grand connaisseur de VBA, tu essayes de programmer la fonction de déprotection de la feuille... et comme tu le dis :
"y'a aucun intérêt de protéger la feuille avant de la déprotéger"
Par conséquent, tu code directement la déprotection de la feuille avec :

ActiveSheet.Unprotect vbNullString

et tu l'exécutes ! et VBA te renvoi :

Erreur 1004 :
Mot de passe non valide. Vérifiez que la touche VERR.MAJ n'est pas activée et que respectez la bonne case.

Loupé !

... et la feuille protégée par un mot de passe, reste dans le même état... En effet, pour déprotéger la feuille avec .UNPROTECT, il faut lui indiquer le mot de passe. Or, c'est précisément ce que décidément ta mémoire a oubliée !

Par exemple, si ton mot de passe était "MON PASSE", alors la bonne syntaxe aurait été :

ActiveSheet.Unprotect "MON PASSE"

BON, je pense que tu as compris maintenant que ta remarque ne tient pas debout ! Existe-t-il une astuce ?

Oui. Cette astuce consiste à définir un mot de passe sur l'ancien mot de passe, dit simplement. Puis, de le désactiver.

C'est donc la raison pour laquelle tu as vu dans le code, d'abord une protection avec .PROTECT, auquel on définit un mot de passe valant une chaîne nulle (vbNullString). Mais si on programme directement la déprotection (UNPROTECT) alors cela ne fonctionnera pas encore. IL Faut avant réaliser une action sur la feuille, cela permet une espèce de validation de la nouvelle protection. Et cette action ne peut être n'importe laquelle, disons que la fonction "Selection" ne serait pas valide... C'est pour ça qu'on réalise en fait une copie interne à VBA... (on pourrait d'autre référence de case, comme : .Range("D13").copy .range("B4"), mais bon, c'est sans importance...)

Voilà ! pour une feuille...

=

Pour un classeur, le principe est en tout point identique, sauf qu'il n'est pas ici nécessaire d'utiliser une action sur l'objet...

Voilà !

=

A noter que pour Word, cette astuce ne fonctionne pas. PROTECT n'ayant pas exactement le même comportement.

=

A revoir ton commentaire

=

Amicalement,
Us.
dim3311 Messages postés 13 Date d'inscription dimanche 16 septembre 2001 Statut Membre Dernière intervention 12 juillet 2007
26 mars 2006 à 10:01
Salut

y'a aucun intérêt de protéger la feuille avant de la déprotéger dans ta première fonction. Et la petite commande de copie de cellule "A1" vers elle même montre que tu débute vraiment dans le VBA.

Pareil pour la déprotection du classeur.

A revoir le code