Deproteger vba via une macro [Résolu]

Messages postés
38
Date d'inscription
vendredi 29 octobre 2010
Statut
Membre
Dernière intervention
9 janvier 2013
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 9 janv. 2013 à 13:30
Bonjour,

Je ne sais pas si je suis dans la bonne rubrique du forum.

Je souhaiterais savoir si quelqu'un a une procédure pour déprotéger mon projet VBA via une macro de ce même projet. (lors de l'ouverture)

J'ai essayé de faire marcher la procédure de BILL MANVILLE mais je n'y arrive pas.

Voici le code que j'ai utilisé:

Sub TestProtect()
ProtectVBProject Workbooks("Classeur1.xlsm"), "1"
End Sub

Sub TestUnprotect()
UnprotectVBProject Workbooks("Classeur1.xlsm"), "1"
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

Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
SendKeys Password & "~~"

End Sub

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

Set vbProj = WB.VBProject

'can't do it if already locked!
If vbProj.Protection = 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

' now use lovely SendKeys to set the project password

Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute


SendKeys "+{TAB}{RIGHT}%V+{TAB}" & Password & "{TAB}" & _
Password & "~"


WB.Save
End Sub


Avez-vous réussi à faire marcher cette dernière? Ou avez-vous une autre procédure pour déprotéger un projet VBA avec une macro?

Merci de votre aide.

Cordialement
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
3
Merci
Dans Protect... utilise ceci
SendKeys "^{TAB}{RIGHT}{TAB}" & Password & "{TAB}" & Password & "~"

Pour le reste ça fonctionne bien

Par contre, comme il n'y a pas de SendKeys possible pour la barre d'espacement, je ne vois pas comment cocher la boîte "Verrouiller le projet pour l'affichage"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_MPi
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Oui, mais dis-moi : par quel macro le ferais-tu, s'il n'active pas les macros ?
On tourne un peu en rond, là, non ?
D'un autre côté : rien n'est plus facile que de faire "sauter" un mot de passe... Alors : qu'il le possède ou pas ... !
Tu sais quoi ? Je vais te dire ce que je dis dans presque tous les cas en ce qui concerne le développement sous VBA/Excel : il n'est à valablement protéger que contre les innocents. Ce n'est que très rarement qu'un développeur lambda un peu averti ne saura recommencer à l'identique (sinon carrément mieux) une application Excel, rien qu'en la faisant "tourner". Ce n'est pas le code, qu'il faudrait protéger, mais l'idée elle-même ... et là ... je ne vois pas comment, sauf à déposer un brevet !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
On parle de protection du code VBA ou du classeur lui-même lors de l'ouverture ?

Si c'est bien du code VBA, est-ce que je peux te demander pourquoi ? Ça m'intrigue...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Commenter la réponse de cs_MPi
0
Merci
Bonjour,

Pour utiliser des macros pour intervenir dans l'éditeur VBA, il faut ajouter une référence à la bibliothèque Microsoft Extensibility 5.quelque chose.

Et puis il faut "Faire confiance au projet VisualBisual" quelque part dans les options de sécurité.

Et puis, il devrait bien y avoir un message d'horreur à quelque part, non ?
Commenter la réponse de Utilisateur anonyme
Messages postés
38
Date d'inscription
vendredi 29 octobre 2010
Statut
Membre
Dernière intervention
9 janvier 2013
0
Merci
Merci MPi,

J'ai crée une petite application permettant de réaliser des devis qui sera donné à des commerciaux.

Mon entreprise et donc moi avons besoin de mettre une date limite d'utilisation et donc le cas échéant si la licence et expiré il faut que le fichier soit rendu inutilisable.

J'ai oublié de priser que je parle de la protection du code VBA.

je vais essayer demain votre méthode.

cmarcotte merci mais peut-tu développer comment tu fait la premier partie de ta remarque.

Cordialement
Commenter la réponse de micku2b
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Dans l'éditeur VBA, tu dois aller dans le menu Outils / Références et cocher la sélection que cmarcotte t'a suggéré.


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Commenter la réponse de cs_MPi
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour,
Mon entreprise et donc moi avons besoin de mettre une date limite d'utilisation et donc le cas échéant si la licence et expiré il faut que le fichier soit rendu inutilisable.

Cela implique donc l'inaccessibilité du code par l'utilisateur (il lui suffirait dans le cas contraire de le copier avant la date d'échéance et de le coller ensuite quand il n'a plus rien !)
Une méthode alors très simple (puisque code inaccessible) :
Mettre dans le Workbook_open une instruction de sortie si date dépassée !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
38
Date d'inscription
vendredi 29 octobre 2010
Statut
Membre
Dernière intervention
9 janvier 2013
0
Merci
Bonjour,

Merci pour ton idée ucfoutu j'avais pas pensé sa sous cette angle. Le fichier devient donc bien inutilisable. En plus c'est facile à faire.

Le seul problème est que si l'opérateur n'active pas les macros et qu'il accède au code (en connaissance le mot de passe). il peut chercher la solution pour faire sauter cette protection.

C'est pour cela que par rendre inutilisable j'entendais supprimé tout mon programme à l'intérieur du fichier (action que je sais faire). Pour que le fichier devienne inutile. (Je souhaite faire sa pour rester propriétaire de mon code au cas ou je change de société).

MPi, j'ai pas encore eu le temps d'essayer je te tien au courant.

Merci
Commenter la réponse de micku2b
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Pour illustrer ce que je viens de t'exposer : regarde donc le nombre de discussions étalées ici :
parmi elles, certaines font l'objet de l'exposé d'un but "difficile" recherché ===>> en d'autres termes : exposé des tenants et aboutissants ===>> et hop ===>> une solution (voire plusieurs) étalée
Et tu veux protéger alors quoi ? le code ? Vraiment ?
Le seul code qui vaille à mon sens la peine, en ce qui concerne Excel, c'est celui du logiciel Excel lui-même. Tout le reste n'est qu'application et utilisation et vaut rarement la peine d'être vraiment protéger en soi.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
38
Date d'inscription
vendredi 29 octobre 2010
Statut
Membre
Dernière intervention
9 janvier 2013
0
Merci
Effectivement dans le font et dans la forme tu a raison.

Le but est d'essayer de protéger au maximum permet au moins que sa ne soit le premier venu qui arrive à casser la protection.

Même si comme tu la dit trouver ou casser la protection d'un projet vba est très facile.
Commenter la réponse de micku2b
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Ouais ... Mais aujourd'hui, vois-tu, il n'est depuis longtemps plus nécessaire d'être sorti de la cuisse de Jupiter pour ne plus être le premier venu !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Alors et de toutes manières : le "premier venu", l'"innocent", le "niaiseus" (salut, cmarcotte), ne tenteront rien. Quant aux autres : ils ne tenteront (et réussiront à tous coups et sans grand effort) de "voler" que ce qui vaut VRAIMENT la peine de l'être !
Bonne chance.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu