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 :

vba excel combobox creer liste deroulante personnalisee

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 :

vba excel combobox vide creer liste deroulante personnalisee

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 :

vba excel combobox lignes colorees creer liste deroulante personnalisee

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 :

vba excel combobox lignes couleur creer liste deroulante personnalisee

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

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 :

  1. Un contrôle Image a été placé au-dessus des Labels
  2. L'événement MouseMove du contrôle Image a été utilisé pour connaître la position verticale (Y) de la souris
  3. 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
  4. Quant au Click sur les Labels (pour valider le choix dans la liste), il est simplement remplacé par le Click sur l'Image
vba excel combobox lignes couleurs creer liste deroulante personnalisee

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 :

combobox 2002 creer liste deroulante personnalisee

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 :

planning excel userform creer liste deroulante personnalisee