Cette page est un peu le pendant VBA des pages Affichage.html & Fenetre.html où figurent des explications sur chacune des commandes du menu Affichage. Si toutefois vous ne trouvez pas votre bonheur dans cette page, allez aussi voir là : Outils/ Options. Sujets abordés :
Affichage d'un document
La fenêtre applicative
Les barres d'outils
Affichage d'un document
Manipuler les modes d'affichage
Affichages personalisés
activeworkbook.customviews.add viewname:="Test", printsettings:=true, rowcolsettings:=true activeworkbook.customviews("Test").show
D'autres informations ?
- sur les sauts de pages : xl_impression.htm#impr_saut_pages
- sur les commentaires : xl_cellule.htm#Les_commentaires
Réduire/maximiser la fenêtre
Créér une nouvelle fenêtre
Arranger les fenêtres d'Excel
Il y a plusieurs styles d'arrangement des fenêtres (menu fenêtre). Vous pouvez notamment afficher les fenêtres masquées (comme le classeur perso.xls), ou afficher plusieurs fenêtres pour un classeur donné, ce qui est pratique.
application.dialogs(Excel.XlBuiltInDialog.xlDialogArrangeAll).Show
Révélation de classeurs masqués ou masquage
'affichage de la boîte de dialogue "Afficher les classeurs"
application.Dialogs(Excel.XlBuiltInDialog.xlDialogUnhide).Show'masquage d'un classeur
ActiveWindow.Visible = False
windows("classeur1.xls").visible = false'réaffichage d'un classeur
windows("classeur1.xls").visible = true
Fractionnement d'une fenêtre
Le fractionnement est possible uniquement dans une feuille de calcul. Manuellement, il est possible via la commande fractionner du menu Fenetre (cf Fenetre.htm).
Création du fractionnement
Pour fractionner une fenêtre, vous pouvez déterminer la ligne et/ou la colonne du fractionnement. Effectué via la commande du menu Fenêtre, le fractionnement se fait à l'emplacement de la cellule active, en VBA cela donne :
With ActiveWindow
.SplitColumn = 1
.SplitRow = 4
End WithVous pouvez bien sûr choisir de ne pas fractionner verticalement ou horizontalement en omettant la ligne d'instruction concernée.
Suppression du fractionnement
With ActiveWindow
.SplitColumn = 0
.SplitRow = 0
End WithVBA m'a permis de découvrir l'instruction ci-dessous. C'est peut-être une fonctionnalité que l'on peut retrouver en fouillant dans la personnalisation des barres d'outils. Elle vous permettra de choisir le lieu du fractionnement.
application.dialogs(xldialogsplit).show
Figer les volets
Manuellement cela fonctionne de la même que le fractionnement ou presque.
La fixation se produit au bord en haut à gauche de la cellule active.
En VBA, cela se traduit ainsi :fixer les volets de la fenêtre : activewindow.freezepanes = true
fixer les volets d'un classeur donné : windows("classeur1.xls").freezepanes=true
libérer les volets d'une fenêtre : activewindow.freezepanes =false
Passage en plein écran
Passer en plein écran à l'ouverture du classeur et en sortir à la fermeture
Private Sub Workbook_Open()
application.displayfullscreen = true
end subPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
application.displayfullscreen = false
end Sub
Barres de défilement et Zones de défilement
=> en langage VBA (anglais), un défilement est un scroll.
=> c'est un petit ou grand déplacement vers la droite/ToRight, la gauche/ToLeft, le haut/Up, le bas/Down
=> une barre de défilement se dit donc scrollbar en anglais.
Masquer/Afficher les barres de défilement
activewindow.displayverticalscrollbar = false/true
activewindow.displayhorizontalscrollbar=false/true
Code pour masquer la barre verticale en activant une feuille, et la réafficher à sa désactivation
'(code à insérer dans le code d'une feuille)
Private Sub Worksheet_Activate()
windows(Me.Parent.name).displayVerticalScrollBar = false
end Sub
Private Sub Worksheet_Deactivate()
windows(Me.Parent.name).displayVerticalScrollBar = true
end Sub
Limiter le défilement de la fenêtre à une plage de cellules
Cela empêche l'utilisateur de sélectionner des cellules en-dehors d'une certaine plage.
'limitation à la "plage des cellules utilisées", plage reconnue par Excel et nommée UsedRange en VBA
Sub RestrictScrollArea()
with thisworkbook.worksheets("Sheet1")
.ScrollArea = .Usedrange.address
end with
end Sub'limitation à la plage A1:G5"
activesheet.scrollarea = range("A1:G5").address
'Effectuer des défilements de la fenêtre
activewindow.SmallScroll ToRight:=1 'effectue UN PETIT déplacement vers la droite
activewindow.LargeScroll Up:=1 'effectue UN GRAND déplacement vers le haut
Afficher la même ligne sur toutes les feuilles (en "défilant") : news
Se déplacer sur une plage en défilant
application.goto reference:=Range("5:5")
application.goto Reference:=[150:150], Scroll:=true (ou false !)
application.goto Reference:=[50:50].Item(1), Scroll:=true (ou false !)
application.goto Reference:=Worksheets("Feuil1").Range("A154"), Scroll:=true
Autres actions sur fenêtres applicatives
Redonner le focus à Excel : news
Centrer l'écran sur une cellule donnée : news
Verrouiller une application : news
Désactiver le bouton de fermeture d'excel : news
Changer le logo d'excel : news
Réduction dans le systray : news
Actions sur les barres d'outils
Création Manuelle
(1) -> MenuAffichage
(2) -> Barres d'outils
(3) -> Personnaliser
(4) -> Accéder à l'onglet "Barres d'outils"
(5) Cliquer sur le bouton "Attachez"
(6) Sélectionner le nom de la barre d'outil dans la fenêtre de gauche
(7) Cliquer sur le bouton "Copier"
(8) Ensuite OKFaire attention, par la suite si vous modifiez la barre d'outils, vous devrez refaire l'opération en n'oubliant pas au-préalable de :
(6) sélectionner dans la fenêtre de droite la barre d'outils que tu as modifié
(7) cliquer sur le bouton 'Annuler' et ensuite refaire la même
opération que décrite au-dessus à partir du point (6)
Création par VBA d'une barre d'outils ou de menus / Commandbar creation
dim ma_barre As CommandBar
Set ma_barre = application.CommandBars.add(name:="perso", Position:=msoBartop, MenuBar:=true)
ma_barre.visible = true
http://msdn.microsoft.com/library/techart/ofcmdbar.htm [Create a commandbar]: http://support.microsoft.com/support/downloads/dp2586.asp [Customizing Menu Bars, Menus, and Menu Items in Microsoft]
http://support.microsoft.com/support/kb/articles/Q159/6/19.asp, Q159619 -- XL97: Sample Macros to Control Menus and Submenus
Vvoir le document de "Microsoft Technical Support Services" appelé "Customizing Menu Bars, Menus, and Menu Items in Microsoft Excel 97"
Création : news (par LL.)
Hiérarchie d'un menu donné et de ses sous menus :news
Exemple de manipulation
dim Ctrl As CommandBarControl
for each Ctrl In CommandBars(1).Controls("format").Controls
msgbox Ctrl.Caption & " : " & Ctrl.Id
next Ctrl
[Article on Attaching commandbars and how it works] : http://www.microsoft.com/exceldev/articles/toolbatt.htm
Question de Benoît: j'ai réalisé une macro en VBA dans Excel, associée à un bouton d'une barre d 'outils personnalisée. Comment puis je exporter cet ensemble pour l'installer sur d'autre poste ? Sur disciplus, vous trouvez une réponse très complète de Frédéric http://disciplus.simplex.free.fr/xl/barres.htm#BOperso
A savoir
Rétablir toutes les barres d'outils : MenuBars(xlWorksheet).Reset
Activation/ Désactivation/Protection
activer/ désactiver une barre d'outils
application.CommandBars("Standard").Enabled = true/false
activer/ désactiver un contrôle de barre d'outils
par exemple la commande insérer du clic droit
CommandBars("cell").Controls("Insert...").Enabled = false
activer/ désactiver l'affichage des barres d'outils
ceci rendra impossible l'activation du clic droit sur les barres d'outils et désactivera la commande Affichage/ Barre d'outils.
CommandBars("toolbar list").Enabled = false
Bloquer tous les menus contextuels du clic droit
Sub DisableAllShortcutMenus()
dim cb As CommandBar
for each cb In CommandBars
if cb.type = msoBartypePopup then cb.Enabled = false
next cb
end Sub
Voir également "Barre d'outils"
Protégér les barres d'outils (par Pierre F.)
'cette macro protège toutes les barres
Sub OutilsBarreVerrou()
Dim i
For i = 1 To Toolbars.count
Toolbars(i).Protection = xlNoChanges
'debug.print i, toolbars(i).name permet d'obtenir les noms des barres dans la fenêtre d'exécution.
Next i
End SubCette procédure n'enlève pas l'option "personnaliser", mais interdit d'apporter des changements sur les barres doutils.
Pour rendre les modifs possibles, il faut changer xlNoChanges par xlProtectionsNone.
Il est bien sûr possible de ne verrouiller que certaines barres.Ou encore une instruction proposée par Denis M. sur microsoft.public.fr.excel, sujet "Objet: Re: BO personnalisée : inhibition de la croix de fermeture", le samedi 17 novembre 2001 19:39 pour empêcher les usagers de "Fermer une barre d'outils personnalisée"et de la changer :
Annuler la protection d'une barre d'outilsApplication.CommandBars("votrebarredoutils").Protection = msoBarNoCustomize + msoBarNoMove + msoBarNoChangeVisible
Cette commande empêche l'usager de personnaliser la barre d'outil, déplacer cette barre d'outil, fermer cette barre d'outil.
Application.CommandBars("votrebarredoutils").Protection = msoBarNoProtection
Changer l'infobulle d'un bouton : application.CommandBars("Zaza").Controls(1).TooltipText = _ "Reformater le disque dur"
Trouver l'index des icônes (FaceId) : vous pouvez trouver cela sur le site de John Walkenbach : web (tips 67)
Personnalisation du clic droit
dim Ctrl As CommandBarControl
Set Ctrl = application.CommandBars("Cell").Controls.add
Ctrl.Caption = "Some Caption"
Ctrl.OnAction = "Macroname"
Lister les barres d'outils disponibles sous votre version d'Excel
Sub listbarres()
For I = 1 To application.CommandBars.count
range("c" & I) = I
range("d" & I) = application.CommandBars.Item(I).Name
Next I
end Sub
Autres ressources
http://w1.2735.telia.com/~u273500023/english/index.htm, dans le menu choisissez VBA Part 2, puis commandbars.
http://www.j-walk.com/ss/excel/tips/tip53.htm , télécharger le fichier Menu Maker de John's Walkenbach
Existence de la barre d'outils
1ière méthode
Sub test
dim aBar as commandbar
dim Found as boolean
for earch abar in application.commandbars
if abar.name = "what I want" then
found = true
exit for
endif
next abar
end sub2ième méthode : La barre d'outils existe-t-elle ?
'Cet exemple montre comment supprimer toutes les barres d'outils personnalisées qui ne sont pas visibles.
for each bar In application.CommandBars
if Not bar.BuiltIn And Not bar.visible then bar.delete
next'Vérifier l'existence d'une barre et éventuellement la détruire :
dim CmdB As CommandBar
On Error Resume next
Set CmdB = application.CommandBars(NomBarre)
On Error Goto 0
if Not CmdB Is Nothing then CmdB.delete
> 1- 'griser' un menu d'une barre de menu,
> application.CommandBars("worksheet menu bar").Controls(1).Enabled = true
> pour griser "Fichier" ou bien, application.CommandBars("worksheet menu bar").Controls("fichier").Enabled = false
> de la barre de menu
>
> 2- masquer toutes les barres d'outils natives de Excel
> for each barre In application.CommandBars
> On Error Resume next
> barre.visible = false
> next
> ---ou bien en se plaçant en plein écran :
> application.displayfullscreen = true
> application.CommandBars("Full Screen").visible = false