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

Protéger un code VBA

19 réponses
Avatar
pb
Bonjour,
Existe t'il un moyen de protection de code VBA autre que propriètè du
Projet puis vérouiller pour l'affichage.
(Genre un truc qui détruirait le code en cas de violation)
Merci
Pascal

9 réponses

1 2
Avatar
LSteph
Bonjour,

Ce n'est qu'un avis qui pourrait t'intéresser, malgré mon trait d'humour
un peu ironique. Je comprends par ailleurs ton objectif mais...je vais
être un peu plus précis.
On croirait parfois que certains ont caché le trésor de grand-papa dans
leur code.
Ces protections sont non seulement contournables mais le mieux est
l'ennemi du bien. On s'encombre souvent avec cela de façon trop rigide
pour son projet et le rendant inutilement lourd.

La plupart du temps les utilisateurs ne se donnent du mal à contourner
un projet que quand ils y trouvent une protection forte à l'appui d'une
efficacité et d'une liberté réduite.
Quand un outil fait ce qu'il doit et ce qu'on veut ça tente moins.

A cet égard tu peux relire les petites réserves indiquées par MD et
surtout le post de PhilippeR

Dans ce forum les fils qui ont fait débat sur le sujet, ne manquent pas.

Cordialement.

--
lSteph


pb a écrit :
Merci MichDenis,
Je bosse là dessus et te tiens au courant de mes "découvertes" de débutant
voulant protéger son code et ne comprenant pas trop le sens de la
contribution de Lsteph.
Mais Bon...



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

OUPS,

cette ligne de code dans la procédure ACTIVATE
ElseIf Date > DateSerial(2009, 4, 8) Then
call Module1.TestUnprotect

Doit plutôt se lire comme suit :

ElseIf Date > DateSerial(2009, 4, 8) Then
Call UnprotectVBProject(ThisWorkbook, "a")
"a" étant le mot de passe.

Si tu le désires, tu retrouveras sur le site de Misange (excelabo)
une procédure qui force l'usager à activer les macros pour pouvoir
avoir accès au contenu du classeur. Un peu de recherche, ce sera
ta participation ...;-)

Cela fait seulement compliquer la tâche de ceux qui sont "vraiment" trop
curieux !
;-))










Avatar
pb
Cela me donne "
Erreur de compilation "sur le This Workbook_Activate
Private Sub Workbook_Activate()
On Error Resume Next
'Si le fichier est déprotégé -> suicide , le fichier disparait totalement
If ThisWorkbook.VBProject.Protection = False Then
Call Module5.Detruire

'Si la date de péremption est dépassé représenté ici par
' DateSerial(2009, 4, 8) -> déprotection du fichier + suicide
ElseIf Date > DateSerial(2009, 5, 8) Then
'Call UnprotectVBProject(ThisWorkbook, "kt3fure")
End If
End Sub
"MichDenis" a écrit dans le message de news:

OUPS,

cette ligne de code dans la procédure ACTIVATE
ElseIf Date > DateSerial(2009, 4, 8) Then
call Module1.TestUnprotect

Doit plutôt se lire comme suit :

ElseIf Date > DateSerial(2009, 4, 8) Then
Call UnprotectVBProject(ThisWorkbook, "a")
"a" étant le mot de passe.

Si tu le désires, tu retrouveras sur le site de Misange (excelabo)
une procédure qui force l'usager à activer les macros pour pouvoir
avoir accès au contenu du classeur. Un peu de recherche, ce sera
ta participation ...;-)

Cela fait seulement compliquer la tâche de ceux qui sont "vraiment" trop
curieux !
;-))






Avatar
Misange
Bonjour

Ta demande est fréquente. La réponse de Lsteph tout autant... entre
autres à cause de ce qui est dit ici
http://excelabo.net/trucs/efficacite_protection_mot_passe

pour "forcer" les macros à l'ouverture d'un classeur :
http://excelabo.net/trucs/forcer_macros

