XL 2010 filtre listview par nom et date

yahya belbachir

XLDnaute Occasionnel
Bonjour
je retourne vers vous pour me donner une idée,peut être j'ai fais une erreur dans mon code a pour objet:
j'ai deux textboxes pour filtrer ma listview,la premiere pour choisir e nom et la deuxiéme pour continuer de filtrer par date selon mon choix de ma premiere recherche dans le textbox1.
merci à vous
 

Pièces jointes

  • filtre_listview.xlsm
    26.2 KB · Affichages: 24
Solution
bonjour
ok je te propose de globaliser le change des deux textboxs
ils seront toujours indépendants ET !! interdépendants
je te propose deux versions pour le textbox date
soit on considère les date comme du text et la la liste se filtre en fonction de la portion de date tapée soit on considère le textbox2 comme une date et là il faut que la date soit entièrement tapée

donc ben rebelotte tu vire tout le code de l'userform
et tu lui met ceci
VB:
Option Explicit
Dim tableau As Variant
Dim LstVqItem As MSComctlLib.ListItem


Sub reliste()
    Dim I&, colonne&, critere As Boolean, D As Date, critere2 As Boolean
    With ListView1
        .ListItems.Clear
              For I = 2 To UBound(tableau)
            Select Case True...

patricktoulon

XLDnaute Barbatruc
Bonjour
pour commencer tu va effacer entièrement le code dans ton userform et dans ton module
je dis bien tout effacer ;)
(mille excuses mais quand je vois un code est inextricable je vire!!)

maintenant que c'est propre

dans ton module tu met
VB:
Option Explicit
Sub test()
UserForm1.Show
End Sub
dans ton userform tu va mettre ce code
VB:
Option Explicit
Dim tableau As Variant
Dim LstVqItem As MSComctlLib.ListItem

Private Sub TextBox1_Change()
Dim I&, colonne&, critere As Boolean
    With ListView1
        .ListItems.Clear
        For I = 2 To UBound(tableau)
            If Left(tableau(I, 1), Len(TextBox1)) = TextBox1 Then
                If TextBox2 <> "" Then critere = tableau(I, 2) = CDate(TextBox2) Else critere = True
                For colonne = 2 To UBound(tableau, 2)
                    If critere Then
                        Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                        With LstVqItem
                            .ListSubItems.Add , , tableau(I, colonne)
                        End With
                    End If
                Next
            End If
        Next
    End With
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub TextBox2_Change()
    Dim I&, colonne&, critere As Boolean
    With ListView1
        .ListItems.Clear
        For I = 2 To UBound(tableau)
            If Len(TextBox2) = 10 And IsDate(TextBox2) Then
                If tableau(I, 2) = CDate(TextBox2) Then
                    If TextBox1 <> "" Then critere = tableau(I, 1) = TextBox1 Else critere = True
                    For colonne = 2 To UBound(tableau, 2)
                        If critere Then
                            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                            With LstVqItem
                                .ListSubItems.Add , , tableau(I, colonne)
                            End With
                        End If
                    Next
                End If
            End If
        Next
    End With

End Sub


Private Sub UserForm_Initialize()
   Dim I&, colonne&
    With UserForm1.ListView1
        .ListItems.Clear
        With .ColumnHeaders
            .Clear
            .Add Text:="Nom", Width:=120, Alignment:=lvwColumnLeft
            .Add Text:="Date", Width:=80, Alignment:=fmAlignmentLeft
        End With
        .Gridlines = True: .BorderStyle = ccFixedSingle: .FullRowSelect = True: .View = lvwReport
        tableau = Feuil1.Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value

        For I = 2 To UBound(tableau)
            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
            With LstVqItem
                For colonne = 2 To UBound(tableau, 2)
                    .ListSubItems.Add , , tableau(I, colonne)
                Next
            End With
        Next
    End With
End Sub

voila dorénavant tes deux Textboxs seront indépendants ET !!! interdépendant
j'explique
si tu tape dans textbox1 avec textbox2 vide
tu aura tout les lignes qui correspondent à la colonne 1

