IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Création de rubans personnalisés sous Microsoft Access 2007

Image non disponible

Le passage de la version 2003 à la version 2007 a amené le remplacement des menus par un ruban. Communément appelée ribbon, cette barre horizontale propose des groupes de boutons arrangés dans des onglets. A travers ce tutoriel, vous allez remarquer qu'elle représente bien plus qu'un simple menu et qu'elle peut devenir rapidement l'élément principal de vos formulaires. Elle vous permet ainsi de réunir dans un seul et même endroit : les actions, les filtres, les tris, les recherches, etc.

Pas à pas, ce document va vous apprendre à créer votre propre ruban qui viendra s'intégrer avec harmonie dans vos développements.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Problématique - énoncé

Tout au long de ce tutoriel, les différents rubans créés seront appliqués au même formulaire. Il s'agit d'un formulaire de gestion d'événements.

Il est basé sur une table tblEvenement dont la structure est la suivante :

Image non disponible

Ci-dessous le formulaire :

Image non disponible

Comme le démontre l'image ci-dessus, c'est un formulaire très simple. Il n'y a pas de boutons de commandes : les différentes actions seront exécutées à partir du ruban. La mise en évidence des événements importants est assurée par la mise en forme conditionnelle.

Image non disponible

Le ruban personnalisé devra gérer :

  • L'ajout, la duplication et la suppression des événements. Il doit être impossible de supprimer un événement important;
  • Le filtrage des données par mois et par importance;
  • La recherche d'événements.

II. Les outils

Comme vous allez le lire un peu plus loin, la création du ruban demande l'écriture de fichiers dans un langage autre que VBA. Bien qu'ils peuvent être rédigés dans n'importe quel éditeur de texte, je vous recommande particulièrement l'éditeur Notepad++.

D'autre part, la manipulation du ruban dans cet exemple nécessite l'ajout de deux références à votre projet :

  • Microsoft Office 12 Object Library
  • Microsoft Scripting Runtime

III. Comment programmer le ruban ?

En lisant le début de cette section, vous allez avoir l'impression que Microsoft a reculé plutôt que d'avancer technologiquement. Je vous rassure, il ne s'agit que d'une impression. Toutefois, je le concède, si le développement de menu via les commandbars était à la portée de tous, le développement de rubans se révèle beaucoup plus ardu. Pourquoi ? Tout simplement parce que la création de boutons ne se fait plus en VBA. Le ruban puise son apparence et ses fonctionnalités dans du code XML.

C'est donc un code XML valide (respectant le schéma imposé par Microsoft) qui générera un ruban.

La programmation XML demande beaucoup de rigueur. Pour être lisible et donc maintenable, le code devra être correctement indenté.
D'autre part, contrairement à VBA, la casse des mots-clés doit être respectée.

IV. Mise en place d'un ruban personnalisé

Avant d'aborder la conception d'un ruban personnalisé, je vous propose de découvrir cette fonctionnalité avec un petit exemple.

La mise en place d'un ruban personnalisé dans vos applications Access nécessite deux étapes :

  • Chargement des propriétés du ruban dans l'application;
  • Association d'un formulaire (ou d'un état) avec un onglet du ruban.

IV-A. Chargement du ruban

Comme indiqué au chapitre précédent, l'aspect du ruban est codé au sein de données XML. Ce sont ces données XML qui sont à charger dans l'application. Pour cela, l'objet Application propose la méthode LoadCustomUI. Cette méthode accepte deux arguments :

  • Le nom du ruban (il sera utilisé par les formulaires Access)
  • Le code XML contenant les informations relatives au ruban

Inutile de vous dire qu'il est peu judicieux d'inscrire le code XML directement dans le code VBA. Si c'est le cas, les opérations de maintenance vont s'avérer très compliquées. Une méthode consiste à écrire les balises XML dans un fichier dédié, de lire ce fichier et de passer son contenu à la méthode LoadCustomUI. Dans cet exemple, le fichier en question sera nommé evenement_ribbon.XML et sa lecture se fera via l'objet FileSystemObjet de la librairie Microsoft Scripting Runtime. Vous devez donc l'ajouter à votre projet.

Il est conseillé de donner un nom explicit au fichier. Ceci vous facilitera les corrections futures. Dans le même ordre d'idée, il est préférable de stocker le fichier XML dans le même répertoire que l'application qui l'utilise.

Créez un nouveau module : mduRibbon.

VBA
Sélectionnez
Public Function LoadRibbon()
Dim strXML As String
Dim oFso As New FileSystemObject
Dim oFtxt As TextStream
'Charge le fichier XML en mémoire
Set oFtxt = oFso.OpenTextFile(CurrentProject.Path & _
      "\evenement_ribbon.XML", ForReading)
'Récupère le contenu
strXML = oFtxt.ReadAll
'Charge le rubban personnalisé correspondant
Application.LoadCustomUI "rubanperso", strXML
End Function

Le fichier XML à utiliser est très simple :

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon startFromScratch="true">
      <tabs>
         <tab id="tabEvenement" label="Gestion des événements" visible="true">
         <group id="grpEnregistrement" label="Enregsitrements">
             <button id="btnEssai" label="Essai" size="large"/>
			</group>
         </tab>
      </tabs>
   </ribbon>
</customUI>

IV-B. Association du ruban

La propriété gérant le ruban se situe dans l'onglet Autres des propriétés du formulaire. Il s'agit d'ID de ruban personnalisé. A ce stade, aucune valeur n'est disponible :

Image non disponible

Et pour cause, dans la section précédente, nous avons écrit une fonction VBA permettant de charger le ruban. Mais, cette fonction n'ayant pas été lancée, le ruban n'est pas encore disponible. Il vous faut l'exécuter. Une technique consiste à placer le curseur sur une de ses lignes et d'actionner la touche F5.

A présent la zone de liste propose la valeur rubanperso.

Image non disponible

Sélectionnez-la, enregistrez et ouvrez le formulaire en mode visualisation. Le nouveau ruban apparaît.

Image non disponible

IV-C. Chargement automatique

Un problème se pose si on ferme la base de données et la ré-ouvre. Le ruban est déchargé. En toute logique, dans ce cas, le ruban personnalisé ne pourra pas être affiché avec le formulaire. La solution : charger le ruban à chaque démarrage de la base de données. Pour cela, il est possible de créer une macro nommée AutoExec dont la seule et unique action sera d'exécuter la fonction LoadRibbon() vue précédemment.

Image non disponible

V. Structure du fichier XML

V-A. Structure de base

Reprenons l'exemple donné plus haut pour examiner en détail la syntaxe d'un ruban:

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon startFromScratch="true">
      <tabs>
         <tab id="tabEvenement" label="Gestion des événements" visible="true">
         <group id="grpEnregistrement" label="Enregsitrements">
             <button id="btnEssai" label="Essai" size="large"/>
			</group>
         </tab>
      </tabs>
   </ribbon>
</customUI>

Dans ce fichier XML, la balise ribbon définit un nouveau ruban personnalisé. La balise tabs représente la liste des onglets (par exemple : Accueil, Créer, Données Externes). Etant donné qu'il s'agit d'une liste, on retrouve la configuration suivante :

XML
Sélectionnez
<tabs>
	<tab>
	</tab>
	<tab>
	</tab>
</tabs>

Où chaque élément tab représente un onglet. Viennent ensuite les groupes (group) de contrôles.

Image non disponible

Et enfin, chaque groupe est composé de contrôles (control). Ici, le groupe Enregistrements possède un seul contrôle : un bouton.

Vous remarquerez que toutes les balises sont inclues dans la racine immuable :

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
</customUI>

La plupart des balises possèdent un attribut id. Il permet d'identifier le composant du ruban de manière unique. Les doublons d'id sont interdits.

Attention : il ne faut pas confondre la balise group avec la balise groups. groups représente la collection de groupes, group correspond à un groupe. Il en va de même pour toutes les collections de noeuds : leur nom est toujours pluriel.

V-B. Ruban, onglet, groupe

Pour répondre à la problématique énoncée au début de ce tutoriel, le ruban va proposer un onglet (Gestion des événements) ainsi qu'un premier groupe de contrôles (Données).

Le code du fichier XML respecte logiquement la hiérarchie des différents éléments.

Etape 1 : balise CustomUI

A ne pas oublier. Pour que le fichier XML soit valide, la balise racine doit être :

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
</customUI>

Etape 2 : définition du ruban personnalisé

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon>
      
   </ribbon>
</customUI>

Etape 3 : avant d'ajouter l'onglet, il faut impérativement créer la liste d'onglets.

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon>
      <tabs>
         
      </tabs>
   </ribbon>
</customUI>

Etape 4 : création de l'onglet Gestion des événements

Les attributs utilisés sont :

  • id : nom de l'onglet
  • label : titre qui sera affiché
  • visible : l'onglet est visible

Résultat :

Image non disponible

Le ruban personnalisé vient s'ajouter au ruban d'Access. Pour masquer les autres onglets prédéfinis, il faut utiliser l'attribut startFromScratch de la balise ribbon.

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon startFromScratch="true">
      <tabs>
         <tab id="tabEvenement" label="Gestion des événements" visible="true">
           <group id="grpDonnees" label="Données">
         