Le mieux est souvent l'ennemi du bien...

--
Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !
Avatar
pb
Bonjour Misange,
Juste une chose.
Je pense connaître les limites des protections.
Dans le cadre de mon boulot, on me demande de protéger un code VBA, je ne
cherche plus à comprendre, bêtement je tente de m'éxecuter

Pascal

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

Bonjour

Ta demande est fréquente. La réponse de Lsteph tout autant... entre autres
à cause de ce qui est dit ici
http://excelabo.net/trucs/efficacite_protection_mot_passe

pour "forcer" les macros à l'ouverture d'un classeur :
http://excelabo.net/trucs/forcer_macros

Le mieux est souvent l'ennemi du bien...

--
Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !



Avatar
Misange
pb a écrit :
Bonjour Misange,
Juste une chose.
Je pense connaître les limites des protections.
Dans le cadre de mon boulot, on me demande de protéger un code VBA, je ne
cherche plus à comprendre, bêtement je tente de m'éxecuter



Mais tu fais comme tu veux ! je ne fais pas de prosélytisme, je te mets
juste en garde. Peut être que ceux qui te demandent cette protection ne
sont pas eux conscients de cette limite et que tu pourrais les en
avertir. Je dirai qu'un des avantages de la protection, c'est comme de
mettre une porte en contreplaqué : même si ça ne protège rien, ça a le
mérite d'indiquer que tu voulais te protéger et que celui qui a forcé la
porte savait qu'il allait contre ton souhait. C'est parfois
indispensable, ne serait-ce que pour établir la volonté de nuire auprès
d'un tribunal.
--
Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !
Avatar
Modeste
Bonsour® pb avec ferveur ;o))) vous nous disiez :

Existe t'il un moyen de protection de code VBA autre que propriètè du
Projet puis vérouiller pour l'affichage.
(Genre un truc qui détruirait le code en cas de violation)



il y a plusieurs possibilité d'interprétation de la notion de protection....
Ne pas mélanger protection et confidentialité

- protection en accès restreint (confidentialité commerciale(tarifs) ou statutaire(code fonction))
clés personnalisées, cryptage de données, encapsulation et protection externe (PGP , ZIP par ex)
- protection en terme de fiabilité (algorithme robuste et gérant efficacement les erreurs de manipulations, controles de données, intégrité des données)
modules de controles, moteurs SGBD, verrouillage interface(userforms exclusifs)
- protection en terme de savoir-faire (process algorithmique utilisé)
génération de macro-complémentaires (VBA, C++)

Excel permet une mise en oeuvre de ces divers processus, mais comme tout outil universel, "il n'excelle dans aucun" !!!

comme déja signalé dans les diverses réponses précédentes :
La destruction du code est totalement illusoire, une simple copie permet la multiplication des tentatives.
La protection du projet VBA ne résistera à aucun individu bien ou mal intentionné
La protection par moyen externe est un probleme d'éthique propre à l'entreprise, avec régles liées au contrat de travail et dépot de la clé
Avatar
MichDenis
A ) Tu enlèves la ligne de code que tu as ajoutée :
On error resume next
ou tu me dis pourquoi tu l'as ajouté !

B ) Pour effectuer tes tests, débute sur un classeur bidon
qui n'est pas protégé. Si une erreur survient, tu pourras
identifier avec précision son origine (la ligne de code où
la procédure s'arrête. Si tu ne comprends pas ce qui
se passe, tu pourras tout au moins préciser à quel niveau
tu as une difficulté.

C ) Individuellement, j'ai déjà testé chacune d'elle et je sais qu'elle
fonctionne. Comment se comportent-elles lorsqu'elles sont
exécutées une à la suite de l'autre, je ne l'ai pas testé
expressément. J'espérais que tu le fasses ou que tu m'indiques
clairement où cela bloque.






