Pour ne plus pleurer

Le problème de la corruption des fichiers

L'une des choses les plus horribles qui puissent arriver à vos fichiers excel, c'est de tout perdre suite à la corruption du fichier. C'est une situation assez rare - heureusement - mais qui peut quand même arriver... 2 étudiants sur 40 lors de mon dernier cours avec des fichiers assez complexes.

Pour limiter les dégâts, voici un code VBA qui va - lors de chaque fermeture du fichier - sauvegarder une version du fichier en incluant la date et l'heure.

Comme cela, si le fichier se corrompt, vous pourrez toujours repartir d'un dernier enregistrement non corrompu.

Procédure :

Enregistrez d'abord le fichier.

Dans VBE (ALT+F11), double-cliquez sur ThisWorkbook, puis coller ce code.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim fso As Object
    Set fso = VBA.CreateObject("Scripting.FileSystemObject")
    ThisWorkbook.Save
    fso.CopyFile ThisWorkbook.Path & "\" & ThisWorkbook.Name, ThisWorkbook.Path & "\" & Replace(Date, "/", "-") & "-" & "-" & Replace(Time, ":", "-") & "-" & ThisWorkbook.Name
End Sub

Beaucoup d'améliorations sont possibles, j'y reviendrai dans d'autres posts.

  • Vous pourriez garder uniquement les n fichiers les plus récents.
  • Vous pourriez changer le répertoire de sauvegarde.
  • Finalement, vous pourriez créer la copie à chaque sauvegarde grâce à l'événement Workbook_AfterSave.

PS : sur certains ordinateurs, ce code peut poser des problèmes en raison du Scripting.FileSystemObject. Si c'est le cas, il existe plusieurs raisons :

  • Vous êtes sur MAC. Il existe des alternatives, mais c'est un peu compliqué.
  • Il est possible qu'il y ait des protections si vous travaillez sur un serveur.
  • Il manque une référence au système de script (Dans VBE, Outils-Références, Microsoft Scripting Runtime). Le fichier se trouve en général ici : C:\WINDOWS\System32\Scrrun.dll. S'il n'est pas là, vous pouvez l'ajouter en choisissant Parcourir...
Pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.