Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Déprotéger un projet par VBA

9 réponses
Avatar
DoMi
Bonjour,

Pour d=E9prot=E9ger temporairement un projet, j'utilise ceci, trouv=E9 sur
ce forum:

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

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

Le probl=E8me, c'est que la bo=EEte de dialogue "VBAProject - Propri=E9t=E9=
s
du projet" apparait pendant quelques secondes, et =E7a ne fait pas
"propre". Pourrait-on l'=E9viter ?

Merci

9 réponses

Avatar
Modeste
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)))
Avatar
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 !
Avatar
MichDenis
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" a écrit dans le message de news:
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 !
Avatar
Excel...lent
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/
Avatar
DoMi
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" a �crit dans le message de news: 33cb
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 !


Avatar
MichDenis
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 ! ;-)
Avatar
Excel...lent
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
Avatar
DoMi
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 ! ;-)


Avatar
Excel...lent
Salut Denis,

Comme toujours ca fonctionne.
Impec !
Thanks a lot.
Marc