Librairie de contrôles arbres, grilles et listes pour Access et Excel

Image non disponible

Cette librairie VBA permet d'insérer dans un formulaire :

un arbre ;

une grille ;

ou une liste d'images.

Chacun de ces trois types de contrôles peut également être utilisé comme explorateur de fichiers.

Commentez cette librairie : 14 commentaires Donner une note  l'article (5) 

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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.

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 :

Image non disponible
Arbre
Image non disponible
Liste d’images
Image non disponible
Grille

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+ n'est intégré qu'à Windows 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.

Image non disponible  Téléchargez la librairie LibTGL pour Access, au choix en Version Gdi32 ou en Version Gdi+.

Image non disponible  Placez le fichier téléchargé et décompressé LibTGL32.mdb ou LibTGLplus.mdb dans le même répertoire que l’application que vous développez (ou dans un sous-dossier de l’application).

Image non disponible  Ouvrez ensuite l'éditeur VBA dans votre application :

Raccourci clavier : ALT + F11.

Ou par le menu :

Image non disponible
Avant Access 2007
Image non disponible
A partir d'Access 2007

Image non disponible  Ouvrez la fenêtre des références :

Dans le menu : Outils => Références ….

Image non disponible

Cliquez sur le bouton Parcourir et sélectionnez le fichier LibTGL32.mdb ou LibTGLplus.mdb.
Pensez à choisir le type de fichier mdb dans la liste déroulante en bas de la fenêtre pour pouvoir sélectionner le fichier.

Image non disponible

Cliquez sur ouvrir pour ajouter la librairie en référence du projet.

La librairie LibTGL apparaît alors dans les références :

Image non disponible

Image non disponible  Ensuite il est nécessaire d'importer un formulaire de la librairie dans votre application :

Avant Access 2007
Avant Access 2007
Image non disponible
A partir d'Access 2007

Recherchez le fichier LibTGL32.mdb ou LibTGLplus.mdb.

Puis choisissez le formulaire subFormLibTGLControl et cliquez sur OK.

Image non disponible

Image non disponible  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.

Image non disponible  Téléchargez la librairie LibTGL pour Excel, au choix en Version Gdi32 ou en Version Gdi+.

Image non disponible  Placez le fichier téléchargé et décompressé LibTGL32.xla ou LibTGLplus.xla dans le même répertoire que l’application que vous développez (ou dans un sous-dossier de l’application).

Image non disponible  Ouvrez ensuite l'éditeur VBA dans votre application :

Raccourci clavier : ALT + F11.

Ou par le menu :

Image non disponible
Avant Excel 2007
Image non disponible
A partir d’Excel 2007

Si vous ne voyez pas l’onglet « Développeur » :

Pour Excel 2007 : Bouton Office => Options => Standard :

Image non disponible

Pour Excel 2010 et supérieur : Bouton Fichier => Options => Personnaliser le ruban :

Image non disponible

Image non disponible  Ouvrez la fenêtre des références :

Dans le menu : Outils => Références ….

Image non disponible

Cliquez sur le bouton Parcourir et sélectionnez le fichier LibTGL32.xla ou LibTGLplus.xla.
Pensez à choisir le type de fichier xla dans la liste déroulante en bas de la fenêtre pour pouvoir sélectionner le fichier.

Image non disponible

Cliquez sur ouvrir pour ajouter la librairie en référence du projet.

La librairie LibTGL apparaît alors dans les références :

Image non disponible

Image non disponible  Votre application est maintenant prête à utiliser les contrôles de la librairie.

V. Déploiement

Lorsque vous déployez votre application, vous devez

VI. Import dans une application

Si vous ne souhaitez pas avoir 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
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
CtrlImageListElement Module de classe
CtrlTreeElementBeforeDraw Module de classe
CtrlTreeExplorer (ajoutez également les objets nécessaire à CtrlTree)
CtrlTreeExplorer Module de classe
ModLibTGLExplorer Module standard

Et enfin modifiez le module ModLibTGL importé :

Mettez à False les constantes correspondants aux contrôles que vous n’utilisez pas :

Exemple pour une utilisation de CtrlTree uniquement
Sélectionnez
#Const useCtrlTree = True
#Const useCtrlTreeExplorer = False
#Const useCtrlImageList = False
#Const useCtrlImageListExplorer = False
#Const useCtrlGrid = False
#Const useCtrlGridExplorer = False

Ces opérations seront à refaire à 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 :

Image non disponible
Avant Access 2007
Image non disponible
A partir d'Access 2007

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.

Image non disponible

Vous pouvez à partir d'Access 2007 utiliser les paramètres d'ancrage pour redimensionner automatiquement le contrôle lors du redimensionnement du formulaire.

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

Image non disponible

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.

Vider 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 decode 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.

Déclaration de l'objet contrôle
Sélectionnez
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 :

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 :

Initialisation de l'objet contrôle
Sélectionnez
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 :

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

Ajout d'éléments à l'arbre
Sélectionnez
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.

Image non disponible

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.

Image non disponible

Puis sélectionnez l'événement dans la liste déroulante en haut à droite du module de code.

Image non disponible

La procédure événementielle se crée, il suffit ensuite d'ajouter le code souhaité à l'intérieur :

Procédure événementielle
Sélectionnez
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.

Affichage de l'élément actif dans la barre d'état
Sélectionnez
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
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.

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

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

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2018 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.