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

Déprotéger un projet VBA grâce à une macro

6 réponses
Avatar
Lemg
Bonjour,

J'ai déjà poser une questions semblable il y a quelques jours, mais les
réponses obtenues ne m'ont pas permi de résoudre mon problème.

Alors voilà, je fais une seconde tentative, grâce à une macro, j'ouvre un
classeur dont le VBAProject est protégé par un mot de passe (le mot de passe
est connu) et je veux créer une nouvelle macro dans ce classeur qui sera
affectée à un bouton de commande.

J'arrive à créer le code et la macro dans un classeur dont le VBAProject
n'est pas protégé, mais je n'arrive pas à déprotéger le projet dans lequel je
veux faire les modifications. Le projet a été protégé en allant dans les
propriétés de VBAProject, onglet protection et la case "Verrouiller le projet
pour affichage" a été cochée.

Est-ce que quelqu'un peut m'aider avec ça?

Merci !

6 réponses

Avatar
Lemg
J'avais déjà essayer cette procédure, ça ne fonctionne pas, je vais continuer
d'essayer!

Merci!



"MichDenis" a écrit :

Une autre procdure pour ouvrir un projet vba verrouill lorsque
l'on connat le mot de passe. Elle plus flexible que celle dj propose
cause en outre de la commande SenkKeys.

'Tu insres un module standard et tu y copies le code suivant:

Denis reprsente le mot de passe -> modifier
Remplace ceci : Workbooks(ThisWorkbook.Name) par le classeur
que tu as ouvert
si tu as utilis une variable comme :
Dim Wk as Workbook
Set Wk = Workbooks.Open(chemin &fichier)

La ligne de commande deviendra :
UnprotectVBProject Wk, "denis"

Dans un second temps, tu appelles la macro que je t'ai propos.
Si tu trouves autre chose, j'espre que tu le fera savoir !

'--------------------------------------------
Sub OterProtectionPRojetVBA()

UnprotectVBProject Workbooks(ThisWorkbook.Name), "denis"

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

Set vbProj = WB.VBProject

'Ne peut procder si le projet est non-protg.
If vbProj.Protection <> 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'Utilisation de "SendKeys" Pour envoyer le mot de passe.

SendKeys Password & "~~"
'MsgBox "Aprs Mot de passe"
Application.VBE.CommandBars(1).FindControl(ID:%78, recursive:=True).Execute
End Sub
'--------------------------------------------



"Lemg" a crit dans le message de groupe de discussion :

Bonjour,

J'ai dj poser une questions semblable il y a quelques jours, mais les
rponses obtenues ne m'ont pas permi de rsoudre mon problme.

Alors voil, je fais une seconde tentative, grce une macro, j'ouvre un
classeur dont le VBAProject est protg par un mot de passe (le mot de passe
est connu) et je veux crer une nouvelle macro dans ce classeur qui sera
affecte un bouton de commande.

J'arrive crer le code et la macro dans un classeur dont le VBAProject
n'est pas protg, mais je n'arrive pas dprotger le projet dans lequel je
veux faire les modifications. Le projet a t protg en allant dans les
proprits de VBAProject, onglet protection et la case "Verrouiller le projet
pour affichage" a t coche.

Est-ce que quelqu'un peut m'aider avec a?

Merci !




Avatar
MichDenis
Tu ne t'aides pas beaucoup !

| J'avais déjà essayer cette procédure, ça ne fonctionne pas, je
| vais continuer d'essayer!

Ce n'est pas ce type de commentaire qui va aider les répondeurs
à voir où se retrouve ta difficulté.

Si tu obtiens un message d'erreur, c'est permis de le transmettre...
si la procédure bloque sur une ligne de code, c'est aussi permis de
le faire savoir...et de faire connaître la ligne de code.

Si tu attends que les répondeurs éventuels devinent ... tu risques que
de te retrouve tout seul face à ton problème !
Avatar
MichDenis
J'ai testé ceci chez moi, et ça fonctionne :

"a" représente le mot de passe.
'-----------------------------------------------
Sub TestUnprotect()
Dim Wk As Workbook
Dim Chemin As String, Fichier As String

chemin = "C:UsersDMDocuments"
Fichier = "exercice.xls"

Set Wk = Workbooks.Open(chemin & Fichier)
UnprotectVBProject Wk, "a"
End Sub

'-----------------------------------------------
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
'-----------------------------------------------




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

