VBA filtre automatique

Fermé
capucine - 9 avril 2009 à 09:36
 pag - 30 mai 2012 à 21:58
Bonjour,

Je souhaiterais utiliser le filtre automatique dans VBA.

J'ai créé une macro de filtrage, lorsque je suis dans le userform Henry (c'est pour un commercial), il y a une liste déroulante et je souhaiterais qu'on affiche dans cette liste que les clients de Henry et que tous ces clients n'aient pas souscrit à l'assurance santé. Je dois aller chercher ces données dans ma base de données (deux critères: que les clients de Henry et que ceux qui n'ont pas l'assurance santé (NON dans la colonne assurance santé)).

Quand on met la macro de filtrage dans la macro d'ouverture du userform, une erreur apparait. Peux t on rattacher cette macro au Row Source de la liste Box? Que dois-je mettre dans Row Source et quelle est ma macro de filtrage?

Voici notre macro de filtrage (avec erreur de débogage):
Sheets("Données").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="NON"
Selection.AutoFilter Field:=10, Criteria1:="HENRY"
Sheets("Analyse").Select

Merci d'avance!
A voir également:

3 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 avril 2009 à 10:16
Bonjour,
RowSource ne tient pas compte des lignes "cachées" il faut donc employer un autre moyen.
Private Sub UserForm_Initialize()
Dim DerLig As Long, i As Long
    Sheets("Feuil1").Select
    DerLig = Range("A65536").End(xlUp).Row
    'au cas ou un filtre serait déja actif.
    On Error Resume Next
    Selection.AutoFilter
    On Error GoTo 0
    
    Range("A3").AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="NON"
    Selection.AutoFilter Field:=2, Criteria1:="Henry"
    
    ListBox1.Clear
    For i = 4 To DerLig
        If Not Rows(i).Hidden Then ListBox1.AddItem Cells(i, 1)
    Next i
End Sub

Bien sûr, adapter les adresses et nom feuille
Tu dis...
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
9 avril 2009 à 11:44
Bonjour lermite,

je pense que la suite est là : http://www.commentcamarche.net/forum/affich 11915763 problemes en vba

;o)
0
Salut lermite222,

Je cherchais à faire le code que tu as donné. ça fonctionne nickel. J'ai juste un problème. Lorsque je sélectionne l'élément de ma listbox :
Private Sub ListBox1_Change()
lig = ListBox1.ListIndex + 3
Label4 = Cells(lig, 4)
Label5 = Cells(lig, 5)
Label8 = Cells(lig, 6)
Mes lig sont simplément incrémentées 1, 2, 3, etc ...
C'est à dire que mes lignes filtrées peuvent être 11, 15, 20 mais ma listbox prends les lignes 1 à 3.

Est ce que tu aurais une solution ?

Merci de ton aide.
Pascal.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > pascal-77
7 août 2009 à 09:26
Mais oui, y a (presque) toujours une solution..
Tu met 2 colonnes sur ta listbox, r'occupe pas des largeurs je l'ai prévu en code.
tu remplace le remplissage de la lisrbox par
    ListBox1.ColumnWidths = CStr(ListBox1.Width) & ";0"
    ListBox1.Clear

    For i = 4 To DerLig
        If Not Rows(i).Hidden Then
            ListBox1.AddItem Cells(i, 1)
            ListBox1.List(ListBox1.ListCount - 1, 1) = i
        End If
    Next i

Et pour retrouver..remplacer,
lig = ListBox1.ListIndex + 3

Par
lig = ListBox1.List(ListBox1.ListIndex ,1)


A+
0
Pascal > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
8 août 2009 à 02:35
Salut Lermite222,

D'abord un grand merci pour ton aide précieuse.
Ton code marche nickel. J'ai juste un dernier petit problème à résoudre. J'ai cherché avant de t'embêter mais je sèche ... Une fois de plus.
Mon programme ne veut pas ré initialiser ma listbox ...
Private Sub CommandButton6_Click()
ComboBox1.Value = ""
ComboBox2.Value = ""
ActiveSheet.Range("A:F").AutoFilter Field:=1
ActiveSheet.Range("A:F").AutoFilter Field:=2
ListBox1.Clear
End Sub
J'ai le message : "erreur d'execution 381
Impossible de lire la propriété list.Index de table de propriétés non valide." = sur le code ListBox1_Change()
Je suis proche du bonheur....

D'avance merci.
Pascal.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > Pascal
8 août 2009 à 07:16
Tu vide la listBox, donc plus d'index !!
Ajoute
ListBox1.Clear
ListBox1.Enabled = False

Evidement faut remettre à True si tu veux de nouveau la remplir et t'en servir.
A+
0
Ca y'est ca marche pour les check box (plusieurs se cochent en meme temps,), en fait, j'avais mis des optionbox et il fallait mettre des checkbox!

Mon problème reste le filtrage, ca ne marche pas! en fait dans mon combobox, je souhaite mettre deux critères:
que les clients de RENE et que ceux qui n'ont pas l'assurance santé (dans base de données).
Dans ROWSOURCE, on a mis Données!A7:A47 (que les clients de RENE)
et dans le module 2 (module d'ouverture du userform2) on a mis:

Sub ouverture_userform2()


'Activer le UserForm nommé UserForm2

UserForm2.Show

'Filtrer les clients de René

Sheets("Données").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="NON"
Selection.AutoFilter Field:=10, Criteria1:="RENE"
Sheets("Analyse").Select

End Sub


Pouvez vous nous aider svp?
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 avril 2009 à 12:48
Bonjour Polux,
Effectivement, capucine a l'air de se mélanger les pinceaux :)
Capucine, voir mon poste 1, ça répond à ta question poste 3 poster 2hrs après !!!!
Tu ferais bien de lire les réponses qu'ont te donne si tu souhaite être aidée ultérieurement.
A+
0