VBA filtre : choix colonne selon 1 critere

Celia -  
 Célia -
Bonjour,

Je progresse peu à peu sur VBA mais je me heurte à un probleme (peut etre simple?) que je n'arrive décidément pas à réésoudre malgré mes recherches...

Par exemple, imaginons le tableau suivant :

A B C
1 Nom Col1 Col2
2 aa 1 2
3 bb 1
4 cc 2
5 dd

Je souhaiterais par exemple entrer en D1 le critère "1" ou "2" et, si c'est "1" filtrer la colonne B pour voir apparaitre tous les noms correspondants, et de meme si c'est "2" faire ce filtre sur la colonne C.
Par exemple, si en D1 j'entre "2" je voudrais voir apparaitre les lignes 2 ("aa") et 4 ("cc") ; si j'entre "1" je voudrais voir les lignes 2 ("aa") et 3 ("bb").

Je suis absolument bloquée... J'essaie avec :

Sub Tri()
With ActiveSheet
choix = .Range ("D1")
End With
ActiveSheet. Range("A1:C5").AutoFilter Field:=2, Operator:=xlOr, Field:=3, Criteria1:=choix


Mais cela me fait le tri uniquement sur la colonne B et non selon ce que l'on entre en D1.
Je pense que la macro que j'utilise n'est pas très adaptée mais je ne sais pas quoi utiliser d'autre... Si quelqu'un a une idée ??

J'espère que j'ai pas été trop confuse... Merci à ceux qui essaieront de sauver mes derniers cheveux !

Célia

2 réponses

  1. Celia
     
    On ne visualise pas l'exemple du tableau, je le remets:
    ___A____B____C__
    1__nom__col1__col2
    2__aa____1____2
    3__bb____1_____
    4__cc_________2
    5__dd__________
    0
  2. Célia
     
    Je suis désolée si mon premier message n'était pas clair...

    J'ai progressé et réussi à créer la macro que je voulais (sur un tableau plus complexe), mais je me heurte à un nouveau problème...

    Tout d'abord, voilà la macro :
    Private Sub WorkSheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("H1")) Is Nothing Then
    Sheets(2).Range("$A$2:$J$30").AutoFilter
    Select Case Target.Value
    Case "A"
    Call Recherche1
    Case "B"
    Call Recherche2
    Case Else
    Exit Sub
    End Select
    End If
    End Sub

    Sub Recherche1()
    Sheets(2).Range("$A$2:$J$30").AutoFilter Field:=8, Criteria1:="x"
    End Sub

    Sub Recherche2()
    Sheets(2).Range("$A$2:$J$30").AutoFilter Field:=9, Criteria1:="x"
    End Sub


    Mon problème est que "WorkSheet_Change" concerne la feuille sur laquelle on exécute la macro, or je voudrais que le "A" ou le "B" soit saisi dans une case de la première feuille... Je ne vois pas comment faire... Quelqu'un a-t-il une idée?

    Merci beaucoup...
    0