Date d’expiration et autodestruction de fichier Excel 6



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…

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 da 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 le VBAProject 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:

Excel VBA: date d'expiration - à placer dans ThisWorkbook


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.

 

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 plusieures 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:

 

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 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).

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"…

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 le 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 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 votre chef! 😉

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

 

5 0

 

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

6 commentaires sur “Date d’expiration et autodestruction de fichier Excel

  • Rob Garnier

    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.
    —————————————————–

    • excel-malin.com Auteur du billet

      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

      • Rob

        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 …

        • excel-malin.com Auteur du billet

          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.

          • Rob

            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.