Protéger mon programme Excel

Résolu/Fermé
Signaler
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
-
Bonjour,

Après avoir élaboré un long et fonctionnel programme excel grâce au VBA, je souhaiterais pouvoir le protéger de manière sûre.

On peut facilement craquer un mot de passe dans les propriétés de VBA Project et encore plus un mot de passe sur un fichier excel. Mon but en fait serait que le fichier ne soit plus utilisable au bout d'un certain temps. Je voudrais imaginer un code qui se renouvelle tous les 3 mois et que moi seule connaisse. Peut-être même directement intégré au code.

Avez-vous des idées? Des suggestions?

Merci d'avance.

Cordialement.

5 réponses

Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 721
Bonjour,

Aucune protection n'est vraiment efficace !!!

Peut-être que rendre le programme très difficile à lire peut décourager certains. Voici un exemple en hommage à Ti (Thierry Pourtier) :

Private Function iiiijqiiiijl%(iiiijjiiiijp() As Byte, iiiipiiiiipq&)
iiiijqiiiijl = iiiijjiiiijp(iiiipiiiiipq)
iiiipiiiiipq = iiiipiiiiipq + 1
End Function
Private Function iiiipliiiipj$(iiiijjiiiijp() As Byte, iiiipiiiiipq&, Optional ByVal iiiippiiiqii& = -1)
Dim iiiqiqiiiqil&
If iiiippiiiqii = -1 Then
iiiqiqiiiqil = iiiipiiiiipq: iiiippiiiqii = 0
Do While iiiijjiiiijp(iiiqiqiiiqil) <> 0 And iiiqiqiiiqil < UBound(iiiijjiiiijp)
iiiqiqiiiqil = iiiqiqiiiqil + 1
iiiippiiiqii = iiiippiiiqii + 1
Loop
End If
If iiiippiiiqii > 0 Then iiiipliiiipj = iiijlqiiijll(iiiijjiiiijp, iiiipiiiiipq, iiiippiiiqii)
If Right$(iiiipliiiipj, 1) = Chr(0) Then iiiipliiiipj = Left$(iiiipliiiipj, Len(iiiipliiiipj) - 1)
End Function 

Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Peu importe Microsoft ou autre. Rien n'est absolu coté sécurité.

La sécurité est a plusieurs niveau.
Primo, qui a accès à ton fichier ?
Distribué à des clients ou Public sur un réseau ?
Dans le premier cas, on ne veut pas donner un fichier excel.
Dans le deuxième cas, on peut gérer les droits et restreindre qui a accès au fichier.

Il peut y avoir un mot de passe pour l'ouverture du fichier, et un autre pour protéger le code.

Quel est l'importance des données ?
Un mot de passe peut être cracké, mais ce n'est pas à la porté de l'utilisateur lambada usuel. La vérité est que si quelqu'un veut vraiment ouvrir un fichier, il peut y arriver, mais il doit y mettre le temps et l'effort.

Si votre fichier est d'une importance cruciale, alors peut-etre que Excel n'était pas le bon logiciel à priori.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
En réalité, le but est qu'après mon travail acharné sur ce programme, les autres utilisateurs ne puissent pas l'utiliser si je ne suis plus là. (Un peu égoïste ou je ne sais pas... ce que vous voudrez mais je ne souhaite pas que l'on puisse se servir de mon travail si on ne souhaite plus travailler avec moi).

Les données du fichier n'ont aucune importance. Tout ce que je souhaite, c'est que le code VBA ne marche pas si on ne remet pas le mot de passe au bout d'un certain temps. (Je souhaite quand même fournir un mdp que les utilisateur puissent jouïr de mon travail tant que je suis là). Le but est que si je pars, les gens ne puissent plus utiliser mes travaux.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Ou alors il faudrait inventer un petit code VBA demandant un mot de passe pour exécuter le code. On a le droit à 2 essais et le code s'efface entièrement ainsi que les modules de la feuille si on les rate. (pas de panique, je garde un original che zmoi)
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Ci-joint, un lien vers la gestion de mot de passe et utilisateur
https://www.commentcamarche.net/faq/37104-vba-excel-mot-de-passe-et-utilisateurs

J'imagine qu'il serait possible de géré une date d'expiration pour les mots de passe.

Si vous partez, pouvez-vous supprimer le fichier ?

Je te joint un lien sur un autre forum sur l'auto destruction du fichier.
https://www.excel-downloads.com/threads/auto-suppression.100449/

Autre sujet : coté propriété intellectuelle, un programme développé durant les heures de travail devrait habituellement appartenir à l'employeur, alors que si c'est développé à la maison, c'est a vous. Donc il est fortement conseillé de faire son développement à la maison.
https://fr.wikipedia.org/wiki/Droit_de_l%27informatique_en_France
Extrait : Les fichiers informatiques constitués par un employé sur son lieu de travail sont présumés avoir un caractère professionnel depuis une décision de la Cour de cassation du 18 octobre 200610. L'employeur pourra donc y accéder librement, sauf si le salarié a clairement identifié ces fichiers comme personnels.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Je connais la loi, pas de soucis là-dessus.

Si je pars de cette entreprise en bons termes, dans ce cas, j'enlèverai bien sûr tous les mots de passe. Dans le cas contraire, il sera difficile pour un employeur d'entamer une procédure au Prud'Homme pour un détail comme celui-ci.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
Sinon simplement :

Sub Macro11()

If InputBox("Mot de passe?", "MDP") = "abcd" Then Exit Sub

Dim VBComp As Object
Dim VBComps As Object
 
Set VBComps = ActiveWorkbook.VBProject.VBComponents
 
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
End Sub


A l'ouverture du fichier et basta. La personne qui ne sait pas va se planter de mot de passe et tout sera effacé.
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 721
Re,

L'utilisateur aura toujours la possibilité d'interdire l'exécution des macros, et donc ....
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Re

Donc mettre les contrôle invisible par défaut, et la macro à l'ouverture les rend visible.
Comme ca, si on contourne la macro, tout est invisible.
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 721
Re

Autrement, tu peux créer un Add-in Com ou une DLL ActiveX avec VB6
Add-in Com
DLL ActiveX
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
53
OK merci de votre aide, je vais me pencher sur tout ça.
Messages postés
7615
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 décembre 2021
671
Bonjour,

L'utilisateur aura toujours la possibilité d'interdire l'exécution des macros, et donc ....

Pour éviter cela:

Mettre dans ThisWorkBook:

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  'on rétabli à la fermeture
 ThisWorkbook.IsAddin = True
End Sub
Private Sub Workbook_Open()
 'empêcher l'affichage d'un classeur s'il est ouvert alors que l'exécution
'des macros est désactivée dans les options de sécurité
ThisWorkbook.IsAddin = False
End Sub


Voir ceci:

https://codes-sources.commentcamarche.net/source/53948-protection-vbaproject
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 721
Le classeur ne s'affiche pas mais il est ouvert, il suffit de passer par le VBE pour modifier le code (si besoin, après avoir exécuté la macro de GéGé)

PS : les lois du Copyright me semblent suffisantes pour assurer une protection légitime .