Demha_2022
XLDnaute Nouveau
Bonjour,
Je suis débutant en VBA , je crée manuellement un TCD dans excel en utilisant deux fichiers, je récupère les données dans le premier fichier, pour les déposer dans le deuxième fichier, afin de créer le TCD et mettre à jour le TCD existant quand ya de nouvelles données importées dans ce deuxième fichier. Ce process manuel me prends du temps énorme, j'ai donc décidé d'automatiser la création du TCD ainsi que la mise à jour du TCD existant quand ya de nouvelles données qui sont importées à partir de la macro VBA, .
Que fait ma macro dans le fichier ci-joint:
Ma macro active le premier fichier qui contient le TCD , elle sélectionne la plage de données qui sert de créer le TCD, ensuite supprime le contenu.
Puis elle va dans le répertoire qui contient le deuxième fichier , pour sélectionner le fichier et l'ouvrir , après ouverture , elle copie les données et les colles dans le premier fichier , pour créer le TCD et faire des filtrages sur différents champs.
Mon problème: 1- J'arrive pas à filtrer le champ Spécificité par vide en utilisant cette macro , pourtant les méthodes utilisées me semblent correctes
2- J'arrive pas à déposer le champ service au niveau de la zone colonne en utilisant cette macro , et si je le fais manuellement dans excel , ça m'affiche cette erreur : un rapport de tableau croisé dynamique ne peut pas chevaucher un tableau ou un mappage XML
3- Mon troisième problème: comment est ce que je dois procéder pour mettre à jour le TCD à chaque fois que j'importe de nouvelles données dans le premier fichier?
Svp quelqu'un pourrait m'aider à résoudre ces problèmes ?
svp suis débutant et je dois réaliser cette automatisation urgemment en entreprise
En vous remerciant d'avance veuillez trouver ci-joint les deux fichiers : le premier (Analyse des résultats Perfs) contient la macro du TCD dans l'onglet : Feuil5
et le deuxième fichier(Perf dans DHW") est celui que j'utilise pour copier les données et les coler dans le premier fichier (onglet Feuil5).
J'arrive pas à vous joindre les deux fichier, voici tout de même ma macro :
Je suis débutant en VBA , je crée manuellement un TCD dans excel en utilisant deux fichiers, je récupère les données dans le premier fichier, pour les déposer dans le deuxième fichier, afin de créer le TCD et mettre à jour le TCD existant quand ya de nouvelles données importées dans ce deuxième fichier. Ce process manuel me prends du temps énorme, j'ai donc décidé d'automatiser la création du TCD ainsi que la mise à jour du TCD existant quand ya de nouvelles données qui sont importées à partir de la macro VBA, .
Que fait ma macro dans le fichier ci-joint:
Ma macro active le premier fichier qui contient le TCD , elle sélectionne la plage de données qui sert de créer le TCD, ensuite supprime le contenu.
Puis elle va dans le répertoire qui contient le deuxième fichier , pour sélectionner le fichier et l'ouvrir , après ouverture , elle copie les données et les colles dans le premier fichier , pour créer le TCD et faire des filtrages sur différents champs.
Mon problème: 1- J'arrive pas à filtrer le champ Spécificité par vide en utilisant cette macro , pourtant les méthodes utilisées me semblent correctes
Code:
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Type Spécificité").ClearAllFilters
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Type Spécificité").CurrentPage = "(blank)"
2- J'arrive pas à déposer le champ service au niveau de la zone colonne en utilisant cette macro , et si je le fais manuellement dans excel , ça m'affiche cette erreur : un rapport de tableau croisé dynamique ne peut pas chevaucher un tableau ou un mappage XML
VB:
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Service" _
)
.Orientation = xlColumnField
.Position = 1
End With
Svp quelqu'un pourrait m'aider à résoudre ces problèmes ?
svp suis débutant et je dois réaliser cette automatisation urgemment en entreprise
En vous remerciant d'avance veuillez trouver ci-joint les deux fichiers : le premier (Analyse des résultats Perfs) contient la macro du TCD dans l'onglet : Feuil5
et le deuxième fichier(Perf dans DHW") est celui que j'utilise pour copier les données et les coler dans le premier fichier (onglet Feuil5).
J'arrive pas à vous joindre les deux fichier, voici tout de même ma macro :
VB:
Sub mise_a_jour_TCD()
'
' Automatisation de la mise à jour du fichier Analyse résultats PERF
' ThisWorkbook.Activate
Dim MyApplication As Object
Dim premier_fichier As String
Dim deuxieme_fichier As String
Dim chemin_deuxieme_fichier As String
Dim file_open As String
' assignation permettant de créer un objet , ensuite d'ouvrir le fichier
Set MyApplication = CreateObject("Shell.Application")
premier_fichier = "Analyse résultats PERF DEV s08.xlsm"
deuxieme_fichier = "Perf dans DWH hs risq - 2022_s9.xlsx"
chemin_deuxieme_fichier = "C:\Users\csad\OneDrive - Cooperactions\Documents\Perf dans DWH hs risq - 2022_s9.xlsx"
Workbooks("Analyse résultats PERF DEV s08").Activate
Sheets("Feuil5").Activate
Range("M5:AW5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range("M5").Select
'ouverture du deuxième fichier
MyApplication.Open (chemin_deuxieme_fichier)
' Workbooks("deuxieme_fichier").Activate
'attendre un instant 5s wait
Worksheets("Page1_1").Activate
Range("A3:AK3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Workbooks(premier_fichier).Activate
Sheets("Feuil5").Activate
Range("M5").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
' Parcourir chaque fichier du dossier à travers le for each
''''''''''''''''''''''''''''''''Début de la création du TCD''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim monCache As PivotCache
Dim monTCD As PivotTable
' Set monCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:="base_de_données")
Set monCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="base_de_données")
Set monTCD = monCache.CreatePivotTable(Range("A1"), "mon tableau croisé dynamique")
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Type Spécificité")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields( _
"Métier du Commercial")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Unite")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Service" _
)
.Orientation = xlRowField
.Position = 4
End With
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields( _
"Libellé du Groupe Perf")
.Orientation = xlRowField
.Position = 5
End With
'classement dans la zone filtre du rapport
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields( _
"Type Spécificité")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields( _
"Métier du Commercial")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Unite")
.Orientation = xlPageField
.Position = 1
End With
'positionnement dans la zone valeur
ActiveSheet.PivotTables("mon tableau croisé dynamique").AddDataField ActiveSheet. _
PivotTables("mon tableau croisé dynamique").PivotFields( _
"Conso Cumulée sur l'année"), "Nombre de Conso Cumulée sur l'année", xlCount
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields( _
"Nombre de Conso Cumulée sur l'année")
.Caption = "Somme de Conso Cumulée sur l'année"
.Function = xlSum
End With
ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Service"). _
Orientation = xlHidden
'''''''''''''''''''''''''''''''''filtrage des trois champs de la zone filtre du rapport ''''''''''''''''''''''''''''''''''
With ActiveSheet.PivotTables("mon tableau croisé dynamique").PivotFields("Service" _
)
.Orientation = xlColumnField
.Position = 2
End With
'''''''''''''''''''''''''''' filtrage du premier tableau croisé dynamique '''''''''''''''''''''''''''''''''''''
'filtrage de trois champs par vide
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Type Spécificité").ClearAllFilters
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Type Spécificité").CurrentPage = "(blank)"
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Métier du Commercial").ClearAllFilters
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Métier du commercial").CurrentPage = "(blank)"
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Unite").ClearAllFilters
ActiveSheet.pivotables("mon tableau croisé dynamique").pivofields("Unite").CurrentPage = "(blank)"
' filtre champs Linellé du Groupe Perf
With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields( _
"Libellé du Groupe Perf")
.PivotItems("Prev PP globale").Visible = True
.PivotItems("Val Désirio").Visible = True
.PivotItems("Val Epargne Vie").Visible = True
.PivotItems("Val Gestion Préconisée").Visible = True
.PivotItems("Val Ret ind.").Visible = True
End With
End Sub
Dernière édition: