2 pièce(s) jointe(s)
Macro de création de TCD utilisable sur plusieurs fichiers
Bonjour à tous,
Alors voilà, je viens vous voir aujourd'hui car j'aurai vraiment besoin d'un programme, cependant il dépasse mon niveau d'apprenti à VBA. Je reçois chaque semaine un Plan de livraison (exemple en pièce jointe) qui contient une liste en général de plusieurs milliers de lignes avec des pièces à livrer. Sur chaque ligne il y a : la référence de la pièce, son nom, une date de livraison et une quantité.
Le soucis c'est que sur plusieurs milliers de lignes, c'est illisible... Donc j'ai recherché comment faire, et j’ai découvert les TCD : un super outil d'ailleurs, cependant le plan de livraison étant différent chaque semaine, il faut recréer le TCD toutes les semaines en rentrant correctement les bons paramètres, un enfer surtout que je ne maîtrise vraiment pas ces TCD !
J'ai pensé donc à un code qui permettrai à la réception de chaque plan de livraison, de créer automatiquement le TCD qui détaillerai sur les deux premières colonnes les références et désignations de chaque pièce, sur les colonnes suivantes les mois de l'année (janvier à décembre 2015), et qui donnerai une quantité totale à livrer pour chaque pièce à chaque mois.
Alors après quelques recherches sur internet, je suis tombé sur un sujet un peu similaire au miens , qui y détaillait un code vraiment pas mal pour mon problème (code ci-dessous). Cependant j'ai vraiment beaucoup de mal à le comprendre, et à essayer de l'adapter à mon soucis... J'ai déjà créé un classeur de macro personnel, je sais comment rajouter une icone pour pouvoir utiliser une macro dans n'importe quel autre fichier, il ne me reste "plus que" le code à adapter...
Si quelqu'un pouvait éventuellement m'aider sur cela, ce serait génial !
Je vous met également en pièce jointe le document vierge qui était donné dans le lien pour l'utilisation du code ci-dessous.
Merci beaucoup,
Victorien
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| Option Explicit
'Option Private Module
Public Sub Traitement_Importation()
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim lastCol As Long, lastRow As Long
Dim lo As ListObject
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim CalcMode As XlCalculation
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set wb = ActiveWorkbook
Set wsData = wb.Worksheets(1)
With wsData
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
Set lo = wsData.ListObjects.Add(xlSrcRange, .Cells(1).Resize(lastRow, lastCol), , xlNo)
With lo
.Name = "tblImportation"
.TableStyle = "TableStyleLight8"
End With
End With
wb.Worksheets.Add After:=Worksheets(Worksheets.Count)
Set wsPT = ActiveSheet
ActiveSheet.Name = "TCD"
With wsPT
Set ptCache = wb.PivotCaches.Create(xlDatabase, lo.Range, 3)
Set pt = ptCache.CreatePivotTable(.Cells(1), "PT_1", , 3)
With pt
.ManualUpdate = True
With .PivotFields("Colonne2")
.Orientation = xlRowField
.Caption = "Mois"
End With
With .PivotFields("Colonne7")
.Orientation = xlDataField
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0"
.Caption = "Colonne7 "
End With
With .PivotFields("Colonne9")
.Orientation = xlDataField
.Position = 2
.Function = xlSum
.NumberFormat = "#,##0"
.Caption = "Colonne9 "
End With
.ManualUpdate = False
.ManualUpdate = True
.PivotFields("Mois").LabelRange.Offset(1, 0).Group Start:=True, End:=True, _
Periods:=Array(False, False, False, False, True, False, False)
.RowAxisLayout xlTabularRow
.TableStyle2 = "PivotStyleMedium2"
.ManualUpdate = False
End With
End With
Application.Calculation = CalcMode
Set pt = Nothing
Set ptCache = Nothing
Set lo = Nothing
Set wsPT = Nothing: Set wsData = Nothing
Set wb = Nothing
End Sub |