Bonsoir,
je souhaiterais savoir s'il serait possible de créer une macro pour obtenir un tableau croisé dynamique? Si oui, quel en serait le code?
En vous remerciant par avance,
cordialement,
Pierre.
Bonsoir,
je souhaiterais savoir s'il serait possible de créer une macro pour obtenir un tableau croisé dynamique? Si oui, quel en serait le code?
En vous remerciant par avance,
cordialement,
Pierre.
Bonjour,
Une piste : suppression-re-creation-tcd
Bonjour,
merci pour votre réponse. Serait-il possible de mettre un peu plus de commentaires (commentaires plus détaillé pour chaque ligne de code?
merci pour tout .
Je suis débutant dans VBA.
cordialement,
Pierre.
Bonjour Pierre,
Bien que le code soit déjà documenté, il ne le sera jamais assez....
Je vous propose plutôt la méthode suivante, celle qui m'a permis d'avancer en VBA. Avec l'enregistreur de macro, vous allez créer le TCD dont vous avez besoin et à la fin vous allez récupérer le code que vous avez tapé. Il faudra ensuite le simplifier et l'automatiser.
Attention le nombre de lignes est impressionnant, il vous faudra donc être modeste dans les séquences de conception au risque de vous perdre dans le code. Vous commencez par la création du TCD en sélectionnant 3 champs, vous allez au résultat et vous poursuivez en complexifiant à partir du TCD obtenu toujours en utilisant l'enregistreur de macros.
Si vous mettez votre code en ligne en indiquant les difficultés auxquelles vous êtes confronté et les lignes où le programme "bugue", on sera un certain nombre à vous aider.
Bonsoir tous
Une petit exemple pour embrayer
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub Sub_Sub_Sub() Dim objTable As PivotTable, objField As PivotField 'Création de données pour test With Sheets.Add .Range(.Cells(2, 1), .Cells(22, 1)) = "=""P. NOM ""&CHAR(64+ROW()-1)&ROW()" .Cells(1, 1).Resize(, 5) = Split("NOMS NOMBRE PRIX1 PRIX2 TAUX") .Cells(2, 2).Resize(21, 4) = "=ROW()*COLUMN()" End With 'Lignes de codes pour créer rapidement un TCD ActiveSheet.PivotTableWizard Set objTable = ActiveSheet.PivotTableWizard With objTable With .PivotFields("NOMS") .Orientation = xlRowField .Position = 1 End With .AddDataField .PivotFields("PRIX1"), "Somme de PRIX1", xlSum .AddDataField .PivotFields("PRIX2"), "Somme de PRIX2", xlSum .DataPivotField.Orientation = xlRowField .DataPivotField.Position = 2 End With End Sub
Avant de passer au pilotage de TCD par macro, tu as déjà fais un long chemin avec les TCD et ta souris ?
A mon avis, c'est plus simple de passer au VBA une fois qu'on maitrise les tcd manuellement, non ?
PS: je n'avais pas vu le lien déposé plus bas par Eric Kergresse,![]()
Une version dans laquelle j'ai ajouté des commentaires
Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub Sub_Sub_Sub_Sub_B() Dim objTable As PivotTable, objField As PivotField 'Création de données pour test (sur une nouvelle feuille) With Sheets.Add .Range(.Cells(2, 1), .Cells(22, 1)) = "=""Nom ""&CEILING((ROW()-1)/4,1)" .Cells(1, 1).Resize(, 5) = Split("NOMS QT PRIXHT STOT TTC") .[B2:C22] = "=ROW()*COLUMN()": .[D2:D22] = "=RC[-2]*RC[-1]": .[E2:E22] = "=RC[-1]*1.2" .UsedRange.Value = .UsedRange.Value: .[A1].CurrentRegion.NumberFormat = "#,##0.00" End With '<<---///---///+-+-(\°/)+-+\\\---\\\--->> 'Lignes de codes pour créer rapidement un TCD Set objTable = ActiveSheet.PivotTableWizard With objTable 'Le champ NOMS est mis dans la zone LIGNES With .PivotFields("NOMS") .Orientation = xlRowField: .Position = 1 End With 'Le champ QT est mis dans la zone LIGNES With .PivotFields("QT") .Orientation = xlRowField .Position = 2 End With 'Les champs PRIXHT et TTC sont mis dans la zone VALEURS .AddDataField .PivotFields("PRIXHT"), "Somme de PRIXHT", xlSum .AddDataField .PivotFields("TTC"), "Somme de TTC", xlSum 'Disposition du rapport sous forme tabulaire .RowAxisLayout xlTabularRow 'Dispostion en Colonnes .DataPivotField.Orientation = xlColumnField .DataPivotField.Position = 1 'Application d'un style prédéfinie de TCD .TableStyle2 = "PivotStyleMedium24" End With '<<---///---///+-+-(°)+-+\\\---\\\--->> End Sub
Bonne journée.
Partager