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'ai recompiler mon fichier

Je pense n'avoir rien oublié
 

Pièces jointes

  • BASE EMPLOI - DEMO.xlsm
    277 KB · Affichages: 43
  • BASE EMPLOI - DEMO.xlsm
    277 KB · Affichages: 49
  • BASE EMPLOI - DEMO.xlsm
    277 KB · Affichages: 47

Regueiro

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

Bonsoir le Forum, GADENSEB
Sur ce fil il me semble que tu as déjà pas mal de réponse à tes questions non ?

https://www.excel-downloads.com/threads/erreur-dexecution-35600-index-hors-limite.223171/

Par exemple pour la largeur des colonnes des ListView :
Code:
Sub IniListview2()
Dim L As Long, C As Long
Dim NbCol
Dim WS As Worksheet
Dim LST As ListObject
Dim LSTHEADER  As Range
Dim LSTDATA As Range

Set WS = Worksheets("BASE EMPLOI")
Set LST = WS.ListObjects("TABLEAU1")
Set LSTHEADER = LST.HeaderRowRange.Cells
Set LSTDATA = LST.DataBodyRange
NbCol = LSTHEADER.Columns.Count
NbLig = LST.DataBodyRange.Rows.Count
With LISTBDD
    .Gridlines = True
    .HideColumnHeaders = False
    .View = lvwReport
    .ListItems.Clear
    .ColumnHeaders.Clear
    With .ColumnHeaders
       For C = 1 To NbCol
          .Add , , LSTHEADER.Cells(1, C).Text, LSTHEADER.Columns(C).Width
        Next C
    End With
    .ListItems.Clear
    For L = 1 To NbLig
    .ListItems.Add , , LSTDATA.Cells(L, 1)
          For C = 2 To NbCol
      .ListItems(.ListItems.Count).ListSubItems.Add , , LSTDATA.Cells(L, C)
      Next C
             Next L
             End With
End Sub
Tu as également le code pour filtrer la BBD

Également le fichier en PJ
A+
 

ChTi160

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

Re
Il faudrait être plus explicite lol
tu dis :
J'ai déplacé tout tes codes
mais j'ai une erreur 13 - incompatibilité de type
sur cette ligne là. Ta une idée ?
ben la réponse est :" non pas d'idée"
mais de la place pour en mettre lol
Question :"pourquoi déplacer les Codes" ?
Où ?
le dernier fichier que tu as joint , ne contient pas l'ensemble du code de mon dernier Fichier Arrrfffff
Bonne fin de Soirée
Amicalement
 

GADENSEB

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

@ Regueiro : c'est vrai et merci
Avec ChTi160 on a bossé, surtout lui, sur une autre version du code


@ ChTi160
J'ai peut être fait un oubli en déplacant tes codes sur mon fichier avec mes vrais données
Du coup j'ai fait l'inverse, j'ai copié mes vrais données sur ton fichier et je reste avec la mm erreur !!

cela peut venir de quoi ?
un format date.......

POUR INFO : J'AI 1300 LIGNES.......le nombre va grandissant
 

Pièces jointes

  • BASE EMPLOI - DEMO.xlsm
    159.4 KB · Affichages: 52
  • BASE EMPLOI - DEMO.xlsm
    159.4 KB · Affichages: 47
  • BASE EMPLOI - DEMO.xlsm
    159.4 KB · Affichages: 44
Dernière édition:

GADENSEB

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

Heuuu je viens de penser !

Dans la colonne "CR ENTRETIEN" (dans mes vrais données) j'ai parfois 30 ou 40 lignes de texte dans une seule cellule !

Est-ce là le probléme pour la listview ?


exemple de texte dans une cellule de la colonne "CR ENTRETIEN"

Le 03/09/2014
Bonjour,

Suite à votre candidature pour le poste Responsable Comptabilité Fournisseurs, nous vous remercions pour l’intérêt que vous portez à notre société.

Afin d’avancer sur l’étude de votre dossier, pouvez-vous s’il vous plaît nous indiquer quelles sont vos prétentions salariales ainsi que le délai sous lequel vous pourriez être disponible ?

Egalement, pouvez-vous nous apporter plus de précisions sur les points suivants :
· Anglais : Quel est votre niveau (lu, écrit, parlé) ? Avez-vous eu l’occasion de travailler en anglais lors de votre parcours professionnel ? Si oui, dans quel contexte ?

· Management : Avez-vous eu l’occasion de manager une équipe ? Si oui, combien de personnes ?

-------------------------------------------------
Bonsoir,

Compte tenue de mon expérience et de mes diplômes je pose mes prétentions salariales à xxxK€ / an.
Mon délai de préavis est de 2 mois négociables.

Concernant mon niveau d'anglais, mon niveau est intermédiaire (lu, écrit, parlé), dont anglais technique.
Je viens de finir xxxx heures de cours d'anglais, en cours particulier, afin de perfectionner mon niveau.

En ce qui concerne le management, je n'ai pas encore eu l'occasion de pratiquer mais j'ai l'âge, la formation et l'envie d'apprendre.

Je suis disponible pour venir en vos locaux pour vous rencontrer afin de vous présenter plus en détail ma candidature.

Pouvons-nous convenir d'un rendez-vous la semaine prochaine ?


Cordialement


Sébastien GADEN
 

GADENSEB

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

@ ChTi160

Si tu es d'accord on peut passer à une seconde étape
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 journée à tout le forum

