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

VBA - Protection projet par code VBA

4 réponses
Avatar
Me
Bonjour à tous,

Je recherche depuis quelques temps la possibilité de modifier le code VBA
(protégé par mot de passe) d'un fichier excel que j'ai distribué... J'ai
trouvé sur ce forum et d'autres, quelques exemples de code mais sans
résultat. Le seul que j'ai trouvé et qui fonctionne est le suivant:

_____________________________________________________________
Sub Unprotect()
Workbooks.Open "D:\Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
End Sub
--
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
_____________________________________________________________

Seul problème celui-ci ne fonctionne plus lorsque je l'incorpore au milieu
d'un projet avec d'autres modules.
Je n'ai aucun message d'erreur, jusqu'à ce que ma macro doive modifier mon
projet (théoriquement déprotégé):
"Erreur d'exécution '50289':
Impossible d'effectuer cette opération tant que le projet est protégé."

Si quelqu'un a une idée, je suis preneur car là je tourne en rond ;-)

Merci

@+

Me

4 réponses

Avatar
Gaenonius
J'ai constaté que pour Excel 2000 (si tu utilises cette version, sinon ça ne
coute rien d'essayer),il fallait passer quelques (solides) couches de DoEvents
pour que la déprotection soit prise en compte dans la suite du code. Ça pourrait
donner pour toi quelque chose comme ça :

Sub DeProtect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
Do
i = i + 1: DoEvents
Loop While i < 5000
End Sub

