Empecher la copie d'un fichier

BLACKHAYES

XLDnaute Impliqué
bonjour le forum,

je voudrais savoir si il est possible d'empecher la copie d'un fichier excel sans pour autant interdure l'ouverture et l'acces aux feuilles;

BLAKHAYE's
 

Speel

XLDnaute Occasionnel
Re : Empecher la copie d'un fichier

Bonsoir,
je pense qu'une macro qui test si le fichier est dans son répertoire si OUI continu si NON détruit les feuilles et les macros.
Avoir forcément une sauvegarde car si le fichier est couper et coller dans un autre répertoire , tout est perdu !
 

job75

XLDnaute Barbatruc
Re : Empecher la copie d'un fichier

Bonjour BLACKHAYES, Speel, le forum,

Mettez cette macro dans ThisWorkbook (Alt+F11) :

Code:
Private Sub Workbook_Open()
Dim nomfich$
nomfich = ThisWorkbook.Path & "\" & Me.Name
If IsError([Fichier_original]) Then
  Me.Names.Add "Fichier_original", nomfich, Visible:=False
  Me.Save
Else
  If nomfich <> [Fichier_original] Then
    On Error Resume Next 'si le fichier original n'est pas trouvé
    Workbooks.Open [Fichier_original]
    Me.ChangeFileAccess xlReadOnly
    Kill nomfich 'suicide
    Me.Close False
  End If
End If
End Sub
Fermez le fichier, rouvrez-le pour que le nom "Fichier_original" soit créé, puis refermez-le.

Et maintenant faites-en une copie et essayez d'ouvrir cette copie...

Il s'agit d'un suicide :mad:

Notes :

- protégez avec mot de passe le VBA

- le fichier copié ne se suicide pas s'il est ouvert en lecture seule

- attention le fichier original se suicidera si on le rouvre après avoir changé son nom ou son répertoire

- bien sûr les macros doivent être activées...

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Empecher la copie d'un fichier

Re,

Autre solution avec ces 2 macros, toujours dans ThisWorkbook :

Code:
Private Sub Workbook_Open()
Dim nomfich$
nomfich = ThisWorkbook.Path & "\" & Me.Name
If IsError([Fichier_original]) Then
  Me.Names.Add "Fichier_original", nomfich, Visible:=False
  Me.Save
Else
  If nomfich <> [Fichier_original] Then
    On Error Resume Next 'si le fichier original n'est pas trouvé
    Workbooks.Open [Fichier_original]
    Me.Names.Add "Tue_moi", nomfich, Visible:=False
  Else
    Application.OnTime 1, "ThisWorkbook.Je_te_tue"
  End If
End If
End Sub

Sub Je_te_tue()
Dim wb As Workbook, t$
On Error Resume Next
For Each wb In Workbooks
  t = ""
  t = Evaluate(wb.Names("Tue_moi").RefersTo)
  If t <> "" Then
    wb.Close False
    SetAttr t, vbNormal 'au cas où le fichier serait en lecture seule
    Kill t
  End If
Next
End Sub
Il s'agit d'un meurtre :mad::mad:

Mais il n'y aura aucun meurtre (ni suicide) si le nom ou le répertoire du fichier original ont été changés.

A+
 
Dernière édition:

Arone

XLDnaute Nouveau
Bonjour,

Merci pour cette macro qui fonctionne parfaitement.
Ma question est la suivante :
Si l'on souhaite modifier notre fichier de départ pour une quelconque raison, boire même changer son nom, comment faire ?
La variable [Fichier_original] peut-elle être supprimée ?
Peut-on arrêter le "suicide" ?

Merci de vos réponses.
 

JPSonic51

XLDnaute Nouveau
Bonjour à tous,
Le code de job75 est vraiment efficace, tellement efficace que je ne trouve pas de solution afin de pouvoir changer le nom ou l'emplacement dans lequel ce code a été ajouté (code avec 1macro "suicide").
Je cherche désespérément à réinitialiser le fichier afin de pouvoir appliquer à nouveau ce code avec de nouvelles valeurs (nom, emplacement) dans une petite application mise en place au travail.
Le passage du code en commentaire permet de ne pas avoir ce code actif à l'ouverture et sa suppression totale ne réinitialise pas la valeur [Fichier_original].

job75 peux-tu nous expliquer ou nous venir en aide.

Merci à tous de votre aide pour résoudre ce problème.
 

patricktoulon

