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 ;-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 ;-)
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
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
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 ;-)
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
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
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 ;-)
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
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
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 ;-)
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 ;-)