</group>
         </tab>
      </tabs>
   </ribbon>
</customUI>
Image non disponible

V-C. Les contrôles

V-C-1. Les boutons

Eléments de base, les boutons permettent de lancer une action en réponse à leur clic. Dans le XML, ils sont définis par la balise <button>. Il existe deux types de boutons :

  • Les boutons prédéfinis
  • Les boutons personnalisés

Quelque soit le type du bouton, son attribut size permet de définir sa taille. Les choix possibles sont large et normal.

V-C-1-1. Les boutons prédéfinis

Lors de la création de barres de menu dans les versions antérieures, il était possible de reprendre à son compte des boutons fournis par Access (par exemple les boutons copier, couper, coller).

Avec le ruban, cette fonctionnalité est conservée. Pour insérer un bouton prédéfini, il faut inclure son identifiant dans la balise <button> via l'attribut idMso.

Par exemple, pour le bouton Coller :

XML
Sélectionnez
<button idMso=Paste>
</button>

L'identifiant Mso correspond au nom anglais du bouton de commande. Vous pouvez consulter la liste des identifiants Mso en annexe pour obtenir la plupart des commandes.

Dans l'application qui nous intéresse, il est possible de confier des tâches demandées aux boutons prédéfinis :

  • Ajouter un nouvel enregistrement (idMso=GoToNewRecord)
  • Supprimer un enregistrement (idMso=RecordsDeleteRecord)

Le code XML du groupe grpDonnees sera donc :

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon startFromScratch="true">
      <tabs>
        <tab id="tabEvenement" label="Gestion des événements" visible="true">
			<group id="grpDonnees" label="Données">
			<button idMso="GoToNewRecord" size="normal"/>
			<button idMso="RecordsDeleteRecord" size="normal"/>
			</group>
        </tab>
      </tabs>
   </ribbon>
</customUI>

Résultat :

Image non disponible

Ce n'est pas parce que l'on utilise un bouton prédéfini que l'on ne peut pas le personnaliser un minimum. Il est par exemple possible de modifier son intitulé afin de le rendre plus explicite.

XML
Sélectionnez
			<group id="grpDonnees" label="Données">
			<button idMso="GoToNewRecord" label="Nouvel événement" size="normal"/>
			<button idMso="RecordsDeleteRecord" label="Supprimer l'événement" size="normal"/>
			</group>
Image non disponible
V-C-1-2. Les boutons personnalisés

Evidemment, le développeur ne peut pas se limiter aux actions offertes par les boutons inclus dans Access. La possibilité de créer ses propres boutons est donc primordiale. Pour créer un bouton personnalisé, il suffit de ne pas spécifier d'identifiant idMso et de le remplacer par un identifiant simple via l'attribut id.

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> 
   <ribbon startFromScratch="true">
      <tabs>
        <tab id="tabEvenement" label="Gestion des événements" visible="true">
			<group id="grpDonnees" label="Données">
			
			<button idMso="GoToNewRecord" label="Nouvel événement" size="large"/>
			<button id="btnDupliquer" label="Dupliquer l'événement" size="normal"/>
			<button idMso="RecordsDeleteRecord" label="Supprimer l'événement" size="normal"/>
			</group>
        </tab>
      </tabs>
   </ribbon>
</customUI>

Résultat :

Image non disponible

A ce stade, le bouton n'est lié à aucune procédure. Un clic dessus n'aura aucun effet. La gestion des événements est traitée ultérieurement dans ce tutoriel.

V-C-1-3. Images

Dans un bouton personnalisé, aucune image n'est affectée au bouton. Comme en témoigne l'aperçu d'écran ci-dessus, le rendu graphique est assez disgracieux. Bien entendu, il est possible d'y remédier.

L'insertion d'image dans un bouton peut se faire de deux manières :

  • Utiliser l'image d'un bouton prédéfini d'Access
  • Utiliser sa propre image

Méthode 1 :

En attribuant l'identifiant idMso d'un bouton prédéfini à l'attribut imageMso du bouton personnalisé, Access affiche l'image du bouton prédéfini sur le bouton personnalisé.

Par exemple :

XML
Sélectionnez
<button id="btnDupliquer" label="Dupliquer l'événement" imageMso="SynchronizeData" size="normal"/>
Image non disponible

Méthode 2 :

Celle-ci est un peu plus complexe. En effet, pour que le bouton puisse afficher l'image, il faut qu'elle soit dans un format acceptable (taille, poids, etc.) par le gestionnaire de ruban d'Office.

Pour convertir l'image dans ce format, il faut utiliser Visual Basic et plus particulièrement les fonctions CallBack du ruban. Qu'est ce que sont ces fameux CallBack ? Ce sont des fonctions lancées lors du chargement du ruban.
Imaginez une fonction nommée getImageDupliquer appelée par le ruban à son ouverture et qui retourne une image compatible. Le ruban récupère l'image et l'affecte au bouton btnDupliquer. Bien entendu, la fonction en question doit répondre à un protocole strict, notamment en ce qui concerne ses paramètres pour pouvoir être comprise et exécutée par le ruban.

En VBA, la convention du ruban impose qu'il s'agisse en fait d'une procédure dont l'entête est le suivant :

VBA
Sélectionnez
Public Sub GetImageDupliquer(ByVal control As IRibbonControl, ByRef image)

Quand le ruban appelle la procédure, il lui transmet le bouton concerné dans le premier paramètre (ce qui pourra par exemple permettre des vérifications avant l'affectation de l'image) et récupère l'image dans le paramètre image. Bien que déclaré en Variant, le paramètre image est en fait un objet du type IPictureDisp. La méthode LoadPicture permet de créer un tel objet en fonction du chemin de l'image.

Voici un exemple de fonction getImageDupliquer à insérer dans le module mduRibbon :

VBA
Sélectionnez
Public Sub GetImageDupliquer(ByVal control As IRibbonControl, ByRef image)
Set image = stdole.LoadPicture(CurrentProject.Path & "\dupliquer.jpg")
End Sub

Le lien entre la procédure et le bouton se fait bien entendu dans le XML via l'attribut getImage du bouton.

XML
Sélectionnez
<button id="btnDupliquer" label="Dupliquer l'événement" getImage="getImageDupliquer" size="normal"/>
Image non disponible

Le fait que la fonction getImageDupliquer soit à votre charge peut paraître lourd, toutefois, c'est un réel avantage. Il est ainsi possible d'écrire une procédure qui correspond à vos besoins, notamment une procédure générique utilisable par plusieurs boutons :

VBA
Sélectionnez
Public Sub GetImageBouton(ByVal control As IRibbonControl, ByRef image)
Select Case control.Id
    Case btnDupliquer:
        Set image = stdole.LoadPicture(CurrentProject.Path & "\dupliquer.jpg")
    Case btnInserer:
        Set image = stdole.LoadPicture(CurrentProject.Path & "\inserer.bmp")
End Select
End Sub

V-C-2. Les cases à cocher

Une case à cocher est définie dans le code XML avec la balise checkbox. Contrairement aux boutons, il n'est pas possible d'utiliser l'attribut size. Une telle utilisation provoquerait une invalidation de tout le ruban.

Dans la problématique suivie depuis le début du tutoriel, des cases à cocher peuvent être mises en place pour gérer le filtrage des événements.

C'est ainsi que peut naître le groupe grpFiltre dont le XML est :

XML
Sélectionnez
<group id="grpFiltre" label="Filtre">
<checkBox id="chkDate" label="Aujourd'hui"/>
<checkBox id="chkImportant" label="Important"/>
</group>
Image non disponible

V-C-3. Le contrôle Gallery - tableau de boutons

Le contrôle Gallery permet d'afficher un composant disposant des boutons en lignes et en colonnes. Il ne s'agit pas d'un sous-menu car il n'est possible d'inclure que des boutons.

Un tel élément est codé dans le XML avec la balise <gallery>. Il est alors possible de spécifier le nombre de colonnes (columns) et de lignes (rows) utilisées pour répartir les différents contrôles. Chaque bouton du contrôle Gallery est un Item représenté par une balise <item>.

L'exemple suivant vient s'ajouter au groupe grpFiltre pour permettre à l'utilisateur d'appliquer un filtre sur le mois.

XML
Sélectionnez
<gallery id="galMois" label="Mois ..." columns="3" rows="4" getImage="getImageGalleryMois">
	<item id="it01" label="Janvier"/>
	<item id="it02" label="Février"/>
	<item id="it03" label="Mars"/>
	<item id="it04" label="Avril"/>
	<item id="it05" label="Mai"/>
	<item id="it06" label="Juin"/>
	<item id="it07" label="Juillet"/>
	<item id="it08" label="Août"/>
	<item id="it09" label="Septembre"/>
<item id="it10" label="Octobre"/>
<item id="it11" label="Novembre"/>
<item id="it12" label="Décembre"/>
</gallery>
Image non disponible

Ici, les éléments (les mois) sont décrits dans le XML mais il est possible de construire le tableau dynamiquement. Tout comme la mise en place d'image sur un bouton, la construction dynamique d'un contrôle Gallery se fait à l'aide de fonctions CallBack.

