Astuce VBA : liste déroulante personnalisée
Vous pensiez peut-être qu'il était impossible de personnaliser chaque ligne d'une ComboBox en les colorant, en modifiant la mise en forme du texte, etc.
Eh bien, ce n'est pas tout à fait vrai ...
Par défaut, le contrôle ComboBox ressemble à ça :
Et il est vrai qu'il est techniquement impossible de personnaliser les lignes de ce contrôle ...
Mais si vous avez besoin d'un contrôle (ou d'une fonctionnalité d'un contrôle) et que celui-ci n'existe pas, tout n'est pas perdu !
Si c'est vraiment important pour vous, sachez qu'avec un peu de temps et de l'imagination, vous pouvez créer de toute pièce le contrôle dont vous avez besoin (et ça ne se limite pas aux ComboBox) !
Y aller petit à petit
Créer un contrôle peut effrayer, mais en réalité il s'agirait plutôt de "combiner astucieusement des contrôles basiques".
Voici, en résumé, comment il faut voir les choses pour créer un contrôle unique :
Etape 1
Une liste déroulante, c'est tout d'abord un carré/rectangle qui se place juste au-dessous de la liste :
Vous pouvez par exemple utiliser un contrôle Image (et conserver une ComboBox vide).
Etape 2
Ensuite, dans une liste déroulante, vous avez un certain nombre de lignes :
Vous pouvez utiliser des Labels pour les lignes (avec fonds colorés pour l'exemple).
Etape 3
Il manque encore une barre de défilement et vous obtenez (en apparence) votre ComboBox personnalisée :
Ajout d'un contrôle ScrollBar.
Etape 4
Il ne reste plus qu'à ajouter les événements utiles à son fonctionnement.
Pensez au comportement d'une ComboBox et reproduisez ces effets (avec des événements simples pour la plupart) :
- Utilisez des événements Click pour afficher/masquer la liste
- Modifiez le contenu des Labels en fonction de la ScrollBar
- Validez le choix au Click
Et voila, votre liste déroulante personnalisée est prête !
Effet de survol (hover)
Si vous voulez aller encore un peu plus loin, vous pouvez ajouter l'effet de survol sur les Labels au passage de la souris.
Voici l'astuce imaginée ici pour réaliser l'effet de survol :
- Un contrôle Image a été placé au-dessus des Labels
- L'événement MouseMove du contrôle Image a été utilisé pour connaître la position verticale (Y) de la souris
- Grâce à cette information, il a ensuite été possible de savoir sur quel Label est positionnée la souris et donc de changer les couleurs pour donner l'apparence du survol
- Quant au Click sur les Labels (pour valider le choix dans la liste), il est simplement remplacé par le Click sur l'Image
Excellente compatibilité
Lorsque vous créez un contrôle personnalisé de cette manière-là (c'est à dire, en utilisant les contrôles basiques d'Excel), vous n'aurez normalement aucun problème en changeant de poste ou de version d'Excel.
Cette liste déroulante fonctionne très bien avec Excel 2002 :
Fichier
Le fichier Excel de cette liste déroulante peut être téléchargé ici : combobox_multicolore.xls
Possibilités illimitées ou presque
Pour prendre un exemple concret, pour ce logiciel de planning il fallait une ListBox avec des boutons de tri au-dessus de chaque colonne et dans laquelle il était possible d'utiliser des couleurs.
Evidemment un tel contrôle n'existe pas à la base mais, en combinant des contrôles basiques, il est possible de réaliser presque tout ce qui est imaginable :