XL 2019 Lenteur pour charger une ComboBox à l'ouverture d'un classeur

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 !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Tout est dans le titre.

Sur une feuille j'ai une ComboBox qui affiche une liste de nombres (1 jusqu'à 409 par pas de 0,5 : les tailles possibles des polices de caractères).
Cette ComboBox se charge à chaque ouverture du classeur dans Workbook_Open(). Néanmoins son chargement est très long, alors que si je vide la ComboBox et qu'ensuite je la charge, l'opération est quasi instantanée. À quoi est-ce dû ? Une lenteur avec les ActiveX ?
 
Bonjour @Magic_Doctor😉,
Maintenant, en y regardant de plus près, puisqu'il s'agit en fait de la liste de toutes les tailles possibles de polices de caractères, qui va de 1 à 409 (par pas de 0,5), en toute rigueur il faudrait que la liste commence par 1 et non pas 0,5 ; car si on sélectionne par la suite 0,5, on a fatalement un message d'erreur.

Rien de plus simple ! Le code avait été écrit pour simplifier cela :
  • v=0.5 : dans cette expression 0.5 est la valeur de départ
  • v = v + 0.5 : dans cette expression 0.5 est est le pas d'incrémentation
  • Until v > 409 : dans cette expression 409 est la dernière valeur de la liste
Donc avec cela, vous modifiez sans problème tout ce que vous désirez.
Rappel du code :
VB:
Private Sub Workbook_Open()
Dim v#
   Feuil1.ComboBox1.Clear: v = 0.5
   Do: Feuil1.ComboBox1.AddItem v: v = v + 0.5: Loop Until v > 409
   Feuil1.ComboBox2.List = Feuil1.ComboBox1.List
End Sub

ou encore plus lisible :
VB:
Private Sub Workbook_Open()
Const vPrem = 1, vIncr = 0.5, vDer = 409          ' constantes :  première, incrémentation, dernière
Dim v
   Feuil1.ComboBox1.Clear: v = vPrem
   Do: Feuil1.ComboBox1.AddItem v: v = v + vIncr: Loop Until v > vDer
   Feuil1.ComboBox2.List = Feuil1.ComboBox1.List
End Sub
 
Dernière édition:
Bonjour Magic_Doctor, le forum,

Dans ThisWorkBook :
VB:
Private Sub Workbook_Open()
Dim a
a = Evaluate("ROW(2:818)/2")
Feuil1.ComboBox1.List = a
Feuil1.ComboBox2.List = a
End Sub
En passant je précise que la feuille active doit être une feuille de calcul...

Dans Feuil1 :
VB:
Private Sub Combobox1_Change()
If ComboBox1.ListIndex > -1 Then ActiveCell.Font.Size = Val(Replace(ComboBox1, ",", "."))
ActiveCell.Activate
End Sub
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
Retour