Vous êtes sur la page 1sur 15

### Suppression des menus et boîtes d'outils

Vous décidez de mettre de l'ordre dans vos CD de musique. Il s'agit de créer un programme de gestion de CD…

Vous avez à disposition un fichier qui se nomme Gestion CD 01 (état brut).xls. Ce fichier contient plusieurs feuilles d

Compositeurs (nom, prénom, année de naissance, année de décès, type de musique, remarques)
Instrumentation (chœur, chœur et orchsetre, violon solo, clavecin etc.)
Interprétation
Type de musique (baroque, impressioniste, Renaissance, etc.)
Appréciation (excellent, bon, médiocre, etc.)
Opera Omnia (regroupe toutes les informations ci-dessus, pour affichage ou pour impression)

Logo et image de fond


Ne négligez pas l'importance de l'adjonction d'images ou d'une image de fond sur votre feuille de garde. C'est moins c
partant, plus plaisant à l'œil. Ne vous encombrez toutefois pas de ce que nous appelons les images "Mickey" qui nous
d'Outre-Atlantique. Franchement, on les a vu et revu ! Merci !
Cherchez des images de fond de votre choix sur Internet !

Suppression des menus et des boîtes d'outils


La suppression des menus et des boîtes de dialogue doit se faire uniquement pour ce fichier, dès son ouverture.
Vous allez donc supprimer ces objets mais il serait forcément très mal poli de ne pas se souvenir de la configuration ex
d'ouvrir ce fichier, de telle façon que vous puissiez à nouveau remettre l'utilisation dans son environnement habituel qu
avant le lancement de votre fichier.

Vu que la suppression de la ligne de menu ainsi que des barres d'outils doit se faire lors de l'initialisation du classeur, v
d'écrire le code dans la procédure Workbook_Open() de la feuille ThisWorkbook.

Mais vu que vous ne connaissez pas bien le langage (du moins, nous le supposons), vous allez saisir une nouvelle ma
tout simplement a afin de pouvoir la lancer plus rapidement. Dans cette macro, vous allez désactiver les boîtes à outils
la ligne d'édition ou barre de formule ainsi que la barre d'état, les onglets, les barres de défilement et faire un affichage

Puis, vous vous rendez dans le code VBA (Alt-F11), et vous inspéctez le code "pondu" par VBA dans le module nouve
qui devrait s'appeler Module1. Après avoir enlevé les commentaires automatiques, vous devriez obtenir environ le cod

La propriété Visible

o Sub a()
o Application.CommandBars("Standard").Visible = False
o Application.CommandBars("Formatting").Visible = False
o Application.CommandBars("Worksheet Menu Bar").Visible = False
o With ActiveWindow
o .DisplayHorizontalScrollBar = False
o .DisplayVerticalScrollBar = False
o .DisplayWorkbookTabs = False
o .DisplayGridlines = False
o .DisplayHeadings = False
o End With
o Application.DisplayFullScreen = True
o End Sub

Toutefois, une chose devrait vous surprendre: vous avez beau éliminer la barre de menu : elle est toujours visible. Si v
de Microsoft pour la propriété Visible, il y est dit que "Vous devez affecter la valeur True à la propriété
avant d'affecter True à sa propriété Visible." Cela laisse supposer que la propriété Enabled est d'un niveau hiérarc
propriété Visible. Essayons maintenant de changer toutes les propriétés Visible en Enabled et changeons également l
l'instruction With :

La propriété Enabled

o Sub a()
o With Application Que dit Microsoft de la p
o .CommandBars("Standard").Enabled = False
o .CommandBars("Formatting").Enabled = False Dans le cas d'un contrôle p
o .CommandBars("Worksheet Menu Bar").Enabled = False valeur True à la propriété
détermine son état ; si vou
o .DisplayFullScreen = True
False, la propriété est dés
o End With
o
o With ActiveWindow
o .DisplayFormulaBar = False
o .DisplayStatusBar = False
o .DisplayHorizontalScrollBar = False
o .DisplayVerticalScrollBar = False
o .DisplayWorkbookTabs = False
o .DisplayGridlines = False
o .DisplayHeadings = False
o End With
o End Sub

