Option Explicit
Sub Macro1()
Const MesFeuilles = "BFC;BPL;CENTRE;EST;IDF NORD;IDF SUD;MONTPELLIER;M-PYRENEES;NORD;NORMANDIE;PACA;SDO;SUD EST"
Dim xfeuil, t0 As Double
'Heure départ
t0 = Timer
Application.ScreenUpdating = False
' passage en calcul sur ordre
Application.Calculation = xlCalculationManual
'si error, on saute à FIN: pour remette le calcul en automatique
On Error GoTo FIN
' Rafraichir tableau croisé dynamique
Sheets("BP par DR et par CF").PivotTables("Tableau croisé dynamique4").PivotCache.Refresh
Sheets("TCD BP par CF").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
Sheets("BP par DR et par Site").PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
' on recalcule le classeur
Calculate
' Décocher vide
Sheets("BP par CF").Range("$A$8:$P$254").AutoFilter Field:=2
For Each xfeuil In Split(MesFeuilles, ";")
Sheets(xfeuil).Range("$A$8:$P$44").AutoFilter Field:=2
Sheets(xfeuil & ".").Range("$A$8:$P$44").AutoFilter Field:=2
Next xfeuil
' Filtre du plus petit au plus grand au % de réalisation
ActiveWorkbook.Worksheets("BP par CF").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BP par CF").AutoFilter.Sort.SortFields.Add Key:= _
Range("M8:M254"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BP par CF").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Filtre du plus petit au plus grand au % de réalisation
For Each xfeuil In Split(MesFeuilles, ";")
With Sheets(xfeuil)
.AutoFilter.Sort.SortFields.Clear
.AutoFilter.Sort.SortFields.Add Key:=Range("M8:M44"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
With Sheets(xfeuil & ".")
.AutoFilter.Sort.SortFields.Clear
.AutoFilter.Sort.SortFields.Add Key:=Range("M8:M500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
Next xfeuil
' Décocher vide
Sheets("BP par CF").Select
ActiveSheet.Range("$A$8:$P$254").AutoFilter Field:=2, Criteria1:="<>"
' Décocher vide
For Each xfeuil In Split(MesFeuilles, ";")
Sheets(xfeuil).Range("$A$8:$P$44").AutoFilter Field:=2, Criteria1:="<>"
Sheets(xfeuil & ".").Range("$A$8:$P$500").AutoFilter Field:=2, Criteria1:="<>"
Next xfeuil
FIN:
If Err.Number > 0 Then MsgBox "Erreur n° " & Err.Number & vbLf & Err.Description
Application.Calculation = xlCalculationAutomatic
Application.Goto Sheets("Validation").Range("a1"), True
MsgBox Format(Timer - t0, "0.0 \ sec.")
End Sub