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

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 040
Membres
102 763
dernier inscrit
NICO26