Filtrer une listbox en utilisant DTPicker

Bonjour à tous !

Tout nouveau sur le forum je sais qu'il y'a déjà eu quelque sujet sur mon problème mais malheureusement après les avoir tous lu et exploité je n'ai pas réussi a le résoudre !

Je vous explique donc de quoi il s'agit :

Mon fichier me sert a rentrer des commandes (Feuille "Formulaire"), a pouvoir les reprendre et les modifier en ajoutant des info (Feuille "Modifier") et à filtrer les résultat et les afficher dans plusieurs listBox (Bouton "STATUT").

Ma ListBox affiche mes commandes qui sont "En cours" et en "Attente chgt". Il n'y a aucun problème la dessus, tout s'affiche nickel.

Mais maintenant la dernière programmation de mon fichier consiste a renseigner deux date dans des DTPicker présents sur mon USERFORM4 et à afficher uniquement les commandes comprises entre ces deux dates ! Et c'est la que je bloque !

J'ai essayé tout les codes possibles mais rien ne ressort a chaque fois donc je me tourne vers vous si vous avez des idées !

Ci joint mon fichier ( j'ai essayé de le réduire au max et de commenter le + possible)

Merci d'avance pour votre aide.


Voici un bout de mon prog avec illustration alors :

Déjà voici le code pour afficher ma listbox des que j'ouvre mon userform : elle contient les commandes qui sont "en cours" et en "Attente chgt"

Il y'a beaucoup de conditions mais c'est uniquement pour la mise en forme représenté sur l'image suivante !

'Liste des procédures a faire
Private Sub UserForm_Initialize()

'Valeur par défault
DTPicker1.Value = Now - 365
DTPicker2.Value = Now

listing1
listing2
listing3
listing4
End Sub

'Bouton pour quitter l'écran
Private Sub CommandButton1_Click()
Unload UserForm4
End Sub

'Bouton pour changer d'écran
Private Sub CommandButton2_Click()
Unload UserForm4
UserForm6.Show
End Sub

'Liste les valeurs des commandes dans la zone 101
Private Sub listing1()
Dim i As Integer
With ListBox1
    .Clear
    .ColumnCount = 2
    .ColumnWidths = "50;0"
End With

With Sheets("Modifier")

' Si le statut est "En cours" ou "Attente chgt" alors on affiche la commande dans l'écran de suivi
    For i = 5 To .Range("a100000").End(xlUp).Row

        'Si pas de quai et "Attente chgt"
        If .Cells(i, 11) = "" And .Cells(i, 17) = "Attente chgt" Then
        ListBox1.AddItem
        ListBox1.List(ListBox1.ListCount - 1, 0) = "  " & "           " & .Cells(i, 17) & "     " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)

        Else
        'si pas de quai et "En cours"
        If .Cells(i, 11) = "" And .Cells(i, 17) = "En cours" Then
        ListBox1.AddItem
        ListBox1.List(ListBox1.ListCount - 1, 0) = "  " & "           " & .Cells(i, 17) & "            " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)

        Else
        'si quai et "Attente chgt"
        If .Cells(i, 17) = "Attente chgt" Then
        ListBox1.AddItem
        ListBox1.List(ListBox1.ListCount - 1, 0) = .Cells(i, 11) & "       " & .Cells(i, 17) & "     " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)

        Else
        'si quai et "En cours"
        If .Cells(i, 17) = "En cours" Then
        ListBox1.AddItem
        ListBox1.List(ListBox1.ListCount - 1, 0) = .Cells(i, 11) & "       " & .Cells(i, 17) & "            " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)

End If
End If
End If
End If

Next i

End With
End Sub

MON CODE UTILISE UNIQUEMENT LA LISTBOX1 EN HAUT A GAUCHE, LES AUTRES SONT IDENTIQUES ! Donc si mon programme de recherche de date marche pour une, il marchera pour toute^^

Et voici le bout de code pour essayer de filtrer avec les dates quand j'appui sur CommandButton3 !

'Afficher les commandes entres les dates selectionnées
Private Sub CommandButton3_Click()
      Datedebut = DTPicker1.Value
      Datefin = DTPicker2.Value
      ' Dans le cas où le choix est effectué sur le DTPicker1
      If Datefin < Datedebut Then
           Select Case MsgBox("La date de fin ne peut être inférieure à la date de début", vbOKOnly + vbCritical, "Saisie date incorrect")
            Case vbOKOnly
            Exit Sub
      End Select

      Else

ListBox1.Clear
Dim x As Range

    With ListBox1
    'Mes dates sont dans la colonne O de ma feuille "Modifier"
    For Each x In Sheets("Modifier").Range("O5:O" & Sheets("Modifier").Range("O100000").End(xlUp).Row)

            If x.Value >= DTPicker1.Value And x.Value <= DTPicker2.Value Then

                .AddItem x(1, 0)
                .List(.ListCount - 1, 1) = x(1, 1)
                .List(.ListCount - 1, 2) = x(1, 2)
                .List(.ListCount - 1, 3) = x(1, 2)
                .List(.ListCount - 1, 4) = x(1, 3)
                .List(.ListCount - 1, 5) = x(1, 4)
                .List(.ListCount - 1, 6) = x(1, 5)

          End If
    Next x
    End With
End Sub
146test.xlsm (291.26 Ko)

Probleme résolu, merci tout de meme !

Bonne journée à tous.

Rechercher des sujets similaires à "filtrer listbox utilisant dtpicker"