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+
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 !
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
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
Mais il n'y aura aucun meurtre (ni suicide) si le nom ou le répertoire du fichier original ont été changés.
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" ?
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 à 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.
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
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
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 ?
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.
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").
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....
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.