si tu tape dans textbox1 avec textbox2 plein (a condition que ca soit une date valide format FR
tu aura tout les lignes qui correspondent à la colonne 1 et la colonne 2

si tu tape dans textbox2 avec textbox1 vide
tu aura tout les lignes qui correspondent à la colonne 2

si tu tape dans textbox2 avec textbox 1 plein
tu aura tout les lignes qui correspondent à la colonne 1 et la colonne 2

j'ai testé en ajoutant des petites différences

avec ce tableau
NomDate
ZZZZ
15/08/2020​
AAA
15/08/2020​
YAYAYAY
16/08/2020​
FFFFFF
16/08/2020​
ZZZZ
17/08/2020​
TTTT
17/08/2020​
AAA
18/08/2020​
BBBB
19/08/2020​
CCC
18/08/2020​
ACR
18/08/2020​
CEZ
18/08/2020​
voila ;)
 

yahya belbachir

XLDnaute Occasionnel
Bonjour
pour commencer tu va effacer entièrement le code dans ton userform et dans ton module
je dis bien tout effacer ;)
(mille excuses mais quand je vois un code est inextricable je vire!!)

maintenant que c'est propre

dans ton module tu met
VB:
Option Explicit
Sub test()
UserForm1.Show
End Sub
dans ton userform tu va mettre ce code
VB:
Option Explicit
Dim tableau As Variant
Dim LstVqItem As MSComctlLib.ListItem

Private Sub TextBox1_Change()
Dim I&, colonne&, critere As Boolean
    With ListView1
        .ListItems.Clear
        For I = 2 To UBound(tableau)
            If Left(tableau(I, 1), Len(TextBox1)) = TextBox1 Then
                If TextBox2 <> "" Then critere = tableau(I, 2) = CDate(TextBox2) Else critere = True
                For colonne = 2 To UBound(tableau, 2)
                    If critere Then
                        Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                        With LstVqItem
                            .ListSubItems.Add , , tableau(I, colonne)
                        End With
                    End If
                Next
            End If
        Next
    End With
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub TextBox2_Change()
    Dim I&, colonne&, critere As Boolean
    With ListView1
        .ListItems.Clear
        For I = 2 To UBound(tableau)
            If Len(TextBox2) = 10 And IsDate(TextBox2) Then
                If tableau(I, 2) = CDate(TextBox2) Then
                    If TextBox1 <> "" Then critere = tableau(I, 1) = TextBox1 Else critere = True
                    For colonne = 2 To UBound(tableau, 2)
                        If critere Then
                            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                            With LstVqItem
                                .ListSubItems.Add , , tableau(I, colonne)
                            End With
                        End If
                    Next
                End If
            End If
        Next
    End With

End Sub


Private Sub UserForm_Initialize()
   Dim I&, colonne&
    With UserForm1.ListView1
        .ListItems.Clear
        With .ColumnHeaders
            .Clear
            .Add Text:="Nom", Width:=120, Alignment:=lvwColumnLeft
            .Add Text:="Date", Width:=80, Alignment:=fmAlignmentLeft
        End With
        .Gridlines = True: .BorderStyle = ccFixedSingle: .FullRowSelect = True: .View = lvwReport
        tableau = Feuil1.Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value

        For I = 2 To UBound(tableau)
            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
            With LstVqItem
                For colonne = 2 To UBound(tableau, 2)
                    .ListSubItems.Add , , tableau(I, colonne)
                Next
            End With
        Next
    End With
End Sub

voila dorénavant tes deux Textboxs seront indépendants ET !!! interdépendant
j'explique
si tu tape dans textbox1 avec textbox2 vide
tu aura tout les lignes qui correspondent à la colonne 1

si tu tape dans textbox1 avec textbox2 plein (a condition que ca soit une date valide format FR
tu aura tout les lignes qui correspondent à la colonne 1 et la colonne 2

si tu tape dans textbox2 avec textbox1 vide
tu aura tout les lignes qui correspondent à la colonne 2

si tu tape dans textbox2 avec textbox 1 plein
tu aura tout les lignes qui correspondent à la colonne 1 et la colonne 2

j'ai testé en ajoutant des petites différences

avec ce tableau
NomDate
ZZZZ
15/08/2020​
AAA
15/08/2020​
YAYAYAY
16/08/2020​
FFFFFF
16/08/2020​
ZZZZ
17/08/2020​
TTTT
17/08/2020​
AAA
18/08/2020​
BBBB
19/08/2020​
CCC
18/08/2020​
ACR
18/08/2020​
CEZ
18/08/2020​
voila ;)
Bonjour Monsieur
merci infiniment pour votre réponse,
le code a bien fonctionné dans le fichier que j'ai envoyé.sauf quand je l'ai copié et corrigé dans mon tableau qui contient 10 colonnes je me bloque;
alors est possible de me donné un idée sur le même code sauf le nom se trouve dans la colonne(3) et la date dans la colonne(9).
comment puis-je l'effectuer? a ton avis
et merci beaucoup
 

