filtrage avec VBA

canardo72

XLDnaute Nouveau
[Résolu] filtrage avec VBA

Bonjour à tous,

Je suis un novice de VBA mais je tente deux-trois trucs.

Je vous expose mon souci.

J'ai un tableau Excel avec deux feuilles.

La première (appelée "Accueil") contient simplement deux cellules (A1 et A2) avec Validation par liste (où je choisis les données que je veux afficher) et un bouton de commande, qui, quand je clique dessus, m'amène sur la deuxième feuille.

Cette deuxième feuille contient un tableau "base de données" (appelée "Table"), avec plusieurs champs de colonnes et de nombreuses lignes. Sur celui-ci, j'ai appliqué un filtre automatique.


La cellule A1 de "Accueil" reprend les différentes données de la colonne A de la feuille "Table".
La cellule A2 de "Accueil" reprend les différentes données de la colonne B de la feuille "Table".

J'ai écrit une macro permettant de filtrer sur A et B quand on choisit A1 et A2.

Code:
   Private Sub OK_Click()
    Sheets("Table").Select
    Selection.AutoFilter Field:=1, Criteria1:=[A1]
    Selection.AutoFilter Field:=2, Criteria1:=[A2]
End Sub

Puis, je l'ai améliorée pour filtrer uniquement sur la colonne A lorsque A2 de Accueil est vide. C'est là où ça me pose problème. Que ce soit vide ou non vide, il ne tient plus compte du filtre sur la colonne B.
Code:
Private Sub OK_Click()
    Sheets("Accueil").Select
    If A2 = "" Then
    Sheets("Table").Select
    Selection.AutoFilter Field:=1, Criteria1:=[A1]
    Selection.AutoFilter Field:=2
    Else
    Sheets("Table").Select
    Selection.AutoFilter Field:=1, Criteria1:=[A1]
    Selection.AutoFilter Field:=2, Criteria1:=[A2]
    End If
End Sub

J'espère que mes explications sont suffisamment claires.
Mes compétences en VBA sont assez limitées, mais si vous pouviez m'indiquer ce qui cloche (en gros, comment filtrer uniquement sur A si la A2 est vide et comment filtrer sur A et B si A2 n'est pas vide), je vous en serais reconnaissant !

Merci d'avance.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : filtrage avec VBA

Bonjour canardo72,

peut-être :

Code:
Private Sub OK_Click()
    Sheets("Accueil").Select
    If A2 = "" Then
    Sheets("Table").Select
    Selection.AutoFilter Field:=1, Criteria1:=[A1]
    Else
    Sheets("Table").Select
    Selection.AutoFilter Field:=1, Criteria1:=[A1]
    Selection.AutoFilter Field:=2, Criteria1:=[A2]
    End If
End Sub

Mais il faudra penser à tout réafficher à un moment ou un autre, peut-être avant chaque filtre
 

canardo72

XLDnaute Nouveau
Re : filtrage avec VBA

Re-bonjour,

Voici un fichier exemple qui rendra mes explications plus limpides ^^


En espérant que vous puissiez m'aider.
 

Pièces jointes

  • Exemple.xls
    47 KB · Affichages: 84
  • Exemple.xls
    47 KB · Affichages: 90
  • Exemple.xls
    47 KB · Affichages: 88

tototiti2008

XLDnaute Barbatruc
Re : filtrage avec VBA

Re,

Pour que ça fonctionne mieux, j'ai dû insérer une ligne vide en feuille Table entre les fonctions SOUS.TOTAL et la ligne de titre de la liste

à tester :

Code:
Private Sub OK_Click()
    Sheets("Table").Select
    Application.ScreenUpdating = False
    Sheets("Table").Range("A3").AutoFilter
    If Sheets("Accueil").Range("A2").Value = "" Then
        Sheets("Table").Range("A3").AutoFilter Field:=1, Criteria1:=Sheets("Accueil").Range("A1").Value
    Else
        Sheets("Table").Range("A3").AutoFilter Field:=1, Criteria1:=Sheets("Accueil").Range("A1").Value
        Sheets("Table").Range("A3").AutoFilter Field:=2, Criteria1:=Sheets("Accueil").Range("A2").Value
    End If
    Application.ScreenUpdating = True
End Sub
 

Statistiques des forums

Discussions
312 379
Messages
2 087 762
Membres
103 661
dernier inscrit
fcleves