Tatiak

Excel, Vba, Vbs


20 novembre 2016

ComboBox en cascade ou ComboBox liées

Un besoin récurent en VBA est de pouvoir obtenir une liste de choix en fonction d'un premier choix fait dans une première liste déroulante.

En fait ça revient à lister les éléments uniques d'une colonne en fonction d'une première sélection de lignes de données.

La méthode que j'utilise se base sur l'utilisation de tableaux et sur 2 fonctions génériques réutilisables dans tout projet (cf module Tblo) :

  • une fonction de sélection de lignes d'un tableau dont les valeurs d'une colonne correspondent à un premier choix (fonction Select_T de la démo)
  • une fonction de listing d'éléments uniques d'une colonne (fonction Combo_T de la démo)


Dès lors la mise en place du code devient simple :

  1. on charge les données dans une variable tableau (cf sub test_court)
  2. on alimente la première liste déroulante (1 seule ligne de code : dans la démo sub Userform_Initialize)
  3. à la suite d'un choix dans cette première liste, on filtre le tableau (sub filtre) et on alimente la deuxième liste déroulante (toujours par une seule ligne de code)


Dans la démo, une troisième liste est alimentée après le deuxième choix tout aussi simplement par une seule ligne de code, et on pourrait continuer 4ème, 5ème, ...

L'appel aux 2 fonctions principales est simple :

  • pour filtrer un tableau selon une valeur contenu dans une des colonnes (ex : filtrer les CP d'un département) :

Tableau = Select_T(Tableau, colonne, valeur)

  • pour lister les valeurs uniques d'une colonne du tableau (ex : liste des communes)

Liste = Combo_T(Tableau, "Entête_de_colonne")

A noter l'entête de colonne peut être remplacée par le n° de colonne du tableau, par exemple la ligne :

Liste = Combo_T(Tableau, 2) est valide également


Dans la démo, il y a 2 variantes pour initialiser le tableau :

  • une variante "courte" : si vos données commencent en ligne 2 avec des entêtes en ligne 1
  • une variante "longue" : pour le cas où les entêtes sont sur une autre ligne que la ligne 1 et/ou la première colonne de données n'est pas en colonne A


Voici donc une méthode simple pour alimenter vos ComboBox en cascade, le module "Tblo" étant réutilisable en l'état dans votre projet.

Si la méthode correspond à vos besoins, laissez-moi un commentaire!
Pierre

Téléchargement de Combo-liées-Tblo.xlsm

Posté par tatiak à 10:23 - Excel-Howto - Commentaires [0] - Permalien [#]

Commentaires sur ComboBox en cascade ou ComboBox liées

Nouveau commentaire