Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

filtrage avec VBA

  • Initiateur de la discussion Initiateur de la discussion canardo72
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
531
Réponses
12
Affichages
1 K
Réponses
3
Affichages
380
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…