Seb
 

GADENSEB

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

Purée je l'avais pas vu ....
C'est parfaitement ce que je cherche ... nikel ....


Par contre, je voudrais ajouter un critére ZONE en complement de commentaires postes

Capture.JPG

je galère mais je regarde..... ne me dis rien !!!!


.....J'aime bien chercher....

Bonne aprem
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    18.9 KB · Affichages: 49
  • Capture.JPG
    Capture.JPG
    18.9 KB · Affichages: 49

GADENSEB

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

Salut !!
Bon je rame à fond sur ma double condition

Sur le post 24, je rajoute une condition ZONE à la condition COMMENTAIRESPOSTES.

J'ai fouillé ton code et tenté de reproduire la méthode de remplissage de la combobox (voir fichier joint)
pour pouvoir ensuite inclure une condition suffisante dans l'affichage de la listview.


Je rame à la première étape, le remplissage de la combobox.
En manipulant le code, je me retrouve avec le remplissage des 2 combobox avec les données de la colonne ZONE ....


J'ai du beugé qq part ....

Aurais-tu une idée ?

Bonne soirée

Seb
 

Pièces jointes

  • BASE EMPLOI - DEMO.xlsm
    168.3 KB · Affichages: 101
  • BASE EMPLOI - DEMO.xlsm
    168.3 KB · Affichages: 134
  • BASE EMPLOI - DEMO.xlsm
    168.3 KB · Affichages: 148

GADENSEB

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

bonsoir,
Là je dois avouer que je n'y arrive pas !

Dois-je doubler la macro REMPLIR en faisaint un REMPLIR2

Pourtant cela fonctionne avec un seul REMPLIR dans mon usf BASEEMPLOI.... je pige pas

Bonne soirée

Seb
 

GADENSEB

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

Hello

J'ai tenté le coup en dupliquant REMPLIR
Mais j'obtiens les données de la colone ZONE dans COMMENTAIRESPOSTES......
QQn vois une erreur ?

Je crée la combobox

Code:
Private Sub CmbB_Cmt_ZONE_Change()
With Usf_GENERAL

 Critere2 = .CmbB_Cmt_ZONE
 
 End With
End Sub


Je rajoute dans l'initialisation

Code:
Private Sub UserForm_Initialize()
    Dim Largeur
    Set Ws_Source = Worksheets("BASE EMPLOI")
    Recup_Source Ws_Source
    With Usf_GENERAL
        With .LstV_BaseDonnees
                .View = lvwReport
                .Gridlines = True
            With .ColumnHeaders
                .Clear
                For C = 1 To UBound(BaseDD, 2)
                    Largeur = Ws_Source.Cells(1, C).Width
                    .Add , , BaseDD(1, C), Largeur
                Next C
            End With
        End With
           With .CmbB_Cmt_POSTES
               .Text = "<<TOUS>>"
                 Remplir .Text, 41
                      
                 
End With
             With .CmbB_Cmt_ZONE
             .Text = "<<TOUS>>"
                 Remplir .Text, 4
                      
                 
          End With
            
      
    End With
End Sub


je crée un dictionnaire pour les 2 combobox

Code:
'On remplit la listview ou la combobox LST par les données de la colonne COL
Private Sub Remplir(ByVal Str_Search As String, ByVal Col As Integer)
'Public BaseDD As Variant
'Public Tab_Recup() As Variant
 Dim temp As Variant
 Dim temp2 As Variant
 Set MonDico = Nothing
 Set MonDico2 = Nothing
 
 
 Set MonDico = CreateObject("Scripting.Dictionary")
      MonDico.Item("<<TOUS>>") = "<<TOUS>>"
   For L = 2 To UBound(BaseDD, 1)
        If BaseDD(L, Col) <> "" Then MonDico.Item(BaseDD(L, Col)) = BaseDD(L, Col)
    Next L
    
  Set MonDico2 = CreateObject("Scripting.Dictionary")
      MonDico2.Item("<<TOUS>>") = "<<TOUS>>"
   For L = 2 To UBound(BaseDD, 1)
        If BaseDD(L, Col) <> "" Then MonDico2.Item(BaseDD(L, Col)) = BaseDD(L, Col)
    Next L
    
    


temp = MonDico.Items
temp2 = MonDico2.Items
Set MonDico = Nothing
Call Tri(temp, LBound(temp), UBound(temp))
Call Tri(temp2, LBound(temp2), UBound(temp2))
With Usf_GENERAL
.CmbB_Cmt_POSTES.List = temp
.CmbB_Cmt_ZONE.List = temp2
End With
End Sub

je fais le tri sur les dictionnaires....


Code:
Private Sub Tri(a, ByVal gauc As Long, ByVal droi As Long)    ' Quick sort
Dim G As Long, d As Long
Dim Ref, temp, temp2
 
Ref = a((gauc + droi) \ 2)
G = gauc: d = droi
Do
    Do While a(G) < Ref: G = G + 1: Loop
    Do While Ref < a(d): d = d - 1: Loop
    If G <= d Then
        temp = a(G): a(G) = a(d): a(d) = temp
        G = G + 1: d = d - 1
    End If
Loop While G <= d
If G < droi Then Call Tri(a, G, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
 

Discussions similaires

Réponses
28
Affichages
1 K

Statistiques des forums

Discussions
312 309
Messages
2 087 106
Membres
103 469
dernier inscrit
Thibz