Votre code peut encore être simplifié de la façon suivante :

o Sub a()
o With Application
o .CommandBars("Standard").Enabled = False
o .CommandBars("Formatting").Enabled = False
o .CommandBars("Worksheet Menu Bar").Enabled = False
o .DisplayFullScreen = True
o .ActiveWindow.DisplayFormulaBar = False
o .ActiveWindow.DisplayStatusBar = False
o .ActiveWindow.DisplayHorizontalScrollBar = False
o .ActiveWindow.DisplayVerticalScrollBar = False
o .ActiveWindow.DisplayWorkbookTabs = False
o .ActiveWindow.DisplayGridlines = False
o .ActiveWindow.DisplayHeadings = False
o End With
o End Sub

C'est exactement le contenu de la sous-routine ci-dessus que vous devez copier à l'intérieur de la routine
ThisWorkbook.

o Private Sub Workbook_Open()


o 'On place l'ordre suivant pour empêcher une erreur si un des objet est djà sur Fal
o On Error Resume Next
o
o With Application
o .CommandBars("Standard").Enabled = False
o .CommandBars("Formatting").Enabled = False
o .CommandBars("Worksheet Menu Bar").Enabled = False
o .DisplayFullScreen = True
o .ActiveWindow.DisplayFormulaBar = False
o .ActiveWindow.DisplayStatusBar = False
o .ActiveWindow.DisplayHorizontalScrollBar = False
o .ActiveWindow.DisplayVerticalScrollBar = False
o .ActiveWindow.DisplayWorkbookTabs = False
o .ActiveWindow.DisplayGridlines = False
o .ActiveWindow.DisplayHeadings = False
o End With
o End Sub
e de gestion de CD…

contient plusieurs feuilles de données :

de musique, remarques)

e ou pour impression)

lle de garde. C'est moins calviniste et


s images "Mickey" qui nous proviennent

er, dès son ouverture.


uvenir de la configuration existante avant
environnement habituel qui était le sien,

l'initialisation du classeur, vous prendrez soins

allez saisir une nouvelle macro que vous appelerez


désactiver les boîtes à outils, la ligne de menu,
ement et faire un affichage plein écran.

VBA dans le module nouvellement créé


evriez obtenir environ le code suivant :
lle est toujours visible. Si vous consultez l'aide
à la propriété Enabled d'une barre de commandes
led est d'un niveau hiérarchique supérieur à la
d et changeons également la redondance avec

Que dit Microsoft de la propriété Enabled ?

Dans le cas d'un contrôle prédéfini, si vous affectez la


valeur True à la propriété Enabled, l'application
détermine son état ; si vous lui affectez la valeur
False, la propriété est désactivée.

r de la routine Workbook_Open() de la feuille


objet est djà sur False
### Quitter le programme de façon conviviale

La fermeture est décidée par l'utilisateur. C'est la première chose à laquelle il faut penser en plaçant un premier bouton sur
votre pagede menu. Il nous faut par conséquent insérer un bouton afin de fermer soit le programme, soit l'application.

Boîte à outils Contrôles ou boîte à outils Formulaires ?


La question est de savoir si nous voulons créer des objets qui seront dépendant de la feuille sur laquelle nous les posons ou si
nous volons créer des objets qui peuvent déclancher directement des macros. Très honnêtement, c'est un peu le genre de discussion
que l'on pratique au Café du Commerce et on peut en discuter pendant des heures. Voici les principaux avantage et désavantages
listé sous les images des boîtes à outils respectives :

