Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

GADENSEB

XLDnaute Impliqué
Bonjour le Forum

1 - Dans mon USF GENERAL je cherche à filtrer ma listview via le combobox COMMENTAIRESPOSTES (colonne 41 de la BDD)

J'ai ce code là mais où placer

Code:
   .AutoFilterMode = False
    .Range("$A$1:$BB$3000").AutoFilter Field:=41, Criteria1:=COMMENTAIRESPOSTES.Value



Code:
Sub FILTRER_Click()

Dim BaseDD() As Variant, L As Long, c As Long, LstIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
    L = .[A60000].End(xlUp).Row
   c = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, c).Value: End With
With LISTBDD
   With .ColumnHeaders: .Clear
      For c = 1 To UBound(BaseDD, 2)
         .Add Text:=BaseDD(1, c), Width:=100: Next c: End With
   .ListItems.Clear
   For L = 2 To UBound(BaseDD, 1)
      Set LstIt = .ListItems.Add(Text:=BaseDD(L, 1))
         For c = 2 To UBound(BaseDD, 2)
            LstIt.ListSubItems.Add Text:=CStr(BaseDD(L, c)): Next c, L: End With
            
End Sub

2 - De plus, quand je fait ce filtre, la bdd reste filtrer (filtres auto) mm quand j’initialise la listview
--> Du coup, il faudrait faire sauter les filtres dans l'onglet BASE EMPLOI

Code:
Sub IniListview()

Dim BaseDD() As Variant, L As Long, c As Long, LstIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
   L = .[A60000].End(xlUp).Row
   c = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, c).Value: End With
 
With LISTBDD
   With .ColumnHeaders: .Clear
      For c = 1 To UBound(BaseDD, 2)
         .Add Text:=BaseDD(1, c), Width:=100: Next c: End With
   .ListItems.Clear
   For L = 2 To UBound(BaseDD, 1)
      Set LstIt = .ListItems.Add(Text:=BaseDD(L, 1))
         For c = 2 To UBound(BaseDD, 2)
            LstIt.ListSubItems.Add Text:=CStr(BaseDD(L, c)): Next c, L: End With
            
             
End Sub

qqn aurait une idée ?

Bonne journée
Seb
 

Pièces jointes

  • BASE EMPLOI - DEMO.xlsm
    264.9 KB · Affichages: 50
  • BASE EMPLOI - DEMO.xlsm
    264.9 KB · Affichages: 60
  • BASE EMPLOI - DEMO.xlsm
    264.9 KB · Affichages: 67
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

j'avance avec


Code:
Sub FILTRER_Click()

Dim BaseDD() As Variant, L As Long, c As Long, critere As String, LstIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
   
   L = .[A60000].End(xlUp).Row
   c = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, c).Value: End With
   
With LISTBDD
critere = COMMENTAIRESPOSTES.Value
   With .ColumnHeaders: .Clear
      For c = 1 To UBound(BaseDD, 2) And LstItem.SubItems(39) = critere
         .Add Text:=BaseDD(1, c), Width:=100: Next c: End With
   .ListItems.Clear
   For L = 2 To UBound(BaseDD, 1)
      Set LstIt = .ListItems.Add(Text:=BaseDD(L, 1))
         For c = 2 To UBound(BaseDD, 2)
            LstIt.ListSubItems.Add Text:=CStr(BaseDD(L, c)): Next c, L: End With
 
End Sub

mais erreur 424 - Objet requis sur

Code:
  For c = 1 To UBound(BaseDD, 2) And LstItem.SubItems(39) = critere
 

ChTi160

XLDnaute Barbatruc
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Bonjour Seb
Bonjour le Fil,le Forum

je pense que ton problème vient du fait que tu lances une boucle en y ajoutant une comparaison

Code:
 For c = 1 To UBound(BaseDD, 2) And LstItem.SubItems(39) = critere

Ce qui veut dire pour chaque colonnes de la Ligne 1 du tableau "BaseDD" et LstItem.SubItems(39) = critere

pourrais tu expliquer quelle est la logique recherchée ?
ex :je veux boucler sur les colonnes du Tableau "BaseDD" (Ligne 1) donc et faire ???????

bonne fin de Journée
Amicalement
Jean Marie
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Hmmmm je suis pas encore à l'aise avec les boucles et les listview......


En fait, je veux boucler sur la Colonne 39 et ne faire apparaître dans la listview uniquement les lignes correspondant au critére sélectionné par le biais de "critere" soit le contenu du combobox COMMENTAIRESPOSTES

Est-ce plus clair comme ça ?

