1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| Sub testFilterPCG()
PCG_Flt_LastRow = Filter_Advanced_PCG(1)
MsgBox ("Dernière ligne du tableau filtré : " & PCG_Flt_LastRow)
End Sub
Function Filter_Advanced_PCG(Optional ByVal Visible, Optional ByVal RefCpte, Optional ByVal Nature, Optional ByVal xx, Optional ByVal xxx, Optional ByVal xxxx, Optional ByVal xxxxx, Optional ByVal LibPerso) As Integer
'INITIALISATION ET COPIE DU HEADER
'Vide la feuille "RefFilterPCG" et y recrée le Header
With Sheets("RefFilterPCG")
.Rows(2).Delete 'Efface le contenu de la feuille RefFilterPCG
'REPLISSAGE DU TABLEAU EN VUE DUN FILTRAGE AVANCé
'les critères inscrits dans une même ligne auront une condition ET
'les critères inscrits dans deux lignes différentes auront une condition OU
'on utilise 2 lignes afin d'opérer une opération "ou" sur les colonnes d'année d'exercice I et II
'On rempli le filtre avec les données récupérées par la fonction après avoir testé si cette donnée a bien été passée
If Not IsMissing(Visible) Then .Cells(2, 1).Value = "'=" & Visible 'Inscrit la valeur de visible dans le taleau de référence
If Not IsMissing(RefCpte) Then .Cells(2, 2).Value = "'=" & RefCpte 'Inscrit la valeur de RefCpte dans le taleau de référence
If Not IsMissing(Nature) Then .Cells(2, 3).Value = "'=" & Nature 'Inscrit la valeur de Nature dans le taleau de référence
If Not IsMissing(xx) Then .Cells(2, 4).Value = "'=" & xx 'Inscrit la valeur de xx dans le taleau de référence
If Not IsMissing(xxx) Then .Cells(2, 5).Value = "'=" & xxx 'Inscrit la valeur de xxx dans le taleau de référence
If Not IsMissing(xxxx) Then .Cells(2, 6).Value = "'=" & xxxx 'Inscrit la valeur de xxxx dans le taleau de référence
If Not IsMissing(xxxxx) Then .Cells(2, 7).Value = "'=" & xxxxx 'Inscrit la valeur de xxxxx dans le taleau de référence
If Not IsMissing(LibPerso) Then .Cells(2, 8).Value = "'=" & LibPerso 'Inscrit la valeur de LibPerso dans le taleau de référence
Ref_LastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row 'calcule la dernière ligne de RefFilterPCG
Ref_LastCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column 'calcule la dernière colonne de RefFilterPCG
End With
'Application du Filtre Avancé et export vers une la feuille PCG_Filtered
'Efface le contenu de la feuille PCG_Filtered
Worksheets("PCG_Filtered").Cells.Delete
'Applique le filtrage avancé et exporte vers la page PCG_Filtered
Worksheets("PCG_Filtered").Select
Worksheets("PCG").Range("BDD_PCG[#All]").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("RefFilterPCG").Range("A1:H2"), _
CopyToRange:=Worksheets("PCG_Filtered").Range("A1"), _
Unique:=False
'Création d'un tableau à partir des données filtrées
With Sheets("PCG_Filtered")
PCG_Flt_LastCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column 'calcule la dernière colonne
PCG_Flt_LastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row 'calcule la dernière ligne
.ListObjects.Add(xlSrcRange, .Range(.Cells(1, 1), .Cells(PCG_Flt_LastRow, PCG_Flt_LastCol)), , xlYes).Name = "t_PCG_Filtered" 'cré un tableau avec les données exportées
End With
'Rétablir les filtres dans le tableau PCG
If Worksheets("PCG").AutoFilter Is Nothing Then
Sheets("PCG").Range("BDD_PCG").AutoFilter
End If
'retourne la valeur PCG_Flt_LastRow (numéro de la dernière ligne du tableau filtré)
Filter_Advanced_PCG = PCG_Flt_LastRow
End Function |
Partager