Pièces jointes

  • filtre_listview.xlsm
    27.5 KB · Affichages: 11

ChTi160

XLDnaute Barbatruc
Bonsoir yahya
Bonsoir Patrick ,le Forum
si j'ai bien compris il faut changer les Colonnes dans le tableau voir Commentaires dans Code
VB:
If Left(tableau(I, 3), Len(TextBox1)) = TextBox1 Then ' Colonne 3 du tableau
                If TextBox2 <> "" Then critere = tableau(I, 9) = CDate(TextBox2) Else critere = True 'Colonne 9 pour la date
tu n'as pas tenu compte des procédures de Patrick !!!
problème avec les dates
bonne soirée
jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Je ne suis plus sur ordi
As tu bien modifié les colonnes sources.
Patrick a mis colonne 1 pour les noms et 2 pour les dates alors que toi tu as les noms en colonne 3 et les dates en colonne 9
Vérifiez ! Et corrige .
Pourquoi boucler sur toutes les colonnes , si tu n'en récupères que deux (3,9) ?
Jean marie
 
Dernière édition:

yahya belbachir

XLDnaute Occasionnel
Bonsoir Jean Marie
Bonsoir Patrick
merci pour vos échanges
j'ai bien effectué le même code
mais ça ne donne rien
veuillez voir ce que j'ai dans mon fichier
Bonsoir
veuillez jeter un coup d'oeil sur mon code,lorseque je lance ma recherche les colonne se disparait
et m'affiche que deux colonnes 1 et 2
Private Sub TextBox1_Change()
Dim I&, colonne&, critere As Boolean
With ListView1
.ListItems.Clear
For I = 2 To UBound(tableau)
If Left(tableau(I, 3), Len(TextBox1)) = TextBox1 Then
If TextBox2 <> "" Then critere = tableau(I, 9) = CDate(TextBox2) Else critere = True
For colonne = 2 To UBound(tableau, 2)
If critere Then
Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
With LstVqItem
.ListSubItems.Add , , tableau(I, colonne)
End With
End If
Next
End If
Next
End With
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub TextBox2_Change()
Dim I&, colonne&, critere As Boolean
With ListView1
.ListItems.Clear
For I = 2 To UBound(tableau)
If Len(TextBox2) = 10 And IsDate(TextBox2) Then
If tableau(I, 9) = CDate(TextBox2) Then
If TextBox1 <> "" Then critere = tableau(I, 3) = TextBox1 Else critere = True
For colonne = 2 To UBound(tableau, 2)
If critere Then
Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
With LstVqItem
.ListSubItems.Add , , tableau(I, colonne)
End With
End If
Next
End If
End If
Next
End With

End Sub


Private Sub UserForm_Initialize()
Dim I&, colonne&
With UserForm1.ListView1
.ListItems.Clear
With .ColumnHeaders
.Clear
.Add Text:="N°", Width:=40, Alignment:=lvwColumnLeft
.Add Text:="Serie", Width:=40, Alignment:=fmAlignmentLeft
.Add Text:="Nom", Width:=80, Alignment:=lvwColumnLeft
.Add Text:="Prénom", Width:=80, Alignment:=fmAlignmentLeft
.Add Text:="Naissance", Width:=60, Alignment:=lvwColumnLeft
.Add Text:="Nationalité", Width:=80, Alignment:=fmAlignmentLeft
.Add Text:="Ville", Width:=70, Alignment:=lvwColumnLeft
.Add Text:="Tél", Width:=80, Alignment:=fmAlignmentLeft
.Add Text:="Date", Width:=70, Alignment:=lvwColumnLeft
.Add Text:="Profession", Width:=90, Alignment:=fmAlignmentLeft
End With
.Gridlines = True: .BorderStyle = ccFixedSingle: .FullRowSelect = True: .View = lvwReport
tableau = Feuil1.Range("A1", Cells(Rows.Count, "J").End(xlUp)).Value

For I = 2 To UBound(tableau)
Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
With LstVqItem
For colonne = 2 To UBound(tableau, 2)
.ListSubItems.Add , , tableau(I, colonne)
Next
End With
Next
End With
End Sub
 

yahya belbachir

XLDnaute Occasionnel
Bonjour
pour commencer tu va effacer entièrement le code dans ton userform et dans ton module
je dis bien tout effacer ;)
(mille excuses mais quand je vois un code est inextricable je vire!!)

