Création d'un TDC à partir de plusieurs feuilles
Bonjour à tous,
Je m'adresse à vous pour une opération bien spécifique.
Je suis en train de personnaliser mon suivi de budget personnel sur Excel.
A ce titre, j'ai un document excel qui sur chaque feuille, répertorie mes dépenses et entrées d'argent par mois.
Mes feuilles sont organisées de la manière suivante...
Nom de la feuille 1 : 08 - 2013
Nom de la feuille 2 : 09 - 2013
Nom de la feuille 3 : 10 - 2013
Sur chacune de mes feuilles, j'ai créé un format de tableau identique. Les entêtes sont les suivantes :
Date du Paiement | Description | Catégorie | Montant
J'ai joint un jpeg afin que vous ayez un aperçu de comment s'organise mes feuilles
Mon objectif est de créer un tableau croisé dynamique qui me synthétise mes dépenses par mois afin que je puisse sur un même tableau, constater l’évolution de mes dépenses selon les différents postes que j'ai défini (Catégorie & Description).
Actuellement, je m'en sors très bien pour créer un TDC d'une seule feuille.
Cependant, j'ai une réel difficulté lorsque je prends en compte mes autres feuilles (grâce à l'Assistant Tableau Croisé Dynamique).
En effet, je sélectionnes les tableaux que je veux prendre en compte et dans ce tableau "final", les entêtes de mes tableaux disparaissent et les seuls infos présentent dans mon TDC sont Étiquette de ligne et Étiquette de colonne...
In fine, j'aimerai avoir un résultat qui ressemble au deuxième fichier que je vous ai joint
En gros, première colonne mes catégories et descriptions associées, et chaque colonne qui suit, le mois concerné en entête avec en dessous, les montants correspondants aux dépenses...
J'espère avoir été le plus précis possible.
Merci par avance pour votre aide.
Cordialement,
Bonjour,
Peux-tu envoyer ton fichier anonymisé avec des explications et le(s) résultat(s) désiré précisément?
A te relire.
Cdlt
Fichier joint,
Merci beaucoup !
Je me suis trompé, je vous l'ai envoyé en MP...
Vous trouverez le fichier joint dans ce topic.
Pour que vous compreniez le résultat que j'espère, rien de plus simple que de regarder mon petit fichier.
J'y ai joins quelques petits commentaires,
Merci,
Je me suis trompé, je vous l'ai envoyé en MP...
Vous trouverez le fichier joint dans ce topic.
Pour que vous compreniez le résultat que j'espère, rien de plus simple que de regarder mon petit fichier.
J'y ai joins quelques petits commentaires,
Merci,
Est-ce que des magiciens d'Excel auraient des pistes pour moi ?
Merci...
Re,
Un premier essai à peaufiner
Ctrl + w pour lancer la procédure.
J'attends tes commentaires
Cdlt
Vraiment impressionnant ! Merci !
Ceci correspondant à peu près à ce que je veux obtenir.
Question : Comment avez-vous fait ?
Pouvez-vous me donner les quelques étapes afin que je puisse répéter l'opération et mettre en forme à souhait ?
Merci !!
Re,
Pour quelqu'un de pressé, tu as tardé
Ceci correspondant à peu près à ce que je veux obtenir.
Profites
Pour les explications, elles vont venir après, sur cette même page...prochainement. Ne clos donc pas le sujet.
A te relire.
Cdlt
Merci
Oui je tardes, quelques appels importants dans le même temps
Je voudrais pas trop en demander :p
D'un point de vue fonctionnel c'est exactement ce que je veux.
J'aimerai bien avoir le look & field du tableau croisé dynamique que j'avais mis dans mes premiers liens, est-ce possible ?
Sinon, comment avez-vous rajouté le champ année dans le tdc ?
De plus, un point important, comment vont se faire les ajouts de nouvelles feuilles et leur prise en compte de le TDC ?
Merci beaucoup, je pense que la démarche que vous allez exposer pour créer ce type de tableau me permettra de finaliser ça
Merci encore,
Taywal
Re,
Et tu n'aimerais pas un petit graphique
Patientes pour la suite...
Cdlt
Pourquoi pas
A voir après si ça fait pas trop lourd en terme d'infos ;
Oui je sais je suis difficile
Bonjour,
Comme promis, les explications du code
L"ensemble comporte 3 étapes.
En effectuant un appui simultané sur les touches Ctrl+w:
On supprime les feuilles "Consolidation" et "Synthèse" pour les recréer par la suite.
On exécute ensuite la procédure de fusion des feuilles (suivant leurs nombres).
On termine par la création du tableau croisé dynamique (TCD).
* avec un regroupement Années/mois.
Le classeur a été mis à jour.
Pour la création du graphique, me donner ton souhait (je n'ai que des valeurs négatives
A te relire.
Cdlt
Option Explicit
' ----------------------------------------------------------------------------------------
' 1 - INITIALISATION
' ----------------------------------------------------------------------------------------
Public Sub Traitement_données()
' Ctrl + w pour lancer la macro
10 With Application
' on désactive l'affichage des messages d'alerte.
20 .DisplayAlerts = False
' on désactive l'actualisation de l'écran.
30 .ScreenUpdating = False
40 End With
' on supprime les 2 feuilles de consolidation et de synthèse
' avec un gestion d'erreur si elles n'existent pas.
50 On Error Resume Next
60 Worksheets("Consolidation").Delete
70 Worksheets("Synthèse").Delete
80 On Error GoTo 0
' on réactive l'affichage des messages d'alerte.
90 Application.DisplayAlerts = True
' on crée la feuille de consolidation.
100 Consolidation_feuilles
' on crée le rapport de tableau croisé dynamique.
110 Création_TCD
End Sub
' ----------------------------------------------------------------------------------------
' 2 - FUSION FEUILLES
' ----------------------------------------------------------------------------------------
Private Sub Consolidation_feuilles()
' fusion des différentes feuilles mensuelles en une.
' création feuille de consolidation
10 ActiveWorkbook.Worksheets.Add after:=Worksheets(Worksheets.Count)
20 ActiveSheet.Name = "Consolidation"
30 Set wS_1 = ActiveSheet
' on boucle sur chaque feuille du classeur
40 For Each wS In ActiveWorkbook.Worksheets
50 If wS.Name <> "Consolidation" Then
' définition de la plage à copier
60 X = wS.UsedRange.Address
70 With wS.UsedRange
80 .Rows(1).Copy wS_1.Range("A1")
90 nLigne = wS_1.Range("A" & Rows.Count).End(xlUp).Row + 1
100 .Offset(1).Resize(.Rows.Count - 1).Copy wS_1.Range("A" & nLigne)
110 End With
120 End If
130 Next
140 Set wS_1 = Nothing
End Sub
' ----------------------------------------------------------------------------------------
' 2 - CREATION TCD -TABLEAU CROISE DYNAMIQUE
' ----------------------------------------------------------------------------------------
Private Sub Création_TCD()
' création du tableau croisé dynamique (TCD)
10 Set wS_1 = Worksheets("Consolidation")
' définition de la plage pour la création du TCD
20 Set Plage = wS_1.Range("A1").CurrentRegion
' création feuille de de synthèse
30 ActiveWorkbook.Worksheets.Add after:=Worksheets(Worksheets.Count)
40 ActiveSheet.Name = "Synthèse"
50 Set wS_2 = ActiveSheet
' définition du cache du TCD équivalant à la plage
60 Set Cache = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, SourceData:=Plage)
' création du TCD
70 Set TCD = Cache.CreatePivotTable _
(tabledestination:=wS_2.Range("A1"), tablename:="TCD_1")
' on désactive la mise à jour pendant la cr&tion du TCD.
80 TCD.ManualUpdate = True
'Mise en forme TCD
90 With TCD
' mise place des étiquettes de lignes.
100 With .PivotFields("Description")
110 .Orientation = xlRowField
120 .Position = 1
130 .LayoutSubtotalLocation = xlAtTop
140 .LayoutForm = xlOutline
150 End With
160 With .PivotFields("Catégorie")
170 .Orientation = xlRowField
180 .Position = 2
190 .LayoutSubtotalLocation = xlAtTop
200 .LayoutForm = xlOutline
210 End With
' mise en place des étiquettes de colonnes.
220 .PivotFields("Date du paiement").Orientation = xlColumnField
' mise en place des champs de valeurs.
230 With .PivotFields("Montant")
240 .Orientation = xlDataField
250 .Function = xlSum
260 .Caption = "Montants "
' format nombre personnalisé au choix.
'.NumberFormat = "# ##0.00"
'.NumberFormat = "[Blue]# ##0.00;[Red](# ##0.00));;"
270 .NumberFormat = "# ##0.00;-# ##0.00;;"
280 End With
' total général colonnes.
290 .ColumnGrand = True
' total général lignes.
300 .RowGrand = True
310 End With
' traitement des valeurs 'vides'.
320 TCD.NullString = "0"
' calcul du TCD.
330 TCD.ManualUpdate = False
' regroupement année, mois.
340 TCD.PivotFields("Date du paiement").LabelRange.Group Start:=True, End:=True, _
Periods:=Array(False, False, False, False, True, False, True)
' suppression de tous les sous-totaux (les 2 lignes sont nécessaires!).
'TCD.PivotFields("Description").Subtotals(1) = True
'TCD.PivotFields("Description").Subtotals(1) = False
' spécifie le style de tableau croisé dynamique
350 TCD.TableStyle2 = "PivotStyleLight16"
360 Range("A:E").EntireColumn.AutoFit
370 ActiveWindow.DisplayGridlines = False
380 Range("A1").Select
End Sub
Re,
Oups
J'ai rétabli le fonctionnement du 'Ctrl + w'.
Désolé.
Cdlt
Merci beaucoup pour ce retour
Je vais mettre en application maintenant.
Cordialement,