Comment désactiver le bouton enregistrer ou ctrl+S ?
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Cancel = True
End Sub
Boolean)
Cancel = True
End Sub
Jacques Chaussard,
Ajouté ou modifié le 15/05/2004 (N°1390)
Ajouté ou modifié le 15/05/2004 (N°1390)

Comment limiter les déplacements possibles pour un utilisateur à la plage B10-C12 d'une
feuille ?
Worksheets("Feuil1").ScrollArea = "B10:C12"
Papou, (N°1249)
J'aimerais laisser à l'utilisateur le choix du format des cellules non protégées d'une feuille
protégée. Comment faire?
Pour obtenir le résultat désiré copie cette procédure dans la feuille module de ta feuille de
travail. Pour ce faire, un clic droit sur l'onglet de ta feuille et
choisis dans le menu déroulant "visualiser le code"
---------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MaPlage As Range
Set MaPlage = Union(Range("A1:A10"), Range("C25"),
Range("D1:G25"))
If Not Intersect(MaPlage, Target) Is Nothing Then
ActiveSheet.Unprotect
Else
ActiveSheet.Protect
End If
End Sub
----------------------
Important: Pour ce faire tu dois définir l'ensemble des cellules ou plages de cellules où
l'usager peut intervenir. Tu as droit à 30 arguments et la ligne qui te permettra de le faire
est celle-ci :
Set MaPlage = Union(Range("A1:A10"), Range("C25"),
Range("D1:G25"))
à titre d'exemple : Range("A1:A10") est un argument. Chaque argument peut être une
plage de cellules ou cellules indépendantes ( Maximum 30 arguments).
Lorsque l'usager sélectionnera une de ces cellules, la feuille sera déprotégée, laissant
l'usager une entière liberté et dès qu'il clique sur une cellule non définie dans l'objet
"MaPlage" la feuille sera protégée à nouveau.
travail. Pour ce faire, un clic droit sur l'onglet de ta feuille et
choisis dans le menu déroulant "visualiser le code"
---------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MaPlage As Range
Set MaPlage = Union(Range("A1:A10"), Range("C25"),
Range("D1:G25"))
If Not Intersect(MaPlage, Target) Is Nothing Then
ActiveSheet.Unprotect
Else
ActiveSheet.Protect
End If
End Sub
----------------------
Important: Pour ce faire tu dois définir l'ensemble des cellules ou plages de cellules où
l'usager peut intervenir. Tu as droit à 30 arguments et la ligne qui te permettra de le faire
est celle-ci :
Set MaPlage = Union(Range("A1:A10"), Range("C25"),
Range("D1:G25"))
à titre d'exemple : Range("A1:A10") est un argument. Chaque argument peut être une
plage de cellules ou cellules indépendantes ( Maximum 30 arguments).
Lorsque l'usager sélectionnera une de ces cellules, la feuille sera déprotégée, laissant
l'usager une entière liberté et dès qu'il clique sur une cellule non définie dans l'objet
"MaPlage" la feuille sera protégée à nouveau.
Denis Michon, (N°1248)
Comment empêcher l'effacement d'un menu personnalisé dans la barre de menu ? Le verrouillage de
la feuille de calcul est inopérant.
Si tu veux qu'un menu à toi s'affiche et se masque seulement dans un classeur, ou même pire :
seulement sur une feuille, il va falloir procéder par étapes.
D'abord tu mets ton menu dans une barre d'outils personnalisée que tu auras tout spécialement
créée pour toi et tes éléments de menus. Disons que tu l'appelles la barre d'outils
"Zaza".
Ensuite tu vas chercher à ne l'afficher que quand tu actives une certaine feuille. Pour ça tu
vas dans VBA, tu 2 Clics sur la feuille en question (dans la petite fenêtre de l'explorateur de
projets), tu sélectionnes Worksheet dans la liste déroulante en haut à gauche.
Tu disposes d'une Sub WorksheetSelection_Change dont on se fiche éperdument, tu peux la virer.
Tu vas alors choisir dans la liste des événements, en haut à droite, l'événement Activate, puis
l'événement Deactivate. Là ça nous intéresse. Dedans tu copies le code
Application.CommandBars("Zaza").Visible = True 'dans la Activate
et Application.CommandBars("Zaza").Visible = False 'dans la Deactivate
Là tu auras ta barre d'outils affichée seulement lorsque tu actives la feuille que tu as
choisie.
Enfin (oui oui tout arrive), tu voulais empêcher qu'on puisse patouiller ton petit menu à toi.
Voilà comment tu pourrais bricoler ça.
Dans un module normal, tu copies et tu exécutes ça :
Sub MaZazaPerso()
Application.CommandBars("Zaza").Protection = msoBarNoCustomize
End Sub
Il te suffit de l'exécuter une seule fois, ça reste. Tu peux virer la sub ensuite. On ne pourra
plus enlever ou modifier des éléments dedans.
Au cas où tu voudrais le faire un jour, il te faudrait exécuter une sub
comme ça :
Sub PatouillerZaza()
Application.CommandBars("Zaza").Protection = msoBarNoProtection 'c'est risqué :-)
End Sub
seulement sur une feuille, il va falloir procéder par étapes.
D'abord tu mets ton menu dans une barre d'outils personnalisée que tu auras tout spécialement
créée pour toi et tes éléments de menus. Disons que tu l'appelles la barre d'outils
"Zaza".
Ensuite tu vas chercher à ne l'afficher que quand tu actives une certaine feuille. Pour ça tu
vas dans VBA, tu 2 Clics sur la feuille en question (dans la petite fenêtre de l'explorateur de
projets), tu sélectionnes Worksheet dans la liste déroulante en haut à gauche.
Tu disposes d'une Sub WorksheetSelection_Change dont on se fiche éperdument, tu peux la virer.
Tu vas alors choisir dans la liste des événements, en haut à droite, l'événement Activate, puis
l'événement Deactivate. Là ça nous intéresse. Dedans tu copies le code
Application.CommandBars("Zaza").Visible = True 'dans la Activate
et Application.CommandBars("Zaza").Visible = False 'dans la Deactivate
Là tu auras ta barre d'outils affichée seulement lorsque tu actives la feuille que tu as
choisie.
Enfin (oui oui tout arrive), tu voulais empêcher qu'on puisse patouiller ton petit menu à toi.
Voilà comment tu pourrais bricoler ça.
Dans un module normal, tu copies et tu exécutes ça :
Sub MaZazaPerso()
Application.CommandBars("Zaza").Protection = msoBarNoCustomize
End Sub
Il te suffit de l'exécuter une seule fois, ça reste. Tu peux virer la sub ensuite. On ne pourra
plus enlever ou modifier des éléments dedans.
Au cas où tu voudrais le faire un jour, il te faudrait exécuter une sub
comme ça :
Sub PatouillerZaza()
Application.CommandBars("Zaza").Protection = msoBarNoProtection 'c'est risqué :-)
End Sub
Catherine et Sainte Zaza, (N°1247)

