Sub Filtre_Designation()
Dim I As Integer
Dim Crit() As String
Dim Elem
On Error Resume Next
N = [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Count
If Err = 0 Then
ReDim Crit(1 To N)
For Each Elem In [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Cells
I = I + 1: Crit(I) = CStr(Elem)
Next
[Designation].ListObject.Range.AutoFilter Field:=1, Criteria1:=Crit, Operator:=xlFilterValues
[Designation].Parent.Activate
End If
End Sub
je vous ai mis le tableau pour mieux expliquer.Bonjour,
Je suppose que vous voulez dire :
N' afficher que certaines valeurs dans une colonne .
Vous aviez déjà un exemple dans la sub Filtre_Designation du dernier classeur
Cinématique :
- on charge dans une variable tableau toutes les valeurs qu'on veut afficher
- on applique un filtre à la colonne du tableau concernée en lui indiquant le variable tableau :
Pour exemple, classeur joint
La sub est capable de trier des tableaux structurés ou des ranges.
Attention cependant, un seul filtre est autorisé par feuille pour des ranges .
Je pense que vous voulez parler de la colonne E et non D,je vous ai mis le tableau pour mieux expliquer.
mais merci pour votre test
Sub Filtrer_E()
Filtre_Colonne [Designation], "Consommation", "A+*"
End Sub
Sub UnFiltrer_E()
Filtre_Colonne [Designation], "Consommation"
End Sub
Sub Filtre_Colonne(Target As Range, Colonne, ParamArray Criteres() As Variant)
Dim List_Criteres As Variant
Dim ID As Variant
If Target.ListObject Is Nothing Then
If Not Target.Parent.AutoFilter Is Nothing Then Target.AutoFilter
Set ID = Target.Rows(1).Find(Colonne)
Else
If Target.ListObject.AutoFilter.FilterMode Then Target.ListObject.AutoFilter.ShowAllData
Set ID = Target.Rows(0).Find(Colonne)
End If
If Not ID Is Nothing Then ID = ID.Column - Target.Column + 1 Else ID = False
If ID And UBound(Criteres) >= 0 Then
List_Criteres = Criteres
Target.AutoFilter Field:=ID, Operator:=xlFilterValues, Criteria1:=List_Criteres
End If
Set ID = Nothing
End Sub
merci pour tout ces explications.Je pense que vous voulez parler de la colonne E et non D,
On ne peut pas le faire par formule .
On ne peut pas faire de sauf avec plus de 2 valeurs à exclure
Pourquoi ne pas se servir manuellement des filtres natifs d'excel :
Regarde la pièce jointe 1120675
ou
Regarde la pièce jointe 1120676
Si toutefois vous voulez une solution par code :
Regarde la pièce jointe 1120679
VB:Sub Filtrer_E() Filtre_Colonne [Designation], "Consommation", "A+*" End Sub Sub UnFiltrer_E() Filtre_Colonne [Designation], "Consommation" End Sub Sub Filtre_Colonne(Target As Range, Colonne, ParamArray Criteres() As Variant) Dim List_Criteres As Variant Dim ID As Variant If Target.ListObject Is Nothing Then If Not Target.Parent.AutoFilter Is Nothing Then Target.AutoFilter Set ID = Target.Rows(1).Find(Colonne) Else If Target.ListObject.AutoFilter.FilterMode Then Target.ListObject.AutoFilter.ShowAllData Set ID = Target.Rows(0).Find(Colonne) End If If Not ID Is Nothing Then ID = ID.Column - Target.Column + 1 Else ID = False If ID And UBound(Criteres) >= 0 Then List_Criteres = Criteres Target.AutoFilter Field:=ID, Operator:=xlFilterValues, Criteria1:=List_Criteres End If Set ID = Nothing End Sub
Sub Filtre_Designation()
Dim I As Integer
Dim Crit() As String
Dim Elem
On Error Resume Next
N = [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Count
If Err = 0 Then
ReDim Crit(1 To N)
For Each Elem In [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Cells
I = I + 1: Crit(I) = CStr(Elem)
Next
[Designation].ListObject.Range.AutoFilter Field:=1, Criteria1:=Crit, Operator:=xlFilterValues
[Designation].Parent.Activate
End If
End Sub