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 SubMON 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
Probleme résolu, merci tout de meme !
Bonne journée à tous.