Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM OFFICE FAQs OFFICE TUTORIELS OFFICE LIVRES OFFICE SOURCES VBA ACCESS

Personnaliser vos barres de commandes dans Access

Date de publication : 08/02/2008 , Date de mise à jour : 08/02/2008

Par Philippe JOCHMANS (home page de Starec)
 

Cet article a pour but de vous expliquer comment créer et personnaliser vos barres de commandes dans Access.

I. INTRODUCTION
II. PREREQUIS
III. DEFINITION
III-A. Les barres de menus
III-B. Les barres d'outils
III-C. Les menus contextuels
IV. CONNAITRE LES BARRES DE COMMANDES
IV-A. Apprendre à connaître les barres de commandes
IV-A-1. ActiveMenuBar
IV-A-2. DisableCustomize
IV-B. Aspect visuel des barres de commandes
IV-B-1. AdaptiveMenus
IV-B-2. DisableAskAQuestionDropdown
IV-B-3. DisplayFonts
IV-B-4. DisplayKeysInTooltips
IV-B-5. DisplayTooltips
IV-B-6. LargeButtons
IV-B-7. MenuAnimationStyle
IV-B-8. Interférence avec les autres applications Office
IV-C. L'objet CommandBar
IV-C-1. Type
IV-C-2. Position
IV-C-3. Name et NameLocal
IV-C-4. Index
IV-C-5. BuiltIn
IV-C-6. Controls
IV-C-7. Enabled
IV-C-8. Delete
IV-C-9. Height
IV-C-10. Width
IV-C-11. Left
IV-C-12. Top
IV-C-13. Protection
IV-C-14. Reset
IV-D. Les éléments composants les barres de commandes
IV-D-1. CommandBarControl
IV-D-1-a. BeginGroup
IV-D-1-b. BuiltIn
IV-D-1-c. Caption
IV-D-1-d. TooltipText
IV-D-1-e. Enabled
IV-D-1-f. Id
IV-D-1-g. Index
IV-D-1-h. Parent
IV-D-1-i. OnAction
IV-D-1-j. Execute
IV-D-1-k. Delete
IV-D-1-l. Visible
IV-D-1-m. SetFocus
IV-D-2. CommandBarButton
IV-D-2-a. BuiltInFace
IV-D-2-b. Copy
IV-D-2-c. CopyFace
IV-D-2-d. FaceId
IV-D-2-e. Style
IV-D-3. CommandBarComboBox
IV-D-3-a. AddItem
IV-D-3-b. Clear
IV-D-3-c. DropDownLines
IV-D-3-d. DropDownWidth
IV-D-3-e. List
IV-D-3-f. ListCount
IV-D-3-g. ListHeaderCount
IV-D-3-h. ListIndex
IV-D-3-i. RemoveItem
IV-D-3-j. Style
IV-D-4. CommandBarPopup
V. CREATION DE BARRES DE COMMANDES PERSONNALISEES
V-A. Créer un Menu
V-A-1. Présentation
V-A-2. Ajouter une barre de menu
V-A-3. Ajouter des boutons à un menu
V-A-4. Ajouter un sous-menu à un menu
V-A-5. Ajouter une liste déroulante à un menu
V-A-6. Ajouter des sous-menus prédéfinis
V-A-7. Ajouter des boutons prédéfinis
V-A-8. Comment affecter un menu à une application, un formulaire ou un état
V-A-8-a. Une application
V-A-8-b. Les formulaires et les états
V-A-9. Conclusion sur les menus
V-B. Créer une barre d'outils
V-C. Créer un menu contextuel
V-C-1. Création d'un menu contextuel simple
V-C-2. Ajouter un sous-menu à un menu contextuel
V-C-3. Comment affecter un menu contextuel à un formulaire ou à un état
V-C-3-a. Le menu contextuel existe déjà.
V-C-3-b. Vous créer dynamiquement votre menu contextuel
VI. BONUS
VI-A. Créer les lettres d'un répertoire
VI-B. Affecter les icônes des barres de commandes à un bouton de commande
VI-C. Utiliser les fonctions des barres de commandes
VI-D. Récupérer l'icône d'un bouton de barre de commandes dans un fichier
VI-E. Ajouter une autre image à un bouton de barre de commandes
VII. TELECHARGEMENT
VIII. REMERCIEMENTS


I. INTRODUCTION

Pour personnaliser vos applications, vous pouvez créer vos propres barres de menus, barres d'outils et menus contextuels.

