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

Protection projet VBA

5 réponses
Avatar
Charly
Bonjour et tous mes voeux pour l'année 2010,

Je travaille avec Excel 2003 et j'aimerais écrire un petit module VBA,
enregistré dans mon classeur PERSO.XLS, pour protéger le projet VBA du
classeur actif, et un autre pour ôter la protection de ce classeur.
J'ai essayé les procédure de Bill Manville,

Sub UnprotectVBProject(Wb As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = Wb.VBProject

'can't do it if already unlocked!
If vbProj.Protection <> 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

' now use lovely SendKeys to quote the project password
SendKeys Password & "~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578,
recursive:=True).Execute
End Sub

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:=2578,
recursive:=True).Execute

Wb.Save
End Sub

Sub ProtectVBA
ProtectVBProject ActiveWorkbook, "mdp"
DoEvents
End Sub

Sub UnprotectVBA
UnprotectVBProject ActiveWorkbook, "mdp"
DoEvents
End Sub

mais j'ai quelques problèmes.

Pour ôter la protection, la fenêtre "VBAProject Mot de passe" s'ouvre, dans
laquelle je dois saisir le mot de passe, et ensuite s'ouvre la fenêtre
"VBAProject - Propriétés du projet" - celle-ci reste active.

La procédure pour configurer la protection ne fait strictement rien.

Merci pour aide

5 réponses

Avatar
michdenis
Bonjour,

VBA_Protection.xls est le nom d'un classeur ouvert
dont tout le code est protégé par un mot de passe : "denis"

La procédure "OterProtectionPRojetVBA" déprotège le
code du classeur. La macro doit être lancé à partir de
l'interface de la feuille de calcul et non à partir de la fenêtre
de l'éditeur de code.

Tu colles ce qui suit dans un module standard :

'----------------------------------------
Sub OterProtectionPRojetVBA()
UnprotectVBProject Workbooks("VBA_Protection.xls"), "denis"
End Sub
'----------------------------------------


'----------------------------------------
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object

Set vbProj = WB.VBProject

'Ne peut procéder si le projet est non-protégé.
If vbProj.Protection <> 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'Utilisation de "SendKeys" Pour envoyer le mot de passe.
SendKeys Password & "~~"
Application.VBE.CommandBars(1).FindControl(ID:%78, _
recursive:=True).Execute
End Sub
'----------------------------------------




"Charly" a écrit dans le message de groupe de discussion :

Bonjour et tous mes voeux pour l'année 2010,

Je travaille avec Excel 2003 et j'aimerais écrire un petit module VBA,
enregistré dans mon classeur PERSO.XLS, pour protéger le projet VBA du
classeur actif, et un autre pour ôter la protection de ce classeur.
J'ai essayé les procédure de Bill Manville,

Sub UnprotectVBProject(Wb As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = Wb.VBProject

'can't do it if already unlocked!
If vbProj.Protection <> 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

' now use lovely SendKeys to quote the project password
SendKeys Password & "~~"
Application.VBE.CommandBars(1).FindControl(ID:%78,
recursive:=True).Execute
End Sub

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

Sub ProtectVBA
ProtectVBProject ActiveWorkbook, "mdp"
DoEvents
End Sub

Sub UnprotectVBA
UnprotectVBProject ActiveWorkbook, "mdp"
DoEvents
End Sub

mais j'ai quelques problèmes.

Pour ôter la protection, la fenêtre "VBAProject Mot de passe" s'ouvre, dans
laquelle je dois saisir le mot de passe, et ensuite s'ouvre la fenêtre
"VBAProject - Propriétés du projet" - celle-ci reste active.

La procédure pour configurer la protection ne fait strictement rien.

Merci pour aide
Avatar
FS
Bonsoir,

> Je travaille avec Excel 2003 et j'aimerais écrire un petit module VBA,
> enregistré dans mon classeur PERSO.XLS, pour protéger le projet VBA du
> classeur actif, et un autre pour ôter la protection de ce classeur.

La condition sine qua non, dans mon expérience, pour manipuler le mot de
passe d'un VBAProject par du code (par exemple avec les procédures de
Bill Manville) c'est qu'il ait reçu un autre nom que son nom par défaut
(VBAProject).
On peut faire ça en modifiant ses propriétés dans l'éditeur VBE ou par
du code.
Même si ce n'est dit, à ma connaissance, nulle part dans l'aide, si le
projet n'a pas reçu un nom "propre", les tentatives pour le
protéger/déprotéger en VBA ne sont pas fiables.
C'est du moins, je le répète, ce que j'ai constaté et c'est, peut-être,
la raison de ta difficulté.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Charly a écrit :
Bonjour et tous mes voeux pour l'année 2010,

Je travaille avec Excel 2003 et j'aimerais écrire un petit module VBA,
enregistré dans mon classeur PERSO.XLS, pour protéger le projet VBA du
classeur actif, et un autre pour ôter la protection de ce classeur.
J'ai essayé les procédure de Bill Manville,

Sub UnprotectVBProject(Wb As Workbook, ByVal Password As String)
Dim vbProj As Object
Set vbProj = Wb.VBProject

'can't do it if already unlocked!
If vbProj.Protection <> 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

' now use lovely SendKeys to quote the project password
SendKeys Password & "~~"
Application.VBE.CommandBars(1).FindControl(ID:%78,
recursive:=True).Execute
End Sub

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

Sub ProtectVBA
ProtectVBProject ActiveWorkbook, "mdp"
DoEvents
End Sub

Sub UnprotectVBA
UnprotectVBProject ActiveWorkbook, "mdp"
DoEvents
End Sub

mais j'ai quelques problèmes.

Pour ôter la protection, la fenêtre "VBAProject Mot de passe" s'ouvre, dans
laquelle je dois saisir le mot de passe, et ensuite s'ouvre la fenêtre
"VBAProject - Propriétés du projet" - celle-ci reste active.

La procédure pour configurer la protection ne fait strictement rien.

Merci pour aide




Avatar
michdenis
Bonjour Frédéric,

Avec la procédure publiée sur ce fil, elle fonctionne
rondement sans renommer le projet !

Il est vrai que je n'utilise pas ce type de machin trop souvent.
Avatar
FS
Salut Denis,

> Avec la procédure publiée sur ce fil, elle fonctionne
> rondement sans renommer le projet !

Je n'en doute pas. Mais j'ai constaté qu'un coup (ou deux ou trois) ça
marche et puis ça marche plus..jusqu'à ce que ça remarche.
Je ne m'explique pas pourquoi.
J'ai fait tourner ce genre de code très régulièrement (ie plusieurs fois
par mois) sur des configurations différentes (Excel 2000 à 2003 et même
2007) et seul le fait de donner au projet un autre nom que le nom par
défaut ne m'a jamais causé de mauvaise surprise... c'est pourquoi je
donne ce conseil.
"Solution" empirique à un problème aléatoire. Mon fils m'a souvent dit
que l'informatique (c'est son boulot) n'était pas une science exacte.
J'ai mis du temps à accepter cette idée que je trouvais en totale
contradiction avec la manipulation de séries de 0 et 1 (quelle place
pour l'inexactitude là dedans ?) qui au bout du compte la constitue.
Et pourtant :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

michdenis a écrit :
Bonjour Frédéric,

Avec la procédure publiée sur ce fil, elle fonctionne
rondement sans renommer le projet !

Il est vrai que je n'utilise pas ce type de machin trop souvent.






Avatar
michdenis
J'essaierai de me souvenir de ta proposition
si je fais face à la situation.

Merci.