"pb" a écrit dans le message de groupe de discussion :
#
Cela me donne "
Erreur de compilation "sur le This Workbook_Activate
Private Sub Workbook_Activate()
On Error Resume Next
'Si le fichier est déprotégé -> suicide , le fichier disparait totalement
If ThisWorkbook.VBProject.Protection = False Then
Call Module5.Detruire

'Si la date de péremption est dépassé représenté ici par
' DateSerial(2009, 4, 8) -> déprotection du fichier + suicide
ElseIf Date > DateSerial(2009, 5, 8) Then
'Call UnprotectVBProject(ThisWorkbook, "kt3fure")
End If
End Sub
"MichDenis" a écrit dans le message de news:

OUPS,

cette ligne de code dans la procédure ACTIVATE
ElseIf Date > DateSerial(2009, 4, 8) Then
call Module1.TestUnprotect

Doit plutôt se lire comme suit :

ElseIf Date > DateSerial(2009, 4, 8) Then
Call UnprotectVBProject(ThisWorkbook, "a")
"a" étant le mot de passe.

Si tu le désires, tu retrouveras sur le site de Misange (excelabo)
une procédure qui force l'usager à activer les macros pour pouvoir
avoir accès au contenu du classeur. Un peu de recherche, ce sera
ta participation ...;-)

Cela fait seulement compliquer la tâche de ceux qui sont "vraiment" trop
curieux !
;-))






Avatar
pb
C'est sur sur la ligne:
Call Module5.Detruire
Le message est "Argument non Facultatif"

Toutes les procédures que tu m'as passées sont toutes dans le module 5 sauf
le This Workbook, et pourtant lorsque je fais ALT F8 a part celle que
j'avais crées avant seule Sub TestUnprotect apparait.
Lorsque je fais F5 sur TestUnprotect cela me renvoir sur
ThisWorkbook_Activate avec le même message que précedemment "Argument non
facultatif".

Par contre j'ai testé la proc "suicide" sur un autre dossier, c'est
effectivement redoutable et sans appel


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

A ) Tu enlèves la ligne de code que tu as ajoutée :
On error resume next
ou tu me dis pourquoi tu l'as ajouté !

B ) Pour effectuer tes tests, débute sur un classeur bidon
qui n'est pas protégé. Si une erreur survient, tu pourras
identifier avec précision son origine (la ligne de code où
la procédure s'arrête. Si tu ne comprends pas ce qui
se passe, tu pourras tout au moins préciser à quel niveau
tu as une difficulté.

C ) Individuellement, j'ai déjà testé chacune d'elle et je sais qu'elle
fonctionne. Comment se comportent-elles lorsqu'elles sont
exécutées une à la suite de l'autre, je ne l'ai pas testé
expressément. J'espérais que tu le fasses ou que tu m'indiques
clairement où cela bloque.






"pb" a écrit dans le message de groupe de discussion :
#
Cela me donne "
Erreur de compilation "sur le This Workbook_Activate
Private Sub Workbook_Activate()
On Error Resume Next
'Si le fichier est déprotégé -> suicide , le fichier disparait totalement
If ThisWorkbook.VBProject.Protection = False Then
Call Module5.Detruire

'Si la date de péremption est dépassé représenté ici par
' DateSerial(2009, 4, 8) -> déprotection du fichier + suicide
ElseIf Date > DateSerial(2009, 5, 8) Then
'Call UnprotectVBProject(ThisWorkbook, "kt3fure")
End If
End Sub
"MichDenis" a écrit dans le message de news:

OUPS,

cette ligne de code dans la procédure ACTIVATE
ElseIf Date > DateSerial(2009, 4, 8) Then
call Module1.TestUnprotect

Doit plutôt se lire comme suit :

ElseIf Date > DateSerial(2009, 4, 8) Then
Call UnprotectVBProject(ThisWorkbook, "a")
"a" étant le mot de passe.