Cet article a pour but de vous montrer comment réaliser, grâce à VBA, vos propres barres de commandes. Nous n'étudierons que la création des barres par VBA, car le code nous offre beaucoup plus de possibilités que la réalisation de celles-ci à partir des menus personnalisés.

Tous les tests ont été réalisés sous Access 2002. Cependant, comme il s'agit d'une bibliothèque Office que nous allons utiliser, tout ce que vous verrez dans cet article est applicable à Access, Excel et Word.

Téléchargement : Vous pouvez télécharger une base Access, avec des listings, et la possibilité de visualiser toutes les icônes des barres de commandes.
Vous trouverez la base à télécharger en bas de cet article.

Ce article sera constitué de plusieurs parties

  • Une partie théorique : Vous verrez les différentes propriétés des barres de commandes et de leurs composants.
  • Une partie pratique : Nous y verrons comment créer ses propres barres de commandes.
  • Une partie bonus : Avec des exemples et des trucs et astuces.

II. PREREQUIS

Une bonne connaissance de VBA est nécessaire pour la lecture de cet article, car comme il a été stipulé dans l'introduction nous traiterons uniquement de la création de barres de commandes par le code.

Je vous invite à lire cet article de Tofalu : fr Ajouter un menu dans un formulaire

Pour réaliser toutes les manipulations sur le code il faut référencer la bibliothèque Microsoft Office 10.0 Object Library (10, car cela correspond à la version de l'office 2002, 9 pour 2000 et 11 pour 2003).

Nous ne verrons pas toutes les propriétés, mais celles qui à mon avis sont les plus intéressantes pour la création de ses propres barres de commandes. C'est pourquoi l'utilisation de l'aide (F1) et de l'explorateur d'objet (F2) est indispensable (personnellement je m'en sers tous les jours).


III. DEFINITION

Il est important de savoir de quoi on parle, nous allons donc définir les différents types de barres de commandes représentées sur l'image ci-dessous.


III-A. Les barres de menus

Les barres de menus sont celles que vous trouverez dans toutes les applications Office, vous les connaissez car l'homogénéité de toutes les applications qui fonctionnent sous Windows fait que les barres de menus ont souvent la même structure :

Fichier - Edition - Affichage …..

Cela est devenu un standard, il faudra en tenir compte lorsque vous réaliserez vos propres barres de menus, cela évitera de dérouter les utilisateurs de vos applications.

Vous constaterez que souvent celles-ci sont évolutives en fonction de l'action que vous êtes en train d'effectuer (par exemple sous Access, la barre évolue lorsque vous êtes en mode création de requête).


III-B. Les barres d'outils

Les barres d'outils sont principalement constituées d'icônes, il s'agit en fait (la plupart du temps) de raccourcis que vous trouverez dans les menus.


III-C. Les menus contextuels

Les menus contextuels apparaissent lorsque vous faites un clic sur le bouton droit de votre souris (bien sûr si celle-ci est configurée en droitier), on les appellent aussi menus flottants.


IV. CONNAITRE LES BARRES DE COMMANDES

Avant d'attaquer la création des barres de commandes, nous allons voir la collection CommandBars qui contient l'ensemble des barres de commandes.


IV-A. Apprendre à connaître les barres de commandes


IV-A-1. ActiveMenuBar

Cette propriété permet de connaître quelle barre est active, elle renvoie l'identifiant d'un objet CommandBar.

Le code suivant renvoie le nom de la barre de commandes active.

 MsgBox Application.CommandBars.ActiveMenuBar.Name

IV-A-2. DisableCustomize

Cette propriété permet de bloquer la possibilité de personnaliser une barre de commandes.

Cela peut-être utile lors de la création de vos barres de commandes, car en effet si vous distribuez un fichier mdb, un utilisateur peut vouloir ajouter un bouton n'importe où. Hors cela peut faire planter votre application, au niveau de la gestion de vos boutons sur vos barres, car ceux-ci sont repérés par rapport à une position.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Bloque la possibilité de personnaliser une barre de commandes
  • False (Faux) : Offre la possibilité de personnaliser une barre de commandes
info Cette propriété est valable pour l'ensemble des barres de commandes de votre application. Cependant, il est possible d'instaurer une protection barre par barre, pour cela aller jeter un coup d'oeil à la propriété Protection de l'objet CommandBar.

IV-B. Aspect visuel des barres de commandes

Nous pouvons changer l'aspect visuel des barres de commandes, cependant il faut prendre en compte deux choses :

  • Comme il s'agit de la collection des barres de commandes, l'aspect s'appliquera à toutes les barres de commandes de votre application.
  • Comme nous utilisons des barres de commandes Office, certaines actions seront répercutées dans les autres applications Office (Excel, Word).

