Génération de fichiers a partir d'un TCD
Bonjour,
Je fais appel a votre savoir aujourd'hui afin de me faire facilement économiser 10 heure de travail par mois...
Je dois faire des comptes rendu mensuels de prestations à des clients.
Mes données brutes sont extraites d'une base de données avec un seul fichier xlsx pour plus de 150 clients et environ 1000 lignes par mois ( je précise car c'est ce qui rend fastidieuse cette tache).
Je traite les données brutes via un TCD (comme indiqué en PJ).
Ma volonté est :
Créer à partir du TCD un fichier par société (dans mon exemple 3 fichiers ( société 1; société 2 & société 3).
Le fichier devra porter le nom de la société comporter 2 onglets. Le premier le tcd de la société concerné, l'autres les données brutes.
L'idée étant d'envoyer par mail à chaque société son compte rendu mensuel sans voir les données des autres sociétés.
Je ne sais pas si cela est possible, mais je demande quand même...
Merci par avance
Bonne journée
Bonjour,
regarde si cela te conviens :
https://www.cjoint.com/doc/17_03/GCdn3pojtmI_Exemple-1.xlsm
Je t'ai ajouté un bouton avec une macros créant un fichier par Société et l'enregistrant à l'endroit où est enregistré le fichier "mère".
Tout fonctionne chez moi, confirme moi si ça te convient et si ça fonctionne
Bonne continuation,
RemBabar
Bonjour,
Une proposition à étudier.
Cdlt.
Option Explicit
Private Sub cmdCreateBooksByCustomer_Click()
Dim sPath As String, sFilename As String
Const sFileExt As String = ".xlsx"
Dim wb As Workbook
Dim wsPT As Worksheet
Dim pt As PivotTable, pt2 As PivotTable
Dim pf As PivotField, pf2 As PivotField
Dim pi As PivotItem
Dim rCell As Range
Dim lo As ListObject
Application.ScreenUpdating = False
Set wb = ThisWorkbook
sPath = wb.Path & Application.PathSeparator
Set wsPT = wb.Worksheets("TCD Collecte")
Set pt = wsPT.PivotTables(1)
Set pf = pt.PivotFields("Prestation")
Set pf2 = pt.PivotFields("Code société")
With pt
With .PivotCache
.Refresh
.MissingItemsLimit = xlMissingItemsNone
End With
.ClearAllFilters
End With
pf.CurrentPage = "Collecte"
For Each pi In pf2.PivotItems
pf2.CurrentPage = pi.Name
sFilename = pi.Name
pt.TableRange2.Copy
Workbooks.Add.Worksheets(1).Paste
Application.CutCopyMode = False
With ActiveWorkbook
With Worksheets(1)
.Name = pi.Name
Set pt2 = .PivotTables(1)
Set rCell = .Cells.SpecialCells(11)
rCell.ShowDetail = True
End With
With ActiveSheet
.Name = "Données"
Set lo = .ListObjects(1)
With lo
.TableStyle = "TableStyleLight1"
.ShowTableStyleRowStripes = False
End With
End With
pt2.ChangePivotCache ActiveWorkbook.PivotCaches.Create(xlDatabase, lo.Range)
.SaveAs Filename:=sPath & sFilename & sFileExt, FileFormat:=51
.Close savechanges:=False
End With
Next pi
End Sub
Bonjour,
Merci pour vos réponses, et je m'excuse pour cette réponse tardive...
Pour le premier fichier celui de RemBabar , j'ai un soucis qui semblerai être à cet endroit du code :
Wb.Sheets("TCD Collecte").PivotTables("Tableau croisé dynamique2").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"BDD!A:G", Version:=6)
Le message est : Erreur d'exécution 5 :
Argument ou appel de procédure incorrect
J'avoue être assez novice et ne pas comprendre pourquoi le plantage se situe a cet endroit...
Pour le fichier de Jean-Eric, cela fonctionne très bien.
La génération des fichiers se fait correctement. J'ai cependant oublié de demander si il était possible de copier les toutes les données concernant les société lors de la création des classeurs et non pas seulement les données de "Collecte".
Encore merci pour votre travail vous allez me faire gagné énormément de temps
Merci Beaucoup
En modifiant légèrement la 1er Version, j'ai réussi à obtenir parfaitement ce que je voulais.
Encore merci pour votre aide
Bonjour,
Pense à clore le sujet.
Cdlt.