XL 2016 VBA - Comment lister les items d'une ComboBox Active X chargée par .AddItem

Dudu2

XLDnaute Barbatruc
Bonjour,

Je rame sur la syntaxe pour lister les items d'une ComboBox Active X chargée par des .AddItem.
Le ComboBox.ListFillRange est vide.

VB:
For i = 1 to ???
    msgbox ComboBox1.???(i)
next i

Merci pour toute suggestion.
 
Solution
Re
faut un truc du genre !
VB:
Sub ListeComboBoxItems()
    Dim i As Integer
    For i = 0 To ActiveSheet.OLEObjects("MaComboBox").Object.ListCount - 1
     MsgBox ActiveSheet.OLEObjects("MaComboBox").Object.List(i)
    Next i
End Sub
jean marie

laurent950

XLDnaute Barbatruc
Bonsoir

Je rame sur la syntaxe pour lister les items d'une ComboBox Active X chargée par des .AddItem.
Le ComboBox.ListFillRange est vide.

VB:
Private Sub CommandButton1_Click()
Dim Text As Variant
    Text = Array("a", "b", "c", "d", "5", "4", "3")
    Me.ComboBox1.List = Text
   
    For i = LBound(Me.ComboBox1.List) To UBound(Me.ComboBox1.List)
        MsgBox Me.ComboBox1.List(i)
    Next i
End Sub
 

ChTi160

XLDnaute Barbatruc
Re
faut un truc du genre !
VB:
Sub ListeComboBoxItems()
    Dim i As Integer
    For i = 0 To ActiveSheet.OLEObjects("MaComboBox").Object.ListCount - 1
     MsgBox ActiveSheet.OLEObjects("MaComboBox").Object.List(i)
    Next i
End Sub
jean marie
 

job75

XLDnaute Barbatruc
Bonsoir à tous,

Je suis surpris Dudu2, tu fais généralement des choses plus compliquées :
VB:
Sub ListeComboBoxItems()
    Dim i As Integer
    With ActiveSheet.OLEObjects(NomComboBox).Object
        For i = 0 To .ListCount - 1
            MsgBox .List(i)
        Next i
    End With
End Sub
A+
 

laurent950

XLDnaute Barbatruc
Bonsoir Dudu2,

ComboBox Maximum 1O colonnes.

VB:
Sub ListeComboBoxItems()
    MsgBox "Comment faire ???"
    Dim i, j As Integer
    Dim F1 As Worksheet
    Set F1 = Worksheets("Feuil1")
    Dim CbBs As OLEObject
    ' Test nom des Objets OLE sur la Feuille
        For Each CbBs In F1.OLEObjects
            MsgBox CbBs.Name
        Next CbBs
    ' La Variable
    Dim CbB As OLEObject
        Set CbB = F1.OLEObjects(NomComboBox)
    ' Test Lecture
        MsgBox CbB.Object.List(LBound(CbB.Object.List))
        MsgBox CbB.Object.List(1)
        MsgBox CbB.Object.List(UBound(CbB.Object.List))
    ' Test (Transfert dans variable tableau)
    Dim TCbB As Variant
        TCbB = CbB.Object.List
        ' Test Lecture dimension du tableau a 2 Dimenssions
        ' Colonne maximum 10 Colonnes (Pour cette Objet)
        MsgBox LBound(TCbB, 1): MsgBox UBound(TCbB, 1)
        MsgBox LBound(TCbB, 2): MsgBox UBound(TCbB, 2)
    ' Boucle sur le tableau
    ' Ici que la premiére colonne de remplis soit la O
        For i = LBound(TCbB, 1) To UBound(TCbB, 1)     ' Lignes
            For j = 0 To 0                             ' Colonnes soit la colonne 1 remplis (1 sur 10)
                MsgBox TCbB(i, j)
            Next j
        Next i
    ' OU
    ' Boucle sur l'objet OLE
        For i = LBound(CbB.Object.List) To UBound(CbB.Object.List)
            MsgBox CbB.Object.List(i, 0)
        Next i
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@Dudu2
on peu économiser de la mémoire en ayant accès a la combo qu'une fois
la variable tablo sera forcement a 2 dimensions meme si il n'i a qu'une colonne
sauf si on transpose
VB:
Sub ListeComboBoxItems()
    Dim tablo,i As Integer
    tablo=ActiveSheet.OLEObjects("MaComboBox").Object.list
For i = 0 To ubound(tablo
     MsgBox tablo(i,0)
    Next i
End Sub

on peut étendre uen combobox à plus de 10 colonne quand on la rempli avec un rangeou une variable tableau

ps:
j'oubliais
on peut accèder a la combo par la collection DRAWINGOBJECTS aussi
VB:
tablo = ActiveSheet.DrawingObjects("MaComboBox").Object.List
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
566
Réponses
4
Affichages
352

Statistiques des forums

Discussions
314 017
Messages
2 104 581
Membres
109 081
dernier inscrit
Vio21