Déprotéger un projet par VBA

Le
DoMi
Bonjour,

Pour déprotéger temporairement un projet, j'utilise ceci, trouvé sur
ce forum:

Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578,
recursive:=True).Execute
End Sub

Sub Test()
UnprotectVBProject Workbooks("MonFichier.xls"), "Lemotdepasse"
DoEvents
End Sub

Le problème, c'est que la boîte de dialogue "VBAProject - Propriété=
s
du projet" apparait pendant quelques secondes, et ça ne fait pas
"propre". Pourrait-on l'éviter ?

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Modeste
Le #7077601
Bonsour® DoMi avec ferveur ;o))) vous nous disiez :

Bonjour,

Pour déprotéger temporairement un projet, j'utilise ceci, trouvé sur
ce forum:

Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
If vbProj.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Password & "~~~"
Application.VBE.CommandBars(1).FindControl(ID:%78,
recursive:=True).Execute
End Sub

Sub Test()
UnprotectVBProject Workbooks("MonFichier.xls"), "Lemotdepasse"
DoEvents
End Sub

Le problème, c'est que la boîte de dialogue "VBAProject - Propriétés
du projet" apparait pendant quelques secondes, et ça ne fait pas
"propre". Pourrait-on l'éviter ?



en début de proc Unprotect :
Application.ScreenUpdating úlse


--
--
@+
;o)))
DoMi
Le #7078381
Merci, mais Application.ScreenUpdating est déjà à False...

Par contre, si je le remettais à True avant DoEvents, quitte à le
remettre à False après, ça serait mieux, n'est-ce pas ?...

Merci de m'avoir mis sur la piste !
MichDenis
Le #7078651
Quoique tu fasses, je ne crois pas que cela changera grand chose
à ta problématique...j'espère cependant que tu viendras nous le
dire si tu trouves la solution ! ;-)


"DoMi" Merci, mais Application.ScreenUpdating est déjà à False...

Par contre, si je le remettais à True avant DoEvents, quitte à le
remettre à False après, ça serait mieux, n'est-ce pas ?...

Merci de m'avoir mis sur la piste !
Excel...lent
Le #7083121
Bonjour,

Désolé DoMi de m'insérer dans ton fil mais la question que j'ai à poser est
directement liée au code que tu utilise.

J'utilise déjà cet Excellent code de Bill Manville que j'ai trouvé sur site
de Fred Sigonneau.
J'ai constaté la même chose que DoMi mais franchement c'est de l'ordre du
0,1 seconde donc pas gênant.
Par contre quand on referme le classeur dont le projet est protégé, la
protection demeure. Cad qu'à l'ouverture suivante le projet est de nouveau
verrouillé.
est-il possible de rajouter quelquechose au code de Bill pour que dans
l'onglet "Protection" de la fenetre "Vba Project - Propriétés du projet" :
1 - "Verouiller le projet pour l'affichage" soit décoché
2 - Les champs "Mot de Passe" et "Confirmation du Mot de passe" soit vide.

Merci de votre aide

Cordialement.

Excel...lent

N'hésitez pas à visiter ces mines d'or ! ! !
http://www.excelabo.net/
http://xlwiki.free.fr/wiki/wakka.php?wiki=PageAccueil
http://frederic.sigonneau.free.fr/
http://dj.joss.free.fr/
http://www.cathyastuce.com/excel.htm
http://jacxl.free.fr/cours_xl/cadres.html?ex http://www.dualforum.com/
http://www.excel-downloads.com/forum/forum-excel/
DoMi
Le #7087861
Mais si, ça marche !

Application.ScreenUpdating = False
...
...
UnprotectVBProject ThisWorkbook, "Tener!fe"
Application.ScreenUpdating = True
DoEvents
Application.ScreenUpdating = False

De cette façon, je ne vois plus la boîte de dialogue, alors qu'av ant,
elle apparaissait pendant 2 ou 3 secondes.

Par contre, j'ai un autre problème : Pour des raisons de sécurit é, je
suis obligé de protéger par mot de passe le projet.
Si à un moment, je suis amené à le déprotéger, c'e st que dans le code,
je créé une UserForm et le code qui va avec.
Une fois cette UserForm utilisée, je la détruit, et j'utilise le code
suivant, toujours de Bill Manville :

Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
'can't do it if already locked!
If vbProj.Protection = 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
' now use lovely SendKeys to set the project password
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
Password & "~"

Application.VBE.CommandBars(1).FindControl(ID:%78,
recursive:=True).Execute

WB.Save
End Sub

Et dans mon code:
ProtectVBProject Workbooks("MonFichier.xls"), "Lemotdepasse"

Et bien, le code VBA est toujours accessible.
Comment faire ?

Merci !


MichDenis a écrit :
Quoique tu fasses, je ne crois pas que cela changera grand chose
� ta probl�matique...j'esp�re cependant que tu vi endras nous le
dire si tu trouves la solution ! ;-)


"DoMi" Merci, mais Application.ScreenUpdating est d�j� � False...

Par contre, si je le remettais � True avant DoEvents, quitte ï ¿½ le
remettre � False apr�s, �a serait mieux, n'est-ce pas ?...

Merci de m'avoir mis sur la piste !


MichDenis
Le #7088251
J'ai utilisé ceci , comme suggéré :
'-------------------------------
Sub test()
Application.ScreenUpdating = False
UnprotectVBProject Workbooks("MonClasseur.xls"), "denis"
Application.ScreenUpdating = True
DoEvents
Application.ScreenUpdating = False
End Sub
'-------------------------------

J'ai lié cette macro à un bouton de commande émanant de la boîte à
outils formulaire et, à chaque fois, je perçois toujours un très court instant la fenêtre.
C'est vrai que l'ordi utilisé est lent ... mais le principe demeure quand même !

Je dois avoir un environnement particulier ! ;-)
Excel...lent
Le #7092431
Salut Denis,
Content de te lire.
merci pout la modif proposée.
Je prends !
C'est dommage qu'on ne puisse pas supprimer le code des champs car à
l'ouverture qui suit le mp est demandé de nouveau.
Coordialement.
Marc
DoMi
Le #7094591
Oui, c'est vraiment un court instant !

J'ai toujours la deuxième partie de mon problème en suspens. Si
j'utilise la Sub de Bill Manville :
Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = WB.VBProject
'can't do it if already locked!
If vbProj.Protection = 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = vbProj
' now use lovely SendKeys to set the project password
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
Password & "~"

Application.VBE.CommandBars(1).FindControl(ID:%78,
recursive:=True).Execute

WB.Save
End Sub

le projet est théoriquement protégé (propriétés de VAProject : la case
verrouiller le projet pour affichage est cochée, et le mot de passe
est noté ********) mais tout est accessible.
Je voudrais qu'on ne puisse plus accéder au code.

Merci.




MichDenis a écrit :
J'ai utilisé ceci , comme suggéré :
'-------------------------------
Sub test()
Application.ScreenUpdating = False
UnprotectVBProject Workbooks("MonClasseur.xls"), "denis"
Application.ScreenUpdating = True
DoEvents
Application.ScreenUpdating = False
End Sub
'-------------------------------

J'ai lié cette macro à un bouton de commande émanant de la boîte à
outils formulaire et, à chaque fois, je perçois toujours un très co urt instant la fenêtre.
C'est vrai que l'ordi utilisé est lent ... mais le principe demeure qua nd même !

Je dois avoir un environnement particulier ! ;-)


Excel...lent
Le #8322431
Salut Denis,

Comme toujours ca fonctionne.
Impec !
Thanks a lot.
Marc
Publicité
Poster une réponse
Anonyme