VBA - retirer la protection du projet via une macro

Signaler
Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
-
Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
-
Bonjour,

Possédant le mot de passe d'un projet, est-il possible de supprimer la protection par password du projet via une macro ? (si oui, comment? ;) )

7 réponses

Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
2
ScSami, pour la protection du projet VB, il faudrait apparemment passer par un workbook.vbproject.protection mais cette procédure est en read-only.

florantanplan, n'ayant actuellement un accès internet qu'au travail cela m'est difficile, ne disposerais-tu pas d'une macro ?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 296 internautes nous ont dit merci ce mois-ci

Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
2
Il n'existe pas que les protections de pages et de classeurs mais aussi la protection du projet VB du classeur qui peut être accessible uniquement par mot de passe et c'est cela que je cherche à modifier par le code. Ce n'est donc ni le classeur ni une sheet mais l'ensemble des modules, des formulaires etc.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 296 internautes nous ont dit merci ce mois-ci

Messages postés
76
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
8 septembre 2006

bonjour,
si tu me files une adresse email, je peux t'envoyer une xla capable de supprimer les protections de tous projets excel (xls, xla).
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
20
Oui, c'est simple, il suffit d'utiliser la méthode protecte sur ton workbook. Regarde dans l'aide mais ça doit être du genre :

Workbook.protect ..., ...

Mais tu peux aussi l'utiliser avec les worksheets !



Cela te suffit-il ?



Enjoy





( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
20
Permet moi déjà de t'engueuler pour ne pas avoir eu la
présence d'esprit de nous donner le soft et sa version (VB6, VB.Net,
VBA97, VBA2003, ...) sous laquelle tu travailles et ce en deux
messages! Ce n'est pas à nous de la deviner... Bref, pense-y la
prochaine fois STP.



Sinon, execuse ma lenteur dans ma réponse mais souhaitant qu'elle soit
la plus précise possible et ayant eu quelques petits problèmes
techniques j'ai du prendre le temps de réinstaller mon Office. Et voici
donc un petit code explicatif appuyant mon premier message :



Public varEtat As Boolean



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If varEtat = False Then

ActiveSheet.Protect

varEtat = True

Else

'Autre référence

Worksheets("Feuil1").Unprotect

varEtat = False

End If

End Sub




Code à placer, bien entendu, dans "Feuil1" d'un classeur de test. Il est à noter qu'il a été fait en VBA 6 sous Office 2000 .



Attention : En VBA (tout comme en VB ou dans tout autre language) tu as des Instructions et des fonctions qui sont propres aux language utilisé. Tu peux également coder tes propres Fonctions et Procédures (les
Instructions étant le niveau le plus bas). Autrement dit, les fonction
internes ou utilisateur ainsi que les procédures utilisateurs sont des
successions d'instructions (des sous-programmes en quelque sorte!).
Toutes ces explications afin qu'on soit bien d'accord sur les termes à
employer. En VBA on utilise surtout des objets...



Les Objets : Comme tu dois déjà le savoir les objets ne sont constitués que de 3 genres de choses : Les Propriétés, les Methodes et les Evenements.

Les Propriétés sont les variables (publiques donc, externes) de l'objet. Autrement dit, ce sont les données de l'objet (qu'il stock et qu'il peut donc utiliser).