Insertion d'objet dans la feuille de calcul ; ces objets se Insertion d'objet dans le classeur ; ces objets ne se retrouvent
retrouvent dans le listing des objets énumérés dans le pas dans le listing des objets énumérés dans le code rattaché
code rattaché à la feuille respective. à la feuille respective. Toutefois, comme dans le cas ci-contre
à gauche, ces objets peuvent eux aussi déclancher des macros.
Ces objets peuvent être placés sur une feuille ou dans
un formulaire du type UserForm. Ne sont placé que sur une feuille de calcul.

Dans notre exemple, nous avons opté pour un bouton de la boîte à


outils Contrôle. Nous avons inséré un bouton sur notre feuille.
Ce bouton se nomme d'office CommandButton1.
En double-cliquant dessus, nous avons accès au code qui est
rattaché à ce bouton :
Première chose à faire : changer quelques propriétés de ce bouton :

Revenez à la feuille de garde et double-cliquez sur le bouton pour qu'il vous place au bon endroit dans le code ;
supprimer le code devenu inutile.

La méthode Close

o Private Sub cmdExit_Click()


o Application.ActiveWorkbook.Close 'Ferme le classeur uniquement, sans quitter Excel
o End Sub

Le code ci-dessus ferme le classeur. Bien entendu, Excel va vous demander si vous désirez sauvegarder votre fichier, à moins que
vous n'ayez pensé à cela dans la procédure Workbook_BeforeClose() décrite ci-dessous.

La méthode Quit
La méthode Quit est plus radicale. Elle est directement rattachée à l'application et non au classeur comme dans la méthode Close
Faites attention lors de l'utilisation de cette méthode : rien n'est plus agaçant pour l'utilisateur de se voir forcé à quitter Excel, un programme
qu'il aime tant, tout simplement parce qu'un programmeur novice n'a pas pensé que l'utilisateur désire peut-être continuer le travail sous
Excel !

o Private Sub cmdExit_Click()


o Application.Quit 'Ferme l'application Excel !!!
o End Sub

Maintenant, il faut garantir que tout sera remis en place lorsque le programme sera fermé. Pour cela, il suffit de remettre à True
tout ce qui est False et à False tout ce qui est True. On insère ce code dans la procédure Workbook_BeforeClose() de
la feuile ThisWorkbook.

o Private Sub Workbook_BeforeClose(Cancel As Boolean)


o 'On place l'ordre suivant pour empêcher une erreur si un des objet est déjà sur True
o On Error Resume Next
o
o With Application
o .CommandBars("Standard").Enabled = True
o .CommandBars("Formatting").Enabled = True
o .CommandBars("Worksheet Menu Bar").Enabled = True
o .DisplayFullScreen = False
o .ActiveWindow.DisplayFormulaBar = True
o .ActiveWindow.DisplayStatusBar = True
o .ActiveWindow.DisplayHorizontalScrollBar = True
o .ActiveWindow.DisplayVerticalScrollBar = True
o .ActiveWindow.DisplayWorkbookTabs = True
o .ActiveWindow.DisplayGridlines = True
o .ActiveWindow.DisplayHeadings = True
o End With
o
o ActiveWorkbook.Close SaveChanges:=True
o
o End Sub

Remarquez que nous avons tenu à sauvegarder les changements opérés sans en avertir l'utilisateur avec la ligne suivante:

o ActiveWorkbook.Close SaveChanges:=True

Une méthode plus élégante de terminer : la création d'une boîte de dialogue spécialement pour quitter
Il serait préférable de demander à l'utilisateur s'il tient à fermer le fichier ou s'il tient vraiment à quitter l'application. D'autre part,
vous offrez en même temps la possibilité à l'utilisateur de changer d'avis au dernier moment et de rester malgré tout dans votre
programme. En bref, lorsque l'utilisateur va cliquer sur le bouton Quitter, une boîte de dialogue va s'ouvrir lui demandant
exactement ce qu'il désire faire.
De plus, il serait bien plus élégant de supprimer toutes les boîtes de dialogue préalablement affichées, qu'elles soient personnalisées ou non
et de restituer le tout à l'utilisateur dès qu'il aura quitté votre application !
Cette façon de faire demande une refonte complète de la façon de concevoir le programme lors de son ouverture et lors de sa fermeture.
Ainsi, la sous-routine Workbook_BeforeClose(Cancel As Boolean) est complètement supprimée et la sous-routine Workbook_Open()
est remplacée par le code qui suit :

