Lassé de perdre du temps à la mise à jour de la propriété ColumnWith d’un contrôle ListBox ou ComboBox ?

Voici une procédure d’adaptation automatique de cette propriété en fonction de la largeur des colonnes de la liste de données définies dans la propriété RowSource de ce même contrôle (Autrement dit la largeur des colonnes de la feuille d’excel).

Rappel

La propriété ColumnWidth permet de définir la largeur des colonnes d’un contrôle ListBox ou ComboBox. Par défaut la largeur des colonnes est de 72 points (72 points=1 pouce).

Lorsque nous décidons d’avoir plus d’une colonne, nous devons modifier la valeur de la propriété ColumnCount du dit contrôle.

Codes de la procédure AutoColumnWidth

A placer dans le formulaire (UserForm) ou dans un module standard

Private Function AutoColumnWidth(ctrlList As MSForms.Control, oRng As Range) As Boolean
 ' Arguments
 ' ctrlList (obj Ctrl) ' Nom du contrôl ListBox ou ComboBox
 ' oRng     (obj Range)' Plage utilisée pour la liste
 Dim tcol() As String, c As Long, tw As Double
 With ctrlList
  ReDim tcol(.ColumnCount - 1)
  For c = 1 To .ColumnCount ' Calcul largeur des colonnes et le place dans un string par concaténation
   tcol(c - 1) = CStr(oRng.Cells(1, c).Width) * 0.85: tw = tw + tcol(c - 1)
  Next
 DoEvents
 .Width = tw + UBound(tcol) + 2 ' Rectifie la largeur du ListBox ou ComboBox
 .ColumnWidths = Join(tcol, ";")
 End With
End Function

La largeur de chaque colonne du ListBox ou ComboBox s’adaptera automatiquement à celle des colonnes de votre feuille

Procédure d’appel de cette fonction

AutoColumnWidth Me.cboBox, rngData

Dans cette ligne de code, cboBox est le nom du contrôle (ici un contrôle ComboBox) et rngData est la variable objet représentant la liste des données.

Classeur exemple à télécharger