J'utilise Excel 2002. Je voudrais à partir d'un classeur déprotégé, qui
contient le code suivant, déprotéger un classeur dont je connais le chemin
d'accès et le mot de passe. Le code ci-après récupéré sur le net ne
fonctionne pas.
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
Je préfère mettre le mot de passe dans le code, par exemple MDP. D'où
suppression des argements de la procédure qui devient UnprotectVBProject()
et l'instruction SendKeys Password & "~~" devient SendKeys "MDP" & "~~"
Mais comme il y a forcément 2 classeurs ouverts, celui qui contient le code
de déprotection ci-dessus et le classeur dont le VBE doit être déprotégé,
l'instruction Application.VBE.CommandBars(1).FindControl(ID:=2578,
recursive:=True).Execute n'affiche pas la boîte de dialogue du projet
protégé (attendue quand on clique dans VBE sur le nom du projet) et à
déprotéger, mais affiche celle du classeur source (et plus précisément
l'onglet Général) dont le VBE n'est pas protégé.
Or quand on clique dans l'explorateur de projets sur un projet protégé, une
petite boîte de dialogue "VBA Project Mot de passe" s'affiche dont le
curseur se trouve dans la case encore vide appelée "Entrer le mot de passe".
Comment donc sélectionner ou nommer, à partir du code ci-dessus, dans
l'explorateur de projets le bon projet (qui comprend toujours le nom d'un
classeur suivi de ".xls") pour que la bonne boîte de dialogue s'affiche?
J'ai essayé l'instruction suivante pour désigner le classeur actif dont le
VBE doit être déprotégé, sans succès. Le classeur actif a pourtant été
désigné comme le nouveau classeur ouvert à déprotéger, il s'agit donc bien
théoriquement avec ActiveWorkbook.VBProject du classeur dont le VBE doit
être déprotégé.
Set vbProj = ActiveWorkbook.VBProject
La déclaration Dim vbProj As Object est-elle suffisante pour désigner dans
l'explorateur de projets un projet VBA?
C'est bien ce que j'avais compris, mais l'idée de base, c'est que si tu protèges ton code dans, disons, Excel 97, tu ne peux pas le déprotéger dans Excel 2000, 2002 ou 2003. L'inverse est également vrai, peu importent les versions de départ et d'arrivée. Dès que tu veux jouer avec différentes versions simultatément, tu ne peux pas jouer comme tu veux avec la protection.
"khinoa" a écrit dans le message de news: 4467814f$0$17365$
Bonjour Clément,
De toutes façons, tu ne peux pas modifier du code protégé dans une autre version sans le déprotéger avant dans la version initiale.
Je veux simplement dire qu'avec une nouvelle version je tenterai à nouveau sur de nouveaux classeurs créés pour la circonstance. Et je verrai si c'était lié à ma version d'Excel 2002. Pour l'instant je ne peux rien faire d'autre.
au revoir
Bonjour,
C'est bien ce que j'avais compris, mais l'idée de base, c'est que si tu
protèges ton code dans, disons, Excel 97, tu ne peux pas le déprotéger dans
Excel 2000, 2002 ou 2003. L'inverse est également vrai, peu importent les
versions de départ et d'arrivée. Dès que tu veux jouer avec différentes
versions simultatément, tu ne peux pas jouer comme tu veux avec la
protection.
"khinoa" <zzzzz@zzz.zz> a écrit dans le message de news:
4467814f$0$17365$636a55ce@news.free.fr...
Bonjour Clément,
De toutes façons, tu ne peux pas modifier du code protégé dans une autre
version sans le déprotéger avant dans la version initiale.
Je veux simplement dire qu'avec une nouvelle version je tenterai à nouveau
sur de nouveaux classeurs créés pour la circonstance. Et je verrai si
c'était lié à ma version d'Excel 2002. Pour l'instant je ne peux rien
faire d'autre.
C'est bien ce que j'avais compris, mais l'idée de base, c'est que si tu protèges ton code dans, disons, Excel 97, tu ne peux pas le déprotéger dans Excel 2000, 2002 ou 2003. L'inverse est également vrai, peu importent les versions de départ et d'arrivée. Dès que tu veux jouer avec différentes versions simultatément, tu ne peux pas jouer comme tu veux avec la protection.
"khinoa" a écrit dans le message de news: 4467814f$0$17365$
Bonjour Clément,
De toutes façons, tu ne peux pas modifier du code protégé dans une autre version sans le déprotéger avant dans la version initiale.
Je veux simplement dire qu'avec une nouvelle version je tenterai à nouveau sur de nouveaux classeurs créés pour la circonstance. Et je verrai si c'était lié à ma version d'Excel 2002. Pour l'instant je ne peux rien faire d'autre.
au revoir
khinoa
Bonjour,
C'est bien ce que j'avais compris, mais l'idée de base, c'est que si tu protèges ton code dans, disons, Excel 97, tu ne peux pas le déprotéger dans Excel 2000, 2002 ou 2003. L'inverse est également vrai, peu importent les versions de départ et d'arrivée. Dès que tu veux jouer avec différentes versions simultatément, tu ne peux pas jouer comme tu veux avec la protection.
Vu, merci
Bonjour,
C'est bien ce que j'avais compris, mais l'idée de base, c'est que si tu
protèges ton code dans, disons, Excel 97, tu ne peux pas le déprotéger
dans Excel 2000, 2002 ou 2003. L'inverse est également vrai, peu importent
les versions de départ et d'arrivée. Dès que tu veux jouer avec
différentes versions simultatément, tu ne peux pas jouer comme tu veux
avec la protection.
C'est bien ce que j'avais compris, mais l'idée de base, c'est que si tu protèges ton code dans, disons, Excel 97, tu ne peux pas le déprotéger dans Excel 2000, 2002 ou 2003. L'inverse est également vrai, peu importent les versions de départ et d'arrivée. Dès que tu veux jouer avec différentes versions simultatément, tu ne peux pas jouer comme tu veux avec la protection.
Vu, merci
Ange Ounis
J'utilise également Excel 2002 (et Windows XP). Cette procédure, lancée depuis un classeur quelconque autre que perso.xls, ôte bien la protection du perso.xls :
''''''''''' Sub Deprotege() If Workbooks("perso.xls").VBProject.Protection <> 1 Then Exit Sub Set Application.VBE.ActiveVBProject = Workbooks("perso.xls").VBProject SendKeys "zaza" & "~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub '''''''''''
Je viens de le tester de nouveau à l'instant, et je ne vois aucune raison que cela ne fonctionne pas chez toi, sauf peut-être un antivirus particulièrement chatouilleux avec les macros ou encore un niveau de sécurité élevé d'Excel (mais je suppose que tu as déjà éliminé l'une comme l'autre de ces 2 hypothèses).
---------- Ange Ounis ----------
As-tu essayé de déprotéger ton projet en utilisant le code tel qu'il proposé au départ (cad avec une procédure appelant celle qui a ses deux paramètres) ? Ton premier post n'est pas clair sur ce point.
Oui comme je l'ai dit dans mon premier post, le code avec la procédure appelante et ses deux arguments ne fonctionne pas non plus. D'ailleurs qu'il y ait deux procédures (une appelante et une appelée) ou une seule, le résultat ne peut être qu'identique. Mes recherches sur le net montrent qu'apparemment le code récupéré fonctionne chez les autres, mais pas chez moi.
Alors je préfère abandonner et je verrai lorsque j'aurais une nouvelle version d'Excel si le problème persiste.
Je te remercie pour ton aide
khinoa
J'utilise également Excel 2002 (et Windows XP).
Cette procédure, lancée depuis un classeur quelconque autre que perso.xls, ôte
bien la protection du perso.xls :
'''''''''''
Sub Deprotege()
If Workbooks("perso.xls").VBProject.Protection <> 1 Then Exit Sub
Set Application.VBE.ActiveVBProject = Workbooks("perso.xls").VBProject
SendKeys "zaza" & "~~"
Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute
End Sub
'''''''''''
Je viens de le tester de nouveau à l'instant, et je ne vois aucune raison que
cela ne fonctionne pas chez toi, sauf peut-être un antivirus particulièrement
chatouilleux avec les macros ou encore un niveau de sécurité élevé d'Excel (mais
je suppose que tu as déjà éliminé l'une comme l'autre de ces 2 hypothèses).
----------
Ange Ounis
----------
As-tu essayé de déprotéger ton projet en utilisant le code tel qu'il
proposé au départ (cad avec une procédure appelant celle qui a ses deux
paramètres) ?
Ton premier post n'est pas clair sur ce point.
Oui comme je l'ai dit dans mon premier post, le code avec la procédure
appelante et ses deux arguments ne fonctionne pas non plus. D'ailleurs qu'il
y ait deux procédures (une appelante et une appelée) ou une seule, le
résultat ne peut être qu'identique. Mes recherches sur le net montrent
qu'apparemment le code récupéré fonctionne chez les autres, mais pas chez
moi.
Alors je préfère abandonner et je verrai lorsque j'aurais une nouvelle
version d'Excel si le problème persiste.
J'utilise également Excel 2002 (et Windows XP). Cette procédure, lancée depuis un classeur quelconque autre que perso.xls, ôte bien la protection du perso.xls :
''''''''''' Sub Deprotege() If Workbooks("perso.xls").VBProject.Protection <> 1 Then Exit Sub Set Application.VBE.ActiveVBProject = Workbooks("perso.xls").VBProject SendKeys "zaza" & "~~" Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute End Sub '''''''''''
Je viens de le tester de nouveau à l'instant, et je ne vois aucune raison que cela ne fonctionne pas chez toi, sauf peut-être un antivirus particulièrement chatouilleux avec les macros ou encore un niveau de sécurité élevé d'Excel (mais je suppose que tu as déjà éliminé l'une comme l'autre de ces 2 hypothèses).
---------- Ange Ounis ----------
As-tu essayé de déprotéger ton projet en utilisant le code tel qu'il proposé au départ (cad avec une procédure appelant celle qui a ses deux paramètres) ? Ton premier post n'est pas clair sur ce point.
Oui comme je l'ai dit dans mon premier post, le code avec la procédure appelante et ses deux arguments ne fonctionne pas non plus. D'ailleurs qu'il y ait deux procédures (une appelante et une appelée) ou une seule, le résultat ne peut être qu'identique. Mes recherches sur le net montrent qu'apparemment le code récupéré fonctionne chez les autres, mais pas chez moi.
Alors je préfère abandonner et je verrai lorsque j'aurais une nouvelle version d'Excel si le problème persiste.
Je te remercie pour ton aide
khinoa
khinoa
Bonsoir Ange,
Je viens de le tester de nouveau à l'instant, et je ne vois aucune raison que cela ne fonctionne pas chez toi, sauf peut-être un antivirus particulièrement chatouilleux avec les macros ou encore un niveau de sécurité élevé d'Excel (mais je suppose que tu as déjà éliminé l'une comme l'autre de ces 2 hypothèses).
Oui j'ai un antivirus installé, à savoir Norton qui pourtant n'a pas bonne presse dans les forums mais que moi j'apprécie. Norton est-il châtouilleux? Je l'ignore. Et mon niveau de sécurité est sur "Moyenne". Norton et "Moyenne" ne m'avaient jusqu'à présent rien empêché de faire dans Excel.
Bas n'est conseillé que si l'on possède un antivirus, ce qui est mon cas. J'ai compris que je ne dois pas choisir Elevé, ce soir je choisirai donc Bas et je verrai ce que cela donne.
A mardi soir donc.
khinoa
Bonsoir Ange,
Je viens de le tester de nouveau à l'instant, et je ne vois aucune raison
que cela ne fonctionne pas chez toi, sauf peut-être un antivirus
particulièrement chatouilleux avec les macros ou encore un niveau de
sécurité élevé d'Excel (mais je suppose que tu as déjà éliminé l'une comme
l'autre de ces 2 hypothèses).
Oui j'ai un antivirus installé, à savoir Norton qui pourtant n'a pas bonne
presse dans les forums mais que moi j'apprécie. Norton est-il châtouilleux?
Je l'ignore. Et mon niveau de sécurité est sur "Moyenne". Norton et
"Moyenne" ne m'avaient jusqu'à présent rien empêché de faire dans Excel.
Bas n'est conseillé que si l'on possède un antivirus, ce qui est mon cas.
J'ai compris que je ne dois pas choisir Elevé, ce soir je choisirai donc Bas
et je verrai ce que cela donne.
Je viens de le tester de nouveau à l'instant, et je ne vois aucune raison que cela ne fonctionne pas chez toi, sauf peut-être un antivirus particulièrement chatouilleux avec les macros ou encore un niveau de sécurité élevé d'Excel (mais je suppose que tu as déjà éliminé l'une comme l'autre de ces 2 hypothèses).
Oui j'ai un antivirus installé, à savoir Norton qui pourtant n'a pas bonne presse dans les forums mais que moi j'apprécie. Norton est-il châtouilleux? Je l'ignore. Et mon niveau de sécurité est sur "Moyenne". Norton et "Moyenne" ne m'avaient jusqu'à présent rien empêché de faire dans Excel.
Bas n'est conseillé que si l'on possède un antivirus, ce qui est mon cas. J'ai compris que je ne dois pas choisir Elevé, ce soir je choisirai donc Bas et je verrai ce que cela donne.
A mardi soir donc.
khinoa
khinoa
Bonjour Ange,
J'ai mis la sécurité sur Basse bien que je ne vois pas comment un antivirus pourrait permettre à Excel d'afficher une boîte de dialogue différente de celle attendue quand on clique sur le nom du projet. Cela a échoué une nouvelle fois car j'ai toujours une boîte de dialogue qui ne demande pas d'entrer de mot de passe donc l'instruction Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute, que pour ma part j'aurais placé plutôt avant SendKeys "zaza" & "~~", ne sert strictement à rien.
Aussi j'abandonne définitivement et comme je l'ai déjà dit, je verrai lorsque j'aurais une nouvelle version d'Excel, ce qui n'est pas encore pour demain.
Merci et au revoir
khinoa
Bonjour Ange,
J'ai mis la sécurité sur Basse bien que je ne vois pas comment un antivirus
pourrait permettre à Excel d'afficher une boîte de dialogue différente de
celle attendue quand on clique sur le nom du projet. Cela a échoué une
nouvelle fois car j'ai toujours une boîte de dialogue qui ne demande pas
d'entrer de mot de passe donc l'instruction
Application.VBE.CommandBars(1).FindControl(ID:%78,
recursive:=True).Execute, que pour ma part j'aurais placé plutôt avant
SendKeys "zaza" & "~~", ne sert strictement à rien.
Aussi j'abandonne définitivement et comme je l'ai déjà dit, je verrai
lorsque j'aurais une nouvelle version d'Excel, ce qui n'est pas encore pour
demain.
J'ai mis la sécurité sur Basse bien que je ne vois pas comment un antivirus pourrait permettre à Excel d'afficher une boîte de dialogue différente de celle attendue quand on clique sur le nom du projet. Cela a échoué une nouvelle fois car j'ai toujours une boîte de dialogue qui ne demande pas d'entrer de mot de passe donc l'instruction Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute, que pour ma part j'aurais placé plutôt avant SendKeys "zaza" & "~~", ne sert strictement à rien.
Aussi j'abandonne définitivement et comme je l'ai déjà dit, je verrai lorsque j'aurais une nouvelle version d'Excel, ce qui n'est pas encore pour demain.