Comment desactiver "enregistrer sous"

dss

XLDnaute Occasionnel
Bonjour le forum,

J'ai une procedure qui se termine de la manière suivante :

' Tri des données sur 3 colonnes
Range("A1:M65000").Sort key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("E1"), _
Order2:=xlAscending, key3:=Range("F1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="toto"

' Réactive les évènements dans le classeur
Application.EnableEvents = True
'Enregistre le classeur
ActiveWorkbook.Save
End If

Pour eviter qu'un utilisateur puisse faire par inadvertance une copie du fichier, je voudrais désactiver l'option "ENREGISTER SOUS" pour garantir la fiabilité du fichier (tout en conservant bien sur ActiveWorkbook.save qui a deja pour fonction d'enregistrer les modifications de fichier).

J'ai cherché dans le forum, "peut-être mal", et je n'ai rien trouvé a ce sujet.

Si un ou plusieurs d'entre vous ont déjà resolu cette difficulté (pour moi), merci de venir à mon aide.

Cordialement

dss
 

news

XLDnaute Impliqué
Re : Comment desactiver "enregistrer sous"

Bonjour à tous du forum,

pour éviter de faire une copie, pas si évident,

déjà sous Explorer on peut faire simplement une copie d'un fichier,
sauf si le fichier ne peut être ouvert qu'avec un mot de passe,

pour ne pas afficher la barre de menu "Fichier" il faut l'enlever,
mais si une autre barre de menu existe, p.ex. barre de menu "standard" alors on peut de nouveau ajouter toutes les barres qu'on veut ou des barres personalisées,
pour éviter ceci aucune barre de menu doit être affichée,

Code:
[COLOR="Green"]'supprimer toutes les barres de menus[/COLOR]

Sub Cache_Barre_Outils()
Dim CmdB As CommandBar
    For Each CmdB In Application.CommandBars
    CmdB.Enabled = False
    Next CmdB
    With ActiveWindow
        .DisplayHorizontalScrollBar = False
        .DisplayHeadings = False
        .DisplayWorkbookTabs = False
    End With
    Application.DisplayFormulaBar = False
    Application.DisplayStatusBar = False

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Comment desactiver "enregistrer sous"

Bonjour Dss, News

@News
attention avec ce genre de code, mal controlé et l'application n'a plus aucune barres d'outils, même à la ré ouverture d'EXCEL, surtout si tu ne les remet pas à TRUE à la fermenure du classeur. Ce n'est pas le genre de code qu'il faut donner sans une mise en garde pour le débutant qui executerait ta macro. Voir sur ce forum les multiples post ou des utilisateurs n'arrivaient plus à réinitialiser leurs barres d'outils.

bonne journée
@+
 

news

XLDnaute Impliqué
Re : Comment desactiver "enregistrer sous"

Re Pierrot93,

c'est juste mieux y ajouter lors fermeture fichier que sont affichées toutes les barres outils,
y mettre ce code sous VBA, sous This Workbook:

Code:
Option Explicit
[COLOR="green"]'afficher toutes les barres de menus[/COLOR]

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim CmdB As CommandBar
    For Each CmdB In Application.CommandBars
    CmdB.Enabled = [B]True [/B]    [COLOR="Green"]'va afficher toutes les barres de menus[/COLOR]    Next CmdB
    With ActiveWindow
        .DisplayHorizontalScrollBar = False
        .DisplayHeadings = False
        .DisplayWorkbookTabs = False
    End With
    Application.DisplayFormulaBar = False
    Application.DisplayStatusBar = False

End Sub
 
Dernière édition:

dss

XLDnaute Occasionnel
Re : Comment desactiver "enregistrer sous"

Bonjour News et pierrot,

Tout d'abord, merci de votre aide.

Je viens de tester et ca ne marche pas : j'ai oublie de vous preciser que j'ai une feuille sous Worksheet Change:

Private Sub Worksheet_Change(ByVal Target As Range)

qui se termine ainsi :

' Tri des données sur 3 colonnes
Range("A1:M65000").Sort key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("E1"), _
Order2:=xlAscending, key3:=Range("F1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="xxxx"

' Réactive les évènements dans le classeur
Application.EnableEvents = True
'Enregistre le classeur
ActiveWorkbook.Save
End If
End Sub

Et le classeur This workbook :

Private Sub Workbook_Open()
Dim x As Range
With Sheets("Reservation")
.Activate
Set x = .Range("D:D").Find(Date, , xlValues, xlWhole, , , False)
End With
If Not x Is Nothing Then x.Select: ActiveWindow.ScrollRow = x.Row
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim CmdB As CommandBar
For Each CmdB In Application.CommandBars
CmdB.Enabled = True 'va afficher toutes les barres de menus
Next CmdB
With ActiveWindow
.DisplayHorizontalScrollBar = False
.DisplayHeadings = False
.DisplayWorkbookTabs = False
End With
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False

End Sub

Je crois avoir suivi tes explications : y-a-t-il interaction entre la feuille et le classeur ?

A bientôt de vous lire

Cordialement

dss
 

MJ13

XLDnaute Barbatruc
Re : Comment desactiver "enregistrer sous"

Bonjour à tous,

Pour désactiver le menu, je ne sais pas mais on peut faire un enregistrer sous avec la touche F12.

Voici un code à placer dans l'évènement Workbook_open pour désactiver la touche F12.

Code:
Private Sub Workbook_Open()
Application.OnKey "{F12}", "Macro1"
End Sub
avec la macro1 à placer dans un module standard qui dit bonjour:
Code:
Sub Macro1()
    MsgBox ("bonjour")
  
End Sub
 

tirex28

XLDnaute Occasionnel
Re : Comment desactiver "enregistrer sous"

Bonjour,

Sans toucher les barres d'outils et en inhibant F12:

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
                                    Cancel As Boolean)
    If SaveAsUI Then Cancel = True
End Sub


Cordialement,

Tirex28/
 

dss

XLDnaute Occasionnel
Re : Comment desactiver "enregistrer sous"

Bonjour le forum,bonjour Tirex28,

La solution que tu me proposes convient parfaitement à mes besoins et je t'en remercie cordialement.

La seule chose que je souhaiterais, c'est mettre une msgbox pour dire que la copie est impossible.
J'ai essayé mais le message apparait aussi avec "enregistrer" et désactive la fonction, ce qui ne me convient pas alors que je voudrais ce message seulement avec "Enregistrer sous".

Cordialement

dss
 

Pierrot93

XLDnaute Barbatruc
Re : Comment desactiver "enregistrer sous"

Re, bonjour Michel, Tirex

essaye comme ci dessous :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then MsgBox "interdit": Cancel = True
End Sub

bon après midi
@+
 

news

XLDnaute Impliqué
Re : Comment desactiver "enregistrer sous"

Bonjour à tous du forum,

Re: dss, tirex28, Pierrot93
comme j'ai déjà indiqué que c'est pas si évident pour éviter de copier ou enregistrer sous,

le code suivant fonctionne bien et est mieux que de supprimer toutes les menusbar

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then MsgBox "interdit": Cancel = True
'If SaveAsUI Then Cancel = True

End Sub

Mais en créant une macro avec avec le code suivant
et en y ajoutant à la macro un raccourci ( p.ex. Ctrl-e ) :

Sub activate_save_as()
On Error Resume Next
ActiveWorkbook.SaveAs "As_this_file_saved"
End Sub

même on supprimant toutes les menu bar,
on peut quand même enregistrer le fichier sous un autre nom ou répertoire,
en clickant CTRL+e
 
Dernière édition:

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Comment desactiver "enregistrer sous"

Bonjour

tout dépend ce que tu veux

La solution

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then MsgBox "interdit": Cancel = True
End Sub

est suffisante dans 99% des cas

Ensuite si des petits malins veulent vraiment enregistrer ton fichier quoi que tu fasses ils y arriveront. Donc faut-il vraiment aller plus loin ?? ou se satisfaire de ce qui suffira pour un utilisateur lambda ??
 

Magic_Doctor

XLDnaute Barbatruc
Re : Comment desactiver "enregistrer sous"

Bonjour dds,

Essaie cette routine de Ti. À placer dans le module de "ThisWorkbook".

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
With ThisWorkbook
.Close
End With
Application.DisplayAlerts = True
End Sub
 

Statistiques des forums

Discussions
312 331
Messages
2 087 360
Membres
103 529
dernier inscrit
moket07