Je n'obtiens pas de message d'erreur, seulement, avec cette méthode, la boîte
de dialogue "VBAProject - Propriétés du projet", mais c'est celle du classeur
d'origine et non celle du classeur que je veux déprotéger. Voici le code que
j'utilise

Sub TestUnprotect()
Dim Wk As Workbook

Chemin = "C:chemin"
Fichier = "Fichier.xls"

Set Wk = Workbooks.Open(Chemin & Fichier)

With Wk
UnprotectVBProject Wk, "mdp"
End With
End Sub

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





"MichDenis" a écrit :

Tu ne t'aides pas beaucoup !

| J'avais dj essayer cette procdure, a ne fonctionne pas, je
| vais continuer d'essayer!

Ce n'est pas ce type de commentaire qui va aider les rpondeurs
voir o se retrouve ta difficult.

Si tu obtiens un message d'erreur, c'est permis de le transmettre...
si la procdure bloque sur une ligne de code, c'est aussi permis de
le faire savoir...et de faire connatre la ligne de code.

Si tu attends que les rpondeurs ventuels devinent ... tu risques que
de te retrouve tout seul face ton problme !




Avatar
Lemg
Je viens de le tester à nouveau et ça fonctionne si je prend, à titre
d'exemple le mot de passe "test", je crois que le problème réside dans le
fait que mon vrai mot de passe comporte le caractère "+". J'ai réessayer en
donnant le mot de passe "test+" et ça ne fonctionne pas, ce qui me porte à
croire que le caractère "+" dans le mot de passe est la source du problème!
Pour le moment, je ne vois pas la solution?

Merci !

"MichDenis" a écrit :

J'ai test ceci chez moi, et a fonctionne :

"a" reprsente le mot de passe.
'-----------------------------------------------
Sub TestUnprotect()
Dim Wk As Workbook
Dim Chemin As String, Fichier As String

chemin = "C:UsersDMDocuments"
Fichier = "exercice.xls"

Set Wk = Workbooks.Open(chemin & Fichier)
UnprotectVBProject Wk, "a"
End Sub

'-----------------------------------------------
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
'-----------------------------------------------




"Lemg" a crit dans le message de groupe de discussion :

Je n'obtiens pas de message d'erreur, seulement, avec cette mthode, la bote
de dialogue "VBAProject - Proprits du projet", mais c'est celle du classeur
d'origine et non celle du classeur que je veux dprotger. Voici le code que
j'utilise

Sub TestUnprotect()
Dim Wk As Workbook

Chemin = "C:chemin"
Fichier = "Fichier.xls"

Set Wk = Workbooks.Open(Chemin & Fichier)

With Wk
UnprotectVBProject Wk, "mdp"
End With
End Sub

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





"MichDenis" a crit :

> Tu ne t'aides pas beaucoup !
>
> | J'avais dj essayer cette procdure, a ne fonctionne pas, je
> | vais continuer d'essayer!
>
> Ce n'est pas ce type de commentaire qui va aider les rpondeurs
> voir o se retrouve ta difficult.
>
> Si tu obtiens un message d'erreur, c'est permis de le transmettre...
> si la procdure bloque sur une ligne de code, c'est aussi permis de
> le faire savoir...et de faire connatre la ligne de code.
>
> Si tu attends que les rpondeurs ventuels devinent ... tu risques que
> de te retrouve tout seul face ton problme !
>
>



Avatar
MichDenis
Je n'ai pas de solution à ta problématique.
Regarde dans l'aide la commande "SendKeys" , la touche "+"
a déjà un rôle prédéterminé dans la séquence des touches envoyées.




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

Je viens de le tester à nouveau et ça fonctionne si je prend, à titre
d'exemple le mot de passe "test", je crois que le problème réside dans le
fait que mon vrai mot de passe comporte le caractère "+". J'ai réessayer en
donnant le mot de passe "test+" et ça ne fonctionne pas, ce qui me porte à
croire que le caractère "+" dans le mot de passe est la source du problème!
Pour le moment, je ne vois pas la solution?

Merci !

"MichDenis" a écrit :

J'ai test ceci chez moi, et a fonctionne :

"a" reprsente le mot de passe.
'-----------------------------------------------
Sub TestUnprotect()
Dim Wk As Workbook
Dim Chemin As String, Fichier As String

chemin = "C:UsersDMDocuments"
Fichier = "exercice.xls"

