I. Introduction▲
Office ne propose pas d'arbre ou de liste élaborée dans sa liste de contrôles standards.
Il existe des contrôles ActiveX (Common Controls VB6) qui peuvent vous donner satisfaction : Microsoft TreeView ou ListView.
Mais ces contrôles Microsoft ne sont pas compatibles avec les versions 64bits d’Office.
Les contrôles de cette librairie ont été développés en VBA à l'aide de clGdiplus ou clGdi32.
Ce ne sont pas des contrôles ActiveX ; ils se présentent sous la forme d’une librairie qu’il faut référencer à son projet (il est également possible d’importer les éléments de la librairie).
Ils sont compatibles 64bits et fonctionnent sur les versions d’Access et Excel 2000 ou supérieures.
Voici un aperçu de ce qu'il est possible de réaliser :
TGL signifie Tree Grid List.
Cette librairie fonctionne avec Access et Excel 2000 ou supérieur, 32 ou 64bits.
Merci à jacques_jean pour sa relecture orthographique.
II. Gdi+ ou Gdi32?▲
La librairie existe en deux versions : Gdi+ ou Gdi32.
La version Gdi+ offre en plus :
- l'accès aux données Exif des photos, notamment la miniature Exif pour un affichage rapide ;
- un lissage plus efficace des images ;
- un plus grand nombre de formats d'images reconnus ;
- la transparence des menus du contrôle « Liste d'images ».
Privilégiez la version Gdi+, sauf si vous ciblez des versions de Windows antérieures à XP.
Gdi32 est intégré à toutes les versions de Windows.
Gdi+ est intégré à Windows à partir de la version XP.
Pour une utilisation de Gdi+ avec une version de Windows plus ancienne, placez le fichier gdiplus.dll dans le même répertoire que votre application.
Lien vers la libraire Gdi+ en téléchargement sur Microsoft.com
III. Installation pour Access▲
Les droits d’administrateur ne sont pas nécessaires.
Téléchargez la librairie LibTGL pour Access :
- version mdb (à partir d’Access 2000) : Version Gdi32 ou Version Gdi+ ;
- version accdb (à partir d’Access 2007) : Version Gdi32 ou Version Gdi+.
Placez le fichier téléchargé et décompressé LibTGL32.mdb ou LibTGLplus.mdb (ou accdb) dans le même répertoire que l’application que vous développez (ou dans un sous-dossier de l’application).
Ouvrez ensuite l'éditeur VBA dans votre application :
Raccourci clavier : ALT + F11.
Ou par le menu :
Ouvrez la fenêtre des références :
Dans le menu : Outils => Références ….
Cliquez sur le bouton Parcourir et sélectionnez le fichier LibTGL32.mdb ou LibTGLplus.mdb (ou accdb).
Pensez à choisir le type de fichier mdb (ou accbd) dans la liste déroulante en bas de la fenêtre pour pouvoir sélectionner le fichier.
Cliquez sur ouvrir pour ajouter la librairie en référence du projet.
La librairie LibTGL apparaît alors dans les références :
Ensuite il est nécessaire d'importer un formulaire de la librairie dans votre application :
Recherchez le fichier LibTGL32.mdb ou LibTGLplus.mdb (ou accdb).
Puis choisissez le formulaire subFormLibTGLControl et cliquez sur OK.
Votre application est maintenant prête à utiliser les contrôles de la librairie.
IV. Installation pour Excel▲
Les droits d’administrateur ne sont pas nécessaires.
Téléchargez la librairie LibTGL pour Excel :
- Version xla (à partir d’Excel 2000) : Version Gdi32 ou Version Gdi+ ;
- Version xlam (à partir d’Excel 2007) : Version Gdi32 ou Version Gdi+.
Placez le fichier téléchargé et décompressé LibTGL32.xla ou LibTGLplus.xla (ou xlam) dans le même répertoire que l’application que vous développez (ou dans un sous-dossier de l’application).
Ouvrez ensuite l'éditeur VBA dans votre application :
Raccourci clavier : ALT + F11.
Ou par le menu :
Si vous ne voyez pas l’onglet « Développeur » :
Pour Excel 2007 : Bouton Office => Options => Standard :
Pour Excel 2010 et supérieur : Bouton Fichier => Options => Personnaliser le ruban :
Ouvrez la fenêtre des références :
Dans le menu : Outils => Références ….
Cliquez sur le bouton Parcourir et sélectionnez le fichier LibTGL32.xla ou LibTGLplus.xla (ou xlam).
Pensez à choisir le type de fichier xla ou xlam dans la liste déroulante en bas de la fenêtre pour pouvoir sélectionner le fichier.
Cliquez sur ouvrir pour ajouter la librairie en référence du projet.
La librairie LibTGL apparaît alors dans les références :
Votre application est maintenant prête à utiliser les contrôles de la librairie.
V. Déploiement▲
Lorsque vous déployez votre application, vous devez fournir le fichier librairie LibTGLxxx.
Le chemin où est déposée l’application sur les postes utilisateurs n’importe pas.
Il faut par contre respecter le chemin relatif dans lequel est placé le fichier de librairie LibTGLxxx.
VI. Import dans une application▲
Si vous ne souhaitez pas gérer une librairie externe à votre application, vous pouvez importer les objets.
Dans cas, la référence à LibTGL est bien entendu inutile.
Importez au minimum :
subFormLibTGLControl | Formulaire (pour Access uniquement) |
clGdi32 ou clGdiplus | Module de classe |
ModLibTGL | Module standard |
CtrlLibControl | Module de classe |
Puis en fonction des contrôles utilisés :
CtrlGrid | |
CtrlGrid | Module de classe |
CtrlGridColumn | Module de classe |
CtrlGridColumnBeforeDraw | Module de classe |
CtrlGridRow | Module de classe |
CtrlGridRowBeforeDraw | Module de classe |
ModLibTGLImages | Module standard |
CtrlGridExplorer (ajoutez également les objets nécessaire à CtrlGrid) | |
CtrlGridExplorer | Module de classe |
ModLibTGLExplorer | Module standard |
CtrlImageList | |
CtrlImageList | Module de classe |
CtrlImageListDisplayValue | Module de classe |
CtrlImageListElement | Module de classe |
CtrlImageListElementBeforeDraw | Module de classe |
CtrlImageListMenu | Module de classe |
CtrlImageListMenuElement | Module de classe |
CtrlImageListExplorer (ajoutez également les objets nécessaire à CtrlImageList) | |
CtrlImageListExplorer | Module de classe |
ModLibTGLExplorer | Module standard |
CtrlTree | |
CtrlTree | Module de classe |
CtrlTreeElement | Module de classe |
CtrlTreeElementBeforeDraw | Module de classe |
CtrlTreeExplorer (ajoutez également les objets nécessaire à CtrlTree) | |
CtrlTreeExplorer | Module de classe |
ModLibTGLExplorer | Module standard |
Modifiez ensuite le module ModLibTGL importé :
Mettez à False les constantes qui correspondent aux contrôles que vous n’utilisez pas :
#Const useCtrlTree = True
#Const useCtrlTreeExplorer = False
#Const useCtrlImageList = False
#Const useCtrlImageListExplorer = False
#Const useCtrlGrid = False
#Const useCtrlGridExplorer = False
Et enfin, gérez les arguments de compilation du projet VBA :
Dans le menu de l’éditeur VBA, « Outils » => « Propriétés de XXX… ».
Si vous utilisez clGdiplus, ajoutez un argument TGLUseGdiplus =
-
1
:
Si vous utilisez Excel, ajoutez un argument TGLUseUserform =
-
1
.
Si vous utilisez à la fois clGdiplus et Excel, écrivez les deux constantes séparées par un signe deux points : TGLUseGdiplus =
-
1
: TGLUseUserform =
-
1
.
Ces opérations seront à refaire ou vérifier à chaque mise à jour de cette librairie.
VII. Ajout d'un contrôle▲
Pour débuter, nous allons créer un arbre et le remplir avec quelques éléments.
VII-A. Ajout du contrôle sur un formulaire▲
VII-A-1. Pour Access▲
Chaque contrôle de la librairie est hébergé dans un sous-formulaire.
Dans votre formulaire, ajoutez donc un sous-formulaire :
Utilisez en objet source le formulaire importé de la librairie : subFormLibTGLControl.
Donnez au contrôle sous-formulaire un nom parlant : subFormTree par exemple, nous allons créer un arbre pour notre premier contrôle.
Redimensionnez le sous-formulaire à la taille désirée.
Vous pouvez à partir d'Access 2007 utiliser les paramètres d'ancrage pour redimensionner automatiquement le contrôle sous-formulaire lors du redimensionnement du formulaire parent.
VII-A-2. Pour Excel▲
Chaque contrôle de la librairie est hébergé dans un cadre contenant une image (contrôle de type Frame).
Ajoutez un cadre (bouton XYZ) à votre formulaire, et placez-y un contrôle image (bouton avec la montagne).
Donnez au contrôle cadre un nom parlant : subFormTree par exemple, nous allons créer un arbre pour notre premier contrôle.
Le nom du contrôle image n’a pas d’importance.
Videz la propriété « Caption » du cadre, sinon l’affichage ne sera pas correct.
Il ne doit pas y avoir de titre en haut à gauche du cadre.
VII-B. Initialisation du contrôle▲
Une fois le sous-formulaire créé, il faut définir en VBA le type de contrôle souhaité.
Pour Access uniquement :
Dans les propriétés de votre formulaire principal, affichez l'onglet Autre et donner la valeur Oui à la propriété Avec module.
Affichez maintenant l'éditeur VBA (ALT + F11).
Puis ouvrez le module Form_NomDeVotreFormulaire pour Access, ou le module de code du userForm pour Excel.
Ajoutez s'il elle n'est pas déjà présente en haut de module l'instruction Open Explicit.
Déclarez ensuite une variable objet pour gérer le contrôle.
Private
WithEvents oTree As
CtrlTree
La variable oTree est donc un objet de type CtrlTree.
CtrlTree correspond à un contrôle arbre.
Ce type de contrôle peut prendre les valeurs :
- CtrlTree = Arbre ;
- CtrlTreeExplorer = Arbre - explorateur de fichiers ;
- CtrlImageList = Liste d'images ;
- CtrlImageListExplorer = Liste d'images - explorateur de fichiers ;
- CtrlGrid = Grille ;
- CtrlGridExplorer = Grille - explorateur de fichiers.
L'utilisation du mot-clé Withevents permet de récupérer les événements du contrôle.
Initialisez enfin le contrôle au chargement du formulaire :
Private
Sub
Form_Load
(
)
Set
oTree =
CreateTGLControl
(
CtrlTree, Me.subFormTree
)
End
Sub
Pour Excel, remplacez Form_Load par UserForm_Initialize.
La fonction CreateTGLControl demande 2 paramètres en entrée :
1 - Le type de contrôle à créer :
- CtrlTree = Arbre ;
- CtrlTreeExplorer = Arbre - explorateur de fichiers ;
- CtrlImageList = Liste d'images ;
- CtrlImageListExplorer = Liste d'images - explorateur de fichiers ;
- CtrlGrid = Grille ;
- CtrlGridExplorer = Grille - explorateur de fichiers.
2 - Le sous-formulaire ou cadre qui contient le contrôle :
C'est le nom du contrôle sous-formulaire ou cadre créé précédemment.
Si vous affichez maintenant le formulaire, le contrôle est vide.
Nous allons lui ajouter quelques éléments.
VII-C. Ajout d'élément au contrôle▲
A la suite de l'initialisation du contrôle, ajoutons un nœud racine et deux nœuds enfants.
La fonction pour ajouter un élément à l'arbre est ElementAdd.
Cette fonction renvoie un objet représentant l'élément ajouté.
Private
Sub
Form_Load
(
)' UserForm_Initialize pour Excel
Set
oTree =
CreateTGLControl
(
CtrlTree, Me.subFormTree
)
' Ajoute un élément racine
With
oTree.ElementAdd
(
"Element Racine n°1"
)
' Ajoute 2 fils à cet élément (.key est l'identifiant de l'élément)
oTree.ElementAdd
"Element Fils 1"
, , .Key
oTree.ElementAdd
"Element Fils 2"
, , .Key
End
With
' Ajoute un deuxième élément racine
With
oTree.ElementAdd
(
"Element Racine n°2"
)
' Ajoute 3 fils à cet élément
oTree.ElementAdd
"Element Fils 1"
, , .Key
oTree.ElementAdd
"Element Fils 2"
, , .Key
oTree.ElementAdd
"Element Fils 3"
, , .Key
End
With
' Redessine le contrôle
oTree.Refresh
End
Sub
Notez l'utilisation de l'instruction With.
Elle nous permet de facilement relire l'identifiant de l'élément racine créé.
Ensuite on crée les éléments fils en précisant l'identifiant Key de son élément parent.
Finalement, on utilise la fonction Refresh pour redessiner le contrôle.
VII-D. Utilisation du contrôle▲
Affichez le formulaire : vous voyez les deux éléments racines.
Double-cliquez sur un nœud pour le dérouler ou le replier.
VII-E. Gérer les événements du contrôle▲
Chaque contrôle expose des événements très utiles.
Les événements sont utilisables si la variable objet à été définie avec le mot-clé WithEvents, ce que nous avons fait.
Pour accéder à ces événements, choisissez votre variable objet dans la liste déroulante en haut à gauche du module de code.
Puis sélectionnez l'événement dans la liste déroulante en haut à droite du module de code.
La procédure événementielle se crée, il suffit ensuite d'ajouter le code souhaité à l'intérieur :
Private
Sub
oTree_ActiveElementChanged
(
pElement As
LibTGL.CtrlTreeElement
)
End
Sub
Par exemple on affiche le texte de l'élément actif dans la barre d'état (barre en bas de l'application).
Si aucun élément n'est actif on réinitialise la barre d'état.
Private
Sub
oTree_ActiveElementChanged
(
pElement As
LibTGL.CtrlTreeElement
)
If
pElement Is
Nothing
Then
SysCmd acSysCmdClearStatus
Else
SysCmd acSysCmdSetStatus, "Sélection de "
&
pElement.Text
End
If
End
Sub
VIII. Références▲
VIII-A. Objets contrôles▲
Objet | Description |
---|---|
Arbre. | |
CtrlTreeExplorer | Arbre - explorateur de fichiers. |
CtrlImageList | Liste d'images. |
CtrlImageListExplorer | Liste d'images - explorateur de fichiers. |
CtrlGrid | Grille. |
CtrlGridExplorer | Grille - explorateur de fichiers. |
VIII-B. Autres objets▲
Objet | Description | Utilisé dans |
---|---|---|
CtrlTreeElement | Elément d'un arbre. |
CtrlTree
CtrlTreeExplorer |
CtrlTreeElementBeforeDraw | Elément d'un arbre modifiable avant affichage. |
CtrlTree
CtrlTreeExplorer |
CtrlImageListElement | Elément d'une liste d'images. |
CtrlImageList
CtrlImageListExplorer |
CtrlImageListElementBeforeDraw | Elément d'une liste d'images modifiable avant affichage. |
CtrlImageList
CtrlImageListExplorer |
CtrlImageListDisplayValue | Texte affiché sur une image. |
CtrlImageListElement
CtrlImageListElementBeforeDraw |
CtrlImageListMenu | Menu affiché sur une image. |
CtrlImageList
CtrlImageListExplorer |
CtrlImageListMenuElement | Elément de menu affiché sur une image. | CtrlImageListMenu |
CtrlGridColumn | Colonne d'une grille. |
CtrlGrid
CtrlGridExplorer |
CtrlGridColumnBeforeDraw | Colonne d'une grille modifiable avant affichage. |
CtrlGrid
CtrlGridExplorer |
CtrlGridRow | Ligne d'une grille. |
CtrlGrid
CtrlGridExplorer |
CtrlGridRowBeforeDraw | Ligne d'une grille modifiable avant affichage. |
CtrlGrid
CtrlGridExplorer |
VIII-C. Enumérations▲
IX. Téléchargements▲
Téléchargez la librairie LibTGL pour Access :
- version mdb (à partir d’Access 2000) : Version Gdi32 ou Version Gdi+ ;
- version accdb (à partir d’Access 2007) : Version Gdi32 ou Version Gdi+.
Téléchargez la librairie LibTGL pour Excel :
- version xla (à partir d’Excel 2000) : Version Gdi32 ou Version Gdi+ ;
- version xlam (à partir d’Excel 2007) : Version Gdi32 ou Version Gdi+.
Téléchargez les applications de démonstration :
- version Access mdb (à partir d’Access 2000) : Version Gdi32 ou Version Gdi+ ;
- version Excel xla (à partir d’Excel 2000) : Version Gdi32 ou Version Gdi+.