OVH Cloud OVH Cloud

protection

7 réponses
Avatar
gilbert
Bonjour

Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a nouveau
ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP

7 réponses

Avatar
Denis Michon
Bonjour Gilbert,


Dans un module standard , copie tout ce qui suit :

Je me me souviens plus de l'auteur ... peut être Laurent Longre ?


Tu ne dois pas oublier pour la protection soit de nouveau d'office , le classeur doit être fermé et c'est seulement à sa
réouverture que le verrouillage du projet prend place.


'-------------------------------------
Sub Send_unprotec()
SendKeys "%{F11}%TE" & "toto" & "~~%{F11}", True
End Sub
Sub protec()
SendKeys "%{F11}%TE+{Tab}{Right}%V{+}{Tab}" & "toto" & _
"{Tab}" & "toto" & "~%{F11}", True
End Sub


Sub ProtectionProJetVBA()
'toto est le mot de passe
ProtectVBProject Workbooks(ThisWorkbook.Name), "toto"
End Sub

Sub OterProtectionPRojetVBA()
UnprotectVBProject Workbooks(ThisWorkbook.Name), "toto"
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

Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object

Set vbProj = WB.VBProject

'un test pour savoir si le projet est déjà protégé??
If vbProj.Protection = 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'Utilisation de "SendKeys" pour établir le mot de passe.
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
Password & "~"

Application.VBE.CommandBars(1).FindControl(ID:%78, _
recursive:=True).Execute

WB.Save

End Sub
'-------------------------------------


Salutations!


"gilbert" a écrit dans le message de news:
Bonjour

Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a nouveau
ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP
Avatar
Bonjour,

Voici un code de LL

Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function GetForegroundWindow Lib "User32"
() As Long

Private Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long

Function Déprotège(Wbk As Workbook, MdP As String) As
Boolean

Dim XLhWnd As Long, VBEhWnd As Long, CurhWnd As Long
On Error GoTo Fin
If Wbk.Path = "" Then Exit Function
If Wbk.VBProject.Protection = 0 Then Exit Function
If Not Wbk.Saved Then Wbk.Save
CurhWnd = GetForegroundWindow
XLhWnd = FindWindowA("XLMAIN", Application.Caption)

With Application.VBE
VBEhWnd = FindWindowA
("wndclass_desked_gsk", .MainWindow.Caption)
If CurhWnd = XLhWnd Then SetForegroundWindow VBEhWnd
.CommandBars.FindControl(ID:%57).Execute
'NE PAS EFFACER, même si le classeur est déjà
ouvert !!!!!!
Set Wbk = Workbooks.Open(Wbk.FullName)
SendKeys "~" & MdP & "~", True
.ActiveCodePane.Window.Close
End With

Wbk.Activate
SetForegroundWindow CurhWnd
Déprotège = True
Exit Function

Fin:
End Function

Sub Test()

' Procédure de test :
' Déprotection du projet "C:TempTest.xls" (mot de
passe "Zaza"),
' Ajout d'un module standard dans ce projet, puis
rétablissement
' de la protection

Dim Wbk As Workbook, Classeur As String

Set Wbk = Workbooks("Test.xls")
If Not Déprotège(Wbk, "Zaza") Then
MsgBox "Erreur : projet déjà déprotégé ?"
Else
MsgBox "Projet VBA déprotégé."
Wbk.VBProject.VBComponents.Add 1
Classeur = Wbk.FullName
Wbk.Close True
Workbooks.Open Classeur
MsgBox "Projet reprotégé après ajout d'un module
standard."
End If

End Sub

'======================== =========================

Testé sous Excel 2000 SR-1.

Petit inconvénient : si le classeur à "déprotéger" (cad à
ouvrir en
entrant le mot de passe) est déjà ouvert au moment ou la
procédure
"Déprotège" s'exécute, il sera ré-enregistré si des
modifications y ont
été faites par l'utilisateur, avant la déprotection.