maintenant que c'est propre

dans ton module tu met
VB:
Option Explicit
Sub test()
UserForm1.Show
End Sub
dans ton userform tu va mettre ce code
VB:
Option Explicit
Dim tableau As Variant
Dim LstVqItem As MSComctlLib.ListItem

Private Sub TextBox1_Change()
Dim I&, colonne&, critere As Boolean
    With ListView1
        .ListItems.Clear
        For I = 2 To UBound(tableau)
            If Left(tableau(I, 1), Len(TextBox1)) = TextBox1 Then
                If TextBox2 <> "" Then critere = tableau(I, 2) = CDate(TextBox2) Else critere = True
                For colonne = 2 To UBound(tableau, 2)
                    If critere Then
                        Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                        With LstVqItem
                            .ListSubItems.Add , , tableau(I, colonne)
                        End With
                    End If
                Next
            End If
        Next
    End With
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub TextBox2_Change()
    Dim I&, colonne&, critere As Boolean
    With ListView1
        .ListItems.Clear
        For I = 2 To UBound(tableau)
            If Len(TextBox2) = 10 And IsDate(TextBox2) Then
                If tableau(I, 2) = CDate(TextBox2) Then
                    If TextBox1 <> "" Then critere = tableau(I, 1) = TextBox1 Else critere = True
                    For colonne = 2 To UBound(tableau, 2)
                        If critere Then
                            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                            With LstVqItem
                                .ListSubItems.Add , , tableau(I, colonne)
                            End With
                        End If
                    Next
                End If
            End If
        Next
    End With

End Sub


Private Sub UserForm_Initialize()
   Dim I&, colonne&
    With UserForm1.ListView1
        .ListItems.Clear
        With .ColumnHeaders
            .Clear
            .Add Text:="Nom", Width:=120, Alignment:=lvwColumnLeft
            .Add Text:="Date", Width:=80, Alignment:=fmAlignmentLeft
        End With
        .Gridlines = True: .BorderStyle = ccFixedSingle: .FullRowSelect = True: .View = lvwReport
        tableau = Feuil1.Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value

        For I = 2 To UBound(tableau)
            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
            With LstVqItem
                For colonne = 2 To UBound(tableau, 2)
                    .ListSubItems.Add , , tableau(I, colonne)
                Next
            End With
        Next
    End With
End Sub

voila dorénavant tes deux Textboxs seront indépendants ET !!! interdépendant
j'explique
si tu tape dans textbox1 avec textbox2 vide
tu aura tout les lignes qui correspondent à la colonne 1

si tu tape dans textbox1 avec textbox2 plein (a condition que ca soit une date valide format FR
tu aura tout les lignes qui correspondent à la colonne 1 et la colonne 2

si tu tape dans textbox2 avec textbox1 vide
tu aura tout les lignes qui correspondent à la colonne 2

si tu tape dans textbox2 avec textbox 1 plein
tu aura tout les lignes qui correspondent à la colonne 1 et la colonne 2

j'ai testé en ajoutant des petites différences

avec ce tableau
NomDate
ZZZZ
15/08/2020​
AAA
15/08/2020​
YAYAYAY
16/08/2020​
FFFFFF
16/08/2020​
ZZZZ
17/08/2020​
TTTT
17/08/2020​
AAA
18/08/2020​
BBBB
19/08/2020​
CCC
18/08/2020​
ACR
18/08/2020​
CEZ
18/08/2020​
voila ;)
Bonjour Patrick
j'ai envoyé un autre message concernant le fichier a rectifier,car je n'ai pas compris comment le reglé,j'ai essayé de poser les lignes et les colonnes dans leur place,mais je n'ai pas réussi à faire
 

patricktoulon

XLDnaute Barbatruc
bonjour
ok je te propose de globaliser le change des deux textboxs
ils seront toujours indépendants ET !! interdépendants
je te propose deux versions pour le textbox date
soit on considère les date comme du text et la la liste se filtre en fonction de la portion de date tapée soit on considère le textbox2 comme une date et là il faut que la date soit entièrement tapée

donc ben rebelotte tu vire tout le code de l'userform
et tu lui met ceci
VB:
Option Explicit
Dim tableau As Variant
Dim LstVqItem As MSComctlLib.ListItem


