IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

VBA Excel - ColumnWidths d'un ListBox/ComboBox d'un UserForm par rapport à la largeur des colonnes d'un Range,
Un billet blog de Philippe Tulliez

Le , par Philippe Tulliez

0PARTAGES

Préambule
Lassé de perdre du temps à régler la largeur des colonnes d'un contrôle ListBox ou ComboBox d'un UserForm, je me suis construit une petite fonction qui me calcule automatiquement la largeur des colonnes du contrôle en fonction de la largeur des colonnes de la liste des données.

Pour rappel
C'est la propriété ColumnWidths qui 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).

Exemple :
Code VBA : Sélectionner tout
Me.ListBox1.ColumnWidths = "0;30;60;60;20;20"
Si nous ajoutons ou supprimons une ou plusieurs colonnes de notre source de données, nous serons obligés de rectifier la valeur de cette propriété

Code de la procédure

Cette procédure nommée GetColumnWidths peut être placée dans le module du UserForm où se trouve le contrôle ou, c'est préférable, dans un module standard
La procédure a été testée avec les police Tahoma, taille à 8 et normal, ainsi que Calibri, taille 10 et normal.
.
Code VBA : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
Function GetColumnWidths(oRange As Range) As String 
  ' Philippe Tulliez (www.magicoffice.be) 
  Const cw As Double = 0.85 
  Dim tcol As Variant, c As Long 
  With oRange 
   ReDim tcol(.Columns.Count - 1) 
   For c = 1 To .Columns.Count 
    tcol(c - 1) = .Cells(1, c).Width * cw 
   Next 
  End With 
  GetColumnWidths = Join(tcol, ";") 
End Function

Comment l'invoquer ?

Pour l'exemple, on définit la propriété ColumnWidths du ListBox nommé ListBox1 en fonction de la largeur des colonnes du tableau structuré nommé t_Data. Cette ligne de code se trouve dans le module du UserForm (Me)
Code VBA : Sélectionner tout
Me.ListBox1.ColumnWidths = GetColumnWidths(Range("t_Data"))

Tutoriels
Quelques tutoriels à lire pour en savoir plus sur les UserForm, les contrôles dans un UserForm, les tableaux structurés

Une erreur dans cette actualité ? Signalez-nous-la !