Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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
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
Bonjour job75 et ceux qui ont, à l'époque, participé à ce sujet.
En ce qui me concerne, j'ai vraiment du mal à comprendre. Particulièrement:
If IsError([Fichier_original]) Then
Au premier lancement du fichier dans son dossier d'origine, il y a bien une erreur mais au deuxième ,l'erreur à disparu. Bref c'est une petite explication dont j'ai besoin. ([Fichier_original]), de quoi s'agit-il ?
Si job75 qui est l'auteur peut m'explique, j'en serais ravi.
A+
bonjour @job75
cette astuce a un gros défaut
mes fichiers pour le boulot sont sur une cle usb que je remporte bien sur tout les jours chez moi
sauf que au boulot ou chez moi des que je branche ma clé usb sa lettre de lecteur ne sera pas toujours la même
conclusion je ne peut pas ouvrir mon fichier selon si mon pc (chez moi ou au boulot) a d'autre disque externe déja connecté
j'ai dans l'idée:
au lieu que d'utiliser le chemin dans le name
utiliser plutôt un code construit avec la date de création
après le principe c'est le tien
je laisse le name visible pour l'exemple
VB:
Private Sub Workbook_Open()
If IsError([secu]) Then
Me.Names.Add "secu", getcode, Visible:=True
ThisWorkbook.Save
Else
MsgBox getcode & vbCrLf & [secu]
If Val(getcode) <> Val([secu]) Then MsgBox "ceci est une copie du fichier"
End If
End Sub
Function getcode()
Dim fs, f, s
Set fs = CreateObject("Scripting.FileSystemObject")
getcode = Replace(CDbl((fs.GetFile(ThisWorkbook.FullName).DateCreated)), ",", "")
End Function
Bonjour job75,
J'abuse, surement...
j'ai beau remplacer dans la macro Visible:=False par Visible:=True, je ne saisi pas la subtilité. Toujours autodidacte sur VBA, il y a des chose qui m'échappent. ([Fichier_original]): A quoi servent les crochets ?
Pourquoi le résultat de If IsError est vrai lors du premier lancement du fichier, puis faux aux suivants ?
Votre code fonctionne à merveille et va m'être très utile mais sans le comprendre je ne peut le mettre en fonction. Je ne souhaite pas tuer le fichier mais informer le copieur de son action illégitime.
Bref quelques précisions me seraient les bien venues si votre temps le permet.
Bonne journée job75
Bonjour @job75 tu me diras ce que tu en pense
je reviens un peu sur ton exemple en post#4 de 2014
et le problème provoqué quand on travaille avec des fichier sur clé USB
en effet quand tu enregistre dans le names le fullname du classeur(chemin complet)
1° il arrive que les clés usb n'ont pas toujours la même lettre de disque selon l'ordre dans le quel ells sont connectées
2° d'autre part il est possible que le travail sur ces fichiers se fasse à la maison et au boulot
ce qui fait que que le full path empêcherait l'utilisation du fichier
j'ai donc concocter 2 solutions
1 avec un serial code fulldate created qui empêche toute copie(d'une manière ou d'une autre )
le fichier pourra toujours être déplacé
VB:
Private Sub Workbook_Open()
If IsError([secu]) Then
Me.Names.Add "secu", getcode, Visible:=True
ThisWorkbook.Save
Else
MsgBox getcode & vbCrLf & [secu]
If Val(getcode) <> Val([secu]) Then A_faire
End If
End Sub
Function getcode()
Dim fs, f, s
Set fs = CreateObject("Scripting.FileSystemObject")
getcode = Replace(CDbl((fs.GetFile(ThisWorkbook.FullName).DateCreated)), ",", "")
End Function
Sub A_faire()
MsgBox "ce fichier est une copie interdite" & vbCrLf & "Destruction du fichier"
End Sub
2 avec le serial date +pcname+username de l'application
qui empêche tout utilisation ailleurs que sur un (disque dur du pc; n'importe le quel bien sur )
il sera donc impossible d'utiliser ce fichier sur un autre pc
VB:
Private Sub Workbook_Open()
If IsError([secu]) Then
Me.Names.Add "secu", getcode, Visible:=True
ThisWorkbook.Save
Else
MsgBox getcode & vbCrLf & [secu]
If Val(getcode) <> Val([secu]) Then A_faire
End If
End Sub
Function getcode()
Dim fs, f, s, Cde$
Set fs = CreateObject("Scripting.FileSystemObject")
Cde = Replace(CDbl((fs.GetFile(ThisWorkbook.FullName).DateCreated)), ",", "")
Cde = Cde & Environ("computername")
Cde = Cde & Application.UserName
getcode = Cde
End Function
Sub A_faire()
MsgBox "ce fichier est une copie interdite" & vbCrLf & "Destruction du fichier"
'destruction des modules
'vidage des cellules
'etc etc ....
End Sub
@patricktoulon
Sauf erreur, Excel permettant d'ouvrir un classeur sans activer les macros.
Tout est possible (avec ou sans serial code full date et tutti quanti)
Tout comme job75 (que je salue), je laisse ce fil retourner dormir dans la poussière de 2014.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.