IV-B-1. AdaptiveMenus

Cette propriété permet de modifier l'aspect des menus pour savoir s'ils sont adaptables ou non. Cela correspond à la propriété que l'on trouve dans le menu contextuel lorsque l'on veut personnaliser les menus et qui se trouve dans l'onglet options à "Afficher les menus dans leur intégralité".

Le terme est un peu barbare, en fait c'est quand un menu est entièrement déroulé ou non en fonction des dernières actions de l'utilisateur. L'image ci-dessous vous permettra de mieux comprendre ce phénomène.

./images/AdaptiveMenuTrue.jpg AdaptiveMenus = True
./images/AdaptiveMenuFalse.jpg AdaptiveMenus = False
Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Le menu est adaptable.
  • False (Faux) : Le menu n'est pas adaptable.

IV-B-2. DisableAskAQuestionDropdown

Cette propriété permet d'activer ou de désactiver le menu déroulant de l'aide intuitive qui se trouve dans la partie de droite de votre barre de commandes.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : L'aide est désactivée.
  • False (Faux) : L'aide est active.

IV-B-3. DisplayFonts

Cette propriété a pour but de modifier l'aspect de la liste déroulante des polices. En effet, vous avez la possibilité de voir le nom des polices avec leur fonte ou avec la fonte système.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Le nom des polices apparaissent avec leur propre fonte.
  • False (Faux) : Le nom des polices apparaît avec la fonte système.

IV-B-4. DisplayKeysInTooltips

Cette propriété permet d'activer ou désactiver la visualisation des raccourcis clavier dans les infos bulles.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Les raccourcis claviers apparaissent dans les infos bulles.
  • False (Faux) : Les raccourcis claviers n'apparaissent pas dans les infos bulles.

IV-B-5. DisplayTooltips

Cette propriété permet ou non l'affichage des infos bulles sur les barres d'outils lors du survol de la souris sur les boutons.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Les infos bulles apparaissent.
  • False (Faux) : Les infos bulles n'apparaissent pas.

IV-B-6. LargeButtons