o Private Sub Workbook_Open()


o Dim objBar As CommandBar
o Dim Lin As Integer
o
o 'Pour ne pas faire afficher les feuilles pendant le déroulement de la macro
o Application.ScreenUpdating = False
o
o Sheets.Add Type:="Feuille"
o Sheets("Nouvelle feuille").Select
o
o 'On donne exprès un nom où l'on est sûr qu'il ne se trouve pas déjà dans le classeur
o Sheets("Nouvelle feuille").Name = "Tem$$$p£££"
o
o Lin = 1
o For Each objBar In Application.CommandBars
o If objBar.Type = msoBarTypeNormal And objBar.Visible Then
o
o 'on insère dans chaque cellule, l'une sous l'autre,
o 'le nom de toutes les boîtes à outils
o Sheets("Tem$$$p£££").Cells(Lin, 1) = objBar.Name
o
o 'on rend l'objet invisible, c.-à-d. on rend invisible une boîte à outil après l'autre
o objBar.Visible = False
o
o 'on incrémente pour le prochain positionnement dans la feuille
o Lin = Lin + 1
o End If
o
o Next objBar
o
o 'on hypercachela feuille
o Sheets("Tem$$$p£££").Visible = xlSheetVeryHidden
o
o With Application
o .CommandBars("Worksheet Menu Bar").Enabled = False
o .DisplayFormulaBar = False
o With .ActiveWindow
o .DisplayHorizontalScrollBar = False
o .DisplayVerticalScrollBar = False
o .DisplayHeadings = False
o .DisplayGridlines = False
o .DisplayWorkbookTabs = False
o End With
o End With
o
o 'on affiche à nouveau le ScreenUpdating
o Application.ScreenUpdating = True
o End Sub

Voici la table des propriétés du formulaire de fermeture de programme ou d'application :

Table des propriétés


Objet Propriété Valeur
UserForm Name frmQuitter
Caption Que voulez-vous faire ?
Height 100
Width 200
Bouton de commande Name cmdAnnuler
Caption Annuler
Cancel True
Left 140
Height 24
TabIndex 1
Top ###
Width 48
Bouton de commande Name cmdOK
Caption OK
Default True
Left 140
Height 24
TabIndex 0
Top ###
Width 48
Bouton radio Name optFermerClasseur
Accelerator F
Caption Je désire fermer le classeur
Left 12
Height 18
TabIndex
Top 7
Value True = Option par défaut à spécifier !
Width 120
Bouton radio Name optQuitterApplication
Accelerator Q
Caption Je désire quitter l'application
Left 12
Height 18
TabIndex
Top 30
Value False
Width 120
Bouton radio Name optContinuer
Accelerator C
Caption Je désire continuer dans ce même classeur
Left 12
Height 18
TabIndex
Top 53
Value False
Width 120

Attention : l'affectation du bouton Quitter du menu principal doit être changé ! Voici le code :

o Private Sub cmdExit_Click()


o frmQuitter.Show
o End Sub

Voici les sous-routines contenues dans le formulaire frmQuitter :

o 'Sous-routine rattachée au bouton Annuler du formulaire de fermeture frmQuitter


o Private Sub cmdAnnuler_Click()
o Unload Me
o End Sub

o 'Sous-routine rattachée au bouton OK du formulaire de fermeture frmQuitter


