1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| Function AutomaticSizeColumns(ctrlList As MSForms.Control, _
oRng As Range, _
Optional AutoFormWidth As Boolean) As Boolean
' Author : http://philippe.tulliez.be
' Date : 20/02/2017
' Version 2.0 (v 1.0 - 14/10/2015)
' Calcul de la propriété ColumnWidths d'un contrôle ListBox ou ComboBox
' en fonction de la largeur des colonnes d'une plage de cellules
' La propriété ColumnCount du contrôle est également calculée par la fonction qui dépend de la largeur de la liste des données (oRng)
' Arguments
' ctrlList (obj Ctrl) ' Nom du contrôl ListBox ou ComboBox
' oRng (obj Range) ' Plage utilisée pour la liste
' [AutoFormWidth] (Boolean) ' Rectifie la taille du UserForm (False par défaut)
' Upgrade
' v 2 - 20/02/2017 - Ajouté un argument optionel pour adapter la largeur du formulaire parent à la taille du contrôle
Dim tcol() As String, c As Integer, tw As Double
With ctrlList
.ColumnCount = oRng.Columns.Count
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
' Rectifie la largeur du USERFORM parent du contrôle
If AutoFormWidth Then
With ctrlList
.Parent.Width = .Left + .Width + 20
End With
End If
AutomaticSizeColumns = True
End Function |
Partager