Alimenter ComboBox & ListBox

61jeremyw.xlsm (31.77 Ko)

Bonsoir,

Je souhaiterai dans un premier temps alimenter ma ComboBox des entreprise en colonne A, en fonction de l'année (3 choix en OptionButton) dates en colonne D.

Je n'y parviens pas, je ne trouve pas la bonne méthode...

Dans un second temps, je souhaiterai alimenter la ListBox en fonction de l'année cochée (OptionButtons) et de la valeur (Entreprise colonne A) de ma ComboBox et récupérer les valeurs de la colonne G.

Ce qui me donnerai, si je coche l'OptionButton 2016, dans ma ComboBox (Entreprise 01 à 05), dans ma ListBox (N° 1 à 62)

Si je coche l'OptionButton 2017, dans ma ComboBox (Entreprise 03 à 05), dans ma ListBox (N° 63 à 73).

Je joins le fichier sur lequel j'ai commencé à travailler,

Merci de votre aide,

Jeremy

Bonsoir Jeremy, bonsoir le forum,

Peut-être comme ça. Remplace ton code par celui-ci :

Private RECHERCHE As Long
Private F As Worksheet
Private TV As Variant

Private Sub UserForm_Initialize()
Set F = Worksheets("Factures")
TV = F.Range("A1").CurrentRegion
End Sub

Private Sub OptionButton1_Click()
RECHERCHE = Me.OptionButton1.Caption
Call Liste_start
End Sub

Private Sub OptionButton2_Click()
RECHERCHE = Me.OptionButton2.Caption
Call Liste_start
End Sub

Private Sub OptionButton3_Click()
RECHERCHE = Me.OptionButton3.Caption
Call Liste_start
End Sub

Sub Liste_start()
Dim D As Object
Dim I As Long

Set D = CreateObject("Scripting.dictionary")
Me.ComboBox1.Clear
Me.ListBox1.Clear
For I = 2 To UBound(TV, 1)
    If Year(TV(I, 4)) = RECHERCHE Then
        D(TV(I, 1)) = ""
        Me.ListBox1.AddItem TV(I, 7)
    End If
Next I
Me.ComboBox1.List() = D.keys
Call TriAlpha(Me.ComboBox1)
Call TriAlpha(Me.ListBox1)
End Sub

Private Sub ComboBox1_Change()
Me.ListBox1.Clear
For I = 2 To UBound(TV, 1)
    If Year(TV(I, 4)) = RECHERCHE And TV(I, 1) = Me.ComboBox1.Value Then Me.ListBox1.AddItem TV(I, 7)
Next I
Call TriAlpha(Me.ListBox1)
End Sub

Public Sub TriAlpha(CTRL As Control)
Dim I As Integer
Dim J As Integer
Dim TMP As Variant

If CTRL.ListCount <= 1 Then Exit Sub
For I = 0 To CTRL.ListCount - 1
    For J = 0 To CTRL.ListCount - 1
        If CTRL.List(I) < CTRL.List(J) Then
            TMP = CTRL.List(J): CTRL.List(J) = CTRL.List(I): CTRL.List(I) = TMP
        End If
    Next J
Next I
End Sub

Bonjour ThauThème,

Merci beaucoup pour ton aide et surtout ton travail.

Ca fonctionne parfaitement, ne reste plus qu'à comprendre ton code.

Seul petit bémol, c'est le tri, qui se fait sous forme 1, 10, 11, 12, 2, 20, 21, 3, 30, .......

Bonne journée,

Cordialement,

Jeremy

Bonjour Jeremy, bonjour le forum,

Oui mais, désolé, ça je ne sais pas faire...

C'est déjà énorme ce que tu as fait.

Je saurai me contenter de ce tri.

Merci encore.

Rechercher des sujets similaires à "alimenter combobox listbox"