Filtrer une listview entre deux dates
- Messages
- 43
- Excel
- Excel 365 et F
- Inscrit
- 15/03/2023
- Emploi
- Electricien de maintenance
Bonjour,
Je viens vers vous car je ne trouve pas la solution à mn problème, je charge correctement ma listview, mais dés que je veux entrer une date, j'ai ce message qui apparait.
en suite je regarde ou c'est le problème est la c'est le textbox2 qui pose problème apparemment, mais je vois pas du tout ce que cela peut-être.
Je joins mon code , si quelqu'un à la solution à mon soucis.
D'avance merci
Dim C As Variant, Lg As Long, list As ListItem, i As Integer
Dim Key2 As Boolean, Key1 As Boolean
Private Sub TextBox1_Change()
TextBox1.MaxLength = 10
If Len(TextBox1) = 2 Or Len(TextBox1) = 5 Then TextBox1 = TextBox1 & "."
Filtre_dates
End Sub
Private Sub TextBox2_Change()
TextBox1.MaxLength = 10
If Len(TextBox2) = 2 Or Len(TextBox2) = 5 Then TextBox2 = TextBox2 & "."
Filtre_dates
End Sub
Private Sub UserForm_Initialize()
C = Feuil1.Range("A1:M" & Feuil1.Range("A6500").End(xlUp).Row).Value
With UserForm1.ListView1
.ListItems.Clear
With .ColumnHeaders
.Clear
.Add Text:="N° Main", Width:=40, Alignment:=fmAlignmentLeft
.Add Text:="Lieu", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Secteur", Width:=70, Alignment:=lvwColumnCenter
.Add Text:="Machine", Width:=160, Alignment:=lvwColumnCenter
.Add Text:="Descriptif maintenance", Width:=250, Alignment:=lvwColumnCenter
.Add Text:="Spécial", Width:=140, Alignment:=lvwColumnCenter
.Add Text:="Genre", Width:=60, Alignment:=lvwColumnCenter
.Add Text:="Par qui", Width:=50, Alignment:=lvwColumnCenter
.Add Text:="Procédure", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Sécurité", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Compteur", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Antérieure", Width:=60, Alignment:=lvwColumnCenter
.Add Text:="Prochaine", Width:=60, Alignment:=lvwColumnCenter
End With
.Gridlines = True
.BorderStyle = ccFixedSingle
.FullRowSelect = True
.View = lvwReport
'.Width = 1100
For Lg = 2 To UBound(C)
Set list = ListView1.ListItems.Add(, , Format(C(Lg, 1), "00"))
With list
For i = 2 To 13
.ListSubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0# ## ## ## ##")
Next i:
End With:
Next Lg:
End With
End Sub
Private Sub Filtre_dates()
If Len(TextBox1) = 10 Then deb = CDate(TextBox1)
If Len(TextBox2) = 10 Then fin = CDate(TextBox2)
ListView1.ListItems.Clear
For Lg = 2 To UBound(C)
Select Case True
Case deb <> "" And fin = "": Key1 = C(Lg, 13) >= deb
Case deb <> "" And fin <> "": Key1 = C(Lg, 13) >= deb
Key2 = C(Lg, 13) <= fin: Key1 = Key1 And Key2
Case deb = "" And fin = "": Key1 = True
End Select
If Key1 Then
Set list = ListView1.ListItems.Add(Text:=C(Lg, 1))
For i = 2 To UBound(C, 2)
list.SubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0# ## ## ## ##")
Next i
End If
End Sub
Autre chose , je dois filtrer la 13ème colonne c'est la que j'ai mes dates.
Bonsoir Claude Mettraux,
Quand on souhaite filtrer sur une fourchette de date, il faut attendre d'avoir les deux dates inscrites dans les textbox avant de lancer le filtre.
Private Sub TextBox1_Change()
TextBox1.MaxLength = 10
If Len(TextBox1) = 2 Or Len(TextBox1) = 5 Then TextBox1 = TextBox1 & "."
'ICI LANCEMENT d'UN PREMIER FILTRE
Filtre_dates
End Sub
Pourquoi opérer un premier filtre?
Si je choisis le 10/04/2023 j'aurais donc toutes les lignes qui ont communément cette date.
Ensuite si mon choix se porte sur le 16/04/2023 pour le deuxième textbox, il bloque, sauf si la date précédente dans celle-ci est le 10/04/2023.
Lancer le filtre une fois que les deux dates sont présentes dans les textbox. Donc uniquement après le changement dans le 2ième textBox
- Messages
- 43
- Excel
- Excel 365 et F
- Inscrit
- 15/03/2023
- Emploi
- Electricien de maintenance
Bonjour,
Toujours en soucis malgré mon changement, j'ai mis un bouton pour déclencher mon filtre et il me donne encore une erreur,
J'ai mis aussi modifier le 1 er filtre et cela fonctionne, il m'enlève les dates avant.
mais moi je veux entre les deux.
Voici mon code modifier
Dim C As Variant, Lg As Long, list As ListItem, i As Integer
Dim Key2 As Boolean, Key1 As Boolean
Private Sub CommandButton1_Click()
TextBox1.MaxLength = 10
If Len(TextBox2) = 2 Or Len(TextBox2) = 5 Then TextBox2 = TextBox2 & "."
Filtre_dates2
TextBox3.Text = ListView1.ListItems.Count
End Sub
Private Sub TextBox1_Change()
TextBox1.MaxLength = 10
If Len(TextBox1) = 2 Or Len(TextBox1) = 5 Then TextBox1 = TextBox1 & "."
'ICI LANCEMENT d'UN PREMIER FILTRE
Filtre_dates1
TextBox3.Text = ListView1.ListItems.Count
End Sub
Private Sub TextBox2_Change()
TextBox1.MaxLength = 10
If Len(TextBox2) = 2 Or Len(TextBox2) = 5 Then TextBox2 = TextBox2 & "."
'Filtre_dates
TextBox3.Text = ListView1.ListItems.Count
End Sub
Private Sub UserForm_Initialize()
C = Feuil1.Range("A1:M" & Feuil1.Range("A6500").End(xlUp).Row).Value
With UserForm1.ListView1
.ListItems.Clear
With .ColumnHeaders
.Clear
.Add Text:="N° Main", Width:=40, Alignment:=fmAlignmentLeft
.Add Text:="Lieu", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Secteur", Width:=70, Alignment:=lvwColumnCenter
.Add Text:="Machine", Width:=160, Alignment:=lvwColumnCenter
.Add Text:="Descriptif maintenance", Width:=250, Alignment:=lvwColumnCenter
.Add Text:="Spécial", Width:=140, Alignment:=lvwColumnCenter
.Add Text:="Genre", Width:=60, Alignment:=lvwColumnCenter
.Add Text:="Par qui", Width:=50, Alignment:=lvwColumnCenter
.Add Text:="Procédure", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Sécurité", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Compteur", Width:=40, Alignment:=lvwColumnCenter
.Add Text:="Antérieure", Width:=60, Alignment:=lvwColumnCenter
.Add Text:="Prochaine", Width:=60, Alignment:=lvwColumnCenter
End With
.Gridlines = True
.BorderStyle = ccFixedSingle
.FullRowSelect = True
.View = lvwReport
'.Width = 1100
For Lg = 2 To UBound(C)
Set list = ListView1.ListItems.Add(, , Format(C(Lg, 1), "00"))
With list
For i = 2 To 13
.ListSubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0# ## ## ## ##")
Next i:
End With:
Next Lg:
End With
End Sub
Private Sub Filtre_dates1()
If Len(TextBox1) = 10 Then deb = CDate(TextBox1)
ListView1.ListItems.Clear
For Lg = 2 To UBound(C)
Select Case True
Case deb <> "": Key1 = C(Lg, 13) >= deb
Case deb <> "": Key1 = C(Lg, 13) >= deb
Case deb = "": Key1 = True
End Select
If Key1 Then
Set list = ListView1.ListItems.Add(Text:=C(Lg, 1))
For i = 2 To UBound(C, 2)
list.ListSubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0# ## ## ## ##")
Next i
End If
Next Lg
End Sub
Private Sub Filtre_dates()
If Len(TextBox2) = 10 Then deb = CDate(TextBox2)
ListView1.ListItems.Clear
For Lg = 2 To UBound(C)
Select Case True
Case deb <> "": Key2 = C(Lg, 13) <= deb
Case deb <> "": Key2 = C(Lg, 13) <= deb
Case deb = "": Key2 = True
End Select
If Key1 Then
Set list = ListView1.ListItems.Add(Text:=C(Lg, 1))
For i = 2 To UBound(C, 2)
list.ListSubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0# ## ## ## ##")
Next i
End If
Next Lg
End Sub
Private Sub Filtre_dates2()
If Len(TextBox1) = 10 Then deb = CDate(TextBox1)
If Len(TextBox2) = 10 Then fin = CDate(TextBox2)
ListView1.ListItems.Clear
For Lg = 2 To UBound(C)
Select Case True
Case deb <> "" And fin = "": Key1 = C(Lg, 13) >= deb
Case deb <> "" And fin <> "": Key1 = C(Lg, 13) >= deb
Key2 = C(Lg, 13) <= fin: Key1 = Key1 And Key2
Case deb = "" And fin = "": Key1 = True
End Select
If Key1 Then
Set list = ListView1.ListItems.Add(Text:=C(Lg, 1))
For i = 2 To UBound(C, 2)
list.ListSubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0# ## ## ## ##")
Next i
End If
Next Lg
End Sub
Il me semble qu'il n'arrive pas à aller chercher la valeur du Textbox2, mais je ne comprends pas pourquoi?
merci de votre aide
Bonjour,
A quoi ressemble la date dans la textbox2?
Cdlt
- Messages
- 43
- Excel
- Excel 365 et F
- Inscrit
- 15/03/2023
- Emploi
- Electricien de maintenance
Bonjour Arturo, C'est la même programmation que dans le Textbox1, c'est à dire que je je tappe: 01.10.2023 et je recherche dans la même colonne.
TextBox1.MaxLength = 10
If Len(TextBox1) = 2 Or Len(TextBox1) = 5 Then TextBox1 = TextBox1 & "."
'ICI LANCEMENT d'UN PREMIER FILTRE
Filtre_dates1
TextBox3.Text = ListView1.ListItems.Count
End Sub
Private Sub TextBox2_Change()
TextBox1.MaxLength = 10
If Len(TextBox2) = 2 Or Len(TextBox2) = 5 Then TextBox2 = TextBox2 & "."
'Filtre_dates
TextBox3.Text = ListView1.ListItems.Count
End Sub
Bonjour;
Essayez ceci:
deb = CDate(Replace(TextBox2, ".", "/"))
Cdlt
- Messages
- 43
- Excel
- Excel 365 et F
- Inscrit
- 15/03/2023
- Emploi
- Electricien de maintenance
Bonjour,
J'ai teste votre ligne de code est cela fait la même chose
- Messages
- 43
- Excel
- Excel 365 et F
- Inscrit
- 15/03/2023
- Emploi
- Electricien de maintenance
Private Sub Filtre_Dates()
If Len(TextBox11) = 10 Then deb = CDate(TextBox11)
If Len(TextBox12) = 10 Then fini = CDate(TextBox12)
ListView1.ListItems.Clear
For Lg = 2 To UBound(C)
Select Case True
Case deb <> "" And fini = "": Key1 = C(Lg, 13) >= deb
Case deb <> "" And fini <> "": Key1 = C(Lg, 13) >= deb
Key2 = C(Lg, 13) <= fini: Key1 = Key1 And Key2
Case deb = "" And fini = "": Key1 = True
End Select
If Key1 Then
Set List = ListView1.ListItems.Add(Text:=C(Lg, 1))
For i = 2 To UBound(C, 2)
List.ListSubItems.Add , , C(Lg, i)
'C(Lg, 9) = Format(C(Lg, 9), "0## ### ## ##")
Next i
End If
Next Lg
End Sub
Bonjour,
J'ai trouvé la solution pour mon problème. J'ai changer le nom de la variable "Fin" en "Fini" et cela fonctionne.
Je n'ai pas vraiment trouvé pourquoi mais je suppose que c'est qu'une autre variable s'appelle "fin"