Les Méthodes sont les fonctions(/procédure) de l'objet. C'est à dire, des bouts de code actif (les bras de l'objet).

Les Evenements, je te laisse chercher...



Pardonne moi ce rapide petit cours "objet" si tu savais déjà tout ça...

Donc, pour en revenir à ton cas, tu n'appellerais pas une procédure
mais une méthode. Et, si elle est, comme tu dis, en "read-only" ce
n'est très certainement pas une méthode mais une propriété !!!



De plus, on ne sait pas exactement ce que tu cherches à faire. Est-ce
que tu veux proteger une feuille ou un classeur tout entier ou alors si
tu cherches à proteger seulement les macros. Enfin, si seulement tu
bosses bien sous Excel!!!

Workbook.vbproject.pretection me dit que, non seulement tu as
l'illusion qu'un jour la programmation se fasse en français (Pretection
VS Protect) mais qu'un plus tu ne cherches qu'a proteger tes macros VBA
(vbproject). Quelque chose me dit aussi que tu bosses en .Net et donc,
avec une des dernière version d'Office... Comme quoi, une simple ligne
de code peut en dire long!!!

Encore que... c'est à toi de me dire si je me trompe sur toute la ligne où s'il y a une once de vérité dans mes propos !



Comme dit précédemment, je n'ai que la version 2000 de office et ne
peut donc pas t'aider vraiment si tu as une version plus récente (même
si je peux quand même essayer! ;-). Dans ce cas, et si ton problème
n'est toujours pas résolu depuis le temps, c'est de consulter l'aide de
ton VBA afin de savoir, non pas qu'elle propriété, mais qu'elle méthode
il faut utiliser. Si les mecs de chez Microsoft ne sont pas trop nases,
il devrait toujours s'agir de .Protect et de .Unprotect
comme inscrit dans mon code. Mais reste à savoir ce que tu veux
vraiment proteger car le code VBA (les macros) ne se protegent pas
exactement de la même manière que les feuilles. Mais là, seule l'aide
poura t'éclairer plus loin...



En esperant que toutes ces explications auront-pu te servir,


Enjoy
<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
Messages postés
23
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
25 août 2005
2
Tout d'abord, étant donné que le forum s'appelle VBA et non VB je pensais bien être dans un forum VBA et je bosse moi aussi sous office 2000 (désolé du manque de précision).

Et, Je cherche bien à retirer la protection des macros et non des sheets (sous Excel)
En outre, l'objet relatif aux macros est le VBProject (projet de macros) et il ne dispose pas de méthodes .Protect ou .UnProtect mais d'une propriété .Protection qui permet de savoir s'il est protégé ou non.
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
20
Ce que je vais te dire ne vas sans doute pas te plaire mais l'aide du VBA explique tout ça mieux que moi!!!



Ton erreur est belle et bien de chercher du coté de vbproject qui,
comme tu l'as remarqué, n'a pas de méthodes, plutôt que du coté des
feuilles et du classeur. Car, en réalité, ce n'est pas les macros que
tu protège, mais les feuilles ou le classeur (cf. dans le menu Outil
-> Protection). N'oubli pas que le VBA sert d'abord et avant tout
d'interface entre le code et l'interface graphique utilisateur! Du
coup, lorsque tu cherches à faire un truc, il faut d'abord regarder
comment tu devrais le faire via l'interface user (si, bien entendu,
c'est réalisable par ce biais!).



Donc, en réalité il faut bien passer par la méthode protect qui a 2
syntaxes différentes selon l'objet. Voici un petit copier/coller de
l'aide :


"

Protège un graphique ou une feuille de calcul (syntaxe 1) ou encore
un classeur (syntaxe 2) afin d'empêcher toute modification.

Syntaxe 1

expression.Protect(Password,
DrawingObjects, Contents, Scenarios,
UserInterfaceOnly)

Syntaxe 2

expression.Protect(Password,
Structure, Windows)


expression Obligatoire. Expression qui renvoie un objet
Chart ou Worksheet (syntaxe 1) ou un objet Workbook
(syntaxe 2).


"



Alors toute la question est : comment proteger le code du module
ThisWorkbook ou d'un module utilisateur puisque les protections se font
page par page !?

A mon avis, ça ne devrait pas poser trop de problèmes... Déjà, il n'y a
jamais grand chose a mettre dans le module ThisWorkbook, mais sinon je
pense qu'en faisant quelques tests on devrait arriver à la conclusion
que seul les propriétés de protection (ProtectContents,
ProtectScenarios, ...) peuvent nous assurer un bon resultat...



Je te laisse tester tout ça et si tu en arrive à une conclusion
satisfaisante, fait-la nous partager via un code ici ou via un petit
Tuto car la question est reccurente et l'aide du VBA peu explicite en
la matière d'accord [on compte sur toi ]


Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )