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