Garder une variable en memoire

sabw -  
 sabw -
Bonjour,

Voici la macro que j'ai commencé en enregistrement, j'ai mis une variable correspondant aux semaines de l'année et chaque lundi je mets à jour mon fichier avec la semaine précédente.
Je voudrais savoir quoi ajouter à l a macro pour que la variable reste en mémoire à la fermeture du fichier. J'ai vu quelques solution sur le forum mais c'est compliqué à appliquer.
A la fin je renome la feuille avec la semaine travaillé.

Static a As Integer

Sheets("TCD 2017 imp W5").Select
    For a = 1 To 52

ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Week"). _
        CurrentPage = "(Tous)"
    With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Week")
        .PivotItems(a).Visible = False
        .PivotItems(a + 1).Visible = True
    End With
    Sheets("TCD 2017 imp W" & a - 1).Select
    Sheets("TCD 2017 imp W" & a - 1).Name = "TCD 2017 imp W" & a

End Sub

7 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    pour que la variable reste en mémoire à la fermeture du fichier

    Le plus simple .. c'est de stocker la variable en question dans une cellule d'un onglet de ton fichier excel ....

    0
  2. sabw
     
    Bjr

    J'ai essayé mais ça marche pas.
    La variable s'incrémente bien mais n'est pas récupérée par le champs Week
    du TCD et ne renomme pas la feuille non plus.
    Voici la macro
    Sub Macro2()
    
    Dim mavar As Long
    Sheets("TCD 2017 imp W4").Select
    mavar = Range("P1").Value
        MsgBox mavar
        ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Week"). _
            CurrentPage = mavar
        With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Week")
            .PivotItems(mavar).Visible = False
            .PivotItems(mavar + 1).Visible = True
        End With
        Range("P1").Value = mavar + 1
        Sheets("TCD 2017 imp W" & mavar - 1).Select
        Sheets("TCD 2017 imp W" & mavar - 1).Name = "TCD 2017 imp W" & mavar
    End Sub
    

    EDIT : Ajout des balises de code

    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Bonjour,
      Es-tu sûr que ton TCD se nomme Tableau croisé dynamique5 sur la page pointée par "mavar" ?
      0
  3. sabw
     
    Oui je l'ai fait en enregistrement macro automatique.
    0
  4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Ton champ "Week" est bien un champ "page" ?
    Si non... tu ne peux pas utiliser currentPage.

    Essaye plutôt un truc du genre : (codé sans tester...)
    Dim mavar As Long
    Dim oSh as WorkSheet
    Dim pvtTable  as PivotTable
    
    Set oSh = Sheets("TCD 2017 imp W4")
    
    mavar = oSh.Range("P1").Value
    
    Set pvtTable = oSh.PivotTable("Tableau croisé dynamique5") 
    
    With pvtTable.PivotFields("Week") 
        .ClearAllFilters 
        .PivotFilters.Add Type:=xlCaptionEquals, Value1:=mavar  
    End With 
    

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sabw
     
    Bonjour,

    J'ai testé mais ça marche pas j'ai "Menbre de methode ou de données introuvable " au niveau du Set pvtTable = oSh.PivotTable("Import 1 week")
    Au passage j'ai modifié le nom du TCD pour que ce soit plus claire mais tout
    correspond.
    0
  7. sabw
     
    Rebonjour

    J'ai réussi à restifier une ligne mais maintenant j'ai 'erreur définis par l'application ou par l'objet à la ligne : .PivotFilters.Add Type:=xlCaptionEquals, Value1:=mavar

    Je ne sais pas ce que ça signifie.

    quelqu'un peut il m'aider svp?
    0
  8. sabw
     
    ça y est j'ai trouvé la solution.
    Pour ceux qui pourraient être intéressés voici la macro peut être simpliste mais qui fonctionne.
    Sub Macro2()
    Dim mavar As Long

    mavar = Range("p1").Value

    'ActiveSheet.PivotTables("Import 1 week").PivotFields("Week").CurrentPage = _
    "(Tous)"
    With ActiveSheet.PivotTables("Import 1 week").PivotFields("Week")
    .PivotItems(CStr(mavar)).Visible = False
    .PivotItems(CStr(mavar + 1)).Visible = True
    End With

    Worksheets("TCD 2017 imp W" & mavar).Name = ("TCD 2017 imp W" & mavar + 1)
    Range("p1").Value = mavar + 1
    End Sub
    0