VBA filtre automatique

capucine -  
 pag -
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!
Configuration: Windows XP
Internet Explorer 7.0

3 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Bonjour lermite,

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

      ;o)
      0
    2. pascal-77
       
      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
    3. lermite222 Messages postés 9042 Statut Contributeur 1 199 > pascal-77
       
      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
    4. Pascal > lermite222 Messages postés 9042 Statut Contributeur
       
      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
    5. lermite222 Messages postés 9042 Statut Contributeur 1 199 > Pascal
       
      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
  2. capucine
     
    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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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