filtrer avec plusieurs critères en VBA

blancolie

XLDnaute Impliqué
Bonsoir le forum;

Dans ce fichier ci-joint et dans l'onglet données planning un filtrage avec plusieurs critères.Dans la feuille données planning j'ai mis en H1 , J1 et L1 et c'est dans les cellules au fond gris qu'on met les critères.

Je m'explique : le code suivant :

VB:
Option Explicit
Option Compare Text    'la casse est ignor?e
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Sh As Worksheet, col&

    Set Sh = ThisWorkbook.Sheets("Données Planning")

    [A1].AutoFilter 'ca peux etre ca tout simplement


    Select Case Target.Address(0, 0)
    Case "I1": col = 3
    Case "K1": col = 4
    Case "M1": col = 5
    Case Else: col = 0:
    End Select

    If Target.Value <> "" And col <> 0 Then
        [A1].AutoFilter Field:=col, Criteria1:=Target.Value
    Else
        Sh.AutoFilterMode = False
    End If
End Sub



Ce code suivant qu'un membre m 'a gentiment construit en répondant à mon post précédent marche bien mais j'aimerais avoir un filtrage qui va plus dans le détail c'est a dire quand je sélectionne l'agent, j'aimerais qu'on puisse filtrer les différentes permanence et les différents périodes du même agent. j'espère avoir été assez clair. j'aimerais aussi faire l'inverse à partir de la période.

Si aucune cellule contenant de critères, faut que le filtrage s'efface. Peut-être que à partir d'un bouton, on peut réinitialiser mon petit menu ?

Cette liste est amené à s'agrandir ou à être diminué, don cil faut que le codage prenne en compte les rajouts de lignes ou de suppressions sinon, je risque d'avoir un erreur.

Merci à vous.

pouvez vous me mettre en parallèle le code au cas ou je n'arrive pas à ouvrir le fichier. cela m'arrive quelquefois a cause du vba. Merci à vous
 

Pièces jointes

  • Astreinte-exemple.xlsm
    119.8 KB · Affichages: 129
Dernière édition:

Nairolf

XLDnaute Accro
Salut,

Une proposition de code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Sh As Worksheet
    
    Set Sh = ThisWorkbook.Sheets("Données Planning")
    Sh.ListObjects("T_Datas").Range.AutoFilter
    
    If Range("I1").Value <> "" Then
        Sh.ListObjects("T_Datas").Range.AutoFilter Field:=3, Criteria1:=Range("I1").Value
    End If
    If Range("K1").Value <> "" Then
        Sh.ListObjects("T_Datas").Range.AutoFilter Field:=4, Criteria1:=Range("K1").Value
    End If
    If Range("M1").Value <> "" Then
        Sh.ListObjects("T_Datas").Range.AutoFilter Field:=5, Criteria1:=Range("M1").Value
    End If
    If Range("I1").Value = "" And Range("K1").Value = "" And Range("M1").Value = "" Then
        Sh.ListObjects("T_Datas").Range.AutoFilter
    End If
End Sub
 

blancolie

XLDnaute Impliqué
bonjour et merci Nairolf

suite a ce message erreur d'execution 1004 : l améthode autofilter de l'objet range à échoué, Cela est retranscrit par cette ligne suivante :

Sh.ListObjects("T_Datas").Range.AutoFilter

donc je peux pas aller plus loin
 

Nairolf

XLDnaute Accro
Salut,

Désolé, je n'ai pas eu trop le temps de me pencher sur la question depuis la dernière fois.
Pour le moment, je n'ai pas trouvé de raison pour laquelle cela ne fonctionne pas.
Sur quelle version d'Excel es-tu ?
Est-ce que le tableau que l'on veut filtré s'appelle bien "T_Datas" ?
 

patricktoulon

XLDnaute Barbatruc
salut @blancolie
Bonsoir le forum,

j'ai l'impression que cette discussion ne sera pas résolu

hoh!! rage hoh!! désespoir :D :D :D :D :D :D

il faut juste un peu voir les chose différemment que ce que j'e t'ai fait a la base
VB:
Option Explicit
Option Compare Text    'la casse est ignor?e
Private Sub Worksheet_Change(ByVal Target As Range)
     [A1].AutoFilter    'ca peux etre ca tout simplement
  If Target.Row = 1 Then
     Application.ScreenUpdating = False
       Select Case Target.Column
    Case 9, 11, 13
            If [i1] <> "" Then [A1].AutoFilter Field:=3, Criteria1:=[i1].Value
            If [k1] <> "" Then [A1].AutoFilter Field:=4, Criteria1:=[k1].Value
            If [m1] <> "" Then [A1].AutoFilter Field:=5, Criteria1:=[m1].Value
            If [i1] & [m1] & [k1] = "" Then [A1].AutoFilter
        Case Else
            ActiveSheet.AutoFilterMode = False
        End Select
    End If
End Sub
testé et épprouvé ;)
 

blancolie

XLDnaute Impliqué
Merci patricktoulon,

case 9, 11 , 13, cela représente quoi ? les numeros ? les lignes ?

a t on la possibilté si on veut modifier une donnée quand le filtrage est en cour, que cela annule pas le filtrage ? je ne sais pas si c'est réalisable. je m'explique si je veux modifier la période de l''agent A , je veux pas que le filtrage s'annule.

Merci encore
 

patricktoulon

XLDnaute Barbatruc
et bien soit
VB:
Option Explicit

Option Compare Text    'la casse est ignor?e
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.AutoFilterMode = False
    If Target.Column <= 6 Then Exit Sub
    [A1].AutoFilter    'ca peux etre ca tout simplement
    If Target.Row = 1 Then
        Select Case Target.Column
        Case 9, 11, 13
            If [I1] <> "" Then [A1].AutoFilter Field:=3, Criteria1:=[I1].Value
            If [k1] <> "" Then [A1].AutoFilter Field:=4, Criteria1:=[k1].Value
            If [m1] <> "" Then [A1].AutoFilter Field:=5, Criteria1:=[m1].Value
            If [I1] & [m1] & [k1] = "" Then [A1].AutoFilter
        Case Else
            ActiveSheet.AutoFilterMode = False
        End Select
    End If
End Sub
;)
 

Discussions similaires

Statistiques des forums

Discussions
315 134
Messages
2 116 614
Membres
112 811
dernier inscrit
shade1452