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

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

  • TB_test_macro .xlsm
    163.5 KB · Affichages: 16

soan

XLDnaute Barbatruc
Inactif
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
 

Staple1600

XLDnaute Barbatruc
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]
 

univers63

XLDnaute Nouveau
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

  • TB_test_macro .xlsm
    159.6 KB · Affichages: 1

Staple1600

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

univers63

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

soan

XLDnaute Barbatruc
Inactif
@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 ? :rolleyes:)



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:

Staple1600

XLDnaute Barbatruc
Re

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


=>soan
Voir observations message#5
 

Staple1600

XLDnaute Barbatruc
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)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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

  • TB_test_macro -test 1.xlsm
    168 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 237
Membres
103 497
dernier inscrit
JP9231