XL 2013 vba - copier-coller des valeurs contenues dans TCD

douguy

XLDnaute Junior
Bonjour à tous

je suis novice de chez novice en VBA et ne parvient pas à créer la macro qui permettrait de copier les valeur contenues dans le TCD dans une autre feuille
les valeurs du TCD changent tous les jours et je voudrais que la BDD importe les valeurs du TCD à la date correspondant à la date du jour

pour l'instant j'en suis à ça et après....
Sub test()
Dim datedujour As Date
Dim premierjour As Date
Dim dernierjour As Date

datedujour = Date
premierjour = DateSerial(Year(Date), Month(Date), 1)
dernierjour = DateSerial(Year(Date), Month(Date) + 12, 1) - 1

'copier les valeurs contenues dans colonne B entre "premierjour" et "dernierjour"
'coller dans BDD MEC groupe en partant de L"premierjour" C "datedujour"

'copier les valeurs contenues dans colonne C entre "premierjour" et "dernierjour"
'coller dans BDD MEC indiv en partant de L"premierjour" C"datedujour"

End Sub

Je pense que c'est basique mais malheureusement je suis nul

un grand merci à ceux qui voudront bien jeter un oeil
 

Pièces jointes

  • bdd.xlsm
    1.1 MB · Affichages: 63

chris

XLDnaute Barbatruc
Bonjour

Code:
    With [Sh_TCD].PivotTables("Tableau croisé dynamique5")
        .PivotFields("DATE").ClearLabelFilters
        .PivotFields("DATE").PivotFilters.Add Type:=xlDateThisMonth
       
        premierjour = DateSerial(Year(Date), Month(Date), 1)
        Haut = premierjour - DateSerial(Year(Date), 1, 1) + 2
        Bas = Date - DateSerial(Year(Date), 1, 1) + 2
        Nombre = .DataBodyRange.Rows.Count - 1
        [Sheet3].Range([Sheet3].Cells(Haut, Bas), [Sheet3].Cells(Haut + Nombre - 1, Bas)).Value = .DataBodyRange.Columns(1).Resize(Nombre, 1).Cells.Value
        [Sh_MEC].Range([Sh_MEC].Cells(Haut, Bas), [Sh_MEC].Cells(Haut + Nombre - 1, Bas)).Value = .DataBodyRange.Columns(1).Resize(Nombre, 1).Cells.Value
       
        .PivotFields("DATE").ClearLabelFilters
    End With
 

douguy

XLDnaute Junior
bonjour Chris et vraiment merci beaucoup

C'est presque ça.

l'export doit aller jusqu'au :
dernierjour = DateSerial(Year(Date), Month(Date) + 12, 1) - 1

soit 12 mois coulissant du coup je pense qu'il faut changer :
Bas = Date - DateSerial(Year(Date), 1, 1) + 2 mais je ne sais pas où :(

il faut aussi exporter la colonne C vers l'onglet BDD indiv
du coup je suppose qu'il faut dupliquer cette macro en changeant

[Sheet3].Range([Sheet3].Cells(Haut, Bas), [Sheet3].Cells(Haut + Nombre - 1, Bas)).Value = .DataBodyRange.Columns(1).Resize(Nombre, 1).Cells.Value

en modifiant columns(1) par columns(2) et changer la destination

mais je n'ose pas trop toucher le code

encore merci
 

chris

XLDnaute Barbatruc
Re

La macro compète déjà les 2 tableaux mais j'ai oublié de décaler la colonne et cela copiait 2 fois la même

Code:
premierjour = DateSerial(Year(Date), Month(Date), 1)
dernierjour = DateSerial(Year(Date), Month(Date) + 12, 1) - 1

  With [Sh_TCD].PivotTables("Tableau croisé dynamique5")
  .PivotFields("DATE").ClearLabelFilters
  .PivotFields("DATE").PivotFilters.Add Type:=xlDateBetween, Value1:="" & premierjour, Value2:="" & dernierjour
  Haut = premierjour - DateSerial(Year(Date), 1, 1) + 2
  Bas = Date - DateSerial(Year(Date), 1, 1) + 2
  Nombre = .DataBodyRange.Rows.Count - 1
  [Sheet3].Range([Sheet3].Cells(Haut, Bas), [Sheet3].Cells(Haut + Nombre - 1, Bas)).Value = .DataBodyRange.Columns(1).Resize(Nombre, 1).Cells.Value
  [Sh_MEC].Range([Sh_MEC].Cells(Haut, Bas), [Sh_MEC].Cells(Haut + Nombre - 1, Bas)).Value = .DataBodyRange.Columns(2).Resize(Nombre, 1).Cells.Value
   
  .PivotFields("DATE").ClearLabelFilters
  End With

Comme je n'ai pas la source du TCD, je ne peux vérifier : cela s'arrête au 30/12/2017
 

douguy

XLDnaute Junior
Rebonjour

j'ai une question supplémentaire
je souhaite adapter ce code sur d'autres TCD
la déclaration de la source d'export est sur la ligne suivante :

With [Sh_TCD].PivotTables("Tableau croisé dynamique5")

comment dois-je l'adapter pour d'autre TCD d'un même classeur ?

Par exemple l'onglet s'appelle PivotGROUP, l'autre PivotDATA etc

en fait je ne comprend pas comment le code a compris où il devait chercher les données... :(

merci pour vos réponses
 

Discussions similaires