Y-a-t-il une astuce pour désactiver toutes les touches de fonctions pour un classeur donné?
Sub Virer_Fx()
With Application
For i = 1 To 12
.OnKey "{F" & i & "}", ""
Next
End With
End Sub
Sub Rétab_Fx()
With Application
For i = 1 To 12
.OnKey "{F" & i & "}"
Next
End With
End Sub
Tu peux mettre la 1° dans le Workbook_Open et la 2° dans le Workbook_BeforeClose
With Application
For i = 1 To 12
.OnKey "{F" & i & "}", ""
Next
End With
End Sub
Sub Rétab_Fx()
With Application
For i = 1 To 12
.OnKey "{F" & i & "}"
Next
End With
End Sub
Tu peux mettre la 1° dans le Workbook_Open et la 2° dans le Workbook_BeforeClose
Alain Vallon, (N°1246)
Comment peut on désactiver les 3 icones (réduire, restaurer,fermer) ainsi que l'icone en haut à
gauche d'une application excel afin d'empêcher l'utilisateur de fermer Excel autrement que par
un bouton prévu à cet effet ?
Dans le module ThisWorkbook de l'application :
Private Declare Function
FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function
SetWindowLongA Lib "User32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim hwnd As Long
hwnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
End Sub
Private Sub Workbook_Open()
Dim hwnd As Long
hwnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hwnd, -16,
GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub
***********************************
Et pour choisir précisément ce sur quoi on veut agir...
Private Const MF_BYPOSITION As Long = &H400
Private Const mlNUM_SYS_MENU_ITEMS As Long = 9
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName _
As String) As Long
Public Sub DisableSystemMenu()
Dim lHandle As Long, lCount As Long
On Error Resume Next
lHandle = FindWindowA(vbNullString, Application.Caption)
If lHandle <> 0 Then
'désactive la croix de fermeture d'Excel
'et la commande Fermeture du menu système
DeleteMenu GetSystemMenu(lHandle, False), 6, &H400
'supprime le trait de séparation du menu système avant Fermeture
DeleteMenu GetSystemMenu(lHandle, False), 5, &H400
'supprime la commande Agrandissement du menu système
'et la commande Agrandir de la fenêtre
DeleteMenu GetSystemMenu(lHandle, False), 4, &H400
'supprime la commande Réduction du menu système
'et désactive la commande Réduire de la fenêtre
DeleteMenu GetSystemMenu(lHandle, False), 3, &H400
'désactive la commande Déplacement du menu système
DeleteMenu GetSystemMenu(lHandle, False), 2, &H400
'supprime la commande Déplacement du menu système
'et désactive la commande Dimension
DeleteMenu GetSystemMenu(lHandle, False), 1, &H400
'supprime la commande Restauration du menu système
'et désactive la commande Restaurer de la fenêtre
DeleteMenu GetSystemMenu(lHandle, False), 0, &H400
End If
End Sub
'rétablit le menu sytème et les commandes de fenêtre (Réduire, Agrandir, Fermer)
Public Sub EnableSystemMenu()
Dim lHandle As Long
On Error Resume Next
lHandle = FindWindowA(vbNullString, Application.Caption)
GetSystemMenu lHandle, True
End Sub
Private Declare Function
FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function
SetWindowLongA Lib "User32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim hwnd As Long
hwnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
End Sub
Private Sub Workbook_Open()
Dim hwnd As Long
hwnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hwnd, -16,
GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub
***********************************
Et pour choisir précisément ce sur quoi on veut agir...
Private Const MF_BYPOSITION As Long = &H400
Private Const mlNUM_SYS_MENU_ITEMS As Long = 9
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long
Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName _
As String) As Long
Public Sub DisableSystemMenu()
Dim lHandle As Long, lCount As Long
On Error Resume Next
lHandle = FindWindowA(vbNullString, Application.Caption)
If lHandle <> 0 Then
'désactive la croix de fermeture d'Excel
'et la commande Fermeture du menu système
DeleteMenu GetSystemMenu(lHandle, False), 6, &H400
'supprime le trait de séparation du menu système avant Fermeture
DeleteMenu GetSystemMenu(lHandle, False), 5, &H400
'supprime la commande Agrandissement du menu système
'et la commande Agrandir de la fenêtre
DeleteMenu GetSystemMenu(lHandle, False), 4, &H400
'supprime la commande Réduction du menu système
'et désactive la commande Réduire de la fenêtre
DeleteMenu GetSystemMenu(lHandle, False), 3, &H400
'désactive la commande Déplacement du menu système
DeleteMenu GetSystemMenu(lHandle, False), 2, &H400
'supprime la commande Déplacement du menu système
'et désactive la commande Dimension
DeleteMenu GetSystemMenu(lHandle, False), 1, &H400
'supprime la commande Restauration du menu système
'et désactive la commande Restaurer de la fenêtre
DeleteMenu GetSystemMenu(lHandle, False), 0, &H400
End If
End Sub
'rétablit le menu sytème et les commandes de fenêtre (Réduire, Agrandir, Fermer)
Public Sub EnableSystemMenu()
Dim lHandle As Long
On Error Resume Next
lHandle = FindWindowA(vbNullString, Application.Caption)
GetSystemMenu lHandle, True
End Sub
Laurent Longre, Vasant Nanavati, Andrew Baker, Frédéric Sigonneau, (N°1245)
Je souhaite protéger les cellules d'une feuille Excel afin que l'on puisse modifier la valeur
de la cellule mais pas son format. Pour cela dans Format / Cellule / Onglet Protection, je
décoche Vérrouillée et Masquée, puis je protège la feuille. Ca fonctionnerait bien si ce n'est
qu'Excel accepte le copier-coller d'une cellule de la feuille (ou d'un autre classeur) sur la
cellule vérrouillée et que le format est alors écrasé par le format de la cellule copiée. Y'a
t'il un moyen de résoudre ce problème (empêcher le copier-coller par exemple) ?
Méthode radicale pour interdire le copier/coller (peut s'affiner en jouant sur les paramètres Target et Sh) :
dans le module ThisWorkbook de ton classeur
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Range)
Application.CutCopyMode = False
End Sub
dans le module ThisWorkbook de ton classeur
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Range)
Application.CutCopyMode = False
End Sub
Frédéric Sigonneau, (N°1244)
Comment condamner le clic droit en vba ?
Dans le module ThisWorkbook du classeur où tu veux désactiver le clic droit, copie cette
procédure :
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
Les clics droits dans la feuille de calcul, entêtes de lignes et de colonnes seront sans effet.
En revanche le clic droit sur un onglet ou les barres d'outils ne sera pas inhibé.
procédure :
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
Les clics droits dans la feuille de calcul, entêtes de lignes et de colonnes seront sans effet.
En revanche le clic droit sur un onglet ou les barres d'outils ne sera pas inhibé.
Frédéric Sigonneau, (N°1243)
Peut-on supprimer (rendre invisible) le message standard qui apparaît lorsque une feuille est
protégée et que l'on veut écrire dans une cellule verrouillée
Tu as la possibilité de n'autoriser à être saisies que les cellules non protégées. En allant
dans l'éditeur vba (Alt+F11) dans les propriétés des feuilles, tu as la propriété
EnableSelection.
En sélectionnant la feuille concernée dans affichage explorateur de projet, si tu mets cette
propriété sur "UnlockedCells" à cette feuill, lorsque ta feuille est protégée, il
sera impossible de cliquer dans une cellule protégée. Seules seront accessibles les non
protégées. Tu obtiendras le résultat voulu, pas de message.
dans l'éditeur vba (Alt+F11) dans les propriétés des feuilles, tu as la propriété
EnableSelection.
En sélectionnant la feuille concernée dans affichage explorateur de projet, si tu mets cette
propriété sur "UnlockedCells" à cette feuill, lorsque ta feuille est protégée, il
sera impossible de cliquer dans une cellule protégée. Seules seront accessibles les non
protégées. Tu obtiendras le résultat voulu, pas de message.
Laurent Daures, (N°1242)
Comment faire pour mettre un bouton Macro dans un classeur? Si il y a plusieurs feuilles
faut-il le mettre sur chaque feuille? Si je copie la feuille, est-ce que ça copie le bouton??
Si le bouton Macro doit déclencher la même procédure pour chaque feuille de
ton classeur, une icône attachée à une barre d'outil personnalisée et associée à ton
code serait sans doute plus commode.
La B.O. restera en effet visible pour toutes les feuilles existantes ou
nouvelles de ton classeur.
OUI MAIS...
Si je le met dans la barre outil, il sera present sur toutes les feuilles de mon
classeur mais également sur tous les classeurs que j'ouvrirais sur ce PC (et je
devrais en créer un autre si je veux changer de PC)!
La est mon probleme car suivant le classeur j'ai des macros differentes. En
revanche pour chaque feuille d'un meme classeur j'ai les memes!
Pourtant, je pense aussi qu'une barre d'outils personnalisée serait une bonne
solution à ton problème. Pour tenir compte de toutes tes contraintes, on peut
créer et gérer l'affichage d'une barre d'outils par programmation et obtenir
exactement ce que tu souhaites.
Marche à suivre :
Dans un module standard du classeur qui doit utiliser la barre d'outils, tu
écris une procédure pour créer la barre d'outils, avec le nombre de boutons
correspondant au nombre de macros à lancer. L'attribution d'une macro à un
bouton s'effectue en affectant le nom de la macro à la propriété OnAction du
bouton. Puis tu écris une procédure pour détruire la barre d'outils.
Par exemple, pour créer et détruire une barre d'outils avec deux boutons qui
lancent les macros Macro1 et Macro2 :
'=========dans un module standard
Public Const nomBO = "MaBarreOutils"
Sub CreateBO()
Dim bo As CommandBar
On Error Resume Next
DeleteBO 'en cas de plantage d'Excel :-)
Set bo = Application.CommandBars.Add(nomBO)
With bo.Controls.Add(msoControlButton)
.Caption = "LanceMacro1"
.FaceId = 232
.OnAction = "Macro1"
End With
With bo.Controls.Add(msoControlButton)
.Caption = "LanceMacro2"
.FaceId = 348
.OnAction = "Macro2"
End With
bo.Visible = True
End Sub
Sub DeleteBO()
On Error Resume Next
Application.CommandBars(nomBO).Delete
End Sub
'================================
Le plus difficile est fait ! Il ne reste plus qu'à appeler ces deux procédures à
l'ouverture du classeur (pour créer la barre d'outils) et à la fermeture (pour
la détruire), et à la rendre visible ou invisible selon que le classeur est
actif ou non, en utilisant les événements du module ThisWorkbook du classeur.
Ceci afin d'éviter les inconvénients que tu décris. Ça donne ceci, avec la barre
d'outils créée plus haut :
'=====dans le module ThisWorkbook du classeur
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DeleteBO
End Sub
Private Sub Workbook_Open()
CreateBO
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.CommandBars(nomBO).Visible = True
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CommandBars(nomBO).Visible = False
End Sub
'=================================
Avec cette méthode, pas de problème non plus pour utiliser ton classeur et ses
macros sur un autre PC...
ton classeur, une icône attachée à une barre d'outil personnalisée et associée à ton
code serait sans doute plus commode.
La B.O. restera en effet visible pour toutes les feuilles existantes ou
nouvelles de ton classeur.
OUI MAIS...
Si je le met dans la barre outil, il sera present sur toutes les feuilles de mon
classeur mais également sur tous les classeurs que j'ouvrirais sur ce PC (et je
devrais en créer un autre si je veux changer de PC)!
La est mon probleme car suivant le classeur j'ai des macros differentes. En
revanche pour chaque feuille d'un meme classeur j'ai les memes!
Pourtant, je pense aussi qu'une barre d'outils personnalisée serait une bonne
solution à ton problème. Pour tenir compte de toutes tes contraintes, on peut
créer et gérer l'affichage d'une barre d'outils par programmation et obtenir
exactement ce que tu souhaites.
Marche à suivre :
Dans un module standard du classeur qui doit utiliser la barre d'outils, tu
écris une procédure pour créer la barre d'outils, avec le nombre de boutons
correspondant au nombre de macros à lancer. L'attribution d'une macro à un
bouton s'effectue en affectant le nom de la macro à la propriété OnAction du
bouton. Puis tu écris une procédure pour détruire la barre d'outils.
Par exemple, pour créer et détruire une barre d'outils avec deux boutons qui
lancent les macros Macro1 et Macro2 :
'=========dans un module standard
Public Const nomBO = "MaBarreOutils"
Sub CreateBO()
Dim bo As CommandBar
On Error Resume Next
DeleteBO 'en cas de plantage d'Excel :-)
Set bo = Application.CommandBars.Add(nomBO)
With bo.Controls.Add(msoControlButton)
.Caption = "LanceMacro1"
.FaceId = 232
.OnAction = "Macro1"
End With
With bo.Controls.Add(msoControlButton)
.Caption = "LanceMacro2"
.FaceId = 348
.OnAction = "Macro2"
End With
bo.Visible = True
End Sub
Sub DeleteBO()
On Error Resume Next
Application.CommandBars(nomBO).Delete
End Sub
'================================
Le plus difficile est fait ! Il ne reste plus qu'à appeler ces deux procédures à
l'ouverture du classeur (pour créer la barre d'outils) et à la fermeture (pour
la détruire), et à la rendre visible ou invisible selon que le classeur est
actif ou non, en utilisant les événements du module ThisWorkbook du classeur.
Ceci afin d'éviter les inconvénients que tu décris. Ça donne ceci, avec la barre
d'outils créée plus haut :
'=====dans le module ThisWorkbook du classeur
Private Sub Workbook_BeforeClose(Cancel As Boolean)
DeleteBO
End Sub
Private Sub Workbook_Open()
CreateBO
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.CommandBars(nomBO).Visible = True
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CommandBars(nomBO).Visible = False
End Sub
'=================================
Avec cette méthode, pas de problème non plus pour utiliser ton classeur et ses
macros sur un autre PC...
ChrisV, (N°1241)