XLDnaute Barbatruc
réflechi
si tu bloque l'enregistrement avec un name temoins (garde fou) tu ne peux plus le modifier
le meilleur moyen est de mettre un inputbox pour faire un mot de passe quand saveAsui est à true c'est tout lors du click sur enregistrer sous
autrement ceux qui connaissent pas le mot de passe et qui ne sont pas doué pour pétarder le mot de passe project vba ne pourront pas ernregistrer sous seulement enregistrer
toi qui connais ton mot de passe pourra enregistrer le fichier ailleurs que sont path initial
c'est simple
et pardon !! mais vire l'astuce de @job75
 

JPSonic51

XLDnaute Nouveau
bonjour patricktoulon, nous ne sommes pas tous des experts.
A la lecture de tes deux réponses j'ai rien compris, elle s'adresse a qui ??
J'ai également mis en place un userform avec Login et MDP à l'ouverture.
Le code de job75 permet d'empêcher la copie ou le renommage du fichier, pas l'enregistrement
 

patricktoulon

XLDnaute Barbatruc
Le code de job75 permet d'empêcher la copie ou le renommage du fichier, pas l'enregistrement
re
tu dis après vouloir interrompe le blocage j'essaie de te dire que c'est pas possible avec le code de Job75

sauf mettre un input mot de passe un userform n'est vraiment pas utile sauf pour le design
et si tu met un mot de passe mais dans ce cas là tout ce ce que t'a proposé job75 est caduque
un simple inputbox type mot de passe est utile
voila
c'est bon ça rentre ? ;)
 

JPSonic51

XLDnaute Nouveau
bonjour @patricktoulon, merci de ton retour.
Ok la je comprend un peu mieux mais je ne souhaite pas interrompre le code mais simplement revenir à une version antérieur sans code ni sans son action .
Donc une fois le code de job75 écrit dans le Thisworkbook du fichier, il n'ai plus possible de faire marche arrière et donc de revenir un un fichier normal sans protection Anti-copie même après suppression des lignes de code ?

Mon code VBA est protégé par mot de passe crypté, mes feuilles de données sont masquées en very hidden et j'ai également un mot de passe pour l'ouverture. Le code de job75 rajoute une protection Anti-copie supplémentaire et si renommage du fichier ou un enregistrement dans un autre emplacement il y a une auto destruction.

et un grand Merci pour le fichier exemple, effectivement j'en ai marre d'essayer d'enregistrer ailleurs... ;😊😊😊
Le copier-coller du fichier exemple reste possible et son ouverture aussi, ce qui laisse possible le transport de ce fichier sur un support ou par mail et donc un expert VBA peut peut être casser le code ......moi non. 😓
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Arone, JPSonic51, patricktoulon, le fil,
Le code de job75 est vraiment efficace, tellement efficace que je ne trouve pas de solution afin de pouvoir changer le nom ou l'emplacement dans lequel ce code a été ajouté (code avec 1macro "suicide").
Ce n'est pas très compliqué, pour tester téléchargez le fichier joint, il contient la macro Workbook_Open.

Faites un copier-coller du fichier et donnez-lui le nom que vous voulez, par exemple Classeur version(2).

Ouvrez ce nouveau fichier sans activer les macros.

Allez dans Thisworkbook et désactivez la macro avec Workbook_Open: End

Enregistrez le fichier, fermez-le et ouvrez-le en activant les macros.

Collez ce code où vous voulez et exécutez-le pour supprimer le nom défini :
VB:
Sub Supprimer_nom()
ThisWorkbook.Names("Fichier_original").Delete
End Sub
Supprimez ce code et enlevez le End de Workbook-Open.

Enregistrez le fichier, fermez-le, rouvrez-le et fermez-le, le nouveau nom est protégé.

A+
 

Pièces jointes

  • Classeur version(1).xlsm
    15.5 KB · Affichages: 43

JPSonic51

XLDnaute Nouveau
Un grand Merci job75 pour les explications et les lignes de code.
Ta méthode Anti-copie est vraiment efficace !!!
😍

patricktoulon, ton exemple est très bon aussi mais un peu diffèrent, je veux bien les deux mot de passe (pour saveAs et vba project) car je n'ai pas arrêté les essais depuis ce matin .....🥵

Merci à vous tous de votre aide, on apprend tout les jours....
 

Arone

XLDnaute Nouveau
Bonsoir
ben non c'est le but de la manœuvre
tu peux pas bloquer le "enregistrer sous "et demander de changer de nom
ou alors avec un imputbox en guise de message avec mot de passe
mais ta demande est quelque peu illogique
Bonjour patricktoulon,

Merci pour ton retour.
Hier j'avais répondu mais depuis mon téléphone et cela n'a pas fonctionné visiblement.
Ce que je voulais savoir c'était la possibilité de reprendre la main sur le fichier si par exemple pour une quelconque raison on doit adapter le nom du fichier selon le client.

Désolé si je n'ai pas été clair !

Bonne fin de journée.
 

Discussions similaires