Icône de la ressource

VBA - ComboBox Multi-Colonnes en UserForm - Afficher toutes les colonnes de l'item sélectionné V7

Le fichier à télécharger contient:
  1. Le Module_MultiColumnComboBox à importer dans le projet VBA.
  2. Le Module de Classe Class_MultiColumnLabel à importer dans le projet VBA.
  3. Le UserForm1 et sa ComboBox1 qui donne un exemple d'utilisation.
Les principales caractéristiques:
  • La sélection d'un item / ligne d'une ComboBox multi-colonnes est nativement amputée par Excel.
    Seule la colonne .TextColumn (ou la 1ère par défaut) est affichée.

  • Le Module_MultiColumnComboBox contient une fonction qui permet de remédier à ce problème en:
    - Créant dynamiquement des Labels de la taille des colonnes sur la zone texte de la ComboBox,
    - Valorisant ces Labels lors d'un changement de sélection.

  • Les Labels n'ont aucun impact sur les valeurs de colonnes de l'item / ligne sélectionné normalement accessibles avec Me.ComboBox.Column(0 - n) dans le UserForm.

  • Grâce au Module de Classe Class_MultiColumnLabel la zone de texte de la ComboBox peut faire l'objet d'une saisie. Cela est particulièrement utile lorsque la ressource VBA - Saisie filtrée (alias saisie intelligente) en ComboBox est utilisée conjointement avec cette ressource.
Mise en œuvre très simple:
  • Placer le Module_MultiColumnComboBox dans la projet VBA.
    Placer le Module de Classe Class_MultiColumnLabel dans la projet VBA.

  • Dans le code du UserForm, sur l'évènement ComboBox_Click(), appeler la fonction
    MultiColumnComboBox_Click() avec le paramètre ad hoc (voir commentaires).

  • VB:
    '---------------
    'ComboBox1 Click
    '---------------
    Private Sub ComboBox1_Click()
        'Function to display all ComboBox columns
        Call MultiColumnComboBox_Click(Me.ComboBox1)
    End Sub
Attention:
  • La largeur de toutes les colonnes de la ComboBox doit être explicitement définie en points (unité par défaut) dans la propriété ComboBox.ColumnWidths. Cela permet la définition de la largeur des Labels car il n'existe pas hélas ! de propriété en ComboBox permettant de lire la largeur des colonnes après qu'Excel en a fait le calcul lorsque des valeurs ne sont pas précisées.
Versions:
  • V1 - Initiale.
  • V2 - Ajout d'attributs de texte de la ComboBox vers les Labels et préservation des bordures de la ComboBox.
  • V3 - Simplification avec l'utilisation d'une seule fonction.
  • V4 - Réglage affiné des positions des Labels et de la taille de police.
  • V5 - Contournement d'un nouveau BUG Excel.
    'NEW EXCEL BUG ! Just affecting any value (True or False) to these Label.Font.Properties sets them to True !!!
    Label.Font.Bold = ComboBox.Font.Bold
    Label.Font.Italic = ComboBox.Font.Italic
    Label.Font.Strikethrough = ComboBox.Font.Strikethrough
    Label.Font.Underline = ComboBox.Font.Underline
  • V6 - Correction d'un Bug !
  • V7 - Ajout de la capacité à saisir une valeur en ComboBox grâce au nouveau Module de Classe Class_MultiColumnLabel. Cela est surtout utile si la ressource VBA - Saisie filtrée (alias saisie intelligente) en ComboBox est utilisée conjointement avec cette ressource.

CMB.gif