Trois fonctions sont nécessaires :

  • getItemCount : nombre de boutons
  • getItemLabel : texte du bouton
  • getItemImage : image du bouton

En VBA, ces CallBack doivent correspondre à la norme suivante :

  • Sub getItemCount(control As IRibbonControl, ByRef count)
  • Sub getItemLabel(control As IRibbonControl, index As Integer, ByRef label)
  • Sub getItemImage(control As IRibbonControl, index As Integer, ByRef image)

Pour la liste de mois donnée plus haut, il est possible de créer dynamiquement les différents items.

VBA :

VBA
Sélectionnez
Sub getLabelMois(control As IRibbonControl, index As Integer, ByRef label)
    label = Format(DateSerial(2000, index + 1, 1), "mmmm")
End Sub
Sub getNBMois(control As IRibbonControl, ByRef count)
    count = 12
End Sub
Sub getImageMois(control As IRibbonControl, index As Integer, ByRef image)
    Set image = stdole.LoadPicture("E:\imagesCalendrier\cal" & index + 1 & ".gif")
End Sub
Sub getImageGalleryMois(control As IRibbonControl, ByRef image)
Set image = stdole.LoadPicture("E:\imagesCalendrier\cal1.gif")
End Sub

XML :

XML
Sélectionnez
<gallery id="galMois" label="Mois ..." columns="3" rows="4" getImage="getImageGalleryMois" 
getItemCount="getNBMois" getItemLabel="getLabelMois" getItemImage="getImageMois"/>
Image non disponible

V-D. Les contrôles de saisies

Le ruban n'accepte pas que des contrôles de commande mais aussi des zones de saisies. Il est ainsi possible d'utiliser des zones de texte et des zones de listes déroulantes.

V-D-1. Les zones de texte

Il aurait été légitime de penser qu'il s'agissait de TextBox. Malheureusement, il y a un piège, ce sont en fait des editBox. Le risque de confusion avec leurs homologues VBA est donc important, soyez attentif. Comme pour les autres contrôles, il est possible de définir une légende (label), à la différence près qu'elle ne serait pas placée dans la zone de texte mais sur son côté gauche.

Grâce à ces éléments, nous pouvons rajouter un groupe de recherche à notre ruban personnalisé.

XML
Sélectionnez
<group id="grpRecherche" label="Recherche multi-critères">
<editBox id="txtNum" label="Num :"/>
<editBox id="txtDesc" label="Desc :"/>
<editBox id="txtDate" label="Date :"/>
</group>
Image non disponible

Bien entendu, il est possible d'affecter dynamiquement du texte à une zone grâce à sa fonction CallBack getText.

Exemple :

Dans le module :

VBA
Sélectionnez
Sub getTextDate(control As IRibbonControl, ByRef text)
text = Format(Date, "dd/mm/yyyy")
End Sub

Dans le XML :

XML
Sélectionnez
<editBox id="txtDate" label="Date :" getText="getTextDate"/>
Image non disponible

L'attribut sizeString de la zone de texte définit sa largeur. Elle est exprimée en nombre de caractères. L'attribut maxLength correspond au nombre de caractères maximum autorisés à la saisie.

V-D-2. Les zones de listes déroulantes

Là, le nom coïncide bien avec celui des zones de listes déroulantes VBA, à savoir comboBox. Comme pour le contrôle Gallery, les éléments sous-jacents sont définis dans des balises item.

Exemple :

XML
Sélectionnez
<comboBox id="cmbNum" label="Num :">
	<item id="itNum1" label="1"/>
	<item id="itNum2" label="2"/>
	<item id="itNum3" label="3"/>
</comboBox>
Image non disponible

Les éléments peuvent aussi être créés dynamiquement. Prenons l'exemple donné plus haut qui consiste à proposer la liste des numéros d'événements.

VBA
Sélectionnez
Private oRst As DAO.Recordset


Sub getNBNum(control As IRibbonControl, ByRef count)
    Set oRst = CurrentDb.OpenRecordset("SELECT NumEvenement FROM tblevenement ORDER BY NumEvenement")
    'Récupère le nombre d'enregistrements
With oRst
        .MoveLast
        count = .RecordCount
        .MoveFirst
    End With
End Sub

Sub getNumLabel(control As IRibbonControl, index As Integer, ByRef label)
On Error GoTo err
    With oRst
        label = .Fields("NumEvenement")
        .MoveNext
    End With
Exit Sub
err:
MsgBox err.Description
End Sub

Ci-dessous, le code XML permettant de mettre en place ce comportement.

XML
Sélectionnez
<comboBox id="cmbNum" label="Num :" getItemCount="getNBNum" getItemLabel="getNumLabel"/>

