VBA : Lier une Listbox Choix Multiples avec tris de colonnes

Bonjour à tous,

Après de très nombreuses recherches infructueuses, je vous soumets mon casse-tête, en espérant que vous pourrez m'aider :

J'ai fait une listbox à choix multiple accessible via un bouton bleu (cf. Onglet Accueil du fichier ci-joint), qui ouvre un UserForm.

Je cherche à faire en sorte que le bouton "Valider la sélection" en bas du UserForm (CommandButton1), lance les actions suivantes dans l'ordre :

1. Filtrer : dans chacun des onglets "Source", "Vague 1", "Vague 2", "Vague 3", "Vague 4" et "Synthèse", pour afficher uniquement le ou les postes sélectionnés dans la Listbox

2. Afficher l'onglet "Vague 1"

3. Fermer le UserForm

Pour les actions 2 et 3, aucun problème. Si toutefois quelqu'un pouvait m'aider pour l'action filtrer, ça pourrait vraiment m'être utile

Pour entrer dans les détails, voici ce que ça donne au niveau de mon trifouillage du code actuellement :

Private Sub CommandButton1_Click()
Dim iItem As Integer
Dim sChaine As String
Dim sPostes As String
Dim sParateur As String
Dim filtre As String

For iItem = 0 To ListBox_Selection_Postes.ListCount - 1
    If ListBox_Selection_Postes.Selected(iItem) Then
        sPostes = ListBox_Selection_Postes.List(iItem)
        sParateur = ", _" & vbLf
        sChaine = sChaine & " *" & sPostes & " *" & sParateur
    End If

    Next iItem
    If Right(sChaine, 1) = sParateur Then
        sChaine = Left(sChaine, Len(sChaine) - 1)
    End If

    Range("TestResultat").Value = sChaine

filtre = Range("TestResultat")

            With Worksheets("Source")
                .Range("A1").AutoFilter Field:=2, Criteria1:=Array(filtre), Operator:=xlFilterValues
            End With
            With Worksheets("Vague 1")
                .AutoFilterMode = False
                .Range("A1").AutoFilter Field:=2, Criteria1:=Array(filtre), Operator:=xlFilterValues
            End With
            With Worksheets("Vague 2")
                .AutoFilterMode = False
                .Range("A1").AutoFilter Field:=2, Criteria1:=Array(filtre), Operator:=xlFilterValues
            End With
            With Worksheets("Vague 4")
                .AutoFilterMode = False
                .Range("A1").AutoFilter Field:=2, Criteria1:=Array(filtre), Operator:=xlFilterValues
            End With
            With Worksheets("Vague 3")
                .AutoFilterMode = False
                .Range("A1").AutoFilter Field:=2, Criteria1:=Array(filtre), Operator:=xlFilterValues
            End With
            With Worksheets("Synthèse")
                .AutoFilterMode = False
                .Range("A2").AutoFilter Field:=3, Criteria1:=Array(filtre), Operator:=xlFilterValues
            End With

        UF_HyperNavigation.Hide

End Sub

Quelques explications complémentaires :

La cellule TestResultat est située en C16 dans l'onglet Accueil.

String sParateur : J'ai voulu faire en sorte que les items sélectionnés soient séparés par ", _" & vbLf afin de leur permettre d'apparaître au format suivant dans la partie de code correspondant à l'AutoFilter avec Operator:=xlFilterValues :

ActiveSheet.ListObjects("Tableau_Source").Range.AutoFilter Field:=2, _
        Criteria1:=Array("Poste 005", _
        "Poste 009", _
        "Poste 072", _
        "Poste 073"), Operator:=xlFilterValues

Mais c'est ici que ça coince : je ne sais pas faire autrement et j'aurais besoin que le sParateur qui apparaît après le dernier item sélectionné n'apparaisse pas... Je ne sais pas si c'est suffisant pour que mon code fonctionne ou si j'ai fait des erreurs ailleurs.

Toute solution plus simple et plus efficace est bienvenue

Merci d'avance pour votre aide !

Bonjour,

Tout ça m'a l'air quelque peu compliqué... La simplicité donne toujours les meilleurs résultats !

Essaie déjà ceci :

Private Sub CommandButton1_Click()
    Dim i%, filtre
    With ListBox_Selection_Postes
        For i = 0 To .ListCount - 1
            If .Selected(i) Then filtre = filtre & ";" & .List(i)
        Next i
    End With
    filtre = Replace(filtre, ";", "", 1, 1)
    filtre = Split(filtre, ";")
    Worksheets("Source").Range("A1").AutoFilter 2, filtre, xlFilterValues
    Me.Hide
End Sub

Je laisse de côté le reste car c'est vide... ! Mais cela devrait te suffire pour tester comment filtrer sans aller faire de multiples détours.

Cordialement.

Merci beaucoup MFerrand ! Effectivement, ça fonctionne, tout simplement

Rechercher des sujets similaires à "vba lier listbox choix multiples tris colonnes"