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 ...

Rechercher des sujets similaires à "vba optimisation macro"