(J'ai remplacé UnProtect, nom d'une méthode VBA, par DeProtect, nom purement
inventé, par une sorte de réflexe limite compulsif mais tu fais bien entendu
comme tu l'entends).

--
Gaenonius

Bonjour à tous,

Je recherche depuis quelques temps la possibilité de modifier le code VBA
(protégé par mot de passe) d'un fichier excel que j'ai distribué... J'ai
trouvé sur ce forum et d'autres, quelques exemples de code mais sans
résultat. Le seul que j'ai trouvé et qui fonctionne est le suivant:

_____________________________________________________________
Sub Unprotect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
End Sub
--
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
_____________________________________________________________

Seul problème celui-ci ne fonctionne plus lorsque je l'incorpore au milieu
d'un projet avec d'autres modules.
Je n'ai aucun message d'erreur, jusqu'à ce que ma macro doive modifier mon
projet (théoriquement déprotégé):
"Erreur d'exécution '50289':
Impossible d'effectuer cette opération tant que le projet est protégé."

Si quelqu'un a une idée, je suis preneur car là je tourne en rond ;-)

Merci

@+

Me


Avatar
Me
Merci Gaenonius!!!!

Ca fonctionne. Et pour info j'ai la version 2002 d'Excel.

Cependant, as tu une explication de cette nécessité de me mettre un DoEvents
dans le code??? C'est tout de même bizar...??

Sinon, en effet j'ai également changé le nom de ma routine ;-)


"Gaenonius" wrote:

J'ai constaté que pour Excel 2000 (si tu utilises cette version, sinon ça ne
coute rien d'essayer),il fallait passer quelques (solides) couches de DoEvents
pour que la déprotection soit prise en compte dans la suite du code. Ça pourrait
donner pour toi quelque chose comme ça :

Sub DeProtect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
Do
i = i + 1: DoEvents
Loop While i < 5000
End Sub

(J'ai remplacé UnProtect, nom d'une méthode VBA, par DeProtect, nom purement
inventé, par une sorte de réflexe limite compulsif mais tu fais bien entendu
comme tu l'entends).

--
Gaenonius

Bonjour à tous,

Je recherche depuis quelques temps la possibilité de modifier le code VBA
(protégé par mot de passe) d'un fichier excel que j'ai distribué... J'ai
trouvé sur ce forum et d'autres, quelques exemples de code mais sans
résultat. Le seul que j'ai trouvé et qui fonctionne est le suivant:

_____________________________________________________________
Sub Unprotect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
End Sub
--
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
_____________________________________________________________

Seul problème celui-ci ne fonctionne plus lorsque je l'incorpore au milieu
d'un projet avec d'autres modules.
Je n'ai aucun message d'erreur, jusqu'à ce que ma macro doive modifier mon
projet (théoriquement déprotégé):
"Erreur d'exécution '50289':
Impossible d'effectuer cette opération tant que le projet est protégé."

Si quelqu'un a une idée, je suis preneur car là je tourne en rond ;-)

Merci

@+

Me





Avatar
Gaenonius
Cependant, as tu une explication de cette nécessité de me mettre un DoEvents
dans le code???


Non, aucune. Je me contente de constater que tout ce qui touche à la
programmation du VBE nécessite assez souvent "d'insister" pour que les
modifications soient prises en compte. On n'est pas loin là, à mon avis, des
limites de la programmation VBA appliquée à l'environnement de programmation
lui-même.

--
Gaenonius

Merci Gaenonius!!!!

Ca fonctionne. Et pour info j'ai la version 2002 d'Excel.

Cependant, as tu une explication de cette nécessité de me mettre un DoEvents
dans le code??? C'est tout de même bizar...??

Sinon, en effet j'ai également changé le nom de ma routine ;-)


"Gaenonius" wrote:


J'ai constaté que pour Excel 2000 (si tu utilises cette version, sinon ça ne
coute rien d'essayer),il fallait passer quelques (solides) couches de DoEvents
pour que la déprotection soit prise en compte dans la suite du code. Ça pourrait
donner pour toi quelque chose comme ça :

Sub DeProtect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
Do
i = i + 1: DoEvents
Loop While i < 5000
End Sub

(J'ai remplacé UnProtect, nom d'une méthode VBA, par DeProtect, nom purement
inventé, par une sorte de réflexe limite compulsif mais tu fais bien entendu
comme tu l'entends).

--
Gaenonius


Bonjour à tous,

Je recherche depuis quelques temps la possibilité de modifier le code VBA
(protégé par mot de passe) d'un fichier excel que j'ai distribué... J'ai
trouvé sur ce forum et d'autres, quelques exemples de code mais sans
résultat. Le seul que j'ai trouvé et qui fonctionne est le suivant:

_____________________________________________________________
Sub Unprotect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
End Sub
--
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
_____________________________________________________________

Seul problème celui-ci ne fonctionne plus lorsque je l'incorpore au milieu
d'un projet avec d'autres modules.
Je n'ai aucun message d'erreur, jusqu'à ce que ma macro doive modifier mon
projet (théoriquement déprotégé):
"Erreur d'exécution '50289':
Impossible d'effectuer cette opération tant que le projet est protégé."

Si quelqu'un a une idée, je suis preneur car là je tourne en rond ;-)

Merci

@+

Me







Avatar
Me
ok

en tout cas, merci pour ton aide

@+

Me

"Gaenonius" wrote:

Cependant, as tu une explication de cette nécessité de me mettre un DoEvents
dans le code???


Non, aucune. Je me contente de constater que tout ce qui touche à la
programmation du VBE nécessite assez souvent "d'insister" pour que les
modifications soient prises en compte. On n'est pas loin là, à mon avis, des
limites de la programmation VBA appliquée à l'environnement de programmation
lui-même.

--
Gaenonius

Merci Gaenonius!!!!

Ca fonctionne. Et pour info j'ai la version 2002 d'Excel.

Cependant, as tu une explication de cette nécessité de me mettre un DoEvents
dans le code??? C'est tout de même bizar...??

Sinon, en effet j'ai également changé le nom de ma routine ;-)


"Gaenonius" wrote:


J'ai constaté que pour Excel 2000 (si tu utilises cette version, sinon ça ne
coute rien d'essayer),il fallait passer quelques (solides) couches de DoEvents
pour que la déprotection soit prise en compte dans la suite du code. Ça pourrait
donner pour toi quelque chose comme ça :

Sub DeProtect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
Do
i = i + 1: DoEvents
Loop While i < 5000
End Sub

(J'ai remplacé UnProtect, nom d'une méthode VBA, par DeProtect, nom purement
inventé, par une sorte de réflexe limite compulsif mais tu fais bien entendu
comme tu l'entends).

--
Gaenonius


Bonjour à tous,

Je recherche depuis quelques temps la possibilité de modifier le code VBA
(protégé par mot de passe) d'un fichier excel que j'ai distribué... J'ai
trouvé sur ce forum et d'autres, quelques exemples de code mais sans
résultat. Le seul que j'ai trouvé et qui fonctionne est le suivant:

_____________________________________________________________
Sub Unprotect()
Workbooks.Open "D:Fichier.xls"
UnprotectVBProject Workbooks("Fichier.xls"), "MotDePasse"
End Sub
--
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
_____________________________________________________________

Seul problème celui-ci ne fonctionne plus lorsque je l'incorpore au milieu
d'un projet avec d'autres modules.
Je n'ai aucun message d'erreur, jusqu'à ce que ma macro doive modifier mon
projet (théoriquement déprotégé):
"Erreur d'exécution '50289':
Impossible d'effectuer cette opération tant que le projet est protégé."

Si quelqu'un a une idée, je suis preneur car là je tourne en rond ;-)

Merci

@+

Me