XL 2021 Formule avec additem

  • Initiateur de la discussion Initiateur de la discussion Did25
  • 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 !

Did25

XLDnaute Occasionnel
Bonjour le Forum ,j'utilise actuellement une formule pour l'affichage de menus déroulant des combobox dans un formulaire ,mais je ne la trouve pas optimisée ,ça fonctionne mais pour ma culture personnel ,est-il possible de l'améliorer ? .
VB:
Private Sub UserForm_Initialize()
  With ComboBox2
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
       .AddItem "6"
       .AddItem "7"
  With ComboBox5
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
  With ComboBox7
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
  With ComboBox9
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
  With ComboBox11
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
  End With
  End With
  End With
  End With
  End With
End Sub
 
Solution
Bonjour @Did25🙂, @jcf6464😉,

Un autre code :
VB:
Private Sub UserForm_Initialize()
Const combo = "2 5 7 9 11", max = "7 5 5 5 4"   ' constantes des N° des combobox et Max par combobox
Dim cb, ncb, i As Long, j As Long               ' déclarations
   cb = Split(combo): ncb = Split(max)          ' array des N° et Max des combobox (Split => base 0 automatiquement)
   For i = 0 To UBound(cb): For j = 1 To ncb(i): Controls("combobox" & cb(i)).AddItem j: Next j, i    ' remplissage
End Sub
Bonjour le Forum ,j'utilise actuellement une formule pour l'affichage de menus déroulant des combobox dans un formulaire ,mais je ne la trouve pas optimisée ,ça fonctionne mais pour ma culture personnel ,est-il possible de l'améliorer ? .
VB:
Private Sub UserForm_Initialize()
  With ComboBox2
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
       .AddItem "6"
       .AddItem "7"
  With ComboBox5
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
  With ComboBox7
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
  With ComboBox9
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
       .AddItem "5"
  With ComboBox11
       .AddItem "1"
       .AddItem "2"
       .AddItem "3"
       .AddItem "4"
  End With
  End With
  End With
  End With
  End With
End Sub
Bonjour Did25 et le forum,

un exemple et dans le même cas pour les autres combobox,

bonne continuation jcf
 

Pièces jointes

Bonjour @Did25🙂, @jcf6464😉,

Un autre code :
VB:
Private Sub UserForm_Initialize()
Const combo = "2 5 7 9 11", max = "7 5 5 5 4"   ' constantes des N° des combobox et Max par combobox
Dim cb, ncb, i As Long, j As Long               ' déclarations
   cb = Split(combo): ncb = Split(max)          ' array des N° et Max des combobox (Split => base 0 automatiquement)
   For i = 0 To UBound(cb): For j = 1 To ncb(i): Controls("combobox" & cb(i)).AddItem j: Next j, i    ' remplissage
End Sub
 

Pièces jointes

Dernière édition:
Bonjour @Did25🙂, @jcf6464😉,

Un autre code :
VB:
Private Sub UserForm_Initialize()
Const combo = "2 5 7 9 11", max = "7 5 5 5 4"   ' constantes des N° des combobox et Max par combobox
Dim cb, ncb, i As Long, j As Long               ' déclarations
   cb = Split(combo): ncb = Split(max)          ' array des N° et Max des combobox (Split => base 0 automatiquement)
   For i = 0 To UBound(cb): For j = 1 To ncb(i): Controls("combobox" & cb(i)).AddItem j: Next j, i    ' remplissage
End Sub
Bonjour jcf6464 et mapomme ,c'est top et j'ai compris la logique .Merci le Forum
 
Bonjour à tous,

La méthode .List me paraît préférable, on évite la double boucle :
VB:
Private Sub UserForm_Initialize()
Dim cb, ncb, i
cb = Array(2, 5, 7, 9, 11): ncb = Array(7, 5, 5, 5, 4)
For i = 0 To UBound(cb): Controls("combobox" & cb(i)).List = Evaluate("ROW(1:" & ncb(i) & ")"): Next
End Sub
Edit : bon j'ai testé, la durée d'exécution est de 0,38 ms contre 0,28 ms avec AddItem, c'est à cause de Evaluate.

A+
 

Pièces jointes

Dernière édition:
Bonjour à tous,

La méthode .List me paraît préférable, on évite la double boucle :
VB:
Private Sub UserForm_Initialize()
Dim cb, ncb, i
cb = Array(2, 5, 7, 9, 11): ncb = Array(7, 5, 5, 5, 4)
For i = 0 To UBound(cb): Controls("combobox" & cb(i)).List = Evaluate("ROW(1:" & ncb(i) & ")"): Next
End Sub
Edit : bon j'ai testé, la durée d'exécution est de 0,38 ms contre 0,28 ms avec AddItem, c'est à cause de Evaluate.

A+
Bonjour job75 ,merci pour votre contribution et votre analyse ,ça fonctionne très bien également .
 
Alors le pompon revient à cette macro qui s'exécute en 0,06 ms :
VB:
Private Sub UserForm_Initialize()
Dim liste$, cb, ncb, i
liste = "1 2 3 4 5 6 7"
cb = Array(2, 5, 7, 9, 11): ncb = Array(7, 5, 5, 5, 4)
For i = 0 To UBound(cb): Controls("combobox" & cb(i)).List = Split(RTrim(Mid(liste, 1, 2 * ncb(i)))): Next
End Sub
 

Pièces jointes

Et si le nombre d'éléments des listes des ComboBox peut dépasser 9 on utilisera :
VB:
Private Sub UserForm_Initialize()
Dim liste$, cb, ncb, i
liste = "01 02 03 04 05 06 07 08 09 10"
cb = Array(2, 5, 7, 9, 11): ncb = Array(10, 5, 5, 5, 4)
For i = 0 To UBound(cb): Controls("combobox" & cb(i)).List = Split(RTrim(Mid(liste, 1, 3 * ncb(i)))): Next
End Sub
 

Pièces jointes

- 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

Discussions similaires

Réponses
10
Affichages
282
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
361
  • Question Question
Microsoft 365 VBA Transpose
Réponses
11
Affichages
835
Réponses
5
Affichages
241
Réponses
9
Affichages
201
Réponses
3
Affichages
665
Retour