• Initiateur de la discussion Initiateur de la discussion ILOVEUBB
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

I

ILOVEUBB

Guest
SALUT

J'ai un userform avec des combobox ma question est comment faire pour que la liste déroulante du combobox s'ajuste avec la taille du texte .
j'ai utiliser la propriété ComboBox.ListWidth mais ......................
merci
 
Re : ComboBox.ListWidth

Bonjour ILOVEUBB, le Forum

Le code est assez compliqué, voir vba - vb macro string width in pixel - Stack Overflow

En PJ un petit fichier pour pas te casser la tête si toutefois tu ne changes pas de police tout les jours et la taille non plus.
A l'ouverture de l'UserForm, le ComboBox se dimensionne en fonction du nombre de caractères le plus grand dans la colonne concernée.
Ce code est à ajuster, ce n'est pas finalisé.........

@+ 😎
 

Pièces jointes

Re : ComboBox.ListWidth

merci xhudi69 pour ta raiponce mais c'est pas ce que je voulais . le combobox ce dimensionnent moi je voulais uniquement la liste .je pense que je vais me contenté du : ComboBox.ListWidth
 
Re : ComboBox.ListWidth

bonsoir xhudi69 , eric
désoler pour le retard , xhudi69 c'est bien ce que je voulais mais , les donné son ajoutez par la méthode ComboBox.AddItem est ne sont pas disponible sur la feuil1 est ce que sa fonctionnent avec ta méthode ?
 
Re : ComboBox.ListWidth

Bonjour ILOVEUBB, le Forum

Non car je me base sur les chaines de caractères dans les cellules de la colonne concernée.
Tu devrais joindre un bout de fichier anonymisé pour avoir exactement la réponse attendue.

@+ 😎
 
Re : ComboBox.ListWidth

Bonjour ILOVEUBB, xhudi69, eriiiic, le forum,

Une solution avec AutoSize comme le propose eriiiic :

Code:
Sub Dimensionner(o As Object)
Dim mem$, i&, L#
Application.ScreenUpdating = False
Application.EnableEvents = False
o.AutoSize = True
mem = o
For i = 0 To UBound(o.List)
  o.ListIndex = i
  If o.Width > L Then L = o.Width
Next
o.AutoSize = False
o.Width = L
o = mem
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Cette macro s'exécute quand on veut par cette instruction dans le code de l'USF :

Code:
Dimensionner ComboBox1
Il faudrait voir le temps de calcul avec plusieurs milliers d'éléments dans la ComboBox...

A+
 
Re : ComboBox.ListWidth

Re,

On peut aussi utiliser une colonne de la feuille active :

Code:
Sub Dimensionner(o As Object)
Application.ScreenUpdating = False
With Columns(Columns.Count)
  .Resize(o.ListCount) = o.List
  .Font.Name = o.Font.Name
  .Font.Size = o.Font.Size
  .Font.Bold = o.Font.Bold
  .Font.Italic = o.Font.Italic
  .AutoFit
  o.Width = .Width + 16
  .Delete
End With
Application.ScreenUpdating = True
End Sub
C'est 2 fois plus rapide, sur 9000 items => 0,25 seconde.

Mais pour les petites largeurs c'est moins précis.

A+
 
Dernière édition:
Re : ComboBox.ListWidth

Bonjour ILOVEUBB, xhudi69, le forum,

Si l'on veut seulement ajuster la largeur de la liste, les 2 macros précédentes deviennent :

Code:
Sub Dimensionner1(o As Object)
Dim mem1$, mem2#, i&, L#
Application.ScreenUpdating = False
Application.EnableEvents = False
mem1 = o: mem2 = o.Width
o.AutoSize = True
For i = 0 To UBound(o.List)
  o.ListIndex = i
  If o.Width > L Then L = o.Width
Next
o.AutoSize = False
o = mem1: o.Width = mem2
o.ListWidth = Application.Max(72, L + 16 * (o.ListCount <= o.ListRows))
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Sub Dimensionner2(o As Object)
Application.ScreenUpdating = False
With Columns(Columns.Count)
  .Resize(o.ListCount) = o.List
  .Font.Name = o.Font.Name
  .Font.Size = o.Font.Size
  .Font.Bold = o.Font.Bold
  .Font.Italic = o.Font.Italic
  .AutoFit
  o.ListWidth = Application.Max(72, .Width - 16 * (o.ListCount > o.ListRows))
  .Delete
End With
Application.ScreenUpdating = True
End Sub
Sur Excel 2003 il faut un minimum de 72 points en largeur.

Avec une largeur plus petite, une barre de défilement horizontale apparaît.

Nota : je rappelle que True se convertit en -1...

A+
 
Re : ComboBox.ListWidth

Re,

Mes macros précédentes (post #11) vont bien sur Excel 2003.

Sur Excel 2010 il faut ajouter des points :

Code:
Sub Dimensionner1(o As Object)
Dim mem1$, mem2#, i&, L#
Application.ScreenUpdating = False
Application.EnableEvents = False
mem1 = o: mem2 = o.Width
o.AutoSize = True
For i = 0 To UBound(o.List)
  o.ListIndex = i
  If o.Width > L Then L = o.Width
Next
o.AutoSize = False
o = mem1: o.Width = mem2
o.ListWidth = Application.Max(72, 10 + L + 16 * (o.ListCount <= o.ListRows))
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Sub Dimensionner2(o As Object)
Application.ScreenUpdating = False
With Columns(Columns.Count)
  .Resize(o.ListCount) = o.List
  .Font.Name = o.Font.Name
  .Font.Size = o.Font.Size
  .Font.Bold = o.Font.Bold
  .Font.Italic = o.Font.Italic
  .AutoFit
  o.ListWidth = Application.Max(72, 6 + .Width - 16 * (o.ListCount > o.ListRows))
  .Delete
End With
Application.ScreenUpdating = True
End Sub
Le minimum de 72 est le même sur les 2 versions.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
37
Affichages
1 K
  • Question Question
Autres Code VBA
Réponses
11
Affichages
470
Réponses
5
Affichages
178
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
523
Retour