Optimisation d'un code VBA pour EXCEL

Résolu
Bonjour,

Je viens de faire ce code et je n'arrive pas à le rendre plus simple.
Pouvez-vous m'aider ?

Sub UpdateWeek()

Application.ScreenUpdating = False
Windows("VAR_V20100308.xlsm").Activate
nb = Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP1").PivotFields("Semaine").PivotItems.Count

For l = 1 To 3
With Sheets("VAR_FR_LE_TMP").PivotTables("TCD_VAR_FR_LE_TMP" & l)
For i = 2 To nb
With Sheets("VAR_FR_LE_TMP").PivotTables("TCD_VAR_FR_LE_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = False
End With
Next

For i = 2 To semaine(Now - 14)
With Sheets("VAR_FR_LE_TMP").PivotTables("TCD_VAR_FR_LE_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = True
End With
Next
End With
Next
For l = 1 To 3
With Sheets("VAR_FR_G500_TMP").PivotTables("TCD_VAR_FR_G500_TMP" & l)
For i = 2 To nb
With Sheets("VAR_FR_G500_TMP").PivotTables("TCD_VAR_FR_G500_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = False
End With
Next

For i = 2 To semaine(Now - 14)
With Sheets("VAR_FR_G500_TMP").PivotTables("TCD_VAR_FR_G500_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = True
End With
Next
End With
Next
For l = 1 To 3
With Sheets("VAR_FR_PUB_TMP").PivotTables("TCD_VAR_FR_PUB_TMP" & l)
For i = 2 To nb
With Sheets("VAR_FR_PUB_TMP").PivotTables("TCD_VAR_FR_PUB_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = False
End With
Next

For i = 2 To semaine(Now - 14)
With Sheets("VAR_FR_PUB_TMP").PivotTables("TCD_VAR_FR_PUB_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = True
End With
Next
End With
Next
For l = 1 To 3
With Sheets("VAR_FR_SMB_TMP").PivotTables("TCD_VAR_FR_SMB_TMP" & l)
For i = 2 To nb
With Sheets("VAR_FR_SMB_TMP").PivotTables("TCD_VAR_FR_SMB_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = False
End With
Next

For i = 2 To semaine(Now - 14)
With Sheets("VAR_FR_SMB_TMP").PivotTables("TCD_VAR_FR_SMB_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = True
End With
Next
End With
Next
For l = 1 To 5
With Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP" & l)
For i = 2 To nb
With Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = False
End With
Next

For i = 2 To semaine(Now - 14)
With Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = True
End With
Next
End With
Next
For l = 1 To 4
With Sheets("DEC_TMP").PivotTables("TCD_AMOSTMP" & l)
For i = 2 To nb
With Sheets("DEC_TMP").PivotTables("TCD_AMOSTMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = False
End With
Next

For i = 2 To semaine(Now - 14)
With Sheets("DEC_TMP").PivotTables("TCD_AMOSTMP" & l).PivotFields("Semaine")
.PivotItems(i).Visible = True
End With
Next
End With
Next

Application.ScreenUpdating = True

End Sub

Merci pour votre aide
Ludo
Configuration: Windows Vista / Firefox 3.6

4 réponses

  1. Bonsoir,
    Voici une proposition, je ne pense pas avoir fait d'erreur de copié-collé
    Sub UpdateWeek() 
    
    Dim PF_1 As PivotField
    Dim PF_2 As PivotField
    Dim PF_3 As PivotField
    Dim PF_4 As PivotField
    Dim PF_5 As PivotField
    
    Application.ScreenUpdating = False 
    Windows("VAR_V20100308.xlsm").Activate 
    nb = Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP1").PivotFields("Semaine").PivotItems.Count 
    
    Set PF_1 = Sheets("VAR_FR_LE_TMP").PivotTables("TCD_VAR_FR_LE_TMP" & l).PivotFields("Semaine")
    Set PF_2 = Sheets("VAR_FR_G500_TMP").PivotTables("TCD_VAR_FR_G500_TMP" & l).PivotFields("Semaine")
    Set PF_3 = Sheets("VAR_FR_PUB_TMP").PivotTables("TCD_VAR_FR_PUB_TMP" & l).PivotFields("Semaine")
    Set PF_4 = Sheets("VAR_FR_SMB_TMP").PivotTables("TCD_VAR_FR_SMB_TMP" & l).PivotFields("Semaine")
    Set PF_5 = Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP" & l).PivotFields("Semaine")
    Set PF_5 = Sheets("DEC_TMP").PivotTables("TCD_AMOSTMP" & l).PivotFields("Semaine")
    
    For l = 1 To 3 
       For i = 2 To semaine(Now - 14) 
          PF_1.PivotItems(i).Visible = True 
          PF_2.PivotItems(i).Visible = True
          PF_3.PivotItems(i).Visible = True
          PF_4.PivotItems(i).Visible = True
          PF_5.PivotItems(i).Visible = True
       Next
       For i = (semaine(Now - 14)+1) To nb 
          PF_1.PivotItems(i).Visible = False
          PF_2.PivotItems(i).Visible = False
          PF_3.PivotItems(i).Visible = False
          PF_4.PivotItems(i).Visible = False
          PF_5.PivotItems(i).Visible = False
       Next 
    Next 
     
    Application.ScreenUpdating = True 
    
    End Sub

    0
    1. Bonsoir Gord21,
      Merci pour ta réponse.
      Lorsque je lance la macro, j'ai un message d'erreur au niveau des variable PF_x.
      "Impossible de lire la propriété PivotTables de la classe Worksheet"
      Que faire ?
      Merci
      0
    2. @schmoe92Bonsoir,
      J'ai remarqué une erreur dans mon code, je pensais que dans chaque boucles, tu avais l = 1 To 3 mais tes deux dernières boucles vont à 5 et 4 donc c'est un premier point qui ne vas pas mais ça ne devrait pas bloquer le code si le tien fonctionne. Je regarde et je te tiens au courant.
      Je n'avais pas testé le code, ça m'aiderai si tu me mettais le lien vers ton fichier (si c'est possible)

      @+
      0
    3. @schmoe92Bonjour,
      C'est bon j'ai retrouvé mon erreur. Je corrige et je te renvoie. En fait, je n'aurai pas besoin de ton fichier.
      @+
      0
  2. Test
    Je n'arrive pas à ajouter un nouveau message.
    0
    1. Voici la nouvelle version :
      Sub UpdateWeek() 
      
      Application.ScreenUpdating = False 
      Windows("VAR_V20100308.xlsm").Activate 
      nb = Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP1").PivotFields("Semaine").PivotItems.Count 
      
      For l = 1 To 3 
         With Sheets("VAR_FR_LE_TMP").PivotTables("TCD_VAR_FR_LE_TMP" & l).PivotFields("Semaine") 
            For i = 2 To semaine(Now - 14) 
               .PivotItems(i).Visible = True  
            Next
            For i = (semaine(Now - 14)+1) To nb 
               .PivotItems(i).Visible = False
            Next 
         End With
         With Sheets("VAR_FR_G500_TMP").PivotTables("TCD_VAR_FR_G500_TMP" & l).PivotFields("Semaine") 
            For i = 2 To semaine(Now - 14) 
               .PivotItems(i).Visible = True  
            Next
            For i = (semaine(Now - 14)+1) To nb 
               .PivotItems(i).Visible = False
            Next 
         End With
         With Sheets("VAR_FR_PUB_TMP").PivotTables("TCD_VAR_FR_PUB_TMP" & l).PivotFields("Semaine") 
            For i = 2 To semaine(Now - 14) 
               .PivotItems(i).Visible = True  
            Next
            For i = (semaine(Now - 14)+1) To nb 
               .PivotItems(i).Visible = False
            Next 
         End With
         With Sheets("VAR_FR_SMB_TMP").PivotTables("TCD_VAR_FR_SMB_TMP" & l).PivotFields("Semaine") 
            For i = 2 To semaine(Now - 14) 
               .PivotItems(i).Visible = True  
            Next
            For i = (semaine(Now - 14)+1) To nb 
               .PivotItems(i).Visible = False
            Next 
         End With
      Next  
      For l = 1 To 5 
         With Sheets("VAR_FR_TMP").PivotTables("TCD_VAR_FR_TMP" & l).PivotFields("Semaine") 
            For i = 2 To semaine(Now - 14) 
               .PivotItems(i).Visible = True  
            Next
            For i = (semaine(Now - 14)+1) To nb 
               .PivotItems(i).Visible = False
            Next
         End With 
      Next 
      For l = 1 To 4 
         With Sheets("DEC_TMP").PivotTables("TCD_AMOSTMP" & l).PivotFields("Semaine")  
            For i = 2 To semaine(Now - 14) 
               .PivotItems(i).Visible = True  
            Next
            For i = (semaine(Now - 14)+1) To nb 
               .PivotItems(i).Visible = False
            Next 
         End With 
      Next 
      
      Application.ScreenUpdating = True 
      
      End Sub
      0
      1. Cool ca marche :-) Merci beaucoup
        0
        1. Bonjour,
          Par curiosité, est-ce que tu gagnes beaucoup en temps d'exécution de ta macro ?
          @+
          0