Sub reliste()
    Dim I&, colonne&, critere As Boolean, D As Date, critere2 As Boolean
    With ListView1
        .ListItems.Clear
              For I = 2 To UBound(tableau)
            Select Case True
            Case TextBox1 <> "" And TextBox2 = "": critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1
            Case TextBox1 = "" And TextBox2 <> "" And Len(TextBox2) = 10 And IsDate(TextBox2): critere = CDate(tableau(I, 9)) = CDate(TextBox2)
            Case TextBox1 <> "" And TextBox2 <> "" And Len(TextBox2) = 10 And IsDate(TextBox2): critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1: critere2 = CDate(tableau(I, 9)) = CDate(TextBox2): critere = critere And critere2
            Case TextBox1 = "" And TextBox2 = "": critere = True
            End Select
            If critere Then
                Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                For colonne = 2 To UBound(tableau, 2)
                    With LstVqItem
                        .ListSubItems.Add , , tableau(I, colonne)
                    End With
                Next
            End If
        Next
    End With

End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): KeyAscii = Asc(UCase(Chr(KeyAscii))): End Sub
Private Sub TextBox1_Change(): reliste: End Sub
Private Sub TextBox2_Change(): reliste: End Sub


Private Sub UserForm_Initialize()
    Dim I&, colonne&
    With UserForm1.ListView1
        .ListItems.Clear
        With .ColumnHeaders
            .Clear
            .Add Text:="N°", Width:=40, Alignment:=lvwColumnLeft
            .Add Text:="Serie", Width:=40, Alignment:=fmAlignmentLeft
            .Add Text:="Nom", Width:=80, Alignment:=lvwColumnLeft
            .Add Text:="Prénom", Width:=80, Alignment:=fmAlignmentLeft
            .Add Text:="Naissance", Width:=60, Alignment:=lvwColumnLeft
            .Add Text:="Nationalité", Width:=80, Alignment:=fmAlignmentLeft
            .Add Text:="Ville", Width:=70, Alignment:=lvwColumnLeft
            .Add Text:="Tél", Width:=80, Alignment:=fmAlignmentLeft
            .Add Text:="Date", Width:=70, Alignment:=lvwColumnLeft
            .Add Text:="Profession", Width:=90, Alignment:=fmAlignmentLeft
        End With
        .Gridlines = True: .BorderStyle = ccFixedSingle: .FullRowSelect = True: .View = lvwReport
        tableau = Feuil1.Range("A1", Cells(Rows.Count, "J").End(xlUp)).Value

        For I = 2 To UBound(tableau)
            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
            With LstVqItem
                For colonne = 2 To UBound(tableau, 2)
                    .ListSubItems.Add , , tableau(I, colonne)
                Next
            End With
        Next
    End With
End Sub

si tu veux la mise a jour au fur et a mesure que tu tape la date change la "reliste pour celle ci
VB:
Sub reliste()
    Dim I&, colonne&, critere As Boolean, D As Date, critere2 As Boolean
    With ListView1
        .ListItems.Clear
              For I = 2 To UBound(tableau)
            Select Case True
            Case TextBox1 <> "" And TextBox2 = "": critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1
            Case TextBox1 = "" And TextBox2 <> "": critere = Left(tableau(I, 9), Len(TextBox2)) = TextBox2.Text
            Case TextBox1 <> "" And TextBox2 <> "": critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1: critere2 = Left(tableau(I, 9), Len(TextBox2)) = TextBox2.Text: critere = critere And critere2
            Case TextBox1 = "" And TextBox2 = "": critere = True
            End Select
            If critere Then
                Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                For colonne = 2 To UBound(tableau, 2)
                    With LstVqItem
                        .ListSubItems.Add , , tableau(I, colonne)
                    End With
                Next
            End If
        Next
    End With

End Sub

démonstration avec date entière

demo4.gif


démonstration avec le taper de date au fur et a mesure
demo5.gif

;)
ça va plaire a @ChTi160 çà
 
Dernière édition:

yahya belbachir

XLDnaute Occasionnel
bonjour
ok je te propose de globaliser le change des deux textboxs
ils seront toujours indépendants ET !! interdépendants
je te propose deux versions pour le textbox date
soit on considère les date comme du text et la la liste se filtre en fonction de la portion de date tapée soit on considère le textbox2 comme une date et là il faut que la date soit entièrement tapée

donc ben rebelotte tu vire tout le code de l'userform
et tu lui met ceci
VB:
Option Explicit
Dim tableau As Variant
Dim LstVqItem As MSComctlLib.ListItem


