VBA - Optimisation de macro
Bonjour à toutes et tous,
Je viens ici car j'ai créé une macro récemment mais je trouve qu'elle prend beaucoup de temps pour se lancer.
Cette macro permet une mise à jour de TBC/graphiques TBC à partir d'un numéro de semaine et une année.
Ci-dessous je met le code VBA:
Sub Macro3()
'
' Macro3 Macro
'
ActiveWorkbook.RefreshAll
Sheets("Graphiques TRS").Select
'
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Tyden").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Tyden").CurrentPage = ActiveSheet.Range("Q4").Value
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Rok").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Rok").CurrentPage = ActiveSheet.Range("Q3").Value
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Rok").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Rok").CurrentPage = ActiveSheet.Range("Q3").Value
ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Tyden").ClearAllFilters
With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Tyden")
For i = 1 To .PivotItems.Count - 1
.PivotItems(.PivotItems(i).Name).Visible = False
Next i
End With
Dim donnee1
Dim donnee2
Dim donnee3
Dim donnee4
Dim donnee5
donnee1 = Range("Q4").Value
donnee2 = Range("Q5").Value
donnee3 = Range("Q6").Value
donnee4 = Range("Q7").Value
With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Tyden")
.PivotItems(donnee1).Visible = True
.PivotItems(donnee2).Visible = True
.PivotItems(donnee3).Visible = True
.PivotItems(donnee4).Visible = True
End With
Sheets("Tendence TRS").Select
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Rok").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Rok").CurrentPage = Worksheets("Graphiques TRS").Range("Q3").Value
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Tyden").ClearAllFilters
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Tyden")
For i = 1 To .PivotItems.Count - 1
.PivotItems(.PivotItems(i).Name).Visible = False
Next i
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Tyden")
For i = 1 To donnee1
.PivotItems(.PivotItems(i).Name).Visible = True
Next i
End With
Sheets("Tendence NC").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Année").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Année").CurrentPage = Worksheets("Graphiques TRS").Range("Q3").Value
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Semaine").ClearAllFilters
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Semaine")
For i = 1 To .PivotItems.Count - 1
.PivotItems(.PivotItems(i).Name).Visible = False
Next i
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Semaine")
For i = 1 To donnee1
.PivotItems(.PivotItems(i).Name).Visible = True
Next i
End With
Sheets("Vyrobená množství").Select
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Rok").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Rok").CurrentPage = Worksheets("Graphiques TRS").Range("Q3").Value
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Tyden").ClearAllFilters
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Tyden")
For i = 1 To .PivotItems.Count - 1
.PivotItems(.PivotItems(i).Name).Visible = False
Next i
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Tyden")
For i = 1 To donnee1
.PivotItems(.PivotItems(i).Name).Visible = True
Next i
End With
Sheets("Poruchy").Select
ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Année").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Année").CurrentPage = Worksheets("Graphiques TRS").Range("Q3").Value
ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Semaine").ClearAllFilters
With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Semaine")
For i = 1 To .PivotItems.Count - 1
.PivotItems(.PivotItems(i).Name).Visible = False
Next i
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Semaine")
For i = 1 To donnee1
.PivotItems(.PivotItems(i).Name).Visible = True
Next i
End With
Sheets("Graphiques TRS").Select
End Sub
Bonjour,
Avant même d'analyser les instructions de ta macro ...
Tu devrais faire un test en insérant en tout début de macro :
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
et en insérant en toute fin de macro :
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Est-ce-que tu notes une amélioration ?
Bonjour James007,
Merci pour cette réponse rapide.
Oui je note une amélioration (passage de 1 minutes 30 à 45 secondes).
Peux-on faire mieux ou suis-je au maximum?
Merci.
Damien
Re,
Une première amélioration de 50 % ... pas si mal ...
Ensuite, il faut plonger dans le code à proprement parler ... et comprendre toutes tes instructions ...
Dès que j'ai un petit moment ... je vais y jeter un oeil ...