Ma question est simple, Est-il possible d'empêcher l'enregistrement par le menu de l'excel ( enregistrer et enregistrer sous)
l'enregistrement se fait par un bouton dans ma feuille.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not Flag Then
MsgBox "Sauvegarde uniquement avec le bouton dédié!", vbCritical
Cancel = True
End If
End Sub
Dans le code du CommandButton
VB:
Private Sub CommandButton1_Click()
Flag = True
ActiveWorkbook.Save
Flag = False
End Sub
Dans un module standard
VB:
Public Flag As Boolean
EDITION: Même idée que _Thierry que je salue au passage
Bonjour le fil, JM
Apres avoir penché un peu ma tête vers la droite de mon LAPTOP, j'ai pu faire un code mais il ne foctionne pas avec le bouton qui est dans la feuille.
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
MsgBox "Vous ne pouvez pas enregistrer, clic sur le bouton dans la feuille"
End Sub
Code:
Sub Enregistrer_sous()
Dim chemin As String, fichier As String
Application.ScreenUpdating = False
If Range("I2") = "" Or Range("K2") = "" Then
Cancel = True
MsgBox "Veuillez rensigner le N° et/ou la Date du rapport"
Else
chemin = ThisWorkbook.Path
fichier = chemin & "\" & Range("I4") & ".xlsm"
ActiveWorkbook.SaveAs Filename:=fichier
End If
Application.ScreenUpdating = True
End Sub
Pour bypasser le Cancel = True du Workbook_BeforeSave(
Je crois qu'il y a un truc avec UserInterface Only ou un truc de ce genre... Mais pas certain !
Moi tout simplement je mettrai un Boolean Public à tout le Classeur que tu initialiserais à True uniquement depuis ton Enregistrer_sous... Et donc le Cancel = True deviendrait Cancel = MonBooleanPublic ...
Il faut le déclarer Public MonBooleanPublic as Boolean dans un module normal au top.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not Flag Then
MsgBox "Sauvegarde uniquement avec le bouton dédié!", vbCritical
Cancel = True
End If
End Sub
Dans le code du CommandButton
VB:
Private Sub CommandButton1_Click()
Flag = True
ActiveWorkbook.Save
Flag = False
End Sub
Dans un module standard
VB:
Public Flag As Boolean
EDITION: Même idée que _Thierry que je salue au passage
Mon code est basé sur l'utilisation d'un CommandButton
Si tu veux utiliser une image, c'est simple
Il suffit d'affecter cette macro (dans le module standard)
VB:
Sub Code_Pour_Image()
Flag = True
ActiveWorkbook.Save
Flag = False
End Sub
Le reste du code du message#8 devant être conservé aux mêmes endroits.
Bonjour Staple1600,chaelie2015et_Thierry
La crise économique qui se prépare m'incite à faire des économies tous azimuts, y compris de la booléenne flag.
Il suffit à cette fin de faire précéder (au clic du commandbutton) l'instruction de sauvegarde par un simple application.enableevents = false et de la rétablir à true tout de suite après.
on shunte ainsi l'évènement beforesave lorsque l'on clique le bouton de commande.
Il suffit à cette fin de faire précéder (au clic du commandbutton) l'instruction de sauvegarde par un simple application.enableevents = false et de la rétablir à true tout de suite après.
En quoi un EnableEvents=False dans sa macro de sauvegarde empêche-t-il de sauvegarder le classeur de façon traditionnelle ?
Je ne vois pas bien le fonctionnement du truc.
Désolé pour toi, que tu ne le voies pas bien
Tu devrais peut-être tout relire, mais plus attentivement, de sorte à comprendre que :
- le clic sur le bouton court-circuite ainsi l'évènement Beforesave
- un clic sur le menu de sauvegarde, lui, te "jette".
Bref ...
Bon réveil.
je ne doute pas une seule seconde de ce que @Staple1600et@_Thierryont, eux, parfaitement compris ce mécanisme au demeurant très simple.
T'as vraiment besoin d'être agressif de la sorte ?
Tu ne peux pas simplement m'expliquer comment ça fonctionne ton truc ? Comment tu fais pour empêcher l'enregistrement par le menu en mettant un EnableEvents à False dans sa macro ?
je ne vois pas comment l'expliquer mieux que déjà fait.
Pour mémoire :
Il suffit à cette fin de faire précéder (au clic du commandbutton) l'instruction de sauvegarde par un simple application.enableevents = false et de la rétablir à true tout de suite après. on shunte ainsi l'évènement beforesave lorsque l'on clique le bouton de commande.