Sub reliste()
    Dim I&, colonne&, critere As Boolean, D As Date, critere2 As Boolean
    With ListView1
        .ListItems.Clear
              For I = 2 To UBound(tableau)
            Select Case True
            Case TextBox1 <> "" And TextBox2 = "": critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1
            Case TextBox1 = "" And TextBox2 <> "" And Len(TextBox2) = 10 And IsDate(TextBox2): critere = CDate(tableau(I, 9)) = CDate(TextBox2)
            Case TextBox1 <> "" And TextBox2 <> "" And Len(TextBox2) = 10 And IsDate(TextBox2): critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1: critere2 = CDate(tableau(I, 9)) = CDate(TextBox2): critere = critere And critere2
            Case TextBox1 = "" And TextBox2 = "": critere = True
            End Select
            If critere Then
                Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                For colonne = 2 To UBound(tableau, 2)
                    With LstVqItem
                        .ListSubItems.Add , , tableau(I, colonne)
                    End With
                Next
            End If
        Next
    End With

End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): KeyAscii = Asc(UCase(Chr(KeyAscii))): End Sub
Private Sub TextBox1_Change(): reliste: End Sub
Private Sub TextBox2_Change(): reliste: End Sub


Private Sub UserForm_Initialize()
    Dim I&, colonne&
    With UserForm1.ListView1
        .ListItems.Clear
        With .ColumnHeaders
            .Clear
            .Add Text:="N°", Width:=40, Alignment:=lvwColumnLeft
            .Add Text:="Serie", Width:=40, Alignment:=fmAlignmentLeft
            .Add Text:="Nom", Width:=80, Alignment:=lvwColumnLeft
            .Add Text:="Prénom", Width:=80, Alignment:=fmAlignmentLeft
            .Add Text:="Naissance", Width:=60, Alignment:=lvwColumnLeft
            .Add Text:="Nationalité", Width:=80, Alignment:=fmAlignmentLeft
            .Add Text:="Ville", Width:=70, Alignment:=lvwColumnLeft
            .Add Text:="Tél", Width:=80, Alignment:=fmAlignmentLeft
            .Add Text:="Date", Width:=70, Alignment:=lvwColumnLeft
            .Add Text:="Profession", Width:=90, Alignment:=fmAlignmentLeft
        End With
        .Gridlines = True: .BorderStyle = ccFixedSingle: .FullRowSelect = True: .View = lvwReport
        tableau = Feuil1.Range("A1", Cells(Rows.Count, "J").End(xlUp)).Value

        For I = 2 To UBound(tableau)
            Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
            With LstVqItem
                For colonne = 2 To UBound(tableau, 2)
                    .ListSubItems.Add , , tableau(I, colonne)
                Next
            End With
        Next
    End With
End Sub

si tu veux la mise a jour au fur et a mesure que tu tape la date change la "reliste pour celle ci
VB:
Sub reliste()
    Dim I&, colonne&, critere As Boolean, D As Date, critere2 As Boolean
    With ListView1
        .ListItems.Clear
              For I = 2 To UBound(tableau)
            Select Case True
            Case TextBox1 <> "" And TextBox2 = "": critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1
            Case TextBox1 = "" And TextBox2 <> "": critere = Left(tableau(I, 9), Len(TextBox2)) = TextBox2.Text
            Case TextBox1 <> "" And TextBox2 <> "": critere = Left(tableau(I, 3), Len(TextBox1)) = TextBox1: critere2 = Left(tableau(I, 9), Len(TextBox2)) = TextBox2.Text: critere = critere And critere2
            Case TextBox1 = "" And TextBox2 = "": critere = True
            End Select
            If critere Then
                Set LstVqItem = .ListItems.Add(Text:=tableau(I, 1))
                For colonne = 2 To UBound(tableau, 2)
                    With LstVqItem
                        .ListSubItems.Add , , tableau(I, colonne)
                    End With
                Next
            End If
        Next
    End With

End Sub

démonstration avec date entière

Regarde la pièce jointe 1076158

démonstration avec le taper de date au fur et a mesure
Regarde la pièce jointe 1076159
;)
ça va plaire a @ChTi160 çà
hhhh,je le savais bien que vous n'avez pas vu mon dernier message suite à la conversation avec notre ami Monsieur Jean Marie,concernant le fichier,je vous remercie infiniment Monsieur Patrick, votre solution m'a inspiré,c'est super de votre part.
Merci à vous Monsieur Patrick,Merci à Monsieur Jean Marie
Cordialement
YAHYA
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 134
Membres
103 129
dernier inscrit
Atruc81500