Bloquer puis restaurer les barres d'outils et menus d'excel

Comment faire une macro vba qui retire les barres d'outils et en bloque la création, retire les onglets, retire les menus en les remplacant par un menu du genre Fichier - Quitter uniquement Puis sur un control x et une demande de mot de passe, restaure les barres et les menus à leurs place.

Ce module peut être utilisé pour sauvegarder l'environnement de l'utilisateur (barres d'outils, fichiers ouverts, état d'un certain nombre d'options) à l'ouverture d'un classeur qui a besoin d'un environnement spécifique et le restaurer à la fermeture.
L'utilisation de ce module ne nécessite que deux appels dans le classeur qui doit créer son propre environnement :
- dans l'événement Workbook_Open --> appeler la procédure Ouverture
- dans l'événement Workbook_BeforeClose --> la procédure Fermeture
La procédure "Ouverture" :
- stocke dans des tableaux les barres d'outils visibles, les fichiers ouverts et l'état actuel de ces options : affichage de la barre de formules, du mode plein écran, des barres de défilement, de la barre d'état, du quadrillage, des entêtes de colonnes et de lignes, des onglets du classeur (InitTablos)
- cache toutes les barres d'outils et la barre de menu d'Excel, ferme les fichiers ouverts en les enregistrant, met sur Faux toutes les options. Ce sont les procédures : MenuEtBO, Classeurs_Ouverts et Desactive_Options qui se chargent de ce travail. Elles sont à adapter aux besoins de l'environnement spécifique à créer.
La procédure "Fermeture" :
- rétablit les barres d'outils et la barre de menu d'Excel, rouvre les fichiers, restaure l'état des options à l'ouverture
Conseil qui peut être utile pour la mise au point d'un classeur pourvu d'un environnement spécifique : avoir en permanence une sauvegarde à jour du fichier des barres d'outils de l'environnement "normal" (C:\WINDOWS\Application Data\Microsoft\Excel\Excel.xlb pour Excel 2000)

 Public tabBO(), tabFiles(), tabOptions()    'A appeler dans Workbook_Open (module ThisWorkbook
sub Ouverture()
  Application.ScreenUpdating = False
  InitTablos
  MenuEtBO False
  Classeurs_Ouverts False
  Desactive_Options
 end sub

' A appeler dans Workbook_BeforeClose (module ThisWorkbook) ' Il est déconseillé d'oublier cet appel :-))

sub Fermeture()
  Application.ScreenUpdating = False
 
 MenuEtBO True
  Classeurs_Ouverts True
  Retablit_Options
 
 ThisWorkbook.Saved = True
 end sub

'Initialise les tableaux globaux

sub InitTablos()
  BO_Visibles
  Etat_Options
  Files_Opened
 end sub

' Tableau des barres d'outils visibles de l'utilisateur

sub BO_Visibles()
 Dim i%, BO As CommandBar
  i = 0
 For Each BO In Application.CommandBars
   If BO.Visible Then
    ReDim Preserve tabBO(i)
    tabBO(i) = BO.Name
 
 i = i + 1
   End If
  Next BO
 end sub

' Montre ou cache les barres d'outils de l'environnement utilisateur

sub MenuEtBO(OnOff As Boolean)
 Dim i%
 
 Application.CommandBars(tabBO(0)).Enabled = OnOff
  For i = 1 To UBound(tabBO)
  Application.CommandBars(tabBO(i)).Visible = OnOff
  Next
 
 end sub

' Tableau des options dans l'environnement utilisateur

sub
 Etat_Options()
  ReDim tabOptions(6)
  With Application
   tabOptions(0) =
 .DisplayFormulaBar
   tabOptions(1) = .DisplayFullScreen
   tabOptions(2) =
 .DisplayScrollBars
   tabOptions(3) = .DisplayStatusBar
  End With
  With
 ActiveWindow
   tabOptions(4) = .DisplayGridlines
   tabOptions(5) =
 .DisplayHeadings
   tabOptions(6) = .DisplayWorkbookTabs
  End With
 end sub

' Désactive toutes les options (à adapter selon besoins ' de l'environnement spécifique à créer)

sub Desactive_Options()
  With Application
 
 .DisplayFormulaBar = False
   .DisplayFullScreen = False
 
 .DisplayScrollBars = False
   .DisplayStatusBar = False
  End With
  With
 ActiveWindow
   .DisplayGridlines = False
   .DisplayHeadings = False
 
 .DisplayWorkbookTabs = False
  End With
 end sub

' Rétablit les options de l'environnement utilisateur

sub Retablit_Options()
  With Application
 
 .DisplayFormulaBar = tabOptions(0)
   .DisplayFullScreen = tabOptions(1)
 
 .DisplayScrollBars = tabOptions(2)
   .DisplayStatusBar = tabOptions(3)
  End With
  With ActiveWindow
   .DisplayGridlines = tabOptions(4)
 
 .DisplayHeadings = tabOptions(5)
   .DisplayWorkbookTabs = tabOptions(6)
 
 End With
 end sub

' Tableau des classeurs ouverts

sub Files_Opened()
 Dim i%, Fich As Workbook
  i = 0
  For Each Fich In Workbooks
   ReDim Preserve
 tabFiles(1, i)
   If Not UCase(Fich.Name) = "PERSO.XLS" And _
    Not Fich.Name = ThisWorkbook.Name And _
      Not Fich.Path = ""
 Then
    tabFiles(0, i) = Fich.FullName
    tabFiles(1, i) = Fich.Name
 
  i = i + 1
   End If
  Next Fich
 end sub

' Rouvre ou ferme les classeurs de l'environnement utilisateur

sub Classeurs_Ouverts(OnOff As Boolean)
 Dim i%
  On Error Resume Next
  For i = 0 To UBound(tabFiles, 2)
 
 Select Case OnOff
    Case True
     Workbooks.Open tabFiles(0, i)
 
 Case False
   Workbooks(tabFiles(1, i)).Close True
   End Select
 
 Next
 end sub

Fichier recommandé +++ à ceux qui font des jeux qui bidouillent les paramètres d'excel !...
Astuce illustrée par ce classeur
fs-excelstate

Auteur :

Mots clefs associés à cette page : , , , , , , ,

Plantage VBA sur ces macros

J'obtiens un plantage sur la procédure MenuetBO().

Pas de souci lorsqu'elle est appelée par Ouverture() : les menus et les barres d'outils sont bien fermés/masqués...

Par contre, lorsqu'elle est appelée par Fermeture(), j'ai un problème d'index, ou d'argument, dans l'instruction Application.CommandBars(tabBO(i)).Visible = OnOff.

Arf... bonjour après pour rétablir et retrouver mes menus et mes barres d'outils...

Une idée du problème ?

Merci d'avance

Némésis21

Un peu d'aide

Bonjour,

J'essaie de créer un jeux sous vba ou j'ai besoin de cacher les barres d'outil en toute securité. Cependant, je n'y parvient pas. J'obtiens des message d'erreur comme le tien. Existe t'il un exemple de classeur ou peut observer ces macros. Même en essayer d'inclure le code que l'on trouve sur le site, je tourne malheureusement en rond...

Merci pour votre aide

Alexandre

forum

Bonjour
La question est trop vaste pour recevoir une réponse adaptée ici. Excelabo n'est PAS un forum de discussion. Je te conseille d'aller poser ta question, avec un classeur exemple sur excel downloads par exemple ou sur le forum microsoft answers excel.
Attention à ce que tu veux faire : les menus sont gérés de façon complètement différente entre les versions d'excel <=2003 et 2007 et +. Faire un classeur avec des menus cachés qui tourne sous les deux environnements est un travail qui risque d'être fort compliqué...

Misange

fichier exemple

As tu essayé le classeur exemple ? 

Misange