Remplir une combobox

K

Karibou

Guest
Bonjour,

Je dispose d'une feuille Excel contenant une seule combobox et un bouton "Remplir combobox". J'aimerais simplement remplir cette combobox à partir d'un tableau chaine de caractère lorsque l'utilisateur appui sur le bouton "Remplir combobox". ça fait 2 jours que j'essaye de trouver... je n'y arrive vraiment pas...grrrrrrrrrrrrrrr

Merci par avance pour votre aide.

Karibou
 
@

@+Thierry

Guest
Re: Remplir une combobox => 3 méthodes : ListFillRange / AddItem & List !!!

Salut Karibou, le Forum

Nan, nan, nan jamais de Grrrrrrrrrrr en VBA ;-)

Voici les trois méthodes connues pour alimenter dynamiquement (depuis une source de données sur une plage variable) une ComboBox ActiveX ObjetOLE sur une feuille Excel :



Méthode "ListFillRange"

Private Sub CommandButton1_Click()
Dim L As Integer
L = Sheets("Feuil1").Range("A65536").End(xlUp).Row
Me.ComboBox1.ListFillRange = "Feuil1!A1:A" & L
End Sub

Avantage code facile à mettre en oeuvre, le contenu de la ComboBox est associé 'lié) à la source de donnée
Inconvénient Impossibilité de faire une sélection des items ou de les trier

Variante de la méthode "ListFillRange"

Private Sub CommandButton1_Click()
Dim Plage As String
With Sheets("Feuil1")
Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Address
End With
Me.ComboBox1.ListFillRange = "Feuil1!" & Plage
End Sub

Avantage Idem
Inconvénient Idem



Méthode "AddItem"

Private Sub CommandButton1_Click()
Dim i As Integer, L As Integer
L = Sheets("Feuil1").Range("A65536").End(xlUp).Row
With Me.ComboBox1
.Clear
For i = 1 To L
.AddItem Sheets("Feuil1").Cells(i, 1)
Next
End With
End Sub

Avantage On peut utiliser la méthode RemoveItem si nécessaire. On peut Filtrer les Items
Inconvénient Les Données Sources ne sont plus liées à la ComboBox, la boucle utilisée rend moins rapide l'intégration des Items que le ListFillRange




Méthode "List"

Private Sub CommandButton1_Click()
Dim Tablo() As String
Dim Plage As Range, Cell As Range
Dim i As Integer

With Sheets("Feuil1")
Set Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

ReDim Tablo(0 To Plage.Rows.Count - 1)
For Each Cell In Plage
Tablo(i) = Cell.Text
i = i + 1
Next

Me.ComboBox1.List = Tablo()
End Sub


Avantage On peut, en plus, filtrer, puis aussi, trier les donnée, éventuellement supprimer les doublons etc.. par un algo appliqué sur le tableau indexé séquentiellement avant de l'intégrer à la ComboBox.
InconvénientBasé sur une Dynamic Array, qui peut ralentir l'exécution si il y a beaucoup d'items, et nécessite quelques connaissances en VBA



Voilà Voilà pour ce chapitre
smiley_387.gif
smiley_387.gif
smiley_387.gif


Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
Salut Malaval, Karibou, le Forum

Huuum Malaval, je vais t'inviter premièrement à lire notre Charte :


Ensuite je vais t'inviter sur la page d'accueil de ce Forum :


Ensuite vu que le sujet viens d'être traîté en partie, je te conseille de voir ce fil : Lien supprimé car le fil où tu te trouve n'a strictement rien à voir avec ce sujet !

Sinon, tu peux aussi faire un :
Lien supprimé

Puis :
NouveauSujet02.jpg


On t'aidera sûrement, mais n'oublie pas qu'on est sur un Forum Excel

Voilà Malval, sinon on te souhaite aussi :
Bienvenue_XLD.gif



Bonne soirée et bonne découverte d'XLD !

@+Thierry


PS : Post en Hommage à notre grand ami qui me manque
Clin.gif
 
Z

Zon

Guest
Quelle galèrealer

Salut,

Je tombe que sur des pages inexistantes, il faut relever le N° et l'inscrire à la main

@Thierry on peut ècrire directement aussi:
With Sheets("Feuil1")
combobox1.list = Range(.[A1],.[A65536).End(xlUp)).value
End With


A+++
 
@

@+Thierry

Guest
Bonsoir Zon, le Fil et le Forum

Oui c'est assez galère ce soir on dirait que seules les URL construites sur la base de : (qu'on reçoit depuis un mail ...)

http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=67825&t=67825

...passent...

Sinon mis à part cette galère de PHorum, j'espère que David va s'en sortir...

Oui, "of Course", on peut peut alimenter une Combobox ou une ListBox de cette manière que de la même manière qu'on alimenterait une Array, puisqu'elles réagissent idem :

Sub MonBoTablo()
Dim MyArray As Variant
MyArray = Range("A1:A100")
Range("B1:B100").Value = MyArray
USFX.ListBox1.List = MyArray
End Sub

Et tu as parfaitement raison de le préciser. Mais, par contre, je ne supporte pas bien les "] ] [ ] " dans un code VB, d'ailleurs je me rappelle que Laurent Longre disait qu'il était très "cochon" quand il les employait !! Et par ailleurs, dans tous les codes que j'ai l'occasion d'utiliser au niveau développement pro, je n'en vois jamais... Mais ceci dit, si çà marche avec çà et que çà vous simplifie la vie...

Tu sais Zon, çà te paraît évident pour toi depuis le temps que tu lis mes codes, mais il y en a beaucoup qui ont besoin d'écrire et d'utiliser des centaines de fois ce fameux :

L = Range("A65536").End(xlUp).Row
For i = 1 to L

ou autres...
y = y + 1

Qui sont pourtant les "Clefs d'accès" pour rentrer dans le monde VBA... Car cette boucle c'est comme le levier pour un certain Archimède !!!

Et dans le code décrit ci-dessus pour Méthode "List" je n'ai pas voulu compliquer, mais j'explique qu'on peut filtrer, trier etc, ce qui est en fait le but de la méthode List pour intégrer un "Bo Tablo dans la ComBo"... une exemple "simple" LOL :

Private Sub UserForm_Initialize()

Dim Tablo() As String
Dim Plage As Range, Cell As Range
Dim x As Integer, i As Integer, j As Integer, ii As Integer
Dim Tmp1 As String, Tmp2 As String

With ThisWorkbook.Sheets("Feuil1")
Set Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
For Each Cell In Plage
If Cell.Value <> "" And Not IsNumeric(Cell.Value) Then
ReDim Preserve Tablo(0 To x)
Tablo(x) = Cell.Text
x = x + 1
End If
Next

For i = LBound(Tablo) To UBound(Tablo)
For j = LBound(Tablo) + ii To UBound(Tablo)
If Tablo(i) > Tablo(j) Then
Tmp1 = Tablo(j): Tmp2 = Tablo(j)
Tablo(j) = Tablo(i): Tablo(j) = Tablo(i)
Tablo(i) = Tmp1: Tablo(i) = Tmp2
End If
Next j
ii = ii + 1
Next i

Me.ComboBox1.List = Tablo()
End Sub

Bonne Nuit

@+Thierry
Take it Easy Just For The Fun​

PS : j'espère que Karibou va pas s'enfuir à toutes jambes en voyant un truc pareil !!! Au fait çà sert à ne pas prendre en considération les cellules vides ou numériques, et de trier les données dans la ComboBox... Pour les doublons faut encore rajouter une couche mais là je vais au lit !
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG