Filtre par Combobox et Affichage dans une ListView

Bonjour,

En venant ici j'espère pouvoir résoudre mon problème, avec bien sûr votre aide de première qualité !!!

Ca fait maintenant plusieurs jours que j'essaie mais je dois dire que je sèche .... J'ai trouvé pleins d'exemple, mais qui sont très mal commenté et donc très difficile à comprendre !

Alors voici mon problème :

J'ai un tableau avec des colonnes :

N°Délai | Date du délai | Description | Début du cours | Fin du cours | Demandeurs| Responsables.

J'ai créé mon userform avec une comboBox par Colonne sauf pour les N°Délai, c'est une saisie par texte.

Ma ListView Charge la totalité du tableau se trouvant sur ma feuille a son initialisation et là Pas de soucis.

Ce que je ne sais pas faire c'est que j'aimerai choisir un responsable précis et qu'il m'affiche tous les délais de ce responsable ( filtre ) du style comboResponsable_Change() et que ça filtre immédiatement sans cliquer sur un bouton.

Que si après avoir filtré par responsable je filtre en plus par demandeur il m'affiche uniquement les délais des demandeurs et responsables sélectionnés. Et bien sûr si c'est vide il ne prend pas en compte les critère vides.

Alors je vous remercie d'avance de m'aider et de me guider vers le savoir ... car après 3 jours je suis en dépression ...

Bonjour

Si tu veux augmenter les chances que quelqu'un te réponde, fournis le fichier avec le travail que tu as déjà fait

Oui tu as raison, c'est toujours mieux, alors j'ai fais un exemple de là où je me situe.

Bonjour

Pour commencer

Rolalalallalalal .....

Tu me mets la déprime .... et aussi rapidement !!!

Comment de dire ...... MERCI et encore MERCI c'est exactement ça, et je vois que mon code est optimisé, tellement que je vais maintenant me casser la tête pour tout comprendre.

Alors je vais mettre que c'est résolu, mais s'il y a des détails dans le code que je ne comprends pas je me permettrai de poser les questions dans ce post.

Encore Merci.

Bon .... j'en ai presque pas dormis tellement je ne supporte pas tout comprendre, je vais y aller par étape. Peux-tu m'expliquer ce que ça veut dire celà ... :

 With Ws
    For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row  ' Démarre à la ligne 2 jusqu'au nombre de ligne du dernier résultat trouvé de la colonne A

ça c'est OK

If .Range("C" & J) <> "" Then MondicoStat(.Range("C" & J).Value) = "" ' si la col C de la ligne en cours différent de Vide

mais après le Then ... es ce que c'est si différent de vide alors donne - la valeur du vide ??? Mais pourquoi ?

Et bien sûr la suite :

 If MondicoStat.Count > 0 Then T2 = MondicoStat.keys: Tri T2, LBound(T2), UBound(T2): Me.CbbStatut.List = T2

J'ai pourtant fais des recherches, mais pas facile à décortiquer. Merci d'avance.

Bonjour

If .Range("C" & J) <> "" Then MondicoStat(.Range("C" & J).Value) = ""

Je ne vais pas trop rentrer dans les détails

MondicoStat est un outil(objet) créé par "Set MondicoSat = CreateObject(........)"

La particularité de cet outil est de ne pas accepter les doublons

Le code veut dire : Si la cellule n'est pas vide, on stocke dans l'outil le contenu de la cellule (la clé (moyen de récupérer la valeur) et la valeur de la cellule)

Généralement la clé et la valeur de la cellule sont les mêmes (ce qui donnerait : MondicoStat(.Range("C" & J).Value) = .Range("C" & J).Value) )

Mais comme dans la macro je n'utiliserais que la clé je me passe de stocker la valeur de la cellule (celle-ci est stockée dans la clé)

Je sais que c'est compliqué, je te conseille de lire [a=http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm][/a]

If MondicoStat.Count > 0 Then T2 = MondicoStat.keys: Tri T2, LBound(T2), UBound(T2): Me.CbbStatut.List = T2

Si dans l'outil il y a au moins un élément, on transvase cette liste dans un tableau, on va trier ce tableau et ensuite on associe la propriété List de la ComboBox à ce tableau trié

Bonjour,

Comme tu as pu le constaté, j'ai mis un peu de temps à digérer... et j'ai pas eu une bonne digestion ! Toutefois merci pour le lien, il va falloir que je lise et relise plusieurs fois ces explications, pas évident d'essayer de tout comprendre sans faire que du copier coller .... Mais en tout cas merci.

Puis-je te demander de l'aide pour la compréhension ce cette ligne, car certains éléments me parait flou :

If MondicoStat.Count > 0 Then T2 = MondicoStat.keys: Tri T2, LBound(T2), UBound(T2): Me.CbbStatut.List = T2

Dans le code ci dessous je ne comprends pas très bien lr ( .ListItems.Add , Ws.Cells(J, "B").Address, Ws.Cells(J, "B")) et ( .ListItems(Nb).ListSubItems.Add , , Ws.Cells(J, 1 + I)):

Sub RemplissageListView()
Dim J As Long, I As Integer, Nb As Integer

  With Me.ListView1
    .ListItems.Clear
    For J = 2 To Range("B" & Rows.Count).End(xlUp).Row
      If Ws.Range("B" & J) Like Me.TbNumero & "*" And Ws.Range("C" & J) Like Me.CbbStatut & "*" And _
         Ws.Range("E" & J) Like Me.TbDescription & "*" And Ws.Range("H" & J) Like Me.CbbMandant & "*" And _
         Ws.Range("I" & J) Like Me.CbbResponsable & "*" Then
        .ListItems.Add , Ws.Cells(J, "B").Address, Ws.Cells(J, "B")
        Nb = Nb + 1
        For I = 2 To .ColumnHeaders.Count
          .ListItems(Nb).ListSubItems.Add , , Ws.Cells(J, 1 + I)
        Next I
      End If
    Next J
  End With
End Sub

Et donc du coup là ou tu m'as perdu c'est dans le module ou tu m'as mis ce code :

Sub Tri(A, gauc, droi)
Dim Ref, G As Long, D As Long
Dim Temp

  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

Désolé de devoir te demander les détails, mais j'aime pas juste copier un bout de code, car ce que je comprends aujourd'hui c'est ce que je ne demande pas demain

Parce que j'aimerai modifier ton code pour que dans les Combobox je puis avoir l'option Tout pour afficher tout, mais j'aimerai savoir le faire. De plus si je double clic sur une ligne dans mon tableau j'aimerai afficher les détail dans une MsgBox par exemple, mais avec l'utilisation du Dico je ne sais pas comment récupérer ces infos ...

Donc si tu as encore un peu de temps à m'accorder je t'en remercie.

Je m'acharne et pour le double click j'ai trouvé comment récupérer la ligne souhaitée :

Private Sub ListView1_DblClick()
Dim Lig As Integer
 Lig = ListView1.SelectedItem.Index + 1
 Description = Sheets("DELAI").Cells(Lig, "E").Value
 'MsgBox Description
End Sub

Aller je continue ....

Rechercher des sujets similaires à "filtre combobox affichage listview"