Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Empêcher l'ouverture d'un classeur si les macros sont désactivées ?

6 réponses
Avatar
Pier
Bonjour,

J'ai crée (merci Marc !) un classeur qui contient des macros et qui est
utilisé par plusieurs collègues dans mon administration.

Ce classeur contient un code au lancement qui empeche les sauvegardes
sans mot de passe (merci Jean Francois !) :

Voici le code :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim rep
rep = InputBox("Saisir le M de P", "Seulement le chef peut sauvegarder
!")
If rep <> "MonMotDePasse" Then
cancel = True
Else
Cancel = False
End If
End Sub


A l'ouverture du classeur, un message systeme previent les utilisateurs
et propose de "désactiver les macros" ou d' "activer les macros".
Si un utilisateur choisit "Désactiver les macros", de fait il ouvre le
classeur et peut alors faire une sauvegarde du classeur.
Alors que mon but est d'empêcher les utilisateurs de faire une sauvegarde !

Quel moyen existe-t-il pour que le fichier ne puisse être ouvert s'il a
choisit de "Désactiver les macros" ?

Merci pour votre aide.

Pierre

6 réponses

Avatar
Patrick BASTARD
Bonjour, *Pier*

Quel moyen existe-t-il pour que le fichier ne puisse être ouvert s'il
a choisit de "Désactiver les macros" ?


Tu masques avec XLVeryHidden toutes les feuilles de ton classeur à la
fermeture (beforeclose) sauf une, sur laquelle tu mets un joli message.

Tu affiches les autres feuilles par macro à l'ouverture (workbookopen), et
masques la feuille (toujours xlveryhidden)contenant ton joli message.

Si les macros sont désactivées, seule la feuille avec le joli message
apparaitra lors de l'ouverture.
Si elles sont activées, le joli message sera caché, et les autres feuilles
seront disponibles.

Et voilou.

Cela te convient-il?


--
Bien amicordialement,
P. Bastard

Avatar
Youky
Salut, à l'enregistrement on masque les onglets sauf Feuil1 ou tu peux
écrire en gros "désolé"
rajoute une page ,remplace Feuil1 par le codename de cette nouvelle page
Youky

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
For k = 1 To Sheets.Count
If Sheets(k).CodeName <> "Feuil1" Then
Sheets(k).Visible = 2
End If
Next
End Sub
'en ouvertture on démasque par macro,si pas activé....... rien
Private Sub Workbook_Open()
For k = 1 To Sheets.Count
Sheets(k).Visible = True
Next
End Sub

"Pier" a écrit dans le message de news:
44ab68dc$0$10660$
Bonjour,

J'ai crée (merci Marc !) un classeur qui contient des macros et qui est
utilisé par plusieurs collègues dans mon administration.

Ce classeur contient un code au lancement qui empeche les sauvegardes sans
mot de passe (merci Jean Francois !) :

Voici le code :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim rep
rep = InputBox("Saisir le M de P", "Seulement le chef peut sauvegarder
!")
If rep <> "MonMotDePasse" Then
cancel = True
Else
Cancel = False
End If
End Sub


A l'ouverture du classeur, un message systeme previent les utilisateurs et
propose de "désactiver les macros" ou d' "activer les macros".
Si un utilisateur choisit "Désactiver les macros", de fait il ouvre le
classeur et peut alors faire une sauvegarde du classeur.
Alors que mon but est d'empêcher les utilisateurs de faire une sauvegarde
!

Quel moyen existe-t-il pour que le fichier ne puisse être ouvert s'il a
choisit de "Désactiver les macros" ?

Merci pour votre aide.

Pierre


Avatar
Pier

Salut, à l'enregistrement on masque les onglets sauf Feuil1 ou tu peux
écrire en gros "désolé"
rajoute une page ,remplace Feuil1 par le codename de cette nouvelle page
Youky

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
For k = 1 To Sheets.Count
If Sheets(k).CodeName <> "Feuil1" Then
Sheets(k).Visible = 2
End If
Next
End Sub
'en ouvertture on démasque par macro,si pas activé....... rien
Private Sub Workbook_Open()
For k = 1 To Sheets.Count
Sheets(k).Visible = True
Next
End Sub



Merci pour ta réponse Youky.
J'ai essayé ce que tu proposes et cela ne fonctionne pas.
Je comprends pas pourquoi ???
Peux-tu voir ce qui ne va pas dans mon classeur :
http://cjoint.com/?hfuHC0LfFN

Cordialement.
Pierre

Avatar
Pier
Tu masques avec XLVeryHidden toutes les feuilles de ton classeur à la
fermeture (beforeclose) sauf une, sur laquelle tu mets un joli message.



Bonsoir Patrick !
Je suis incapable de créer le code qui fait cela

Tu affiches les autres feuilles par macro à l'ouverture (workbookopen), et
masques la feuille (toujours xlveryhidden)contenant ton joli message.


Pareil !

Si les macros sont désactivées, seule la feuille avec le joli message
apparaitra lors de l'ouverture.
Si elles sont activées, le joli message sera caché, et les autres feuilles
seront disponibles.
Et voilou.
Cela te convient-il?


Oui je comprends le principe et cela me convient mais je suis débutant
et je ne sais pas créer le code pour faire ce que tu me proposes.

Merci pour ton aide.

Pierre


Avatar
Patrick BASTARD
Bonjour, *Pier*


Merci pour ta réponse Youky.
J'ai essayé ce que tu proposes et cela ne fonctionne pas.
Je comprends pas pourquoi ???
Peux-tu voir ce qui ne va pas dans mon classeur :
http://cjoint.com/?hfuHC0LfFN


1° le code doit être placé dans ThisWorkBook, puisque Open et BeforeSave
concernent le classeur, et non pas uniquement la Feuille 4

2° Pas de retour intempestif :
le nom de la 1° macro s'affiche en rouge parce que tu as effectué un retour
chariot en fin de première ligne.


--
Bien amicordialement,
P. Bastard

Avatar
Patrick BASTARD
Bonjour, *Pier*

Vois ton fichier ici :

http://cjoint.com/?hfvk23w87b


--
Bien amicordialement,
P. Bastard


Salut, à l'enregistrement on masque les onglets sauf Feuil1 ou tu
peux écrire en gros "désolé"
rajoute une page ,remplace Feuil1 par le codename de cette nouvelle
page Youky

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
For k = 1 To Sheets.Count
If Sheets(k).CodeName <> "Feuil1" Then
Sheets(k).Visible = 2
End If
Next
End Sub
'en ouvertture on démasque par macro,si pas activé....... rien
Private Sub Workbook_Open()
For k = 1 To Sheets.Count
Sheets(k).Visible = True
Next
End Sub



Merci pour ta réponse Youky.
J'ai essayé ce que tu proposes et cela ne fonctionne pas.
Je comprends pas pourquoi ???
Peux-tu voir ce qui ne va pas dans mon classeur :
http://cjoint.com/?hfuHC0LfFN

Cordialement.
Pierre