Désactiver enregistrement automatique Office 365

Bonjour,

Pour les besoins de mes macros, j'aimerais empêcher les utilisateurs d'activer la sauvegarde automatique présente dans Office 365.

saveauto

J'ai déjà ajouté cette procédure dans ThisWorkbook.Open pour désactiver l'enregistrement du classeur :

ActiveWorkbook.AutoSaveOn = False

Est-il possible via VBA d'empêcher l'utilisateur de cliquer sur ce bouton ?

Merci d'avance pour votre aide.

Baptiste

Bonsoir

En fait ce que vous ne voulez pas c'est que l'utilisateur puisse enregistrer soit via cette option enregistreur auto ou via la petit disquette ?

En gros le fichier doit toujours rester en lecture

Cordialement

Bonsoir Dan,

Je veux uniquement bloquer la possibilité d'enregistrer via cette option.

Ça ne me dérange pas si l'utilisateur utilise la disquette. En fait, j'ai une macro qui me permet d'exporter une partie de mon classeur et pendant cette procédure, il ne faut surtout pas que le classeur source soit enregistré sous peine de perdre des données...

En gros le fichier doit toujours rester en lecture

Grosso modo oui, mais je ne veux pas non plus le passer en classeur partagé.

Merci d'avance pour ton aide.

Baptiste

Bonsoir Horusbk, Dan,

Je veux uniquement bloquer la possibilité d'enregistrer via cette option.

Justement, c'est une option. Passer par le menu général gauche puis choisir Options en fin de ce menu.

Ensuite par ce menu Options Excel choisir Barre d'outils d'accès rapide. Puis sur l'encart de droite cliquer sur Enregistrement automatique.

Enfin sur le bouton << Supprimer

Prévoir un enregistrement automatique en fin de macro et lorsqu'on quitte le classeur.

Bonjour X Cellus,

Si je supprime cette option, cela va uniquement l'enlever sur mon client ou sur tous les clients Office lorsque l'utilisateur va ouvrir mon fichier ?

Cordialement,

Baptiste

Bonjour,

Ça ne me dérange pas si l'utilisateur utilise la disquette. En fait, j'ai une macro qui me permet d'exporter une partie de mon classeur et pendant cette procédure, il ne faut surtout pas que le classeur source soit enregistré sous peine de perdre des données...

Je n'ai pas trop compris quand vous écrivez "....le classeur source soit enregistré sous peine de perdre des données..."

Si je supprime cette option, cela va uniquement l'enlever sur mon client ou sur tous les clients Office lorsque l'utilisateur va ouvrir mon fichier ?

Non. C'est lié à excel cela. Par exemple ma version excel ne permet pas l'ajout de cette icone

Peut être lire ce lien --> https://support.microsoft.com/fr-fr/office/qu-est-ce-que-l-enregistrement-automatique-6d6bd723-ebfd-...

Ce que l'on sait faire et qui est la raison de ma question dans mon post précédent, c'est faire en sorte que l'utilisateur ne puisse utiliser le fichier qu'en lecture et que tout enregistrement ne soit pas effectué. Mais cela ne correspond pas à votre souci je pense

Edit : Peut être ajouter cette instruction dans le code d'ouverture du fichier qui va désactiver l'enregistreur automatique à l'ouverture du fichier

ThisWorkbook.AutoSaveOn = False

Bonjour,

Je n'ai pas trop compris quand vous écrivez "....le classeur source soit enregistré sous peine de perdre des données..."

Pour faire simple j'ai une macro qui vient éditer ma base de données (fichier source) pour extraire deux feuilles de classeur vers un nouveau répertoire d'enregistrement. Si un enregistrement automatique est effectué pendant cette édition, alors certaines données sont perdues. C'est pour cela que je veux désactiver la sauvegarde automatique de Office 365.

J'ai effectivement mis ThisWorkbook.AutoSaveOn = False dans le code d'ouverture du fichier. Toutefois cela n'empêche pas l'utilisateur de le réactiver manuellement via le Header. Merci pour le lien, donc effectivement cela va être totalement contre productif de désactiver l'option dans chaque client Excel mes collaborateurs...

Si j'ajoute cette option dans chaque feuille de calcul Worksheet_Change(ByVal Target As Range) est-ce que cela peut-être une solution ? Cela ne va-t-il pas trop ralentir mon fichier ?

Merci d'avance,

Baptiste

Si j'ajoute cette option dans chaque feuille de calcul Worksheet_Change(ByVal Target As Range) est-ce que cela peut-être une solution ? Cela ne va-t-il pas trop ralentir mon fichier ?

Cela pourrait peut être fonctionner oui. Mais lors de l'extraction votre fichier doit d'abord être enregistré non ?

C'est correct, avant de commencer les actions d'export, j'effectue un ThisWorkBook.Save sur mon fichier.

Voici la fin de ma procédure à partir de l'enregistrement :

  ThisWorkbook.Save