Analysons en détail le code VBA. La variable oRst est déclarée au niveau du module. La méthode getNBNum (destinée à compter le nombre d'items à créer) est lancée en premier par le ruban. Elle instancie le recordset stocké dans la variable privée du module. La méthode getNumLabel n'a plus qu'à parcourir le recordset (disponible, puisque déclaré dans le module) pour retourner le numéro de l'événement (champ NumEvenement).

V-E. Les séparateurs

Autre type de contrôle disponibles : les séparateurs. Ce sont des barres verticales divisant deux groupes de boutons. La balise XML permettant de les identifier est <separator>. Ces composants n'affichant rien, le seul attribut à valoriser est l'identifiant (id).

Exemple :

XML
Sélectionnez
<separator id="sepRecherche"/>

Le groupe de recherche devient alors :

XML
Sélectionnez
<group id="grpRecherche" label="Recherche multi-critères">
<comboBox id="cmbNum" label="Num :" getItemCount="getNBNum" getItemLabel="getNumLabel"/>
<editBox id="txtDesc" label="Desc :"/>
<editBox id="txtDate" label="Date :"/>
<separator id="sepRecherche"/>
<button id="btnRechercher" label="Rechercher" imageMso="FindDialog" size="large"/>
</group>
Image non disponible

VI. Les événements

Jusqu'à présent, seul l'interface a été dessinée. Aucun code n'est affecté au ruban. Seuls les boutons prédéfinis sont opérationnels. Dans cette section, nous allons voir comment Access permet de lier du code VBA aux autres éléments d'un ruban personnalisé.

VI-A. Les contrôles d'action

Il s'agit des éléments qui nécessitent un clic pour déclencher leur action. On y retrouve les boutons, les cases à cocher ainsi que le contrôle Gallery. Le nom de la procédure qu'ils doivent lancer est inscrit dans leur attribut onAction. Pour que l'événement soit déclenché correctement, la procédure (CallBack) doit répondre à une nomenclature précise dépendante du type de contrôle.

VI-A-1. Les boutons

La procédure événementielle onAction d'un bouton doit correspondre à la syntaxe suivante :

VBA
Sélectionnez
Sub onAction(ByVal control As IRibbonControl)

L'argument control de la procédure représente le contrôle à l'origine du traitement.

Prenons le couple VBA/XML qui suit.

VBA
Sélectionnez
Public Sub btnDupliquer_action(ByVal control As IRibbonControl)
    MsgBox "Vous avez cliqué sur le bouton " & control.Id
End Sub
XML
Sélectionnez
<button id="btnDupliquer" label="Dupliquer l'événement" 
imageMso="SynchronizeData" size="normal" onAction="btnDupliquer_action"/>

Un clic sur le bouton Dupliquer l'enregistrement provoque l'affichage de la boîte de dialogue ci-dessous.

Image non disponible

Pour revenir au projet qui nous intéresse depuis le début de ce tutoriel, et plus particulièrement la duplication de l'enregistrement, le code de la méthode btnDupliquer_action pourrait être :

VBA
Sélectionnez
Public Sub btnDupliquer_action(ByVal control As IRibbonControl)
    Dim strNom As String, bolImp As Boolean
    Dim oFrm As Form
    'Interroge l'utilisateur
    If MsgBox("Voulez-vous dupliquer cette événement aujourd'hui ?", vbYesNo + vbQuestion, "Dupliquer ?") = vbYes Then
        'Accède au formulaire
        Set oFrm = Forms("frmEvenement")
        With oFrm.Recordset
            'Récupère le nom de l'événement sélectionné
            strNom = .Fields("NomEvenement")
            bolImp = .Fields("Important")
            'Crée le nouvel enregistrement
            .AddNew
            .Fields("NomEvenement") = strNom
            .Fields("DateEvenement") = Date
            .Fields("Important") = bolImp
            .Update
        End With
    End If
    
End Sub

VI-A-2. Les cases à cocher

La procédure événementielle des cases à cocher est analogue à celle des boutons à la différence prés qu'un paramètre supplémentaire est nécessaire. Il permet de savoir si la case est cochée ou pas.

La norme définit l'entête suivant à appliquer :

VBA
Sélectionnez
Sub onAction(ByVal control As IRibbonControl, pressed As Boolean)

Le filtrage des événements de notre projet sur la date et leur importance peut être obtenu par :

XML
Sélectionnez
<checkBox id="chkDate" label="Aujourd'hui" onAction="chkDate_action"/>
<checkBox id="chkImportant" label="Important" onAction="chkImp_action"/>
VBA
Sélectionnez
Public Sub chkDate_action(ByVal control As IRibbonControl, pressed As Boolean)

    'mémorise la valeur de la case à cocher
    bolFiltreDate = pressed
    'Applique le filtre
    AppliquerFiltre
End Sub
Public Sub chkImp_action(ByVal control As IRibbonControl, pressed As Boolean)

    'mémorise la valeur de la case à cocher
    bolFiltreImp = pressed
    'Applique le filtre
    AppliquerFiltre
End Sub

Private Sub AppliquerFiltre()
    Dim oFrm As Form
    Dim strFiltre As String
    'Accède au formulaire
    Set oFrm = Forms("frmEvenement")
    'Construit le filtre
    If bolFiltreDate Then
        strFiltre = "DateEvenement=Date()"
    End If
    'Tiens compte du filtre sur Important
    If bolFiltreImp Then
        strFiltre = strFiltre & IIf(strFiltre <> "", " AND ", "") & "Important"
    End If
    'Affecte le filtre au formulaire
    oFrm.Filter = strFiltre
    oFrm.FilterOn = True
End Sub

bolFiltreDate et bolFiltreImp sont déclarées en entête de module par :

VBA
Sélectionnez
Private bolFiltreDate As Boolean
Private bolFiltreImp As Boolean
Image non disponible

Comme vous avez pu le remarquer, les procédures chkDate_action et chkImp_action sont identiques. Si vous le souhaitez, vous pouvez les réunir :

VBA
Sélectionnez
Public Sub chkDateImp_action(ByVal control As IRibbonControl, pressed As Boolean)
    'Quel bouton ?
    Select Case control.Id
        Case "chkDate": bolFiltreDate = pressed
        Case "chkImp": bolFiltreImp = pressed
    End Select
    'Applique le filtre
    AppliquerFiltre
End Sub

Ce qui donne dans le XML :

XML
Sélectionnez
<checkBox id="chkDate" label="Aujourd'hui" onAction="chkDateImp_action"/>
<checkBox id="chkImp" label="Important" onAction="chkDateImp_action"/>

VI-A-3. Le contrôle Gallery

La méthode onAction d'un contrôle Gallery est encore plus complète que les précédentes. Elle propose :

  • Le contrôle Gallery à l'origine de l'événement
  • L'identifiant de l'élément sélectionné
  • L'index de l'élément sélectionné

Le tout est encapsulé dans la nomenclature suivante :

VBA
Sélectionnez
Sub onAction(ByVal control As IRibbonControl, selectedId As String, selectedIndex As Integer)

Ce qui peut donner pour le contrôle galMois :

VBA
Sélectionnez
Public Sub galMois_action(ByVal control As IRibbonControl, _
    selectedId As String, selectedIndex As Integer)
    Dim oFrm As Form
    Dim strFiltre As String
    'Accède au formulaire
    Set oFrm = Forms("frmEvenement")
    strFiltre = "Month(DateEvenement)=" & selectedIndex + 1
    'Affecte le filtre au formulaire
    oFrm.Filter = strFiltre
    oFrm.FilterOn = True
End Sub
XML
Sélectionnez
<gallery id="galMois" label="Mois ..." columns="3" rows="4" 
getImage="getImageGalleryMois" getItemCount="getNBMois" getItemLabel="getLabelMois" getItemImage="getImageMois" onAction="galMois_action"/>
</group>

VI-B. Les contrôles de saisie

Qu'ils s'agissent de zones de texte ou bien de zones de listes déroulantes, la procédure événementielle est la même. Nommée onChange, elle se déclenche lorsque l'utilisateur valide sa saisie (changement de contrôle, appui sur la touche Entrée). Son entête est défini comme suit :

VBA
Sélectionnez
Sub onChange(ByVal control As IRibbonControl, text As String)

Exemple :

VBA
Sélectionnez
Public Sub cmbNum_change(ByVal control As IRibbonControl, text As String)
    MsgBox "Valeur de " & control.Id & ":" & text
End Sub
XML
Sélectionnez
<comboBox id="cmbNum" label="Num :" getItemCount="getNBNum" getItemLabel="getNumLabel" onChange="cmbNum_change"/>

Le code à appliquer aux contrôles cmbNum, txtDesc et txtDate est similaire à celui des cases à cocher du groupe Filtre. Je ne vais donc pas rentrer plus en détails. Il s'agit d'une simple recherche multi-critères dont le tutoriel de Cafeine constitue un bon exemple.

VII. Agir dynamiquement sur le ruban

A ce stade le ruban est opérationnel, toutefois il est encore possible de l'améliorer. Il permet à l'utilisateur de déclencher des actions, mais ne réagit pas aux actions de l'application. Par exemple, le bouton de suppression ne se désactive pas lorsque l'événement sélectionné est important.

VII-A. Principe de base

L'objet Access.Application ne fournit pas de méthode permettant d'accéder à un élément du ruban. En fait, rien ne permet d'agir directement sur un attribut de celui-ci. La seule solution disponible est de lui demander d'aller lui même chercher les informations dont il a besoin. Grâce à des fonctions nommées getXXX, le ruban est capable de rafraîchir sa propriété XXX. Vous vous en doutez, cela passe une nouvelle fois par des fonctions CallBack. La mise au point d'un tel système passe par deux étapes :

  • Au chargement, il faut instancier un objet correspondant au ruban. Cet objet déclaré dans un module sera accessible partout dans l'application.
  • Appeler la méthode de rafraîchissement du ruban (ou d'un de ses contrôles) au moment voulu.

VII-A-1. Mémorisation du ruban dans un objet

La balise racine CustomUI possède un attribut onLoad définissant une fonction de rappel exécutée après le chargement du ruban. Cette fonction retourne un objet encapsulant le ruban.

En VBA, il s'agit d'une procédure :

VBA
Sélectionnez
Sub getMonRuban(ribbon As IRibbonUI)
Set oMonruban = ribbon
End Sub

oMonruban est une variable de type IRibbonUi déclarée dans l'entête du module mduRibbon.

Le XML devient :

XML
Sélectionnez
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="getMonRuban"> 
...
...
</customUI>

VII-A-2. Rafraîchissement du ruban

Pour rafraîchir le ruban, l'objet IRibbonUi offre deux méthodes :

  • Invalidate : Rafraîchit tout le ruban
  • InvalidateControl(ControlID as String) : Rafraîchit le contrôle dont l'identifiant est passé en paramètre.

VII-B. Activer / Désactiver un élément

Comme indiqué dans l'énoncé, il ne doit pas être possible de supprimer un événement important. Le bouton doit donc être inactif dans ce cas. La propriété gérant cet état est nommée enabled. L'attribut définissant la fonction CallBack modifiant cette propriété est donc getEnabled.

Ce qui donne :

XML
Sélectionnez
<button idMso="RecordsDeleteRecord" label="Supprimer l'événement" 
size="normal" getEnabled="getBtnSupprimer_enabled"/>
VBA
Sélectionnez
Sub getBtnSupprimer_enabled(control As IRibbonControl, ByRef enabled)
On Error GoTo err:
    Dim oFrm As Form
    'Accède au formulaire
    Set oFrm = Forms("frmEvenement")
    enabled = Not oFrm.Recordset.Fields("Important").Value
    Exit Sub
err:
'en cas d'erreur, rendre la suppression impossible
enabled = False
End Sub

Cependant, il n'est pas possible de modifier le comportement d'un bouton prédéfini. Il faut donc remplacer le bouton DeleteRecord2 par un bouton personnalisé :

XML
Sélectionnez
<button id="btnSupprimer" label="Supprimer l'événement" 
size="normal" getEnabled="getBtnSupprimer_enabled" onAction="btnSupprimer_action" imageMso="DeleteRecord2"/>

Il ne reste plus qu'à demander le rafraîchissement du bouton lorsque l'utilisateur change d'enregistrement. Cela passe par une procédure événementielle sur l'événement Current (Sur Activation) du formulaire.

VBA
Sélectionnez
Private Sub Form_Current()
If Not (oMonruban Is Nothing) Then
oMonruban.InvalidateControl "btnSupprimer"
End If
End Sub

Le test Not (oMonruban Is Nothing) permet d'éviter d'éventuelles erreurs au cas où le ruban ne serait pas chargé.

Image non disponible

VII-C. Modifier la valeur d'une case à cocher

Dans notre exemple, le fait de filtrer par mois doit réinitialiser les deux cases à cocher. En effet, le filtrage avec les cases à cocher et celui avec le contrôle Gallery sont indépendants. L'attribut définissant la valeur d'une case à cocher est pressed, il est donc nécessaire d'implémenter la fonction CallBack getPressed.

VBA
Sélectionnez
Sub getchkDateImp_pressed(control As IRibbonControl, ByRef pressed)
    'Quel bouton ?
    Select Case control.Id
        Case "chkDate":  pressed = bolFiltreDate
        Case "chkImp":  pressed = bolFiltreImp
    End Select
End Sub
XML
Sélectionnez
<checkBox id="chkDate" label="Aujourd'hui" onAction="chkDateImp_action" getPressed="getchkDateImp_pressed"/>
<checkBox id="chkImp" label="Important" onAction="chkDateImp_action" getPressed="getchkDateImp_pressed"/>

Reste à définir le moment où les cases à cocher doivent être rafraîchies. Réponse : lorsque l'utilisateur utilise le contrôle Gallery.

Il faut donc rajouter ces quelques lignes à la procédure galMois_action :

VBA
Sélectionnez
'Vide les cases à cocher
    bolFiltreDate = False
    bolFiltreImp = False
    oMonruban.InvalidateControl "chkDate"
    oMonruban.InvalidateControl "chkImp"

VII-D. Autres possibilités

Il est possible de modifier n'importe quelle propriété d'un contrôle via une procédure de rappel getXXXXXX est le nom de la propriété en question. La liste des fonctions Callback est disponible dans l'annexe B.

IX. Conclusion

Comme vous avez pu vous en rendre compte, la création de rubans personnalisés est plus complexe que celle des menus sous les versions précédentes. Cela reste toutefois normal étant donné le nombre de fonctionnalités disponibles.

Dorénavant, le ruban ne sera plus une barre disgracieuse dans vos développements mais un véritable composant intégré à vos applications offrant à portée de la main la globalité des actions envisageables. Telle en a été la volonté de Microsoft en l'incluant dans Office, telle en sera la votre en l'incluant dans vos développements. Pour ma part, les possibilités offertes me séduisent de jour en jour.

Je tiens à remercier l'équipe Access de www.developpez.com pour leur relecture approfondie.

X. Annexe A : Liste des idMso

Cette liste correspond à la version Access 2007 Béta 2 :

Commande idMso
10 % PrintPreviewZoom10
1000% PrintPreviewZoom1000
150 % PrintPreviewZoom150
200 % PrintPreviewZoom200
25 % PrintPreviewZoom25
3D enfoncé ControlSpecialEffectSunken
50 % PrintPreviewZoom50
500% PrintPreviewZoom500
75 % PrintPreviewZoom75
Access ImportAccess
Accueil TabHomeAccess
Actualiser RecordsRefreshMenu
Actualiser RecordsRefreshRecords
Actualiser la liste TableSharePointListsRefreshList
Actualiser le tableau croisé dynamique PivotRefresh
Actualiser l'état SourceControlRefreshStatus
Actualiser tout DataRefreshAll
Administrer GroupAdminister
Affichage ViewsSwitchToDefaultView
Affichage par défaut... DefaultView
Affichage personnalisé AdpDiagramCustomView
Affichages GroupViews
Afficher en tant que PivotShowAsMenu
Afficher haut/bas PivotShowTopAndBottomItemsMenu
Afficher la table... QueryShowTable
Afficher les colonnes... RecordsUnhideColumns
Afficher les détails PivotShowDetails
Afficher les étiquettes de relation AdpDiagramShowRelationshipLabels
Afficher les marges ShowMargins
Afficher les relations directes RelationshipsDirectRelationships
Afficher les sauts de page AdpDiagramViewPageBreaks
Afficher tout PivotShowAll
Afficher toutes les actions MacroShowAllActions
Afficher toutes les relations RelationshipDesignAllRelationships
Afficher... WindowUnhide
Afficher/Masquer GroupAdpDiagramShowHide
Afficher/Masquer GroupLayoutShowHide
Afficher/Masquer GroupMacroShowHide
Afficher/Masquer GroupPivotChartShowHide
Afficher/Masquer GroupPivotTableShowHideAccess
Afficher/Masquer GroupQueryShowHide
Afficher/Masquer GroupTableDesignShowHide
Afficher/Masquer GroupViewsShowHide
Ajout QueryAppend
Ajouter à partir d'Outlook RecordsAddFromOutlook
Ajouter aux données en sortie AdpOutputOperationsAddToOutput
Ajouter des champs existants FieldList
Ajouter des objets à SourceSafe SourceControlAddObjects
Ajouter des tables connexes AdpDiagramAddRelatedTables
Ajouter une base de données dans SourceSafe SourceControlAddDatabase
Ajouter une table... AdpDiagramAddTable
Ajuster à la fenêtre ZoomFitToWindow
Ajuster à la taille du formulaire PositionFitToWindow
Ajuster au contenu SizeToFit
Alignement du contrôle GroupControlAlignment
Aligner à droite AlignRight
Aligner à droite ObjectsAlignRight
Aligner à gauche AlignLeft
Aligner à gauche ObjectsAlignLeft
Aligner en bas ObjectsAlignBottom
Aligner en haut ObjectsAlignTop
Aligner sur la grille ControlSnapToGrid
Analyse croisée QueryCrosstab
Analyser GroupAnalyze
Analyser la table DatabaseAnalyzeTable
Analyser les performances DatabaseAnalyzePerformance
Ancrage PositionAnchoringGallery
Annuler Undo
Annuler Extraire SourceControlUndoCheckOut
Annuler l'ordre personnalisé PivotClearCustomOrdering
Aperçu avant impression FilePrintPreview
Aperçu avant impression TabPrintPreviewAccess
Aperçu avant impression ViewsAdpDiagramPrintPreview
Aperçu des 10 premiers enregistrements First10RecordsPreview
Aperçu et impression FilePrintMenu
Appliquer le filtre FilterToggleFilter
Appliquer le filtre/tri ApplyFilter
Appliquer le format des nombres avec virgule ApplyCommaFormat
Appliquer le format monétaire ApplyCurrencyFormat
Appliquer le format pourcentage ApplyPercentageFormat
Appliquer un filtre serveur ServerFilterApply
Après la sélection FilterAfterSelection
Archiver SourceControlCheckIn
Arguments MacroArguments
Assistant Carte postale PostcardWizard
Assistant État CreateReportFromWizard
Assistant Format automatique... AutoFormatWizard
Assistant Formulaire commercial BusinessFormWizard
Assistant Requête CreateQueryFromWizard
Assistant Sécurité au niveau utilisateur... DatabaseUserLevelSecurityWizard
Atteindre GoToMenuAccess
Au contenu SizeToFitAccess
Au plus étroit SizeToNarrowest
Au plus grand SizeToTallest
Au plus large SizeToWidest
Au plus petit SizeToShortest
Augmentation horizontale HorizontalSpacingIncrease
Augmentation verticale VerticalSpacingIncrease
Augmenter le nombre de valeurs décimales FormattingIncreaseDecimals
Augmenter le retrait IndentIncrease
Autorisations TableListPermissions
Autorisations d'accès... DatabasePermissions
Autre GroupCreateOther
Autre couleur d'arrière-plan/remplissage FontAlternateFillBackColorPicker
Avant la sélection FilterBeforeSelection
Barre des messages ViewMessageBar
Barres d'outils personnalisées GroupAddInsCustomToolbars
Basculer tout hors ligne SharePointListsWorkOffline
Base de données Access DatabaseAccessBackEnd
Base de données Access ExportAccess
Base de données Access 2000 FileSaveAsAccess2000
Base de données Access 2002 - 2003 FileSaveAsAccess2002_2003
Base de données Access 2007 FileSaveAsAccess2007
Base de données ODBC ExportOdbcDatabase
Base de données ODBC ImportOdbcDatabase
Bouton FormControlButton
Bouton bascule ControlToggleButton
Boutons d'extraction PivotExpandIndicators
Cadre d'objet dépendant ControlBoundObjectFrame
Cadre d'objet indépendant ControlUnboundObjectFrame
Calcul automatique PivotAutoCalcMenu
Cascade WindowsCascade
Case à cocher FormControlCheckBox
Case d'option FormControlRadioButton
Centrer AlignCenter
Champ actif GroupPivotChartActiveFieldAccess
Champ actif GroupPivotTableActiveFieldAccess
Champs et colonnes GroupFieldsAndColumns
Changement de fenêtre WindowsSwitch
Charger à partir d'une requête... LoadFromQuery
Ciselé ControlSpecialEffectChiseled
Clé primaire AdpPrimaryKey
Clés AdpDiagramKeys
Coder/décoder une base de données... DatabaseEncodeDecode
Collage spécial... PasteSpecialDialog
Collecter les données GroupCollectData
Coller Paste
Coller PasteSpecial
Coller par ajout PasteAppend
Colonne de recherche... DatasheetColumnLookup
Colonnes PrintColumns
Combinaisons multiples PivotChartMultiplePlots
Commandes de la barre d'outils GroupAddInsToolbarCommands
Commandes de menu GroupAddInsMenuCommands
Commence par la sélection FilterBeginsWithSelection
Compacter une base de données FileCompactAndRepairDatabase
Compléments AddInsMenu
Compléments TabAddIns
Compléments COM... ComAddInsDialog
Compter les enregistrements TotalsCountRecords
Conditions MacroConditions
Connexion ServerConnection
Contient la sélection FilterContainsSelection
Contraintes AdpConstraints
Contrôle de la source TabSourceControl
Contrôle de la source des bases de données GroupDatabaseSourceControl
Contrôle de la source des objets GroupSourceControlShow
Contrôle des tabulations ControlTabControl
Contrôler l'alignement GroupControlAlignmentLayout
Contrôles GroupControlsAccess
Contrôles GroupFormattingControls
Contrôles ActiveX ControlActiveX
Convertir ConvertDatabaseFormat
Convertir les macros en Visual Basic MacroConvertMacrosToVisualBasic
Copie du fichier de base de données DatabaseCopyDatabaseFile
Copier Copy
Correspond à la sélection FilterEqualsSelection
Couleur GridlinesColorPicker
Couleur d'arrière-plan/remplissage FontFillBackColorPicker
Couleur de police FontColorPicker
Couleur de surbrillance du texte TextHighlightColorPicker
Couleur du trait ControlLineColorPicker
Couper Cut
Courrier électronique FileSendAsAttachment
Création TabAdpDiagramDesign
Création TabAdpFunctionAndViewToolsDesign
Création TabAdpSqlStatementDesign
Création TabAdpStoredProcedureToolsDesign
Création TabFormToolsDesign
Création TabTableToolsDesignAccess
Création de formulaire CreateFormInDesignView
Création de requête CreateQueryInDesignView
Création de table CreateTableInDesignView
Création de table QueryMakeTable
Création de table TableDesign
Création d'état CreateReportInDesignView
Création du total calculé... PivotCreateCalculatedTotal
Création d'un champ de détail calculé... PivotCreateCalulatedField
Créer TabCreate
Créer TabMacroToolsDesign
Créer TabPivotChartDesign
Créer TabPivotTableDesign
Créer TabQueryToolsDesign
Créer TabRelationshipToolsDesign
Créer TabReportToolsDesign
Créer à partir de SourceSafe SourceControlCreateDatabaseFromProject
Créer un courrier électronique CreateEmail
Créer un fichier MDE... DatabaseMakeMdeFile
Créer un menu contextuel à partir de la macro CreateShortcutMenuFromMacro
Créer un réplica... ReplicationCreateReplica
Croissant SortUp
Date et heure... DateAndTimeInsert
De droite à gauche TextDirectionRightToLeft
De gauche à droite AlignLeftToRightMenu
De gauche à droite TextDirectionLeftToRight
Décroissant SortDown
Définir la police des étiquettes... LabelFontDialog
Définir le mot de passe de la base de données... SetDatabasePassword
Définir les paramètres par défaut du contrôle ControlSetControlDefaults
Définition des données QueryDataDefinition
Définition du mot de passe de connexion DatabaseSetLogonSecurity
Démarrer SourceSafe SourceControlRun
Dépendances d'objet DatabaseObjectDependencies
Déplacer le champ PivotMoveField
Déplacer les données GroupMoveData
Déplacer vers la zone de champ PivotMoveToFieldArea
Déplacer vers la zone de colonnes PivotMoveToColumnArea
Déplacer vers la zone de détails PivotMoveToDetailArea
Déplacer vers la zone de filtres PivotMoveToFilterArea
Déplacer vers SharePoint DatabaseMoveToSharePoint
Dernier MailMergeGotToLastRecord
Dernière version SourceControlGetLatestVersion
Deux pages PrintPreviewZoomTwoPages
Développer le champ PivotExpandField
Développer tout RecordsExpandAllSubdatasheets
Différences SourceControlShowDifferences
Dimensionner automatiquement les tables sélectionnées AdpDiagramAutosizeSelectedTables
Diminuer le nombre de valeurs décimales FormattingDecreaseDecimals
Diminuer le retrait IndentDecrease
Diminution horizontale HorizontalSpacingDecrease
Diminution verticale VerticalSpacingDecrease
Disposition GroupAdpDiagramLayout
Dissocier ObjectsUngroup
Dissocier PivotUngroupItems
Document HTML ExportHtmlDocument
Document HTML ImportHtmlDocument
Documentation de base de données DatabaseDocumenter
Données GroupPivotChartDataAccess
Données GroupPivotTableDataAccess
Données GroupPrintPreviewData
Données de la liste en cache CacheListData
Données externes TabExternalData
Données seulement PrintDataOnly
Dossier Outlook ImportOutlook
Douze pages PrintPreviewTwelvePages
Dupliquer PasteDuplicate
Écart-type PivotAutoCalcStandardDeviation
Écart-type TotalsStandardDeviation
Écart-type (population) PivotAutoCalcStandardDeviationPopulation
Échelle unifiée PivotChartMultipleUnified
Effacer ClearMenuAccess
Effacer la grille ClearGrid
Effacer la mise en page RelationshipsClearLayout
Effacer tous les filtres FilterClearAllFilters
Effet spécial ControlSpecialEffectMenu
Empaqueter signer FilePackageAndSign
Empilé ControlLayoutStacked
En relief ControlSpecialEffectRaised
Enregistrements GroupRecords
Enregistrer FileSave
Enregistrer RecordsSaveRecord
Enregistrer comme contact Outlook RecordsSaveAsOutlookContact
Enregistrer en tant que requête SaveAsQuery
Enregistrer l'objet sous SaveObjectAs
Enregistrer sous FileSaveAs
Enregistrer sous un autre format FileSaveAsMenuAccess
En-tête et pied de page PageHeaderOrFooterShowHide
En-tête/pied de formulaire FormHeaderOrFooterShowHide
Entre... FilterBetween
Épaisseur GridlinesWidthGallery
Épaisseur de ligne ControlLineThicknessGallery
État CreateReport
État vide CreateReportBlankReport
États GroupCreateReports
Étiquette FormControlLabel
Étiquettes CreateLabels
Excel ExportExcel
Excel ImportExcel
Exécuter QueryRunQuery
Exécuter une macro MacroRun
Exportations enregistrées ExportSavedExports
Exporter GroupExport
Exporter vers Excel PivotExportToExcel
Extraire DrillOut
Extraire SourceControlCheckOut
Extraire dans DrillInto
Fenêtre GroupWindowAccess
Fermer CloseDocument
Fermer GroupMacroClose
Fermer GroupQueryClose
Fermer MasterViewClose
Fermer la base de données FileCloseDatabase
Fermer l'aperçu GroupPrintPreviewClosePreview
Fermer l'aperçu avant impression PrintPreviewClose
Feuille de données TabTableToolsDatasheet
Feuille des propriétés PropertySheet
Fichier dBASE ExportDBase
Fichier dBASE ImportDBase
Fichier Lotus 1-2-3 ExportLotus
Fichier Lotus 1-2-3 ImportLotus
Fichier Paradox ExportParadox
Fichier Paradox ImportParadox
Fichier texte ExportTextFile
Fichier texte ImportTextFile
Fichier XML ExportXmlFile
Fichier XML ImportXmlFile
Figer RecordsFreezeColumns
Filtre automatique PivotAutoFilter
Filtre serveur par formulaire ServerFilterByForm
Filtre/tri avancé... SortAndFilterAdvanced
Filtrer FiltersMenu
Filtrer PivotFilterBySelection
Filtrer et trier GroupPivotChartFilterAndSort
Filtrer et trier GroupPivotTableFilterAndSort
Filtrer hors sélection FilterExcludingSelection
Filtrer par formulaire FilterAdvancedByForm
Filtrer par sélection FilterBySelection
Format TabFormToolsFormatting
Format TabReportToolsFormatting
Format de cellule... FormatCellsDialog
Format : FormattingFormat
Formulaire CreateForm
Formulaire double affichage CreateFormSplitForm
Formulaire vierge CreateFormBlankForm
Formulaires GroupCreateForms
Formules PivotFormulasMenu
Fractionner WindowSplit
Fusion avec Microsoft Office Word MergeToWord
Générateur QueryBuilder
Gérer FileManageMenu
Gérer GroupSourceControlManage
Gérer les réponses ManageReplies
Gestion des index... AdpManageIndexes
Gestion des utilisateurs et des groupes... DatabaseUserAndGroupAccounts
Gestionnaire de Menu Général DatabaseSwitchboardManager
Gestionnaire de tables liées DatabaseLinedTableManager
Graphique croisé dynamique CreateFormPivotChart
Graphique... ControlChart
Gras Bold
Gravé ControlSpecialEffectEtched
Grille AdpViewGridPane
Grille GridShowHide
Grouper ObjectsGroup
Grouper PivotGroupItems
Grouper par AdpOutputOperationsGroupBy
Hauteur de ligne... RowHeight
Historique SourceControlShowHistory
Horizontal équilibré HorizontalSpacingMakeEqual
Huit pages PrintPreviewEightPages
Ignorer les modifications SharePointListsDiscardChangesMenu
Ignorer toutes les modifications SharePointListsDiscardAllChanges
Ignorer toutes les modifications et actualiser SharePointListsDiscardAllChangesAndRefresh
Image ControlImage
Importations enregistrées ImportSavedImports
Importer GroupImport
Impression rapide FilePrintQuick
Imprimer GroupPrintPreviewPrintAccess
Imprimer PrintDialogAccess
Index TableIndexes
Index / Clés AdpDiagramIndexesKeys
Insérer QueryInsertColumn
Insérer des colonnes QueryInsertColumns
Insérer des lignes TableRowsInsertWord
Insérer un saut de page PageBreakInsertOrRemove
Insérer une page ControlPage
Italique Italic
Largeur de colonne... ColumnWidth
Légende PivotChartLegendShowHide
Liaisons OLE/DDE OleDdeLinks
Libérer RecordsUnfreeze
Lien hypertexte... HyperlinkInsert
Lier les tables FileServerLinkTables
Ligne/colonne PivotSwitchRowColumn
Lignes GroupMacroRows
Liste des champs PivotFieldList
Liste SharePoint ExportSharePointList
Liste SharePoint GroupSharePointList
Liste SharePoint ImportSharePointList
Listes SharePoint CreateTableUsingSharePointListsGallery
Listes SharePoint GroupSharepointLists
Logo ControlLogo
Macro CreateMacro
Macro GroupMacro
Marges PageMarginsGallery
Marges du contrôle ControlMarginsGallery
Masquer CustomizeHide
Masquer la table AdpDiagramHideTable
Masquer la table RelationshipsHideTable
Masquer les colonnes RecordsHideColumns
Masquer les détails HideDetails
Masquer les détails PivotHideDetails
Max. AutoSumMax
Max. PivotAutoCalcMax
Me prévenir TableListAlertMe
Mettre à l'arrière-plan ObjectSendToBack
Mettre au premier plan ObjectBringToFront
Min. AutoSumMin
Min. PivotAutoCalcMin
Mise à jour QueryUpdate
Mise en forme GroupFormatting
Mise en forme auto. AutoFormatGallery
Mise en forme auto. GroupAutoFormatAccess
Mise en forme conditionnelle FontConditionalFormatting
Mise en forme de contrôle GroupMarginsAndPadding
Mise en forme de contrôle GroupMarginsAndPaddingControlLayout
Mise en page GroupPageLayoutAccess
Mise en page TabReportToolsPageSetupDesign
Mise en page TabReportToolsPageSetupLayout
Mise en page... PageSetupDialog
Mode ViewsModeMenu
Mode Création ViewsDesignView
Mode État ViewsReportView
Mode Feuille de données ViewsDatasheetView
Mode Formulaire ViewsFormView
Mode Graphique croisé dynamique ViewsPivotChartView
Mode Page ViewsLayoutView
Mode SQL ViewsAdpDiagramSqlView
Mode Tableau croisé dynamique ViewsPivotTableView
Modèles de tables CreateTableTemplatesGallery
Modes Tables AdpDiagramTableModesMenu
Modifier des relations RelationshipsEditRelationships
Modifier l'affichage personnalisé AdpDiagramModifyCustomView
Modifier le flux de travail TableSharePointListsModifyWorkflow
Modifier le langage SQL AdpStoredProcedureEditSql
Modifier le type de graphique PivotChartType
Modifier les colonnes et les paramètres TableSharePointListsModifyColumnsAndSettings
Module CreateModule
Module de classe CreateClassModule
Mosaïque horizontale WindowsTileHorizontally
Mosaïque verticale WindowsTileVertically
Moyenne AutoSumAverage
Moyenne PivotAutoCalcAverage
N'afficher que la partie inférieure PivotShowOnlyTheBottomMenu
N'afficher que la partie supérieure PivotShowOnlyTheTopMenu
NB AutoSumCount
NB PivotAutoCalcCount
Ne commence pas par la sélection FilterDoesNotBeginsWithSelection
Ne contient pas la sélection FilterDoesNotContainSelection
Ne correspond pas à la sélection FilterNotEqualsSelection
Ne se termine pas par la sélection FilterDoesNotEndWithSelection
Nom de fenêtre WindowNameGoesHere
Nom uniquement AdpDiagramNameOnly
Noms de colonne AdpDiagramColumnNames
Noms de macro MacroNames
Noms des tables QueryTableNamesShowHide
Non sélectionné FilterIsNotSelected
Normal PivotShowAsNormal
Nouveau FileNewDatabase
Nouveau GoToNewRecord
Nouveau champ DatasheetNewField
Nouvelle étiquette AdpDiagramNewLabel
Nouvelle table AdpDiagramNewTable
Numéro de page HeaderFooterPageNumberInsert
Numérotation Numbering
Objet : ObjectGallery
Ombré ControlSpecialEffectShadowed
Opérations de sortie GroupAdpOutputOperations
Options SourceControlOptions
Options avancées CreateOtherObjectsMenu
Options avancées FilterAdvancedMenu
Options de réplication ReplicationOptionsMenu
Ordre de tabulation... TabOrder
Organisation de la sélection AdpDiagramArrangeSelection
Organisation des tables AdpDiagramArrangeTables
Orthographe SpellingAccess
Outils GroupAdpQueryTools
Outils GroupAdpSqlStatementDesignTools
Outils GroupFieldsTools
Outils GroupMacroTools
Outils GroupPivotChartTools
Outils GroupPivotTableToolsAccess
Outils GroupRelationshipsTools
Outils GroupTableDesignTools
Outils GroupToolsAccess
Outils de base de données GroupDatabaseTools
Outils de base de données TabDatabaseTools
Outils de création de formulaire TabSetFormTools
Outils de création d'état TabSetReportTools
Outils de diagramme TabSetAdpDiagram
Outils de fonction et affichage TabSetAdpFunctionAndViewTools
Outils de graphique croisé dynamique TabSetPivotChartAccess
Outils de macro TabSetMacroTools
Outils de présentation de formulaire TabSetFormToolsLayout
Outils de présentation d'état TabSetReportToolsLayout
Outils de procédure stockée TabSetAdpStoredProcedure
Outils de relation TabSetRelationshipTools
Outils de requête TabSetQueryTools
Outils de schéma GroupSchemaTools
Outils de table TabSetTableToolsDatasheet
Outils de table TabSetTableToolsDesign
Outils de tableau croisé dynamique TabSetPivotTableAccess
Outils d'instruction SQL  TabSetAdpSqlStatement
Ouvrir FileOpenDatabase
Par ordre croissant AdpOutputOperationsSortAscending
Par ordre décroissant AdpOutputOperationsSortDescending
Par total PivotChartSortByTotalMenu
Paramétrage de requête GroupQuerySetup
Paramètres QueryParameters
Partager des objets SourceControlShareObjects
Pas à pas MacroSingleStep
Paysage PageOrientationLandscape
PDF ou XPS PublishToPdfOrEdoc
Personnalisé TabSetFormReportExtensibility
Personnaliser la barre d'outils Accès rapide... QuickAccessToolbarCustomization
Pièce jointe ControlAttachment
Plat ControlSpecialEffectFlat
Plus ExportMoreMenu
Plus ImportMoreMenu
Plus RecordsMoreRecordsMenu
Plus de formulaires CreateFormMoreFormsGallery
Plus de pages PrintPreviewMultiplePagesMenu
Plus grand que la sélection FilterLargerThanSelection
Plus petit que la sélection FilterSmallerThanSelection
Plusieurs éléments CreateFormWithMultipleItems
Police GroupFontAccess
Police GroupTextFormatting
Police : Font
Portrait PageOrientationPortrait
Position GroupControlPositionLayout
Position GroupPosition
Position GroupPositionLayout
Pourcentage d'éléments de colonnes parentes PivotShowAsPercentOfParentColumnItem
Pourcentage d'éléments de lignes parentes PivotShowAsPercentOfParentRowItem
Pourcentage du total de la colonne PivotShowAsPercentOfColumnTotal
Pourcentage du total de la ligne PivotShowAsPercentOfRowTotal
Pourcentage du total général PivotShowAsPercentOfGrandTotal
Précédent MailMergeGoToPreviousRecord
Premier MailMergeGoToFirstRecord
Presse-papiers GroupClipboard
Presse-papiers Office... ShowClipboard
Procédure stockée CreateStoredProcedure
Propriétés SourceControlProperties
Propriétés de la base de données FileDatabaseProperties
Propriétés des colonnes AdpDiagramColumnProperties
Propriétés du serveur ServerProperties
Publier MenuPublish
Publier au format PDF ou XPS FileSaveAsPdfOrXps
Puces Bullets
Quadrillage GridlinesGallery
Quadrillage GroupDesignGridlines
Quadrillage GroupFormattingGridlines
Quatre pages PrintPreviewFourPages
Rapport de relations RelationshipsReport
Recalculer les sauts de page AdpDiagramRecalculatePageBreaks
Rechercher GroupFindAccess
Rechercher des compléments pour d'autres formats de fichier AdvertisePublishAs
Rechercher... FindDialog
Rectangle ControlRectangle
Récupérer un document de création maître... ReplicationRecoverDesignMaster
Réduire le champ PivotCollapseFieldAccess
Réduire tout RecordsCollapseAllSubdatasheets
Règle RulerShowHide
Regroupement et totaux GroupGroupingAndTotals
Regrouper et trier Grouping
Relations AdpDiagramRelationships
Relations DatabaseRelationships
Relations GroupDatasheetRelationships
Relations GroupRelationships
Remplacer... ReplaceDialog
Remplissage du contrôle ControlPaddingGallery
Renommer DatasheetColumnRename
Renvoyer : QueryReturnGallery
Réorganiser TabControlLayout
Réorganiser TabFormToolsLayout
Réorganiser TabReportToolsAlignment
Réorganiser TabReportToolsLayout
Réorganiser les icônes WindowsArrangeIcons
Réplica partiel DatabasePartialReplica
Reproduire la mise en forme FormatPainter
Requête Ajout de valeurs AdpStoredProcedureQueryAppendValues
Requête Ajout... AdpStoredProcedureQueryAppend
Requête Création de table... AdpStoredProcedureQueryMakeTable
Requête Mise à jour AdpStoredProcedureQueryUpdate
Requête Sélection AdpStoredProcedureQuerySelect
Requête Suppression AdpStoredProcedureQueryDelete
Requis FormattingRequiredField
Résoudre les conflits... ReplicationResolveConflicts
Restaurer la base de données SQL ServerRestoreSqlDatabase
Résultats GroupQueryResults
Rétablir Redo
Rétablir la liaison des listes AccessRelinkLists
Revenir Revert
Saisie de données WindowsDataEntry
Sauvegarde de la base de données SQL FileBackUpSqlDatabase
Sauvegarder la base de données FileBackupDatabase
Schéma AdpViewDiagramPane
Schéma CreateDiagram
Se termine par la sélection FilterEndsWithSelection
Sélection QuerySelectQueryType
Sélection SortSelectionMenu
Sélectionné FilterIsSelected
Sélectionner SelectMenuAccess
Sélectionner SelectRecord
Sélectionner les objets ObjectsSelect
Sélectionner tout SelectAllAccess
Sélectionner tout SelectAllRecords
Sélections GroupPivotTableSelections
Serveur FileServerMenu
Serveur de gestion des documents FilePublishToSharePoint
Snapshot Viewer ExportSnapshot
Somme PivotAutoCalcSum
Somme TotalsSum
Souligner Underline
Sous-feuille de données RecordsSubdatasheetMenu
Sous-feuille de données... RecordsInsertSubdatasheet
Sous-formulaire SubformMenu
Sous-formulaire dans une nouvelle fenêtre SubformInNewWindow
Sous-formulaire/état ControlSubFormReport
Sous-total PivotSubtotal
SQL AdpViewSqlPane
SQL direct QuerySqlPassThroughQuery
SQL Server DatabaseSqlServer
Style GridlinesStyleGallery
Suite des fenêtres... WindowMoreWindowsDialog
Suivant FindNext
Suivant MailMergeGoToNextRecord
Suppression QueryDelete
Supprimer AdpOutputOperationsTableRemove
Supprimer ControlLayoutRemove
Supprimer DatasheetColumnDelete
Supprimer Delete
Supprimer RecordsRemoveSubdatasheet
Supprimer la colonne RecordsDeleteColumn
Supprimer la table de la base de données AdpDiagramDeleteTable
Supprimer la tabulation DeleteTab
Supprimer le champ PivotRemoveField
Supprimer l'enregistrement RecordsDeleteRecord
Supprimer les colonnes TableColumnsDelete
Supprimer les lignes TableRowsDelete
Supprimer tous les tris SortRemoveAllSorts
Supprimer une base de données SQL FileDropSqlDatabase
Sur la grille ControlAlignToGrid
Sur la grille SizeToGridAccess
Synchroniser SynchronizeData
Synchroniser maintenant... ReplicationSynchronizeNow
Table CreateTable
Tables GroupCreateTables
Tabulaire ControlLayoutTabular
Taille GroupControlSize
Taille GroupSizeAndPosition
Taille PageSizeGallery
Taille de police : FontSize
Tester les règles de validation TableTestValidationRules
Texte enrichi GroupRichText
Titre ControlTitle
Totaux QueryTotalsShowHide
Totaux RecordsTotals
Totaux TotalsMenu
Totaux croissants PivotChartSortByTotalAscending
Totaux décroissants PivotChartSortByTotalDescending
Trait ControlLine
Transfert de la base de données FileServerTransferDatabase
Trier et filtrer GroupSortAndFilter
Type de données et mise en forme GroupDataTypeAndFormatting
Type de données : FormattingDataType
Type de ligne ControlLineTypeGallery
Type de requête GroupAdpQueryType
Type de requête GroupQueryType
Type  GroupPivotChartType
Une page ZoomOnePage
Union QueryUnionQuery
Unique FormattingUnique
Utilisateurs et autorisations DatabasePermissionsMenu
Utiliser les Assistants contrôle ControlWizards
Variance PivotAutoCalcVariance
Variance TotalsVariance
Variance (population) PivotAutoCalcVariancePopulation
Vérifier la syntaxe SQL AdpVerifySqlSyntax
Vertical équilibré VerticalSpacingMakeEqual
Visual Basic VisualBasic
Visualiser le code ViewVisualBasicCodeAccess
Word ExportWord
Zone de groupe FormControlGroupBox
Zone de liste FormControlListBox
Zone de liste déroulante FormControlComboBox
Zone d'édition FormControlEditBox
Zones de dépôt PivotDropAreas
Zoom GroupZoom
Zoom PrintPreviewZoomMenu
Zoom ZoomPrintPreviewExcel
Zoom 100 % Zoom100

XI. Annexe B : Liste des fonctions CallBack

Contrôle Attribut Procédure
all controls getEnabled sub GetEnabled(control as IRibbonControl, ByRef enabled)
all controls getImage sub GetImage(control as IRibbonControl, ByRef image)
all controls getLabel sub GetLabel(control as IRibbonControl, ByRef label)
all controls getSize sub GetSize(control as IRibbonControl, ByRef size)
all controls getSupertip sub GetSupertip(control as IRibbonControl, ByRef screentip)
all controls getScreentip sub GetScreentip(control as IRibbonControl, ByRef screentip)
all controls getVisible sub GetVisible(control as IRibbonControl, ByRef visible)
all controls getDescription sub GetDescription(control as IRibbonControl, ByRef description)
Button onAction sub OnAction(control as IRibbonControl)
Button onAction - repurposed sub OnAction(control as IRibbonControl, byRef fCancelDefault)
checkBox getPressed sub GetPressed(control as IRibbonControl, ByRef return)
checkBox onAction sub OnAction(control as IRibbonControl, pressed as Boolean)
comboBox getItemCount sub GetItemCount(control as IRibbonControl, ByRef count)
comboBox getItemImage sub GetItemImage(control as IRibbonControl, index as Integer, ByRef image)
comboBox getItemLabel sub GetItemLabel(control as IRibbonControl, index as Integer, ByRef label)
comboBox getItemScreen sub GetItemScreen(control as IRibbonControl, index as Integer, ByRef screen)
comboBox getText sub GetText(control as IRibbonControl, ByRef text)
comboBox onChange sub OnChange(control as IRibbonControl, text as String)
customUI onLoad sub OnLoad(ribbon as IRibbonUI)
dropDown getItemCount sub GetItemCount(control as IRibbonControl, ByRef count)
dropDown getItemLabel sub GetItemLabel(control as IRibbonControl, index as Integer, ByRef label)
dropDown getItemScreen sub GetItemScreen(control as IRibbonControl, index as Integer, ByRef screen)
dropDown getSelectedItemIndex sub GetSelectedItemIndex(control as IRibbonControl, ByRef index)
dropDown getSelectedItemID sub GetSelectedItemID(control as IRibbonControl, ByRef index)
dropDown onAction sub OnAction(control as IRibbonControl, selectedId as String, selectedIndex as Integer)
dropDown getItemImage sub GetItemImage(control as IRibbonControl, index as Integer, ByRef image)
dropDown getItemID sub GetItemID(control as IRibbonControl, index as Integer, ByRef id)
editBox getText sub GetText(control as IRibbonControl, ByRef text)
editBox onChange sub OnChange(control as IRibbonControl, text as String)
gallery getItemLabel sub GetItemLabel(control as IRibbonControl, index as Integer, ByRef label)
gallery onAction sub OnAction(control as IRibbonControl, selectedId as String, selectedIndex as Integer)
gallery getSelectedItemIndex sub GetSelectedItemIndex(control as IRibbonControl, ByRef index)
gallery getSelectedItemID sub GetSelectedItemID(control as IRibbonControl, ByRef index)
gallery getItemWidth sub getItemWidth(control as IRibbonControl, ByRef width)
gallery getItemHeight sub getItemHeight(control as IRibbonControl, ByRef height)
gallery getItemScreen sub GetItemScreen(control as IRibbonControl, index as Integer, ByRef screen)
gallery getItemImage sub GetItemImage(control as IRibbonControl, index as Integer, ByRef image)
gallery getItemCount sub GetItemCount(control as IRibbonControl, ByRef count)
gallery getItemID sub GetItemID(control as IRibbonControl, index as Integer, ByRef id)
toggleButton getPressed sub GetPressed(control as IRibbonControl, ByRef return)
toggleButton onAction—repurposed sub OnAction(control as IRibbonControl, pressed as Boolean, byRef fCancelDefault)
toggleButton onAction sub OnAction(control as IRibbonControl, pressed as Boolean)

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2006-2010 Warin Christophe. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.