Comment ajouter une date d'expiration à un fichier Excel?
Dans de nombreuses situation, notamment dans le milieu professionnel, il est fort utile d'attribuer une date d'expiration (ou date de validité si vous préférez) à vos rapports, vos fichiers de données etc.. Et, même si cette possibilité n'est pas très connue, il est possible d'utiliser une date d'expiration de fichier Excel. Ce n'est pas bien compliqué et cela peut vous éviter de nombreux problèmes comme:
- les anciennes versions de rapports qui se "baladent" quelque part dans l'entreprise sans que vous le sachiez
- les versions obsolètes des outils Excel/VBA que les utilisateurs ont en copie sur leur ordinateur
- les fichiers à usage temporaire qui seraient utilisés à des fins inappropriés
- …
Voici donc les explication comment procéder…
Sommaire
- Comment faire: La date d'expiration de fichier Excel & l'autodestruction de fichiers Excel
- Utilisation de fichier XLSM
- Le code VBA de base qui permet de déclencher une expiration de fichier Excel
- Actions à effectuer lors de l'expiration de fichier Excel
- Quelques remarques pratiques
- Conclusion
- Pour aller plus loin dans l'utilisation d'Excel
Comment faire: La date d'expiration de fichier Excel & l'autodestruction de fichiers Excel
Pour pouvoir attribuer une date de validité à un fichier Excel (ou pour assurer son autodestruction après une datte donnée), il faudra utiliser le langage VBA. Si vous êtes familier avec VBA, vous trouverez tout ce qui vous faut plus loin sur cette page (les exemples du code VBA).
Si le terme "VBA" ne vous évoque pas grande chose, sachez qu'avec les explications qui suivent, vous y arriverez sans trop de difficultés.
Utilisation de fichier XLSM
Comme il nous faudra utiliser le VBA, cela implique que le fichier avec une date de validité/expiration devra être enregistré sous le format (et donc suffixe) .XLSM
et non .XLSX
. En soi, cela ne change pas grande chose pour l'utilisateur si ce n'est que, selon la configuration de sécurité de son système, il devra peut-être autoriser l'utilisation des macros.
Le code VBA de base qui permet de déclencher une expiration de fichier Excel
Si vous vous y connaissez en VBA, rien de plus simple: il suffit de copier/coller le code qui suit dans l'objet ThisWorkbook
de votre Classeur…
Si vous n'y vous connaissez pas, voici comment procéder:
- Ouvrez l'éditeur VBA à partir de votre classeur Excel en appuyant sur
Alt
+F11
- À gauche, accédez à l'objet
ThisWorkbook
en ouvrant leVBAProject
avec le nom de votre Classeur et ensuite en ouvrant le "dossier"Microsoft Excel Objects
en cliquant dessus. - Double-cliquez sur
ThisWorkbook
et dans la fenêtre vide sur votre écran, collez le code VBA qui se trouve ci-dessous. - N'oubliez pas de sauvegarder votre Classeur si nécessaire.
Cette capture d'écran devrait être assez parlante:
Et voici déjà le code VBA de base. Il affichera un message dans le cas où la date d'expiration choisie est dépassée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Private Sub Workbook_Open() 'par Excel-Malin.com ( https://excel-malin.com ) Application.ScreenUpdating = False 'l'utilisateur ne voit pas les changement sur son écran 'la date d'expiration DateExpiration = DateSerial(2022, 12, 31) ' <= choisissez la date d'expiration >>> via la fonction DateSerial avec les paramètres (aaaa, mm, jj) 'compare la date d'expiration avec la date d'aujourd'hui If DateExpiration <= Date Then 'le code de l'action à effectuer quand le fichier est expiré 'par exemple un message: MsgBox "Ce fichier n'est plus valide..." Else End If Application.ScreenUpdating = True 'on réenclenche l'affichage des changements End Sub |
Actions à effectuer lors de l'expiration de fichier Excel
Il est possible d'attendre notre objectif (c'est-à-dire rendre le fichier Excel inutilisable après une date précise) de plusieurs manières. En voici deux le plus simples.
Fermeture automatique à l'ouverture de fichier Excel
Le code qui suit fait en sorte que dès l'ouverture de fichier, la date est contrôlée et si la condition de validité n'est pas remplie, le fichier se ferme automatiquement sans que l'utilisateur puisse intervenir.
Code à placer dans l'objet ThisWorkbook
de votre Classeur:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Private Sub Workbook_Open() 'par Excel-Malin.com ( https://excel-malin.com ) Application.ScreenUpdating = False 'l'utilisateur ne voit pas les changement sur son écran 'la date d'expiration DateExpiration = DateSerial(2022, 12, 31) ' <= choisissez la date d'expiration >>> via la fonction DateSerial avec les paramètres (aaaa, mm, jj) 'compare la date d'expiration avec la date d'aujourd'hui If DateExpiration <= Date Then Application.DisplayAlerts = False 'on empêche les pop-ups pour confirmer la suppression des Feuilles d'apparaître 'fermeture automatique et immédiate du Classeur ThisWorkbook.Close SaveChanges:=False Application.DisplayAlerts = True 'on réenclenche l'affichage des pop-ups de confirmation/alerte Else End If Application.ScreenUpdating = True 'on réenclenche l'affichage des changements End Sub |
Suppression du contenu lors de l'ouverture de fichier
Le code ci-dessous va plus loin. De manière générale, il est impossible que le fichier "se supprime soi-même" après la date d'expiration. Par contre, ce qui est possible c'est le déclenchement d'une procédure qui supprimera tout le contenu du fichier et effectuera une sauvegarde du fichier pour rendre ce changement permanent.
Ce code est à placer dans l'Objet "ThisWorkbook
" (comme expliqué pour le code de base plus haut).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Private Sub Workbook_Open() 'par Excel-Malin.com ( https://excel-malin.com ) Application.ScreenUpdating = False 'l'utilisateur ne voit pas les changement sur son écran 'la date d'expiration DateExpiration = DateSerial(2022, 12, 31) ' <= choisissez la date d'expiration >>> via la fonction DateSerial avec les paramètres (aaaa, mm, jj) 'compare la date d'expiration avec la date d'aujourd'hui If DateExpiration <= Date Then Application.DisplayAlerts = False 'on empêche les pop-ups pour confirmer la suppression des Feuilles d'apparaître 'on supprime toutes les Feuilles sauf la feuille active (car le classeur doit toujours contenir au moins une Feuille) Dim Feuille As Worksheet For Each Feuille In ThisWorkbook.Worksheets If Feuille.Name <> ActiveSheet.Name Then Feuille.Delete Next Feuille 'on supprime le contenu de la Feuille restante ActiveSheet.Cells.Delete Shift:=xlUp 'on sauvegarde le fichier pour rendre la suppression du contenu permanente ThisWorkbook.Save Application.DisplayAlerts = True 'on réenclenche l'affichage des pop-ups de confirmation/alerte Else End If Application.ScreenUpdating = True 'on réenclenche l'affichage des changements End Sub |
Autodestruction pure et simple du fichier Excel
Et voici la solution la plus radicale – le fichier Excel peut se supprimer lui-même du disque. En gros, le fichier peut s'auto-effacer!
Le code d'autodestruction se trouve dans les lignes 13-18. Ce code est inséré dans la structure de base (voir plus haut). Le tout est à placer dans l'Objet "ThisWorkbook
" de votre Projet VBA…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Private Sub Workbook_Open() 'par Excel-Malin.com ( https://excel-malin.com ) Application.ScreenUpdating = False 'l'utilisateur ne voit pas les changement sur son écran 'la date d'expiration DateExpiration = DateSerial(2022, 12, 31) ' <= choisissez la date d'expiration >>> via la fonction DateSerial avec les paramètres (aaaa, mm, jj) 'compare la date d'expiration avec la date d'aujourd'hui If DateExpiration <= Date Then 'autodestruction de fichier Excel (le fichier s'efface lui-même) Dim NomComplet As String NomComplet = Application.ActiveWorkbook.FullName ActiveWorkbook.Saved = True Application.ActiveWorkbook.ChangeFileAccess xlReadOnly Kill NomComplet Application.ActiveWorkbook.Close False Else End If Application.ScreenUpdating = True 'on réenclenche l'affichage des changements End Sub |
Ceci est l'étape ultime – à utiliser avec précaution!
Quelques remarques pratiques
Les exemples que je vous ai présentés, ainsi que toute cette approche, représentent une base qui va satisfaire la grande majorité d'utilisateurs. Vous pouvez utiliser sans problèmes dans les cas où vous ne vous attendez pas à ce que quelqu'un essaie de "forcer" votre protection. Si vous voulez protéger vos données de manière maximale, il faudra compléter cette approche par d'autres moyens pour dissuader les utilisateurs malveillants.
Voici comment rendre l'expiration d'un fichier Excel la plus fiable possible.
- Le premier pas: protéger votre code VBA (= les macros) par un mot de passe. Ainsi, l'utilisateur ne pourra pas venir trifouiller. Voici le tutoriel comment protéger son code VBA.
- Pour empêcher l'utilisateur de voir le contenu avant la vérification de la date d'expiration du fichier, on a deux choses à faire:
- Plutôt que d'empêcher l'utilisateur de voir les données après l'expiration, on fait le contraire. On cache les données dès le départ et on ne les affiche que lorsque la vérification de date d'expiration est faite et qu'elle est positive.
- Pour que cela marche correctement, on laisse une Feuille vide visible et on cache toutes les autres. Attention, il ne s'agit pas de les "masquer" mais bien de les "cacher".
Quelle est la différence? Et comment faire? Vous trouverez toute l'information dans ce Tutoriel sur la visibilité des Feuilles dans Excel.
Cela empêchera également l'accès aux données dans le cas ou l'utilisateur interdira l'utilisation des macros ce qui empêchera la vérification si le fichier est expiré ou pas!
Conclusion
Vous voici donc avec un fichier Excel que vous pouvez lâcher dans la nature tout en étant tranquille en ce qui concerne sa validité et sa date d'expiration. Ce n'est pas très compliqué et cela rend la vie, notamment dans une entreprise, un peu plus tranquille. Il s'agit d'une de nombreuses possibilités peu connues de public. Et dorénavant, vous faites partie de ceux qui savent que c'est possible et surtout de ceux qui savent comment faire. Une belle occasion d'impressionner vos collègues et votre hiérarchie! 😉
Pour aller plus loin dans l'utilisation d'Excel
Et pour finir, voici d'autres articles qui pourraient vous intéresser dans le but d'une meilleure maîtrise d'Excel et de VBA…
- Tout les tutoriels Excel & tout les tutoriels VBA
- Liste de toutes les fonctions Excel (plus de 480 fonctions!)
- et idem pour Les fonctions VBA…
- Les livres, manuels et exercices sur Excel & VBA soigneusement sélectionnés pour vous guider vers les ouvrages de qualité
- Un grand tutoriel sur les Tableaux croisés dynamiques (tables pivot) dans Excel
- Tout sur le Excel Online Gratuit
23 commentaires sur “Date d’EXPIRATION et autodestruction de fichier EXCEL”
Bonjour à tous,
Très intéressantes ces procédures !
Pour compléter la troisième proposition (qui efface le contenu du fichier), serait-il aussi possible de détruire également les codes VBA afin de sauvegarder un fichier totalement inutilisable sns plus aucune trace de ces codes ?
Au plaisir de vous lire.
—————————————————–
Bonjour Rob, d'abord merci pour vos compliments.
L'effacement programmatical du code VBA est possible mais assez compliqué et peu pratique. Voici le code que vous pouvez utiliser: Remove All VBA Code Programmatically
Le souci c'est que cette méthode fonctionnait sans problème jusqu'à Excel 2007. Pour les versions suivantes, l'utilisateur doit avoir coché une option particulière dans les paramètres de sécurité d'Excel. Et il y a peu de chance que ce soit le cas – le code ne fonctionnera donc probablement pas.
Bonne nouvelle: je viens d'ajouter une 4ème procédure dans mon article – la plus radicale de toutes: l'autodestruction pure et simple où le fichier en question s'auto-efface programmaticalement…
J'espère que cela résoudra votre problème.
Bien à vous, Martin
Hi Martin,
Poursuivant votre étude, je me suis penché sur votre dernière méthode (KILL) et noté celle dont vous donnez le lien mais qui ne fonctionnerait plus au-delà de Excel 2007.
Pour contourner ce problème, voici la méthode que je viens d'utiliser avec succès:
1. Vérifier la date de péremption
2. En cas de dépassement de celle-ci, on recopie toutes les sheets du fichier périmé dans un autre fichier portant le même nom mais dont l'extension xlsm devient xlsx. On fait cette copie en mode "spécial" valeur et format. De cette manière on supprime aussi toutes les formules originales. On obtient alors un fichier totalement "inerte", dépourvu des macros et des formules mais dont l'état reflète la dernière version data de l'original.
Si le fichier original était en format xlsx, on nommera la copie inerte en xlsx mais en ajoutant un caractère espace (à la fin du nom par exemple) pour éviter un conflit de nom identique empêchant la copie.
3. On supprime (KILL) le fichier original.
Au plaisir de poursuivre …
Bonjour Rob,
en effet, la méthode que vous décrivez est tout à fait appropriée si vous souhaitez préserver les données du fichier mais auto-détruire le code VBA qui se trouve derrière ainsi que les formules…
Par contre j'éviterais d'ajouter un espace au nom du fichier. Ou en tout cas si le but n'est pas que l'utilisateur ne remarque pas le changement. Si l'utilisateur n'a pas activé l'affichage des suffixes et vous ajoutez un espace, il n'y verra que du feu (sauf qu'il remarquera peut être que l'icône est différente (icûne XLSX vs. icône XLSM). Au cas où vous ne voulez pas volontairement cacher l'auto-destruction partielle du fichier, j'ajouterais plutôt un chiffre à la fin: au moins l'utilisateur ne sera pas tout à fait perdu.
Bonjour,
En fait je proposais d'ajouter un espace dans le cas où le fichier original, comprenant les macros et formules, aurait une extension xlsx. Car dans ce cas, on ne pourrait renommer la copie inerte en xlsx aussi.
Et si on renomme la copie xlsx en xls, je constate un message d'incompatibilité d'extension quand on veut ouvrir ce xls (bien qu'il l'ouvre tout de même ensuite) mais l'utilisateur aura vu quelque chose de bizarre à son fichier.
Par contre, si l'original est en xlsm, le renommer en xslx, sans ajout d'un espace, ne pose pas de problème.
Le problème qui subsiste est donc si le fichier original est au format xlsx… pour en faire une copie du même nom et de même format xlsx :((
Merci pour la poursuite de ce Post.
Bonsoir bon pourras tu partager avec nous ton code?
Très bonnes explications. Un grand merci!
Super intéressant, merci bcp cela m'aide totalement dans mon entreprise en me permettant d'envoyer des fichiers "temporaires" à mes clients. Par contre j'ai un petit doute, si jamais l'ordinateur est fermé le jour de la date d’expiration, puis rallumé le lendemain .. le fichier sera-t-il détruit ?
Bonjour Jess,
rassurez-vous, le fichier s'autodétruira même dans ce cas de figure.
Pour être tout à fait précis: le fichier s'autodétruira lors de la première ouverture postérieure ou égale à la "date de péromption". Donc même si quelqu'un voudra ouvrir le fichier 1 an après sa date d'expiration, l'autodestruction fonctionnera.
Bien à vous, Martin
Bonsoir,
Merci pour ces précieux renseignements.
Serait il possible de demander un mdp avant la suppression, genre si le mdp est bon, on renvoie sur un an de plus sinon on supprime.
Merci d'avance pour votre réponse.
Bonsoir bon pourras tu partager avec nous ton code sur la méthode utilisée ?
Bonjour,
merci pour ce code par contre au lancement du fichier si les macros sont désactivés et que l'on ne clique pas sur activé le contenu, le fichier est accessible et ne se supprime pas?
Je suis sur excel 2016, il y a t il un moyen de refuser l'ouverture du fichier si l'on active pas les macro?
Merci
Bonjour Mous,
en effet, c'est le principe même de sécurité autour des macros et du VBA.
Tant que l'utilisateur n'approuve pas l'utilisation des macros, vous ne pouvez pas exécuter du code VBA. Sinon, ce serait trop facile d'utiliser VBA à des fins malveillantes…
Il y a une solution cependant: vous ajoutez au fichier une feuille vide et vous cachez toutes les autres (en
xlSheetVeryHidden
– voir dans: Comment cacher / afficher les onglets dans un Classeur Excel).Dans cette seule Feuille visible, vous écrivez le message que sans les macros, le fichier en question n'est pas utilisable. Fous forcez ainsi l'utilisateur à autoriser les Macros.
Ensuite, dans le Event
WorkbookOpen
vous vérifiez si le fichier est encore valide – si oui, vous affichez toutes les Feuilles, si non, vous procédez à "l'autodestruction"…J'espère que cela vous aide.
Cordialement,
Martin
Bonjour,
Merci pour les explications.
Néanmoins, si je modifie la date de mon système d'exploitation, le code ne fonctionne plus (ex: 1/1/1990
Avez-vous un moyen de contourner ce problème.
Merci par avance.
Bonjour Stob,
en effet, si quelqu'un se donnait le mal de modifier la date de son système (avec tout ce qui en découlerait) à cause d'un fichier Excel, le procédé que je propose ne marcherait pas. Il s'agit d'une méthode pour une utilisation "normale".
La seule solution à ce problème qui me vient à l'esprit serait d'aller chercher la date du jour non dans le système de l'ordinateur (qui peut effectivement être modifié) mais ailleurs – par exemple sur un quelconque site internet (le site d'un journal, un site boursier etc…).
Le désavantage de cela serait le fait que l'ordinateur devrait être connecté sur internet. En même temps, à notre époque, cela ne devrait pas poser problème…
Cordialement, Martin
Bonjour à tous,
Dans le cadre du Covid-19, notre club doit tenir une liste "tracking" des personnes accédant aux installations pendant 14 jours, est t'il possible dans le code de remplacer (DateExpiration = DateSerial(2017, 12, 31) *** 2017, 12, 31 *** par une date qui se trouve en cellule D1 calculée automatiquement par la date du jour+14 en cellule B1.
Merci de votre aide
Trouvé merci
Bonjour à toute l'équipe.
Je vous remercie pour le cours sur la protection des fichiers avec date d'expiration. J'avoue que j'ai essayé et ça fonctionne correctement, mais le principal problème est que le code fonctionne avec la date système du PC et une fois cette date modifiée, le fichier est de nouveau utilisable. Merci pour votre aide pour pallier à cette faille.
Salut stp après on peut réutilisé le fichier qui est arrivé à expiration?
Si oui comment le fait
Mercu
Salut une fois de plus comment vous avez fait car cela ne marche pas chez moi
Bonjour Souleymane,
en effet, la macro doit pouvoir trouver la date actuelle quelque part et logiquement, elle va le chercher dans le système.
Dans beaucoup de situations, l'utilisateur ne peut pas changer la date du système (école, travail, administrations,…) mais effectivement, cette possibilité existe.
Si vous souhaitez pallier à cette possibilité, il faudrait aller chercher la date ailleurs, à un endroit que l'utilisateur ne peut pas modifier. Je pense que la seule possibilité est internet. Mais cela a ses ponts faibles:
1) que faire si la connection à internet n'est pas disponible?
2) cela rendrait chaque ouverture plus lente (le temps que la macro aile récupérer la date quelque part sur internet)
3) cela complexifierait assez bien le code.
Donc il reste à voir si le risque que l'utilisateur change sa date de système exprès pour pouvoir ouvrir le fichier en question vaille la peine de faire une solution complexe avec les points faibles cités plus haut…
Salut svp après avoir suivi le premier PROCESSUS qui est la date dexpiration cela ne marche pas chez moi besoin d'aide svp
Bonjour,
Merci pour ces macros bien utiles.
J'ai un problème sur celle avec la suppression des contenus.
Lorsque je fais un test, lors de l'ouverture, j'ai un message d'erreur d'exécution 1004 et le débogage indique que l'erreur se trouve à Then Feuille.Delete
L'éxécution est donc impossible.
Merci par avance