Tableau croisé dynamique avec Moyenne, Min et Max
Bonjour tout le monde,
J'éprouve quelques difficultés à réaliser un tableau croisé dynamique incluant notamment des formules telles que la moyenne, le min, etc.
Cf. exemple ici :
Serait-il possible d'avoir l'aide précieuse de l'un ou l'une d'entre vous ?
Merci par avance,
Maxdhavys
Bonjour,
pour pouvoir profiter du TCD il faut modifier la mise en forme de ta base de données.
Voir fichier joint.
@ + +
Bonjour,
Bonjour R@chid,
Une proposition VBA qui normalise tes données sous forme de tableau (comme préconisé par R@chid) pour le tableau croisé dynamique.
C'est une procédure évènementielle qui s'exécute à l'activation de la feuille TCD.
Ceci te permet de continuer à saisir tes données comme tu le fais.
ALT F11 pour ouvrir l'éditeur VBE. Voir module Feuil2 (TCD).
A te relire.
Cdlt.
Merci Jean-Eric et R@chid pour vos réponses très pertinentes
Cela m'amène à vous posez une autre question : comment avez-vous procédé pour transformer "semi-automatiquement" mon tableau initial en tableau avec les colonnes, Nom, Prénom, Classe, Age, Prof, Matière, Notes ?
Bien à vous,
Maxdhavys
Re,
Comme écrit précédemment, j'ai traité ta question en VBA.
Pour voir la procédure, faire ALT F11 et voir le module Feuil2 (TCD) en haut à gauche de ton écran.
Dans ce nouveau fichier, j'ai commenté le code.
Cdlt.
Private Sub Worksheet_Activate()
' Déclaration des variables
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim Table As ListObject
Dim rStart As Range
Dim tbl, arr()
Dim I As Long, J As Long, k As Long
' Gel affichage
'----------------------------------------------------------------
Application.ScreenUpdating = False
' Initialisation des variables
'----------------------------------------------------------------
Set wb = ActiveWorkbook
Set wsData = wb.Worksheets("Data")
Set Table = Me.ListObjects(1) 'Tableau1 feuille Data
' RAZ tableau2 feuille TCD
'----------------------------------------------------------------
With Table
If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
Set rStart = .InsertRowRange.Cells(1)
End With
'----------------------------------------------------------------
' Normalisation des données feuille Data
' Création tableau x lignes et 7 colonnes
tbl = wsData.ListObjects(1).Range.Value
For I = 2 To UBound(tbl, 1)
For J = 6 To UBound(tbl, 2)
If tbl(I, J) <> "" Then
ReDim Preserve arr(7, k + 1)
arr(0, k) = tbl(I, 1)
arr(1, k) = tbl(I, 2)
arr(2, k) = tbl(I, 1) & ", " & tbl(I, 2)
arr(3, k) = tbl(I, 3)
arr(4, k) = tbl(I, 4)
arr(5, k) = tbl(1, J)
arr(6, k) = tbl(I, J)
k = k + 1
End If
Next J
Next I
' Restitution des données normalisées en feuille TCD
'----------------------------------------------------------------
rStart.Resize(UBound(arr, 2), 7) = Application.Transpose(arr)
' Actualisation du tableau croisé dynamique
'----------------------------------------------------------------
Me.PivotTables(1).PivotCache.Refresh
' Affichage résultats
'----------------------------------------------------------------
Application.ScreenUpdating = True
' Message de fin de procédure
'----------------------------------------------------------------
MsgBox "Le TCD a été actualisé...", vbOKOnly + vbInformation
'----------------------------------------------------------------
Erase arr()
Set rStart = Nothing
Set Table = Nothing
Set wsPT = Nothing: Set wsData = Nothing
Set wb = Nothing
End Sub
Merci beaucoup Jean-Eric