Résolu 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.
 
Ce fil a été résolu! Aller à la solution…

Fichiers joints

Dernière édition:

Staple1600

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

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+;)
 

Fichiers joints

_Thierry

XLDnaute Barbatruc
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 ;)
 
Ce message a été identifié comme étant une solution!

chaelie2015

XLDnaute Accro
Bonsoir Thierry ,JM
Merci pour les conseils, les remarques et les réponses
Edit : mon souci est réglé
merci l'équipe
 
Dernière édition:

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
 

Marcel32

XLDnaute Accro
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:

Marcel32

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

Marcel32

XLDnaute Accro
Désolé, je ne comprends pas mieux...(normal, me diras-tu, puisque ça reprend des phrases précédentes sans rien expliquer)

Que veux-tu que je "constate" en lisant et relisant ce fil ?
Je pensais que ce forum était là pour aider, mais là ça ne m'aide pas à comprendre. Dommage.

Merci quand même.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, chaelie2015, _Thierry, jmfmarques, Marcel32

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. :)
Personnellement, sans doute que le confinement amoindrit ma réactivité.
Car si j'étais moi, j'aurai du ou pu évoquer les points suivants:
1) Si j'étais l'utilisateur d'un classeur "liberticide", illico presto, j'ouvre celui-ci sans activer les macros et inhibe tout ce qui m’empêche d'utiliser mon Excel à 100% de ses capacités
2) Si je fus moi, et qu'un collègue lambda et balbutiant dans le monde d'Excel eut été destinataire d'un classeur façonné par mes soins, j'aurais pris le temps de le former à l'utilisation de celui-ci plutôt que d'attenter à l'intégrité de son Excel ;)
(Euh, le moi d'aujourd’hui incite fortement le moi d'hier à réviser ses conjugaisons ;))
 

_Thierry

XLDnaute Barbatruc
Bonjour @ tous

S'il eut fut fait froid, nous fusse réchauffé en lisant ce fil !

Pour le synopsis compréhensif en trois phases pour Marcel32 :

1)
Chaelie2015 voulait empêcher l’usage des boutons standard « Save » ou « Save As » par l’usage de la macro évènementielle : Workbook_BeforeSave, mais uniquement depuis son propre bouton et sa programmation prévue. Hélas, l’évènementielle ne laissait plus sauver le classeur.

2) Moi-même & Staple1600 avons proposé la même méthode en utilisant un « Verrou » Boolean public à tout le classeur qui désactiverait le Cancel de Workbook_BeforeSave si initialisé à True dans le code de Chaelie2015.

3) Jmfmarques, dans un souci d’économie ;) , est ensuite venu proposer une solution intéressante qui consiste à désactiver les macros évènementielles avec Application.EnableEvents = False dans le code de Chaelie2015 de son bouton Save (et de le remettre à True en sortie) pour que l’évènement Workbook_BeforeSave soit neutralisé provisoirement et n’empêche pas le bouton de Chaelie2015 de sauver son classeur.

Voilà, c’eusse fusse dit, et nous fîmes un peu d’air frais !

Et comme Staple1600, parfois on perd plus de temps à faire du "faux" blindage par VBA (car un utilisateur avancé et mal-intentionné aura toujours un moyen de trafiquer) qu'à expliquer clairement à l'utilsateur final ce qu'il doit faire pour l'utilisation correcte du classeur...

Bien @ vous
@+Thierry
 

jmfmarques

XLDnaute Accro
Merci _Thierry d'avoir ainsi tenté (j'espère avec succès) d'exposer à Marcel32 par d'autres mots que les miens ce que mes phrases exposaient de manière concise et technique. J'ai probablement une manière d'utiliser notre langue qui n'est pas celle de Marcel. L'un de nous deux devrait changer de vocabulaire et ce ne sera pas moi :)
 

Marcel32

XLDnaute Accro
@_Thierry : merci pour tes explications.

1) : je crois comprendre.
2) : je comprends bien puisqu'il m'est arrivé de procéder ainsi.
3) : je ne comprends toujours pas comment ça empêche la sauvegarde par menu. Mais ce n'est pas grave, je resterai sans avoir compris. ;)
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas