VBA: activer et désactiver l’Enregistrement automatique dans Excel

Vous l'avez certainement remarquée si vous utilisez Excel 2016 et les suivantes: la petite icône de l'Enregistrement automatique dans Excel… Une petite fonctionnalité bien pratique pour l'utilisateur mais qui peut avoir un impact sur l'exécution des macros en VBA!

Excel: enregistrement automatique
Excel: enregistrement automatique

Enregistrement automatique dans Excel: comment ça marche?

Cette fonctionnalité fonctionne de la manière suivante – pour autant que le Classeur soit stocké sur OneDrive ou sur SharePoint, les changements que vous faites au Classeur sont enregistrés au fur et à mesure. Il ne s'agit pas d'une "sauvegarde automatique classique". Ici, Excel enregistre CHAQUE changement que vous faites dans votre Classeur:

  • changement des valeurs dans les cellules
  • changements des formats
  • ajouts de Feuilles
  • etc.

Chacune de ces actions déclenche un enregistrement. On peut donc dire qu'Excel est en train d'enregistrer presque non-stop.

Impact de "l'Enregistrement automatique" sur une macro VBA

Comme vous pouvez donc imaginer, ce comportement peut avoir un important impact sur les macros VBA:

  • la performance (dépends de la vitesse du réseau qui doit gérer tous ces enregistrements)
  • les conflits avec d'autres utilisateurs qui travaillent potentiellement dans le même Classeur
  • si vous testez votre macro ou si la macro contient un problème, vous risquez de perdre votre travail (ou causer les problèmes à l'utilisateur qui a lancé la macro)

Bref, la liste des problèmes potentiels est longue comme un bras… Vous pouvez voir ce qu'en dit Microsoft lui-même (que cela ne vous empêche pas de dormir!).

VBA: tester si la sauvegarde automatique est activée ou pas

On ne va pas se le cacher – lors de lancement d'une macro, il vaut mieux vérifier si la sauvegarde automatique est activée et si oui, la désactiver. Pour cela, nous allons utiliser la propriété VBA Workbook.AutoSaveOn. Il s'agit d'une propriété de type Booléen (Boolean) qui nous retourne la valeur VRAI ou FAUX (True ou False) et que nous pouvons modifier.

Nous pouvons donc facilement tester si la sauvegarde automatique Excel est activée ou pas…

Sub TestEnregistrementAutomatique()
'par Excel-Malin.com ( https://excel-malin.com )

If ThisWorkbook.AutoSaveOn = True Then
    MsgBox "L'enregistrement automatique est activé"
Else
    MsgBox "L'enregistrement automatique est désactivé"
End If

End Sub

De cette manière, vous savez où vous en êtes.

Désactiver l'enregistrement automatique (temporairement)

Pour désactiver cette fonctionnalité, il suffit d'utiliser:

ThisWorkbook.AutoSaveOn = False 

Ainsi, vous pouvez exécuter votre code sans se soucier de l'AutoSave.
On pourrait s'arrêter là. Mais nous pouvons améliorer ce code.

Principalement pour deux raisons

Vérifier la version d'Excel pour éviter les erreurs

Utiliser la propriété .AutoSaveOn dans une version d'Excel antérieure à Excel 2016 va déclencher une erreur (par exemple si vous voulez activer le AutoSave). Il vaut donc mieux de limiter l'utilisation de notre code aux versions Excel les plus récentes. Nous allons donc d'abord tester la version d'Office sur laquelle la macro a été exécutée. Dans ce cas-ci, il faut qu'il s'agisse de la version "16" et les (potentielles) suivantes.

Voici donc le code qui tient compte de cette contrainte:

Sub TestEnregistrementAutomatique_2()
'par Excel-Malin.com ( https://excel-malin.com )

If Val(Application.Version) > 15 Then
    If ThisWorkbook.AutoSaveOn = True Then
        MsgBox "L'enregistrement automatique est activé"
    Else
        MsgBox "L'enregistrement automatique est désactivé"
    End If
Else
End If

End Sub

Rendre le Classeur à l'utilisateur dans les mêmes conditions

L'expérience m'a appris que les utilisateurs apprécient assez peu que l'on modifie la configuration de leur PC ou de leur application à leur insu. C'est pour cela que je préfère que la macro  "restitue" le Classeur dans le même état dans lequel il se trouvait avant le lancement de la macro (que ce soit pour la résolution de l'écran, le zoom, les dossiers par défaut etc.).

Pour cela, il suffit d'ajouter une variable qui contiendra l'état de l'AutoSave avant le début de la macro. Cela permettra ensuite de le remettre dans le même état qu'au départ.

Voici donc le code final:

Sub TestEnregistrementAutomatique_final()
'par Excel-Malin.com ( https://excel-malin.com )

Dim EtatAutoSave As Boolean

If Val(Application.Version) > 15 Then
    EtatAutoSave = ThisWorkbook.AutoSaveOn 'état de départ
    ThisWorkbook.AutoSaveOn = False
    
    '... votre code ...
    
    
    ThisWorkbook.AutoSaveOn = EtatAutoSave 'remise dans l'état de départ
Else
End If

End Sub

Avec ce code, vous devriez éviter les problèmes liés à l'Enregistrement automatique d'Excel.

Une dernière remarque pour la fin

Attention si le Classeur que vous testez ne se trouve pas sur un OneDrive ou sur un SharePoint. Si vous souhaitez activer l'AutoSave dans un Classeur qui est sauvegardé sur un disque local, vous allez déclencher une erreur.

Ceci arrive si vous utilisez ThisWorkbook.AutoSaveOn = True de manière isolée. Avec le code que je vous propose plus haut, cela ne va pas arriver car si le fichier est en local, l'AutoSave est d'office False. Et le code ne va pas l'activer. Vous êtes alors couverts!

Pour aller plus loin en VBA

Si vous avez trouvé cet article intéressant, je vous en propose d'autres qui pourraient rendre votre travail en VBA plus efficient et plus agréable…

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée.