Introduction

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


Actions sur la fenêtre Excel

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. 


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 With

Vous 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 With

VBA 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 sub

Private 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 OK

Faire 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

[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 Sub

Cette 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 :

Application.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.

Annuler la protection d'une barre d'outils

Application.CommandBars("votrebarredoutils").Protection = msoBarNoProtection


Personnalisation

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 sub

2ième méthode : La barre d'outils existe-t-elle ?



Suppression de barres d'outils

'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