Cette propriété permet de déterminer l'aspect des boutons de commandes des barres d'outils (ne s'applique pas aux barres de menus et aux menus contextuels).

Les images des boutons peuvent prendre deux tailles suivant la valeur de la propriété.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Les boutons des barres d'outils sont agrandis.
  • False (Faux) : Les boutons des barres d'outils sont réduits.
warning Cela ne concerne que l'image qui apparaît sur les boutons et non le texte qui peut l'accompagner.

IV-B-7. MenuAnimationStyle

Cette propriété permet de déterminer le style de l'animation des menus et des menus contextuels.

Cette propriété peut prendre 4 valeurs :

  • msoMenuAnimationNone (valeur 0).
  • msoMenuAnimationRandom (valeur 1).
  • msoMenuAnimationSlide (valeur 3).
  • msoMenuAnimationUnfold (valeur 2).
Testez ces différentes valeurs pour voir les effets possibles.


IV-B-8. Interférence avec les autres applications Office

Le fait de changer l'aspect visuel des barres de commandes peut toucher les autres applications du pack Office (Word, Excel et Outlook), il faut donc prendre en considération ce phénomène pour ne pas perturber les utilisateurs qui peuvent à la fois travailler sur une application Access et en même temps travailler sur Word.

Le tableau suivant vous permet de savoir si l'utilisation de ces propriétés a un effet ou non sur les autres applications Office.

Propriété Interférence
AdaptiveMenus OUI
DisableAskAQuestionDropdown NON
DisplayFonts OUI
DisplayKeyInTooltips OUI
DisplayTooltips OUI
LargeButtons OUI
MenuAnimationStyle OUI

IV-C. L'objet CommandBar

L'objet CommandBar représente chaque barre de commandes de votre application.

Il existe donc trois types de barres de commandes.

  • Les barres de menus : msoBarTypeMenuBar (valeur = 1).
  • Les barres d'outils : msoBarTypeNormal (valeur = 0).
  • Les menus contextuels : msoBarTypePopup (valeur = 2).
Nous allons donc voir les quelques propriétés pour connaître les barres de commandes (l'utilisation de l'explorateur d'objet vous permettra de consulter les propriétés non présentes dans ce chapitre).


IV-C-1. Type

Il y a donc trois types de barres de commandes, le code suivant vous permet d'avoir la liste des barres de commandes par type.
VBA

Public Sub NbrParBarre()
    ' ======================================================================================
    ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
    ' Description   : Cette procédure va vous permettre d'afficher dans une msgbox le nombre
    '                 de barres de commandes par type dans Access
    '=======================================================================================
    
    ' ===== déclaration =====
    Dim cmb As Office.CommandBar
    Dim lngCpteMenu As Long
    Dim lngCpteOutil As Long
    Dim lngCpteContextuel As Long
    Dim strMessage As String
    
    ' ===== boucle =====
    For Each cmb In CommandBars
        If cmb.BuiltIn = True Then ' pour ne prendre que les barres de commandes définies par l'application
            If cmb.Type = msoBarTypeMenuBar Then
                lngCpteMenu = lngCpteMenu + 1
            End If
            If cmb.Type = msoBarTypeNormal Then
                lngCpteOutil = lngCpteOutil + 1
            End If
            If cmb.Type = msoBarTypePopup Then
                lngCpteContextuel = lngCpteContextuel + 1
            End If
        End If
    Next cmb
    
    ' ===== préparation du message =====
    strMessage = "Comptage des barres de commandes par type :" & vbCrLf & vbCrLf & _
                 "Barre de menu : " & lngCpteMenu & vbCrLf & _
                 "Barre d'outils : " & lngCpteOutil & vbCrLf & _
                 "Menu Contextuel : " & lngCpteContextuel & vbCrLf & vbCrLf & _
                 "Soit un total de " & lngCpteMenu + lngCpteOutil + lngCpteContextuel & " barres de commandes."
    
    ' ===== affichage du message =====
    MsgBox strMessage, vbOKOnly + vbInformation, "Comptage des barres de commandes"

    
End Sub
Ce qui nous donne le résultat suivant :

info Le nombre peut varier en fonction de la version d'Access, sauf pour la barre de menu, car il y en a toujours une.
Vous pouvez bien sûr lancer ce code dans les autres applications Office, et vous aurez alors des résultats différents.

IV-C-2. Position

Les barres de commandes peuvent avoir plusieurs positions :

  • msoBarTop : la barre est positionnée en haut de l'écran
  • msoBarBottom : la barre est positionnée en bas de l'écran
  • msoBarLeft : la barre est positionnée sur la gauche de l'écran
  • msoBarRight : la barre est positionnée sur la droite de l'écran
  • msoBarFloating : la barre est une barre de menu contextuel
info Vous verrez lors de la création des barres de commandes, que cette propriété et une autre vont vous permettre de définir le type de barre que vous allez créer.

IV-C-3. Name et NameLocal

Ces deux propriétés vous permettent de connaître le nom (Name) en Anglais d'une barre de commandes et dans la langue de l'application (NameLocal) le nom de cette barre.

idea Vous trouverez dans la base à télécharger en cliquant sur le bouton " Tous les Menus Access " la liste complète des barres de commandes de votre version d'Access.

IV-C-4. Index

En plus d'être repérée par son nom, une barre de commandes peut-être repérée par son Index. Il s'agit d'une valeur numérique de type long.

Vous retrouverez cette valeur dans la liste des barres de commandes des fichiers à télécharger.

info Vous pouvez faire appel à une barre de commandes par son Nom (Name) ou son Index (la propriété NameLocal ne peut-être utilisé).
Les deux instructions suivantes sont équivalentes :
VBA

MsgBox Application.CommandBars("DataBase").Index
MsgBox Application.CommandBars(2).Index
Elles vous renvoient la valeur 2 qui est l'index de la barre de commandes DataBase (Base de données).


IV-C-5. BuiltIn

Cette propriété vous permet de savoir si votre barre de commandes est définie par votre application ou s'il s'agit d'une barre de commandes personnalisée (en lecture seule).

Celle-ci peut prendre deux valeurs :

  • True (Vrai) : Si la barre de commandes est définie par votre application.
  • False (Faux) : Si la barre de commandes est une barre de commandes personnalisée.
Exemple :

A force de faire des tests pour la rédaction de cet article, ma base Access était recouverte d'une multitude de petites barres. Le code suivant m'a permis de me débarrasser de tous ces parasites.
VBA

Public Sub SupBarrePerso()
    ' ======================================================================================
    ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
    ' Description   : Cette routine va permettre de supprimer toutes les barres personnalisées
    '=======================================================================================
    
    ' ===== déclaration =====
    Dim cmb As Office.CommandBar
    
    ' ===== suppression =====
    For Each cmb In Application.CommandBars
        If cmb.BuiltIn = False Then
            ' si la barre de commandes est une barre personnalisée
            Application.CommandBars(cmb.Name).Delete
        End If
    Next cmb
  
End Sub

IV-C-6. Controls

Cette propriété permet de connaître les contrôles d'une barre de commandes.

Le code suivant va vous permettre d'afficher dans la fenêtre exécution (Ctrl + G) la liste des contrôles d'une barre de commandes.
VBA

Public Sub ListeControls(IdIndex As Long)
    ' ======================================================================================
    ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
    ' Description   : Cette routine permet d'avoir la propriété Caption d'une barre de commande
    '                 passée en paramêtre
    '=======================================================================================
    
    Dim ctrl As Office.CommandBarControl
    
    For Each ctrl In Application.CommandBars(IdIndex).Controls
        Debug.Print ctrl.Caption
    Next ctrl
End Sub
Il suffit de passer en paramètre l'index de la barre de commandes.

info Vous trouverez la liste des contrôles dans les fichiers à télécharger en cliquant sur le bouton " Tous les Détails des Barres "

IV-C-7. Enabled

Cette propriété va vous permettre de déterminer ou de décider si une barre de commandes sera active ou non.

Celle-ci peut prendre deux valeurs :

  • True (Vrai) : la barre de commandes est active.
  • False (Faux) : la barre de commandes est inactive.
Le code suivant va vous permettre de désactiver toutes les barres de commandes d'une application Office.
VBA

Dim cmb As Office.CommandBar
For Each cmb In Application.CommandBars
    cmb.Enabled = False
Next cmb

IV-C-8. Delete

Cette propriété permet de détruire une barre de commandes.

L'utilisation la plus courante que je fais avec cette propriété, c'est lorsque je crée des barres de commandes dynamiques lors de l'exécution d'une application.

En effet, si vous créer une barre de commandes et que celle-ci existe déjà, votre application va générer une erreur.
Pour cela il faut détruire la barre, mais si c'est la première fois que le code tourne, il y aura une erreur parce que la barre n'existe pas.

La solution est de mettre ces deux lignes de codes au début de la routine de création de barres.
VBA

On Error Resume Next
Application.CommandBars("MaBarre").Delete

IV-C-9. Height

Cette propriété va permettre de connaître ou d'affecter une hauteur à une barre de commandes.

La ligne suivante renvoie la hauteur en pixels de la barre d'outil DATABASE.
VBA

MsgBox Application.CommandBars("DATABASE").Height
warning Contrairement aux dimensions des contrôles en VBA, la propriété Height est un entier de type long en Pixels et Non en Twips.

IV-C-10. Width

Cette propriété va permettre de connaître ou d'affecter une largeur à une barre de commandes (en Pixels).


IV-C-11. Left

Cette propriété permet de récupérer ou de positionner une barre de commandes par rapport au bord gauche de la fenêtre de l'application (Cette distance est exprimée en Pixels).


IV-C-12. Top

Cette propriété permet de récupérer ou de positionner une barre de commandes par rapport au bord haut de la fenêtre de l'application (Cette distance est exprimée en Pixels).


IV-C-13. Protection

Il est possible d'assurer une protection à une barre de commandes pour éviter certaines manipulation malheureuses d'un utilisateur.

Cette propriété peut prendre plusieurs valeurs :

Propriété Commentaires
msoBarNoChangeDock Votre barre de commandes est positionnée en haut de la fenêtre (Position : msoBarTop), vous ne pouvez pas la déplacer sur le reste de la fenêtre.
Votre barre de commandes est une barre d'outils flottante (Position : msoBarFloating) , vous ne pouvez pas mettre votre barre de commandes sous la barre de menus, elle restera toujours flottante.
msoBarNoChangeVisible Vous ne pouvez fermer la barre de commandes (la croix que apparaît sur une barre d'outils flottante disparaît).
msoBarNoCustomize Vous ne pourrez personnaliser votre barre de commandes (même si vous pouvez afficher la fenêtre de personnalisation des barres, aucun contrôle ne pourra se positionner sur celle-ci).
msoBarNoHorizontalDock Vous ne pourrez pas positionner une barre de commandes (en général une barre d'outils) horizontalement.
msoBarNoMove Vous ne pourrez pas déplacer la barre de commandes.
msoBarNoProtection Il n'y a aucune protection sur votre barre de commandes, l'utilisateur peut en faire ce qu'il veut donc DANGER !
msoBarNoResize Empêche le redimensionnent d'une barre de commandes.
msoBarNoVerticalDock Vous ne pourrez pas positionner une barre de commandes (en général une barre d'outils) verticalement.
info Pour cumuler les protections, il suffit d'ajouter les paramètres de la même manière que pour une MsgBox.
Le code suivant empêche le déplacement d'une barre et de la fermer.
VBA

cmb.Protection = msoBarNoMove + msoBarNoChangeVisible


IV-C-14. Reset

Cette méthode a pour but de réinitialiser les propriétés d'une barre de commandes.

Cette propriété est très utile lorsque vous avez effectué des manipulations sur les barres de commandes définies par votre application. Cela va vous permettre de les retrouver dans leur état d'origine.


IV-D. Les éléments composants les barres de commandes

Les barres de commandes sont composées de différents types de contrôles qui se décomposent en 3 catégories :

CommandBarButton : Il s'agit d'un simple bouton, où un clic enclenche une action.

CommandBarComboBox : Cette catégorie regroupe plusieurs styles de listes déroulantes.

CommandBarPopup : Cette catégorie regroupe plusieurs styles de menus contextuels.

Nous allons voir en détail ces différentes catégories et les propriétés communes. Les instructions seront survolées, elles seront abordées en détail lors des créations des barres de commandes.


IV-D-1. CommandBarControl

Les propriétés que nous allons voir ici sont communes à toutes les catégories.


IV-D-1-a. BeginGroup

Cette propriété permet de déterminer si un contrôle est le premier d'un groupe de contrôles.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : C'est le premier contrôle du groupe de contrôles.
  • False (Faux) : Ce n'est pas le premier contrôle du groupe de contrôles.
info L'utilisation de cette instruction vous permettra de positionner un séparateur avant le contrôle, ainsi vous pourrez visuellement séparer des groupes de contrôles de barres de commandes par thème.

IV-D-1-b. BuiltIn

Cette propriété permet de savoir s'il s'agit d'un contrôle définie par l'application ou d'un contrôle personnalisé.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Il s'agit d'un contrôle définie par l'application.
  • False (Faux) : Il s'agit d'un contrôle personnalisé.

IV-D-1-c. Caption

Cette propriété définie le texte qui se trouve sur un contrôle de barre de commandes. Celui-ci apparaît aussi dans l'info bulle si aucun texte n'est défini pour celui-ci.

Le fait de mettre un texte dans la propriété Caption ne veut pas dire que celui-ci s'affichera, il faudra aussi jouer avec la propriété Style (qui sera vue plus loin).


IV-D-1-d. TooltipText

Cette propriété permet d'afficher un message dans l'info bulle lors du survol du contrôle par la souris.

info Si vous ne spécifiez aucune chaîne de texte pour cette propriété, c'est la valeur de la propriété Caption qui sera affichée.

IV-D-1-e. Enabled

Cette propriété active ou désactive un bouton de barre de commandes. Cela a pour effet de le griser ou de le dégriser en fonction de la valeur de cette propriété.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Le contrôle est actif.
  • False (Faux) : Le contrôle est inactif.

IV-D-1-f. Id

Cette propriété permet de connaître l'action du contrôle, celle-ci ne s'applique qu'aux contrôles définis par l'application, car les contrôles que vous créez auront la valeur 1. (Vous retrouverez les Id pour chaque contrôle dans les fichiers en téléchargement.)

info Dans la partie Bonus, vous trouverez des utilisations de cette propriété.

IV-D-1-g. Index

Cette propriété représente la position du contrôle dans une barre de commandes.

warning Ne pas confondre Index avec Id, car Id représente une valeur qui détermine l'action du contrôle dans l'application.

IV-D-1-h. Parent

Cette propriété (en lecture seule) permet de connaître des informations sur la barre de commandes à laquelle appartient le contrôle (son nom, etc …)


IV-D-1-i. OnAction

Cette propriété permet de définir l'action d'un bouton de barre de commandes.

Il peut s'agir d'une macro (Access), d'une routine ou d'une fonction, voici les différentes utilisation possibles de cette propriété.

Lancer une macro (Access) :

Le code suivant va permettre de lancer une macro nommée MaMacro, qui est affectée au 1er bouton de la barre de commandes Test.
VBA

Application.CommandBars("Test").Controls(1).OnAction = "MaMacro"
warning Ici je parle de macro Access, et non de macro Excel ou Word, car les termes peuvent prêter à confusion.
Lancer une fonction (Function) :

Le code suivant dans la même lignée va lancer une fonction MaFonction.
VBA

Application.CommandBars("Test").Controls(1).OnAction = "=MaFonction()"
Lancer une routine (Sub) :

Le code suivant va de la même manière lancer une routine MaRoutine.
VBA

Application.CommandBars("Test").Controls(1).OnAction = "MaRoutine"
warning L'utilisation des macros (Access) est déconseillée, en effet elles ne permettent pas de mettre en place une gestion d'erreur.
Les fonctions (Function) et les routines (Sub) doivent être déclarées en Public et dans un module, faites un module comportant toutes les instructions de vos menus, vous pourrez ainsi les retrouver plus facilement.
Vous trouverez un exemple d'utilisation dans la partie Bonus, dans la création de lettres d'un répertoire.

IV-D-1-j. Execute

Cette méthode va vous permettre de lancer l'action définie par la propriété OnAction, vous en trouverez un exemple dans la partie Bonus qui traite de l'utilisation des fonctions des barres de commandes.


IV-D-1-k. Delete

Cette instruction permet de supprimer un contrôle de barre de commandes.


IV-D-1-l. Visible

Cette propriété va permettre de rendre visible ou invisible un bouton de barre de commandes.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : Le contrôle est visible.
  • False (Faux) : Le contrôle est invisible.

IV-D-1-m. SetFocus

Cette méthode donne le focus au bouton spécifié.


IV-D-2. CommandBarButton

Le contrôle bouton de commandes est le bouton standard des barres de commandes. Il reprend les instructions ci-dessus et de nouvelles propres à ce contrôle.


IV-D-2-a. BuiltInFace

Cette propriété permet de définir si l'image du bouton de commandes, est son image par défaut. Cela s'applique aux barres de commandes prédéfinies par l'application.

Cette propriété peut prendre deux valeurs :

  • True (Vrai) : L'image est celle définie par défaut.
  • False (Faux) : L'image n'est pas celle définie par défaut.

IV-D-2-b. Copy

Cette propriété permet de copier un contrôle existant dans une nouvelle barre de commandes. Nous aborderons son utilisation lors de la création des barres de commandes personnalisées.


IV-D-2-c. CopyFace

Cette propriété permet de copier l'image du bouton pour la mettre sur un autre.

Contrairement à l'instruction Copy qui elle copie le contrôle et toutes ses propriétés, avec CopyFace, nous ne récupérons que l'image.


IV-D-2-d. FaceId

Cette propriété nous donne le numéro de l'image d'un bouton d'une barre de commandes. Pour avoir les numéros de toutes les images, essayez le formulaire qui se trouve dans la base en téléchargement.


IV-D-2-e. Style

Sur les boutons de commandes nous pouvons avoir différents styles en combinant le texte et les icônes.

Ceux-ci sont :

  • msoButtonAutomatic
  • msoButtonCaption
  • msoButtonIcon
  • msoButtonIconAndCaption
  • msoButtonIconAndCaptionBelow
  • msoButtonIconAndWrapCaption
  • msoButtonIconAndWrapCaptionBelow
  • msoButtonWrapCaption
Le code suivant va vous afficher une barre d'outils avec les différents styles, ce qui vous permettra de mieux vous rendre compte de l'impact visuel.
VBA

Public Sub StyleCommandButton()
    ' ======================================================================================
    ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
    ' Description   : Le code suivant va vous permettre d'afficher différents styles de boutons
    '=======================================================================================
    
    ' ===== déclaration =====
    Dim cmb As Office.CommandBar
    Dim btn As Office.CommandBarButton
    
    ' ===== suppression de la barre existante =====
    On Error Resume Next
    Application.CommandBars("StyleButton").Delete
    
    ' ===== création de la barre =====
    Set cmb = Application.CommandBars.Add("StyleButton", msoBarFloating)
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonAutomatic"
        .FaceId = 25
        .Style = msoButtonAutomatic
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonCaption"
        .FaceId = 25
        .Style = msoButtonCaption
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonIcon"
        .FaceId = 25
        .Style = msoButtonIcon
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonIconAndCaption"
        .FaceId = 25
        .Style = msoButtonIconAndCaption
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonIconAndCaptionBelow"
        .FaceId = 25
        .Style = msoButtonIconAndCaptionBelow
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonIconAndWrapCaption"
        .FaceId = 25
        .Style = msoButtonIconAndWrapCaption
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonIconAndWrapCaptionBelow"
        .FaceId = 25
        .Style = msoButtonIconAndWrapCaptionBelow
    End With
    Set btn = cmb.Controls.Add(msoControlButton)
    With btn
        .BeginGroup = True
        .Caption = "msoButtonWrapCaption"
        .FaceId = 25
        .Style = msoButtonWrapCaption
    End With
    
    ' ===== rendre la barre visible =====
    cmb.Visible = True

End Sub

Le résultat est le suivant.


IV-D-3. CommandBarComboBox

Il s'agit des boutons de commandes qui ont l'aspect d'une liste déroulante. il y'en a plusieurs, en voici la liste et leur aspect.

Cependant, ne rêvez pas en voyant ces multiples graphiques, car il n'est pas possible de tous les utiliser.

Contrôle Image
msoControlButtonDropdown
msoControlComboBox
msoControlDropdown
msoControlEdit
msoControlSplitDropdown
msoControlOCXDropDown
msoControlGraphicCombo
msoControlGraphicDropdown

De tous ces contrôles nous ne pourrons en utiliser que 3 pour la création de barres de commandes personnaliséses : msoControlEdit, msoControlDropdown et msoControlComboBox.

Les listes déroulantes ont d'autres propriétés que nous allons évoquer.


IV-D-3-a. AddItem

Cette méthode va nous permettre de rajouter des éléments à la liste.


IV-D-3-b. Clear

Cette méthode va nous permettre de supprimer tous les éléments d'une zone de liste.


IV-D-3-c. DropDownLines

Va nous permettre de déterminer le nombre de ligne d'une zone de liste déroulante.


IV-D-3-d. DropDownWidth

Permet de déterminer la largeur de la liste (en pixels).


IV-D-3-e. List

Permet de récupérer la valeur de la liste qui a été sélectionnée par rapport à sa position donnée par la propriété ListIndex.


IV-D-3-f. ListCount

Permet de récupérer le nombre de lignes de la liste.


IV-D-3-g. ListHeaderCount

Cette propriété va permettre de réaliser un trait de séparation dans une liste déroulante. Le chiffre que vous allez affecter à cette propriété déterminera le nombre de lignes avant cette séparation.


IV-D-3-h. ListIndex

Cette propriété va permettre de récupérer le numéro de la ligne sélectionnée.


IV-D-3-i. RemoveItem

Permet de supprimer une ligne de la liste.


IV-D-3-j. Style

Une liste peut avoir deux styles :

  • msoComboLabel ; Une étiquette est affectée à la liste, et est remplie par la propriété Caption.
  • msoComboNormal : Il n'y a pas d'étiquette.

IV-D-4. CommandBarPopup

Ce contrôle permet d'ajouter un sous-menu à une barre de commandes.

Voici quelques exemples de type de CommandBarPopup.

   
msoControlPopup
msoControlButtonPopup
msoControlSplitButtonPopup
msoControlSplitButtonMRUPopup

De toutes ces contrôles nous ne pourrons en utiliser qu'un seul, le contrôle msoControlPopup


V. CREATION DE BARRES DE COMMANDES PERSONNALISEES

Nous allons maintenant rentrer dans le vif du sujet après toute cette théorie en réalisant nous-mêmes nos barres de commandes, nous allons mettre en pratique tout ce qui a été vu précédemment, et découvrir d'autres propriétés.


V-A. Créer un Menu


V-A-1. Présentation

Il est important que votre menu ait une présentation similaire aux menus que vous trouvez dans toutes les applications Windows. Le but est de ne pas perturber les utilisateurs de vos applications, il faut garder une certaine logique de présentation.

  • Fichier : Avec au minimum le bouton pour quitter l'application.
  • Edition : Si vous avez des opérations de copier coller.
  • Outils : Si par exemple vous avez des paramétrages personnalisés.
  • ? : Si vous avez décider de joindre à votre application un fichier d'aide.

V-A-2. Ajouter une barre de menu

Lorsque l'on ajoute une barre de menus, c'est pour remplacer la barre de menus d'Access par la sienne.

Pour ajouter une barre de menus nous allons utiliser la méthode Add de la collection CommandBars.

Syntaxe : Add(Name, Position, MenuBar, Temporary)

  • Name : Valeur de type texte pour nommer votre menu
  • Position : Position de la barre de menus. Ce paramètre peut prendre plusieurs valeurs, pour une barre de menus nous allons prendre la valeur : msoBarTop, car une barre de menu se positionne toujours en haut.
  • MenuBar : Ce paramètre permet de déterminer si la barre de menus doit remplacer la barre de menus existante, nous allons mettre cette valeur à True (Vrai).
  • Temporay : Pour déterminer si cette barre est temporaire, cela signifie que celle-ci sera détruite lors de la fermeture de l'application.
Le code suivant va créer une barre de menus nommée " MaBarre "
VBA

Public Sub CreerMenu()
    ' ======================================================================================
    ' Auteur