Bonne journée
Seb
 

ChTi160

XLDnaute Barbatruc
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Re seb
il te faut donc boucler sur la colonne 39 du tableau "BaseDD" et comparer la valeur de l'Item et Criitere
cela donnerait par exemple :
pour chaque ligne du tableau si la valeur de la Colonne 39 est égale a la variable Critere
alors coller les valeurs de cette ligne dans la ListView
après avoir effacé la ListView
Code:
with .listView
For Ligne=2 to Ubound(BaseDD,1)
 if BaseDD(Ligne,39)=Critere then
 Set LstVIt = .ListItems.Add(Text:=BaseDD(Ligne,1))
 with LstVIt
   For Colonne=2 to UBound(BaseDD,2)
     .listSUbItem.add,,BaseDD(Ligne,Colonne)
   Next 'Colonne

 End With
 Next 'Ligne
End With
non testé!!!!!
je n'ai pas beaucoup de temps maintenant LOl
Bonne fin de journée
Amicalement
Jean marie
 

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Merci !

J'ai procédé à qq arrangements

Code:
Sub FILTRER_Click()

Dim BaseDD() As Variant, L As Long, c As Long, critere As String, LstIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
   critere = COMMENTAIRESPOSTES.Value
   L = .[A60000].End(xlUp).Row
   c = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, c).Value: End With
   
With LISTBDD
    With .ColumnHeaders: .Clear
        For ligne = 2 To UBound(BaseDD, 1)
            If BaseDD(ligne, 39) = critere Then
                Set LstVIt = .ListItems.Add(Text:=BaseDD(ligne, 1))
                With LstVIt
                    For Colonne = 2 To UBound(BaseDD, 2)
                    .ListSubItem.Add , , BaseDD(ligne, Colonne)
                    Next 'Colonne
                End With
            End If
        Next
    End With
End With
End Sub


Par contre, j'ai un blocage sur

Erreur de Compilation - Membre de méthode ou de données introuvable

Code:
Set LstVIt = .ListItems.Add(Text:=BaseDD(ligne, 1))

sur
.listItems
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Re

voir ici.
tu as déclaré :
LstIt As MSComctlLib.ListItem
et j'ai Mis (par habitude "LstVIt")"V" pour ListView
tu modifies l'un ou l'autre et ça va rentré dans l'ordre.
tu as oublié avant la recherche , de remplir les entêtes de colonnes
avec un truc de ce genre
Code:
With LISTBDD
   With .ColumnHeaders
         .Clear
      For c = 1 To UBound(BaseDD, 2)
         .Add Text:=BaseDD(1, c), .Width:=100
      Next c
   End With
         .ListItems.Clear
je n'ai pas le temps de tester lol
Bonne fin de Soirée
Amicalement
Jean Marie
 

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

excellent mais toujours un souci

sur

Code:
.ListItems: .Clear

Code:
Sub FILTRER_Click()

Dim BaseDD() As Variant, L As Long, c As Long, critere As String, LstVIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
   critere = COMMENTAIRESPOSTES.Value
   L = .[A60000].End(xlUp).Row
   c = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, c).Value: End With
   
With LISTBDD
    With .ColumnHeaders: .Clear: .ListItems: .Clear
       For c = 1 To UBound(BaseDD, 2)
         .Add Text:=BaseDD(1, c), Width:=100: Next c: End With
 
       
        For ligne = 2 To UBound(BaseDD, 1)
            If BaseDD(ligne, 39) = critere Then
                Set LstVIt = .ListItems.Add(Text:=BaseDD(ligne, 1))
                With LstVIt
                    For Colonne = 2 To UBound(BaseDD, 2)
                    .ListSubItem.Add , , BaseDD(ligne, Colonne)
                    Next 'Colonne
                End With
            End If
        Next
End With
End Sub
 

ChTi160

XLDnaute Barbatruc
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Bonjour Seb
Bonjour le Fil,Le Forum

voila ce que j'ai mis dans la procédure Click du Bouton Filtrer
Code:
Sub FILTRER_Click()

Dim BaseDD() As Variant, L As Long, c As Long, critere As String, LstVIt As MSComctlLib.ListItem
With ThisWorkbook.Worksheets("BASE EMPLOI")
   critere = COMMENTAIRESPOSTES.Value
   L = .[A60000].End(xlUp).Row
   c = .[A1].End(xlToRight).Column
   BaseDD = .[A1].Resize(L, c).Value: End With   