Si la macro de déprotection se trouve dans le classeur à
déprotéger
lui-même, il faut utiliser un code un peu différent. Sous
Excel 97, on
peut aussi passer par un autre code qui évite l'auto-
enregistrement du
classeur.

A manipuler avec prudence...

Laurent


Starwing


-----Message d'origine-----
Bonjour

Dans un code VBA pour EXCEL est-il possible d'enlever
momentanément la

protection du projet afin de pouvoir lancer un sub dans
un module qui a

besoin que cette protection soit enlevée et ensuite de
verrouiller a nouveau

ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me
joindre directement

.. SVP


.



Avatar
gerard
salut
pour ma part j'utilise un truc simple
je deprotege
Ma sub()
Sheets("Mafeuille").Unprotect Monmotdepass
le reste du code......


je reprotege
Sheets("Mafeuille").Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True, Password:=MonMotdepass
ActiveSheet.EnableSelection = xlUnlockedCells

end sub

"gilbert" a écrit dans le message de
news:
Bonjour

Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a
nouveau

ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP




Avatar
gilbert
Bonjour Denis

Merci pour le code c'est sympa

Je viens de faire un essai

La protection s'effectue bien mais j'ai un petit problème avec la
protection, j'ai renommé le projet mais la protection reste telle qu'elle
est !!!

Je vais étudier cela de plus prêt

@+++


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP
"Denis Michon" <denis a écrit dans le message de news:
4spBb.43393$
Bonjour Gilbert,


Dans un module standard , copie tout ce qui suit :

Je me me souviens plus de l'auteur ... peut être Laurent Longre ?


Tu ne dois pas oublier pour la protection soit de nouveau d'office , le
classeur doit être fermé et c'est seulement à sa

réouverture que le verrouillage du projet prend place.


'-------------------------------------
Sub Send_unprotec()
SendKeys "%{F11}%TE" & "toto" & "~~%{F11}", True
End Sub
Sub protec()
SendKeys "%{F11}%TE+{Tab}{Right}%V{+}{Tab}" & "toto" & _
"{Tab}" & "toto" & "~%{F11}", True
End Sub


Sub ProtectionProJetVBA()
'toto est le mot de passe
ProtectVBProject Workbooks(ThisWorkbook.Name), "toto"
End Sub

Sub OterProtectionPRojetVBA()
UnprotectVBProject Workbooks(ThisWorkbook.Name), "toto"
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

Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object

Set vbProj = WB.VBProject

'un test pour savoir si le projet est déjà protégé??
If vbProj.Protection = 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'Utilisation de "SendKeys" pour établir le mot de passe.
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
Password & "~"

Application.VBE.CommandBars(1).FindControl(ID:%78, _
recursive:=True).Execute

WB.Save

End Sub
'-------------------------------------


Salutations!


"gilbert" a écrit dans le message de
news:

Bonjour

Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a
nouveau

ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP





Avatar
gilbert
Bonjour gerard

ça c'est pour la protection de la feuille "xxxx" mais pas pour le projet

salutations

--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP
"gerard" a écrit dans le message de news:
br597j$mpm$
salut
pour ma part j'utilise un truc simple
je deprotege
Ma sub()
Sheets("Mafeuille").Unprotect Monmotdepass
le reste du code......


je reprotege
Sheets("Mafeuille").Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True, Password:=MonMotdepass
ActiveSheet.EnableSelection = xlUnlockedCells

end sub

"gilbert" a écrit dans le message de
news:
Bonjour

Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a
nouveau

ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP








Avatar
gilbert
Bonjour Denis

Ok ça marche, l'inconvénient c'est la "reprotection" à la fermeture du
classeur mais on fera avec

Merci encore


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP
"
Bonjour Denis

Merci pour le code c'est sympa

Je viens de faire un essai

La protection s'effectue bien mais j'ai un petit problème avec la
protection, j'ai renommé le projet mais la protection reste telle qu'elle
est !!!

Je vais étudier cela de plus prêt

