Filtre ListView

Bonsoir à tous,

Dans mon formulaire "frm_Recherche" je veux filtrer mes données pour qu'il ne m'affiche que les données entre 2 dates et portant un libellé choisis dans les ComboBox du même nom.

Pour ce faire, J'ai suivi ce tutoriel : https://www.youtube.com/watch?v=Ddzi9hwvxQA.

Je me retrouve avec une erreur de compilation : Sub ou Function non définie...

Mais je ne vois pas laquelle...

J'ai repris le tuto à maintes reprises pour voir si je n'avais pas fais un oubli, mais n'ai rien trouvé.

C'est pourquoi je fais appelle à vos lumières pour me tirer de ce mauvais pas...

Merci de votre aide.

Mon fichier joint :

Bonjour,

il y a une erreur à l'ouverture sur

Workbooks.Open Filename:=BDir & "Bilan.xlsx"

je sais que c'est normal puisque je n'ai pas ce fichier sur mon pc.

par contre cela cause aussi un erreur sur la macro ListviewFi du UserForm frm_Recherche

à la ligne :`

.View = lvwReport

je suppose que lvwReport est sur le fichier "Bilan.xlsx" ?

Bonjour,

Si j'ai bien compris ... il y avait deux erreurs sur la macro.

1- CStr(C.Offset(, 1)) < il manquait le C. devant le Offset.

2- Set F = Nothing < il manquait le Set devant le F.

Sub ListViewCritere(DateDebut As Date, DateFin As Date, Libelle As String)
   '' , _
    ' Paiement As Variant, Debit As Variant, Credit As Variant
Dim F As Worksheet
Dim Lr As Long, Ligne As Integer
Dim C As Variant
Dim i As Integer

   Set F = ThisWorkbook.Sheets("C.MUTUEL")
   Lr = F.Range("A" & Rows.Count).End(xlUp).Row - 1

   With Me.ListView1
      .ListItems.Clear

      With .ColumnHeaders
         For i = 1 To 5
            .Add , , F.Cells(2, i)
         Next i
      End With

      .View = lvwReport
      .Gridlines = True
      .FullRowSelect = True

      If Lr = 5 Then Exit Sub
      Ligne = 1

      For Each C In F.Range("A5:A" & Lr)
   ''If CDate(C) >= DateDebut And CDate(C) <= DateFin And CStr(Offset(, 1)) = Libelle Then
         If CDate(C) >= DateDebut And CDate(C) <= DateFin And CStr(C.Offset(, 1)) = Libelle Then
            .ListItems.Add , , C

            For i = 1 To 5
               .ListItems(Ligne).ListSubItems.Add , , C.Offset(, i)
            Next i

            Ligne = Ligne + 1
         End If
      Next C
   End With

   Set F = Nothing
End Sub

Est-ce bien le problème que tu cherchais ?

ric

bonsoir sabV,

J'ai effectivement rajouté la déclaration de la variable :

Dim lvwReport As Byte
lvwReport = 3

Mais ça n'a rien changé...

L'erreur se fait dans la Sub ListViewCritere(DateD, DateF, Libelle)

Sur la ligne:

If CDate(C) >= DateDebut And CDate(C) <= DateFin And CStr(C.Offset(, 1)) = Libelle Then

Mais je ne comprend pas pourquoi l'erreur m'indique une incompatibilité de type...

Je ne pense pas que le fichier bilan y soit pour quelque chose..

En tout cas merci de t'intéresser à mon problème...

Bonsoir ric,

Effectivement, il y avait bien ces 2 erreurs dans mon code, merci de me les avoir trouvé...

Mais j'ai toujours une incompatibilité de type à la ligne :

 If CDate(C) >= DateDebut And CDate(C) <= DateFin And CStr(C.Offset(, 1)) = Libelle Then

Pour ce soir, je vais décrocher là, car je dois me lever tôt, je reviens demain, Bonne nuit à tous...

Bonjour,

Désolé, j'ai oublié la 3e erreur :

Lr = F.Range("A" & Rows.Count).End(xlUp).Row - 1

Il faut ajouter -1 pour enlever une ligne, car la dernière ligne contient le mot "Total" ... ce qui n'est pas une date.

ric

Ric tu es génial,

Le -1 te rapporte :+1 lol

Ca marche

Moi je te donne

Merci infiniment...

Bonjour,

Merci bien pour le score.

ric

re,

j'ai trouvé la même,

si i= 21 qui est la dernière ligne

CDate(C) = Total et ça provoque le bug

Rechercher des sujets similaires à "filtre listview"