Autres Empêcher l'enregistrement par Menu

chaelie2015

XLDnaute Accro
Bonjour FORUM

Besoin d'un petit coup de main.

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.


Merci d'avance.
 

Pièces jointes

  • CHARLIE Enregistrement.xlsm
    19.7 KB · Affichages: 9
Dernière édition:
Solution
Re,

Dans ThisWorkBook
VB:
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 ;)

chaelie2015

XLDnaute Accro
Bonjour le fil, chaelie2015

•>chaelie2015
Penche un peu la tête
Non pas vers le bas
Mais vers la droite de ton écran ;)
Oui voila dans les Discussions similaires ;)

Bonjour le fil, JM
Apres avoir penché un peu ma tête vers la droite :D;) 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
A+;)
 

Pièces jointes

  • CHARLIE Enregistrement.xlsm
    19 KB · Affichages: 5

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @chaelie2015 @Staple1600

Bien vu de pencher la tête lol !!!

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.


Bonne soirée
@+Thierry
 

Staple1600

XLDnaute Barbatruc
Re,

Dans ThisWorkBook
VB:
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 ;)
 

Staple1600

XLDnaute Barbatruc
Re

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.
 

jmfmarques

XLDnaute Accro
Bonjour Staple1600, chaelie2015 et _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.

Ouais ... je deviens radin en période de crise.:p
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,
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. :(
 

jmfmarques

XLDnaute Accro
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 @Staple1600 et @_Thierry ont, eux, parfaitement compris ce mécanisme au demeurant très simple. :)
 
Dernière édition:

TooFatBoy

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

jmfmarques

XLDnaute Accro
Tu ne peux pas simplement m'expliquer comment ça fonctionne ton truc ?
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.
et pour compléter ton interrogation, à savoir :
En quoi un EnableEvents=False dans sa macro de sauvegarde empêche-t-il de sauvegarder le classeur de façon traditionnelle ?
C'est précisément ce que font les instructions mises dans l'évènement BeforESave, non ?

Tu aurais pu éviter ton intervention. il te suffisait de faire comme dit et de constater.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 886
Membres
101 830
dernier inscrit
sonia poulaert