With LISTBDD            
    With .ColumnHeaders
            .Clear     
       For c = 1 To UBound(BaseDD, 2)
            .Add Text:=BaseDD(1, c), Width:=100
       Next c
    End With
            .ListItems.Clear
        For ligne = 2 To UBound(BaseDD, 1)
            If BaseDD(ligne, 41) = critere Then
                Set LstVIt = .ListItems.Add(Text:=BaseDD(ligne, 1))
                With LstVIt
                    For Colonne = 2 To UBound(BaseDD, 2)
                    .ListSubItems.Add , , BaseDD(ligne, Colonne)
                    Next 'Colonne
                End With
            End If
        Next
End With
End Sub

je n'ai pas le temps maintenant(mais je reviendrai dans la matinée lol)
mais beaucoup de choses reste à faire.
de plus la colonne de référence(recherche) n'était pas la 39 mais la 41.
Bonne journée
Amicalement
Jean Marie
 
Dernière édition:

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Hello
Code parfait !
Je dirais même comme toujours !

Je souléve un bug
Donc j’applique un filtre et cela marche : Nickel
Par contre, si j'applique un autre filtre toujours avec le combobox COMMENTAIRESPOSTES et que je clique sur FILTRER
j'ai un message d'erreur
Erreur 13 - incompatibilité de type
sur la ligne

Code:
.ListSubItems.Add , , BaseDD(ligne, Colonne)

Par contre, si j'utilise le code IniListview entre les deux, il n'y a pas de bugs


J'ai 2 requêtes pour compléter cette macro :

1 - Le Width:=100 est super mais pourrais-t-on faire correspondre la largeur des colonnes à la largeur de l'en-tête ?

2 - Je voudrais rajouter un niveau sur le filtre :
Si COMMENTAIRESPOSTES = A RELANCER
ne faire apparaître uniquement les A-C-D-G-H-J-AF-AN soir les colonnes 1 3 4 6 7 10 31 40
... et le numéro complémentaire .. .lol
avec le même critére d'affichage que le qu'au numéro 1


Pfiouuu les idées fusent la nuit !!!

Je bosse également dessus dans la matinée !

Bonne journée à toi

Seb
 

ChTi160

XLDnaute Barbatruc
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Re
en pièce jointe une approche

je traite l'approvisionnement de la ListView du Combobox ainsi que la Selection des "Commentaires de postes" dans le Combobox

pour ce qui est du reste ,je n'ai pas tout compris mais bon lol

Le Fichier : Regarde la pièce jointe BASE EMPLOI - DEMO 03-09-2014-1.xlsm

Bonne fin de Journée
Amicalement
Jean Marie
 

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

OULA ! --> Génial
Voila u code qui remet tout le code de GENERAL en question
J'ai besoin d'un peu de temps pour l'étudier .

je regarde cela en fin d'aprem.

Pour ce qui est du reste :


Je cherche à faire apparaitre les colonnes, dans la listview, A-C-D-G-H-J-AF-AN soir les colonnes 1 3 4 6 7 10 31 40 de la BDD.
si la Selection des "Commentaires de postes" dans le Combobox = "A RELANCER"


Bonne fin d'aprem
Merci
Seb
 

GADENSEB

XLDnaute Impliqué
Re : Filtrer dans un listview / 1 critére de combox / supprimer tous les filtres

Hello
Pfiou !!!
Un truc de fou

J'ai déplacé tout tes codes

mais j'ai une erreur 13 - incompatibilité de type

sur cette ligne là. Ta une idée ?

Code:
 .ListSubItems.Add , , BaseDD(L, C)

Code:
Private Sub CmbB_Cmt_POSTES_Change()
With Usf_GENERAL
  With .CmbB_Cmt_POSTES
     Critere = IIf(.Text = "<<TOUS>>", "*", .Text)
   End With
With .LstV_BaseDonnees
                   .ListItems.Clear
        For L = 2 To UBound(BaseDD, 1)
            If BaseDD(L, 41) Like Critere Then
                Set LstVIt = .ListItems.Add(Text:=BaseDD(L, 1))
                With LstVIt
                    For C = 2 To UBound(BaseDD, 2)
                          .ListSubItems.Add , , BaseDD(L, C)
                    Next 'Colonne
                End With
            End If
        Next
           .ListItems(1).Selected = False
     Set .SelectedItem = Nothing
      
End With
           .TxtB_Resultat.Text = .LstV_BaseDonnees.ListItems.Count
End With
End Sub


Bonne soirée

sEb
 

Discussions similaires

Réponses
28
Affichages
974

Statistiques des forums

Discussions
312 153
Messages
2 085 800
Membres
102 980
dernier inscrit
brossadan