Si tu le désires, tu retrouveras sur le site de Misange (excelabo)
une procédure qui force l'usager à activer les macros pour pouvoir
avoir accès au contenu du classeur. Un peu de recherche, ce sera
ta participation ...;-)

Cela fait seulement compliquer la tâche de ceux qui sont "vraiment" trop
curieux !
;-))











Avatar
MichDenis
| Call Module5.Detruire

Effectivement, si tu utilises cette ligne de code, tu oublies l'essentiel
qui est le classeur Excel en tant qu'objet que tu dois passer à la procédure
pour que cette dernière sache de quel classeur il s'agit.

une façon standard de faire :

Dim Wk as workbook
set Wk = ThisWorkbook
« Ou référence à n'importe quel classeur ouvert
set Wk = Workbooks("NomDuClasseur.xls")

et la ligne de commande devient :
Call Module5.Détruire_Le_Code (Wk)

NB. Il n'est pas obligatoire d'écrire le nom d'un module standard
devant le nom de la macro. Perso, des fois je trouve ça pratique
pour m'y retrouver! ;-)





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

C'est sur sur la ligne:
Call Module5.Detruire
Le message est "Argument non Facultatif"

Toutes les procédures que tu m'as passées sont toutes dans le module 5 sauf
le This Workbook, et pourtant lorsque je fais ALT F8 a part celle que
j'avais crées avant seule Sub TestUnprotect apparait.
Lorsque je fais F5 sur TestUnprotect cela me renvoir sur
ThisWorkbook_Activate avec le même message que précedemment "Argument non
facultatif".

Par contre j'ai testé la proc "suicide" sur un autre dossier, c'est
effectivement redoutable et sans appel


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

A ) Tu enlèves la ligne de code que tu as ajoutée :
On error resume next
ou tu me dis pourquoi tu l'as ajouté !

B ) Pour effectuer tes tests, débute sur un classeur bidon
qui n'est pas protégé. Si une erreur survient, tu pourras
identifier avec précision son origine (la ligne de code où
la procédure s'arrête. Si tu ne comprends pas ce qui
se passe, tu pourras tout au moins préciser à quel niveau
tu as une difficulté.

C ) Individuellement, j'ai déjà testé chacune d'elle et je sais qu'elle
fonctionne. Comment se comportent-elles lorsqu'elles sont
exécutées une à la suite de l'autre, je ne l'ai pas testé
expressément. J'espérais que tu le fasses ou que tu m'indiques
clairement où cela bloque.






"pb" a écrit dans le message de groupe de discussion :
#
Cela me donne "
Erreur de compilation "sur le This Workbook_Activate
Private Sub Workbook_Activate()
On Error Resume Next
'Si le fichier est déprotégé -> suicide , le fichier disparait totalement
If ThisWorkbook.VBProject.Protection = False Then
Call Module5.Detruire

'Si la date de péremption est dépassé représenté ici par
' DateSerial(2009, 4, 8) -> déprotection du fichier + suicide
ElseIf Date > DateSerial(2009, 5, 8) Then
'Call UnprotectVBProject(ThisWorkbook, "kt3fure")
End If
End Sub
"MichDenis" a écrit dans le message de news:

OUPS,

cette ligne de code dans la procédure ACTIVATE
ElseIf Date > DateSerial(2009, 4, 8) Then
call Module1.TestUnprotect

Doit plutôt se lire comme suit :

ElseIf Date > DateSerial(2009, 4, 8) Then
Call UnprotectVBProject(ThisWorkbook, "a")
"a" étant le mot de passe.

Si tu le désires, tu retrouveras sur le site de Misange (excelabo)
une procédure qui force l'usager à activer les macros pour pouvoir
avoir accès au contenu du classeur. Un peu de recherche, ce sera
ta participation ...;-)

Cela fait seulement compliquer la tâche de ceux qui sont "vraiment" trop
curieux !
;-))











1 2