o Private Sub cmdOK_Click()
o If optFermerClasseur = True Then
o Call FermerClasseur
o Application.ActiveWorkbook.Close
o Else
o If optQuitterApplication = True Then
o Call FermerClasseur
o Application.Quit
o Else
o Unload Me
o End If
o End If
o End Sub

Notez que le fait d'appuyer sur le bouton Annuler revient au même que de choisir d'activer le bouton d'option indiquant que
l'on veut continuer à travailler sur le même programme.

La sous-routine (à mettre dans un module qui se nommera FonctionnementClasseur) comporte les lignes suivantes :

o Sub FermerClasseur()
o Dim strBar As String
o Dim Lin As Integer
o
o Application.ScreenUpdating = False
o
o 'Au cas où la feuille "Tem$$$p£££" n'existerait pas
o On Error Resume Next
o
o 'On affiche à nouveau le classeur hyper-invisible
o Sheets("Tem$$$p£££").Visible = xlSheetVisible
o Sheets("Tem$$$p£££").Select
o
o Lin = 1
o strBar = Sheets("Tem$$$p£££").Cells(Lin, 1).Value
o 'Insertion des différentes boîtes à outils
o Do While strBar <> ""
o Application.CommandBars(strBar).Visible = True
o Lin = Lin + 1
o strBar = Sheets("Tem$$$p£££").Cells(Lin, 1)
o Loop
o
o 'pour ne pas devoir confirmer la suppression de la feuille dans l'instruction suivante
o Application.DisplayAlerts = False
o Sheets("Tem$$$p£££").Delete
o Application.DisplayAlerts = True
o
o 'On veut à nouveau l'affichage des erreurs possibles
o On Error GoTo 0
o
o Application.ScreenUpdating = True
o
o 'on s'occupe du reste de ce qui a été désactivé
o With Application
o .CommandBars("Worksheet Menu Bar").Enabled = True
o .DisplayFormulaBar = True
o With .ActiveWindow
o .DisplayHorizontalScrollBar = True
o .DisplayVerticalScrollBar = True
o .DisplayHeadings = True
o .DisplayGridlines = True
o .DisplayWorkbookTabs = True
o End With
o End With
o
o 'Sauvegarde automatique du classeur
o ActiveWorkbook.Save
o End Sub
enre de discussion
et désavantages

objets ne se retrouvent
s dans le code rattaché
me dans le cas ci-contre
si déclancher des macros.

hier, à moins que

a méthode Close.
ter Excel, un programme
ntinuer le travail sous
nt personnalisées ou non,

t lors de sa fermeture.
routine Workbook_Open()

après l'autre
### Création d'une feuille de menu avec des boutons

Dans la feuille de menu, nous allons changer le fond en insérant une image de fond qui se nomme musicback.gif ou toute autre
image de votre choix.
Nous allons ensuite désactiver les en-têtes de lignes et de colonnes ainsi que le quadrillage et insérer les 4 boutons suivants :

Table des propriétés des boutons de commande


Propriété Valeur Valeur Valeur Valeur Valeur
Name cmdNewCD cmdRecherche cmdEditionCD cmdImpression cmdQuitter
Accelerator N R D I Q
Caption Nouveau CD Recherche Edition d'un CD Impression Quitter
Height 30 30 30 30 30
Left 42 171 300 429 558
Top 58.5 123 187.5 252 316.5
Width 107.25 107.25 107.25 107.25 107.25

Ces boutons de commande font appel aux formulaires suivants que nous détaillerons dans la suite du cours :

o Private Sub cmdNewCD_Click()


o frmNouveauCD.Show
o End Sub

o Private Sub cmdRecherche_Click()


o frmRecherche.Show
o End Sub

o Private Sub cmdEditionCD_Click()


o frmEditionCD.Show
o End Sub
o Private Sub cmdImpression_Click()
o frmImpression.Show
o End Sub

o Private Sub cmdQuitter_Click()


o frmQuitter.Show
o End Sub