Comment empêcher qu'une personne imprime ou sauvegarde un fichier ?
Insère ce code dans ThisWorkbook :
Private Sub Workbook_BeforePrint(Cancel As
Boolean)
Cancel = True
End Sub
Private Sub Workbook_BeforeSave(ByVal
SaveAsUI As Boolean, Cancel As
Boolean)
Cancel = True
End Sub
En mettant
Cancel à true, tu annules l'impression et la sauvegarde du classeur
Private Sub Workbook_BeforePrint(Cancel As
Boolean)
Cancel = True
End Sub
Private Sub Workbook_BeforeSave(ByVal
SaveAsUI As Boolean, Cancel As
Boolean)
Cancel = True
End Sub
En mettant
Cancel à true, tu annules l'impression et la sauvegarde du classeur
...Patrick MacKay, (N°1240)
Comment désactiver la combinaison de touche AltF8 pour empêcher l'accès aux macros ?
Application.OnKey "%{F8}", ""
Papou, (N°1239)
Comment "verrouiller" les barres d'outils : autrement dit, empêcher que l'on puisse
en ajouter ou en retirer.
Tu peux utiliser cela :
Sub PROTECTION_BARRES()
For i = 1 To
CommandBars.Count
CommandBars(i).Protection = msoBarNoChangeVisible +
msoBarNoCustomize + msoBarNoMove
On Error Resume Next
Next
End Sub
Pour retablir :
Sub RETABLIR()
For i = 1 To CommandBars.Count
CommandBars(i).Protection = msoBarNoProtection
On Error Resume Next
Next
End Sub
Sub PROTECTION_BARRES()
For i = 1 To
CommandBars.Count
CommandBars(i).Protection = msoBarNoChangeVisible +
msoBarNoCustomize + msoBarNoMove
On Error Resume Next
Next
End Sub
Pour retablir :
Sub RETABLIR()
For i = 1 To CommandBars.Count
CommandBars(i).Protection = msoBarNoProtection
On Error Resume Next
Next
End Sub
Beabou, (N°1238)