Set Wk = Workbooks.Open(chemin & Fichier)
UnprotectVBProject Wk, "a"
End Sub

'-----------------------------------------------
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
'-----------------------------------------------




"Lemg" a crit dans le message de groupe de discussion :

Je n'obtiens pas de message d'erreur, seulement, avec cette mthode, la bote
de dialogue "VBAProject - Proprits du projet", mais c'est celle du classeur
d'origine et non celle du classeur que je veux dprotger. Voici le code que
j'utilise

Sub TestUnprotect()
Dim Wk As Workbook

Chemin = "C:chemin"
Fichier = "Fichier.xls"

Set Wk = Workbooks.Open(Chemin & Fichier)

With Wk
UnprotectVBProject Wk, "mdp"
End With
End Sub

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





"MichDenis" a crit :

> Tu ne t'aides pas beaucoup !
>
> | J'avais dj essayer cette procdure, a ne fonctionne pas, je
> | vais continuer d'essayer!
>
> Ce n'est pas ce type de commentaire qui va aider les rpondeurs
> voir o se retrouve ta difficult.
>
> Si tu obtiens un message d'erreur, c'est permis de le transmettre...
> si la procdure bloque sur une ligne de code, c'est aussi permis de
> le faire savoir...et de faire connatre la ligne de code.
>
> Si tu attends que les rpondeurs ventuels devinent ... tu risques que
> de te retrouve tout seul face ton problme !
>
>



Avatar
Lemg
Merci effectivement, le caractère + de la commande Sendkeys représente la
touche MAJ, par conséquent, pour avoir "test+", il fallait écrire "test+="

À bientôt et merci pour votre aide!

"MichDenis" a écrit :

Je n'ai pas de solution ta problmatique.
Regarde dans l'aide la commande "SendKeys" , la touche "+"
a dj un rle prdtermin dans la squence des touches envoyes.




"Lemg" a crit dans le message de groupe de discussion :

Je viens de le tester nouveau et a fonctionne si je prend, titre
d'exemple le mot de passe "test", je crois que le problme rside dans le
fait que mon vrai mot de passe comporte le caractre "+". J'ai ressayer en
donnant le mot de passe "test+" et a ne fonctionne pas, ce qui me porte
croire que le caractre "+" dans le mot de passe est la source du problme!
Pour le moment, je ne vois pas la solution?

Merci !

"MichDenis" a crit :

> J'ai test ceci chez moi, et a fonctionne :
>
> "a" reprsente le mot de passe.
> '-----------------------------------------------
> Sub TestUnprotect()
> Dim Wk As Workbook
> Dim Chemin As String, Fichier As String
>
> chemin = "C:UsersDMDocuments"
> Fichier = "exercice.xls"
>
> Set Wk = Workbooks.Open(chemin & Fichier)
> UnprotectVBProject Wk, "a"
> End Sub
>
> '-----------------------------------------------
> 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
> '-----------------------------------------------
>
>
>
>
> "Lemg" a crit dans le message de groupe de discussion :
>
> Je n'obtiens pas de message d'erreur, seulement, avec cette mthode, la bote
> de dialogue "VBAProject - Proprits du projet", mais c'est celle du classeur
> d'origine et non celle du classeur que je veux dprotger. Voici le code que
> j'utilise
>
> Sub TestUnprotect()
> Dim Wk As Workbook
>
> Chemin = "C:chemin"
> Fichier = "Fichier.xls"
>
> Set Wk = Workbooks.Open(Chemin & Fichier)
>
> With Wk
> UnprotectVBProject Wk, "mdp"
> End With
> End Sub
>
> 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
>
>
>
>
>
> "MichDenis" a crit :
>
> > Tu ne t'aides pas beaucoup !
> >
> > | J'avais dj essayer cette procdure, a ne fonctionne pas, je
> > | vais continuer d'essayer!
> >
> > Ce n'est pas ce type de commentaire qui va aider les rpondeurs
> > voir o se retrouve ta difficult.
> >
> > Si tu obtiens un message d'erreur, c'est permis de le transmettre...
> > si la procdure bloque sur une ligne de code, c'est aussi permis de
> > le faire savoir...et de faire connatre la ligne de code.
> >
> > Si tu attends que les rpondeurs ventuels devinent ... tu risques que
> > de te retrouve tout seul face ton problme !
> >
> >
>