XL 2016 Empêcher la sauvegarde du fichier à la fermeture

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

univers63

XLDnaute Nouveau
Bonsoir,

Je voudrais empêcher l'enregistrement de mon classeur Excel à la sortie du fichier. Je sais qu'il y'a une fonction "BeforeClose"

"Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ThisWorkbook.Saved = True
End Sub"


Mais je ne sais pas ou la placée avec "Private Sub Workbook_Open()"

Merci pour votre aide.
 

Pièces jointes

Bonsoir univers63,

module de ThisWorkbook :

VB:
Private Sub Workbook_Open()
  Application.ScreenUpdating = False
  'masquer les pages content et members à l'ouverture.
  Sheets("login").Visible = True
  Sheets("content").Visible = 2
  Sheets("Members").Visible = 2
  Sheets("compil").Visible = 2
  Sheets("tableau de bord").Visible = 2
  Sheets("login").Activate
  Sheets("Login").Txt_user.Text = ""
  Sheets("Login").Txt_pass.Text = ""
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ThisWorkbook.Saved = True
End Sub

soan
 
Bonjour le fil

[Question au passage pour comprendre le contexte]
Si tu ouvres un classeur, c'est que logiquement tu vas travailler dessus, donc y apporter des modifications, non ?
Donc si tu fermes sans Enregistrer, tu perdras ces modifications.
Et si tu veux ouvrir ton classeur, juste pour consultation, dans ce cas pourquoi ne pas l'ouvrir en lecture seule ?
[/Questions au passage]
 
Bonjour
Le classeur va être partagé en réseau pour consultation uniquement. Un autre petit soucis que j'ai rencontré, je ne veux pas que quelqu'un d'autre enregistre le fichier sous un autre nom alors je veux désactiver cette option. J'ai essayé de le faire mais ça ne marche pas. Y'a t'il quelqu'un qui peut m'aider. Merci

"Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Cancel = True
'End Sub"
 

Pièces jointes

Re

=>univers63
Tu as vu mon message?
Le message#5
Est-ce qu'une ouverture en lecture seule peut suffire?

Sinon, pour cette partie de ta question
Un autre petit soucis que j'ai rencontré, je ne veux pas que quelqu'un d'autre enregistre le fichier sous un autre nom alors je veux désactiver cette option.
Si l'utilisateur final ouvre le classeur sans activer les macros, il pourra faire un Enregistrer sous.
Ou à partir d'Excel, copier chaque feuille dans un nouveau classeur.
Donc sauf si l'utilisateur débute avec l'usage d'Excel, tu ne pourras pas maitriser ce qu'il advient de ton classeur.
 
Bonjour Staple1600
Y'a que moi qui effectue des modification sur le fichier ensuite je le remet en réseau. J'ai pu faire cette manipulation avec ce code seule :

"Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
End Sub"


Mais des que j’insère en meme temps ce code contre l'enregistrement :

"Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ThisWorkbook.Saved = True
End Sub


Ça fonctionne pas.
 
@univers63

euh... ça serait pas un truc du genre « scier la branche sur laquelle on est assis » ? je veux dire : si tu empêches la sauvegarde du fichier, tu ne peux plus enregistrer les modifs que tu y as faites ! 😭

(mais peut-être que j'ai mal compris le schmilblik ? 🙄)



d'un autre côté, je crois que si tu cliques sur l'icône disquette, alors c'est quand même possible d'enregistrer le fichier (à vérifier) ; et peut-être que ça serait à partir de l'icône disquette de l'Éditeur VBA, pas à partir de l'icône disquette d'Excel.​

soan
 
Dernière édition:
Re

=>univers63
Je parlais de cette possibilité offerte par Excel.
LectureSeule.png


=>soan
Voir observations message#5
 
Re

Et en utilisant cette autre option?
excel.exe /r "C:\Users\STAPLE\Documents\test21221.xlsx"
(r comme read-only)
Je viens de faire le test.
Le classeur s'ouvre en lecture seule (sans fenêtre de validation)

Reste à voir comment implémenter la chose en situation réelle.
Créer un raccourci avec cette option /r
La lancer avec le Shell (ou avec VBScript)
 
Bonjour à @univers63, @soan, @La flamme, @Staple1600 et à tous les autres 🙂,

Un essai de ma pomme. Peu de choses ont été modifiées.
  • Si on se logue en tant que "user", on ne pourra pas sauvegarder les modifications.
  • Si on ne se logue pas en tant que "user", on pourra sauvegarder les modifications.
La méthode :
  • Dans la procédure de login, on a ajouté la création d'un nom caché attaché à la feuille "Login". Ce nom caché prend la valeur True (si on peut sauvegarder les changements) ou prend la valeur False (si on interdit la sauvegarde des modification)
  • Puis dans ThisWorkbook, on a rajouté les deux procédures évènementielles "Workbook_BeforeClose" et "Workbook_BeforeSave". Les paramètres de ces deux procédures dépendent de la valeur du nom caché (True ou False) qui dépend lui-même si on s'est logué en tant que User ou non.
Pour les tests , deux binômes de login :
Ident = Admin et Mdp = 123 ou bien Ident = User et Mdp = 456

Code du Login (principalement ajout de la création du nom caché "Sauvegarder":
VB:
Private Sub CommandButton1_Click()
Dim Mot_de_passe As String
Dim Text_user As String
Dim role As String, R$

   On Error Resume Next

   'Recherche mot de passe correspondant au user
   Mot_de_passe = WorksheetFunction.VLookup(Txt_user, Sheets("Members").Range("B4:D1000"), 2, 0)

   'Sécurité
   If Txt_user = "" Or Mot_de_passe = "" Or Txt_pass <> Mot_de_passe Then
       R = MsgBox("Nom utilisateur ou mot de passe érroné(s)", 16, "Problème de sécurité")
       Sheets("Login").Txt_user.Text = ""
       Sheets("Login").Txt_pass.Text = ""
       Exit Sub
   End If

   role = WorksheetFunction.VLookup(Txt_user, Sheets("Members").Range("B4:D1000"), 3, 0)
   'on efface les données
   Sheets("Login").Txt_user.Text = ""
   Sheets("Login").Txt_pass.Text = ""

   'affichage suivant User/Admin
   If role = "user" Then
      ActiveWorkbook.Worksheets("Login").Names.Add Name:="Sauvegarder", RefersToR1C1:=False, Visible:=False
      MsgBox "              Attention!" & vbLf & vbLf & _
               "Aucune de vos modifications ne pourra être sauvegardées!", vbCritical
      Sheets("tableau de bord").Visible = True
      Sheets("tableau de bord").Activate
      Sheets("login").Names.Add
   Else     'Admin
      ActiveWorkbook.Worksheets("Login").Names.Add Name:="Sauvegarder", RefersToR1C1:=True, Visible:=False
      MsgBox "              Vous êtes administrateur" & vbLf & vbLf & _
               "Vos modifications pourront être sauvegardées!", vbInformation
      Sheets("content").Visible = True
      Sheets("members").Visible = True
      Sheets("compil").Visible = True
      Sheets("tableau de bord").Visible = True
      Sheets("login").Visible = 2
   End If
End Sub

Code ajouté dans ThisWorkbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   If Not Worksheets("Login").[Sauvegarder] Then ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   If Not Worksheets("Login").[Sauvegarder] Then SaveAsUI = False: Cancel = True
End Sub
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
146
Retour