@+++


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP
Bonjour Gilbert,


Dans un module standard , copie tout ce qui suit :

Je me me souviens plus de l'auteur ... peut être Laurent Longre ?


Tu ne dois pas oublier pour la protection soit de nouveau d'office , le
classeur doit être fermé et c'est seulement à sa

réouverture que le verrouillage du projet prend place.


'-------------------------------------
Sub Send_unprotec()
SendKeys "%{F11}%TE" & "toto" & "~~%{F11}", True
End Sub
Sub protec()
SendKeys "%{F11}%TE+{Tab}{Right}%V{+}{Tab}" & "toto" & _
"{Tab}" & "toto" & "~%{F11}", True
End Sub


Sub ProtectionProJetVBA()
'toto est le mot de passe
ProtectVBProject Workbooks(ThisWorkbook.Name), "toto"
End Sub

Sub OterProtectionPRojetVBA()
UnprotectVBProject Workbooks(ThisWorkbook.Name), "toto"
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

Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object

Set vbProj = WB.VBProject

'un test pour savoir si le projet est déjà protégé??
If vbProj.Protection = 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'Utilisation de "SendKeys" pour établir le mot de passe.
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
Password & "~"

Application.VBE.CommandBars(1).FindControl(ID:%78, _
recursive:=True).Execute

WB.Save

End Sub
'-------------------------------------


Salutations!


Bonjour



Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a
nouveau

ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP











Avatar
Denis Michon
Bonjour Gilbert,

Par macro ou manuellement, la protection d'un projet prend place seulement après avoir fermé le classeur et l'avoir rouvert .

Salutations!



"gilbert" a écrit dans le message de news:%
Bonjour Denis

Ok ça marche, l'inconvénient c'est la "reprotection" à la fermeture du
classeur mais on fera avec

Merci encore


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre directement
. SVP
"
Bonjour Denis

Merci pour le code c'est sympa

Je viens de faire un essai

La protection s'effectue bien mais j'ai un petit problème avec la
protection, j'ai renommé le projet mais la protection reste telle qu'elle
est !!!

Je vais étudier cela de plus prêt

@+++


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP
Bonjour Gilbert,


Dans un module standard , copie tout ce qui suit :

Je me me souviens plus de l'auteur ... peut être Laurent Longre ?


Tu ne dois pas oublier pour la protection soit de nouveau d'office , le
classeur doit être fermé et c'est seulement à sa

réouverture que le verrouillage du projet prend place.


'-------------------------------------
Sub Send_unprotec()
SendKeys "%{F11}%TE" & "toto" & "~~%{F11}", True
End Sub
Sub protec()
SendKeys "%{F11}%TE+{Tab}{Right}%V{+}{Tab}" & "toto" & _
"{Tab}" & "toto" & "~%{F11}", True
End Sub


Sub ProtectionProJetVBA()
'toto est le mot de passe
ProtectVBProject Workbooks(ThisWorkbook.Name), "toto"
End Sub

Sub OterProtectionPRojetVBA()
UnprotectVBProject Workbooks(ThisWorkbook.Name), "toto"
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

Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim vbProj As Object

Set vbProj = WB.VBProject

'un test pour savoir si le projet est déjà protégé??
If vbProj.Protection = 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'Utilisation de "SendKeys" pour établir le mot de passe.
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & _
Password & "~"

Application.VBE.CommandBars(1).FindControl(ID:%78, _
recursive:=True).Execute

WB.Save

End Sub
'-------------------------------------


Salutations!


Bonjour



Dans un code VBA pour EXCEL est-il possible d'enlever momentanément la
protection du projet afin de pouvoir lancer un sub dans un module qui a
besoin que cette protection soit enlevée et ensuite de verrouiller a
nouveau

ce projet ?
Je parle bien de projet et non de feuille ni de classeur.

Merci en attendant vote réponse


--
supprimer 'stpspam' à mon adresse de messagerie pour me joindre
directement

. SVP