Bonjour à tous,
Mon entreprise reçoit chaque mois de nouvelles données et doit en faire un rapport précis. De ce fait, la construction de rapport sur l'excel qu'ils ont construit leur prend chaque mois une journée entière. Je viens d'arriver et ne suis chez eux que pour une courte période, mon objectif est donc de leur créer un tableau excel avec le plus d'étapes possibles automatisées pour leur faire gagner du temps.
En gros, chaque fois, ils téléchargent les données excels brutes du mois précédent. Mon objectif est leur créer un fichier excel où ils n'ont qu'à appuyer sur un bouton et à sélectionner le fichier qu'ils viennent de télécharger pour que leur TCD se fasse automatiquement, avec les bons filtres et que le reste de mes tableaux de rapport se remplissent automatiquement grâce au TCD.
Petite précision supplémentaire, le fichier de données qu'ils téléchargent chaque mois se construit toujours de la même façon et c'est toujours la même feuille qui les intéresse, elle s'appelle "ONICS 6$". Aussi, je sais que normalement on ne créé pas de TCD par VBA, mais mon but ici est de vraiment leur simplifier le travail au maximum pour que cette tâche leur prenne moins de cinq minutes?
Voilà le code que j'ai créé pour leur faire sélectionner le dossier de donnée du mois (sachant que dans le fichier excel où se trouveront les TCD, il y aura déjà une feuille par mois de programmées) :
Ma question est donc, quel code utiliser pour créer le TCD en fonction du chemin_dossier ?
Voici le code que j'ai tenté mais qui ne marche pas :
Mon entreprise reçoit chaque mois de nouvelles données et doit en faire un rapport précis. De ce fait, la construction de rapport sur l'excel qu'ils ont construit leur prend chaque mois une journée entière. Je viens d'arriver et ne suis chez eux que pour une courte période, mon objectif est donc de leur créer un tableau excel avec le plus d'étapes possibles automatisées pour leur faire gagner du temps.
En gros, chaque fois, ils téléchargent les données excels brutes du mois précédent. Mon objectif est leur créer un fichier excel où ils n'ont qu'à appuyer sur un bouton et à sélectionner le fichier qu'ils viennent de télécharger pour que leur TCD se fasse automatiquement, avec les bons filtres et que le reste de mes tableaux de rapport se remplissent automatiquement grâce au TCD.
Petite précision supplémentaire, le fichier de données qu'ils téléchargent chaque mois se construit toujours de la même façon et c'est toujours la même feuille qui les intéresse, elle s'appelle "ONICS 6$". Aussi, je sais que normalement on ne créé pas de TCD par VBA, mais mon but ici est de vraiment leur simplifier le travail au maximum pour que cette tâche leur prenne moins de cinq minutes?
Voilà le code que j'ai créé pour leur faire sélectionner le dossier de donnée du mois (sachant que dans le fichier excel où se trouveront les TCD, il y aura déjà une feuille par mois de programmées) :
VB:
Sub CreerTCD()
Dim boiteDialogue As FileDialog
Dim chemin_dossier As String
Dim chemin_feuille As String
'demander à l'utilisateur de sélectionner un dossier
Set boiteDialogue = Application.FileDialog(msoFileDialogFilePicker)
boiteDialogue.AllowMultiSelect = False
boiteDialogue.Title = "Merci de sélectionner le dossier avec les données du mois"
boiteDialogue.Show
'vérifier qu'un dossier a été sélectionné
If boiteDialogue.SelectedItems(1) = "" Then
MsgBox ("Merci de sélectionner le dossier avec les données du mois")
Else
'trouver le chemin du dossier
chemin_dossier = boiteDialogue.SelectedItems(1)
Cells(1, 3).Select
Cells(1, 3).Value = chemin_dossier
End If
End Sub
Ma question est donc, quel code utiliser pour créer le TCD en fonction du chemin_dossier ?
Voici le code que j'ai tenté mais qui ne marche pas :
Code:
Workbooks("TCD RU01.xlsx").Connections.Add("Données",Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source="chemin_dossier &";Mode=Share Deny Write;Extende" _
, _
"d Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine " _
, _
"Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New" _
, _
" Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Com" _
, _
"pact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Byp" _
, "ass UserInfo Validation=False"), Array("'ONICS 6$'"), 3"
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("202008"), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="0820!R1C4", TableName:= _
"Tableau croisé dynamique2", DefaultVersion:=xlPivotTableVersion14
Cells(1, 4).Select
ActiveWorkbook.ShowPivotTableFieldList = True
ActiveSheet.PivotTables("Tableau croisé dynamique2").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique2").PivotFields("Numéro de la demande"), _
"Nombre de Numéro de la demande", xlCount
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Région concernée")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Ligne concernée")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Motif")
.Orientation = xlColumnField
.Position = 1
End With
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Région concernée").ClearAllFilters
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
"Région concernée").CurrentPage = "Hauts-de-France"