Comment créer un filtre qui va garder des valeurs spécifiées dans un Array
Bonjour,
J'aurais aujourd'hui besoin d'aide pour créer avec VBA un filtre qui va prendre les valeurs des cellules qui sont notées dans une feuille nommée "Produits en Promo"
Je souhaite repartir de la vue de mon tableau lorsqu'il est uniquement filtré selon le critère CF ="cf", et à ce moment là, appliquer un filtre sur les données de la colonne Base (colonne C) et ne conserver que les valeurs qui se trouvent dans les cellules de la feuille mentionnée avant ("Produits en Promo").
Ainsi je n'aurai dans mon exemple plus que dans base les valeurs c d et f. Dans mon cas réel ce sont des String.
(Pour obtenir cette vue filtrée :
1. sélectionner Cf=cf
2- sélectionner dans Séries= IMPACT PROMO
3- Sélectionner dans le filtre de la colonne L (W11/20223 Total) tout sauf vide
J'ai un Sub copier_contenu_vue_filtrée qui me copie ces valeurs dans la feuille "Produits en Promo"
Sub copier_contenu_vue_filtrée()
' sélectionner la vue qu'on obtient une fois avoir filtré
' copier ces données dans la feuille Produits en Promo
Dim sortie As Worksheet
Set sortie = Worksheets("Produits en Promo")
Worksheets("Futurmaster").Range("$C$13:$C$1270").SpecialCells(xlCellTypeVisible).Copy sortie.Range("A1")
End SubJ'ai écrit ceci :
Sub FiltrerParCritèresMultiple_bis()
Dim ws As Worksheet
Dim critères() As Variant
Dim dernier_rg As Long
Dim Cellule As Range
Dim j As Long
dernier_rg = Worksheets("Produits en promo").Cells(Rows.Count, 1).End(xlUp).Row
MsgBox (dernier_rg)
ReDim critères(1 To dernier_rg, 1 To 1)
' Définir la feuille de travail
Set ws = Worksheets("FuturMaster")
j = 1
For Each Cellule In Worksheets("Produits en promo").Range("A1:A" & dernier_rg)
critères(j, 1) = Cellule.Value
j = j + 1
Next Cellule
Dim i As Long
For i = LBound(critères) To UBound(critères)
Debug.Print critères(i, 1)
Next i
' Appliquer le filtre
Worksheets("FuturMaster").Range("$A$13:$AW$1270").AutoFilter Field:=3, Criteria1:=critères, Operator:=xlFilterValues
End SubOr faire tourner ce module ne filtre que par une seule des valeurs et non les 3 comme je le voudrais.
Voici la vue que je souhaiterais avoir
Je débute en VBA donc j'apprécierais énormément de l'aide..
Merci à tous :)
Floflo
PS : merci de ne pas enlever les lignes blanches en haut de ma feuilles excel, elles contiennent des informations que j'ai du enlever pour confidentialité
Hello,
comme ceci ?
Worksheets("FuturMaster").Range("$A$13:$AW$1270").AutoFilter Field:=3, Criteria1:=Application.Transpose(critères), Operator:=xlFilterValuesBonjour Rag02700,
Malheuresement quand je remplace ma ligne
Worksheets("FuturMaster").Range("$A$13:$AW$1270").AutoFilter Field:=3, Criteria1:=critères, Operator:=xlFilterValuespar la tienne, j'obtiens encore le même résultat..
J'en viens à me demander s'il est vraiment possible de filtrer en VBA avec plus que 2 critères..
bonjour FloFlo44, Rag02700,
j'ai mis tout dans un tableau structuré
Sub FloFlo()
Dim aA, aFilter, i
aA = Evaluate("UNIQUE(FILTER(Tabel1[Base],(Tabel1[CF]=""cf"")*(Tabel1[Séries]=""impact promo"")))") 'array avec les valeurs uniques après filtrage
If VarType(aA) = vbError Then
MsgBox "erreur, aucun ""base"" après filtrage", vbCritical
Else
ReDim aFilter(UBound(aA) - 1) 'dimensioner array 1D avec base 0 et autant d'éléments
For i = 1 To UBound(aA)
If i = 1 And UBound(aA) = 1 Then 'seulement 1 élément
aFilter(0) = CStr(aA(i))
Else
aFilter(i - 1) = CStr(aA(i, 1)) 'plusieurs éléments
End If
Next
With Range("Tabel1").ListObject.Range 'ce tableau
.AutoFilter 'enlever filtre précédent
.AutoFilter 3, aFilter, xlFilterValues 'appliquer filter sur "Base"
End With
End If
End Sub
Bonjour BsAlv,
Merci infiniment, c'est exactement ce que je cherchais !
Bien cordialement,
FloFlo