'
'Envoi du fichier sur SharePoint
On Error Resume Next
  MkDir chemin
  On Error GoTo 0
  With ActiveWorkbook
    Call Delete_Sheets
    .SaveAs Filename:=LeRep & LeNom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
      Application.DisplayAlerts = False

  Workbooks.Open Filename:=cheminFichierSource
  .Close SaveChanges:=False
  Application.DisplayAlerts = True
  End With
Application.ScreenUpdating = True
End Sub

Le fichier est sauvegardé, exporté puis réouvert grâce au chemin du fichier contenu dans Workbooks.Open Filename:=cheminFichierSource.

C'est pour cela que si ce fichier est automatique sauvegardé avant cette procédure : .SaveAs Filename:=LeRep & LeNom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False Application.DisplayAlerts = False je peux sans le vouloir perdre des données.

En fait si je pige bien au vu du code c'est du à l'instruction CALL Delete_sheets qui est là uniquement pour le fichier qui sera envoyé mais vous les gardez dans votre fichier original ?

Exactement, CALL Delete_sheets vient supprimer des feuilles de classeur du fichier que j'enregistre vers SharePoint.

Je ne veux pas d'enregistrement automatique car sinon les feuilles supprimées précédemment sont perdues du fichier original.

Faut donc faire comprendre à excel que le fichier a déjà été sauvegardé après la suppression des feuilles

Regardez un peu ce lien --> https://www.excel-pratique.com/fr/astuces_vba/empecher_enregistrement_fichier

En supplément, peut être aussi faire un sauvegarde de votre fichier après l'avoir Sauvé via l'instruction Thisworkbook.save au début du code

Cela donnerait peut être ceci

  with ThisWorkbook
    .Save
    .saveas ........'Précaution : on sauve le fichier avant suppression des feuilles pour la cas où...
   End with

'Envoi du fichier sur SharePoint
On Error Resume Next
  MkDir chemin
  On Error GoTo 0
  With ThisWorkbook 'j'ai remplacé Activeworkbook par Thisworkbook puisque c'est le fichier qui contient le code -> A verifier !
    Call Delete_Sheets
    .Saved = True 'faire croire à excel que le fichier a déjà été sauvé
    .SaveAs Filename:=LeRep & LeNom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
      Application.DisplayAlerts = False

Un truc à penser serait aussi de n'autoriser la sauvegarde que si l'utilisateur est l'admin du fichier. En combinaison avec le lien que je vous donne avant, c'est ce que j'avais fait pour mon boulot, pour éviter qu'un autre utilisateur ne puisse enregistrer quelque chose

Edit :

Autre solution :

1. Déclarer une variable Boolean Public en entête du module --> Public X as boolean
2. Mettre ce code dans thisworkbook

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If X = true then Cancel = True 'Annule les demandes d'enregistrement si X est à valeur True
End Sub

3. Dans votre code, aouter le ligne pour la variable X

On Error Resume Next
  MkDir chemin
  On Error GoTo 0
  With ThisWorkbook 'j'ai remplacé Activeworkbook par Thisworkbook puisque c'est le fichier qui contient le code
    X = True
    Call Delete_Sheets
    .SaveAs Filename:=LeRep & LeNom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
      Application.DisplayAlerts = False
.....

4. A la fin du code , remettre la variable à FALSE -> X = False

Bonjour Dan,

J'ai testé ta seconde proposition avec cette procédure :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If X = true then Cancel = True 'Annule les demandes d'enregistrement si X est à valeur True
End Sub

Toutefois cela n'a pas fonctionné, lorsque j'ai rétabli la sauvegarde automatique pour tester. Certaines feuilles ont été supprimées.

Je pense que cela vient d'une erreur de déclaration de la variable Public X as boolean . J'ai fait la déclaration dans Thisworkbook, est-ce qu'il ne fallait pas le faire dans le module contenant la procédure CALL Delete_sheets?

Bonjour

J'ai fait la déclaration dans Thisworkbook,

Non, je ne vous ai pas écrit de mettre la déclaration de variable dans Thisworkbook mais en entête d'un module (j'ai souligné ce point dans mon post précédent)

Pour comprendre, allez dans le menu Insertion dans l'éditeur VBA, choisissez "Module" et coller la déclaration de cette variable en toute première ligne.
Vous n'êtes pas obligé de créer un nouveau module, vous pouvez aussi la mettre dans le module de la macro Delete_sheets mais le principal est qu'elle soit en première ligne. Donc vous ne devez pas avoir de macros avant cette ligne.

Pour votre test, n'ajoutez pas l'instruction pour mettre la variable à FALSE à la fin du code. Vous pourrez le faire plus tard.

Cordialement

Bonjour Dan,

Merci pour votre réponse, j'ai corrigé mon erreur et effectivement ça marche beaucoup mieux !

Merci pour votre aide.

Cordialement, Horusbk.

Rechercher des sujets similaires à "desactiver enregistrement automatique office 365"