Objet TCD
Objet PivotTable
En VBA, chaque champ de Tableau Croisé Dynamique (PivotTable) contient une collection de PivotItems.
Pour créer un tableau croisé dynamique, on utilise aujourd'hui cette syntaxe :
Range("A1").Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:="Feuil1!R1C1:R8C10", _
Version:=xlPivotTableVersion15). _
CreatePivotTable TableDestination:=ActiveSheet.Range("A3"), _
TableName:="MonTCD", _
DefaultVersion:=xlPivotTableVersion15
Sheets.Add
ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:="Feuil1!R1C1:R8C10", _
Version:=xlPivotTableVersion15). _
CreatePivotTable TableDestination:=ActiveSheet.Range("A3"), _
TableName:="MonTCD", _
DefaultVersion:=xlPivotTableVersion15
ou bien cette syntaxe (version 2003) :
ActiveSheet.PivotTableWizard _
SourceType:=xlDatabase, _
SourceData:="Feuil1!R1C1:R5C5", _
TableDestination:=Range("B1"), _
TableName:="MonTCD"
SourceType:=xlDatabase, _
SourceData:="Feuil1!R1C1:R5C5", _
TableDestination:=Range("B1"), _
TableName:="MonTCD"
- SourceData correspond à la plage des données
- TableDestination à l'endroit où l'on veux que le tableau soit collé
- TableName au nom du tableau.
Ensuite, on ajoutes des champs :
ActiveSheet.PivotTables("MonTCD").AddFields RowFields:="NOMS"
Et on les modifies :
ActiveSheet.PivotTables("MonTCD").PivotFields("VILLES").Orientation = xlDataField
Pour actualiser notre TCD :
ActiveSheet.PivotTables("MonTCD").PivotCache.Refresh
Compter le nombre d'élément d'un champ de tableau croisé dynamique :
// Exemple 1 - Nombre de villes
Dim nbr_elements As Integer
nbr_elements = ActiveSheet.PivotTables("MonTCD").PivotFields("VILLES").PivotItems.Count
// Exemple 2 - Nombre de villes qui commence par la lettre A
Dim MonCompteur As Long
MonCompteur = 0
For Each pitem In ActiveWorkbook.ActiveSheet.PivotTables("MonTCD").PivotFields("VILLES").PivotItems
If pitem.Value Like "A*" Then
MonCompteur = MonCompteur + 1
End If
Next pitem
MsgBox("Il y a " & MonCompteur & " éléments.")
Dim nbr_elements As Integer
nbr_elements = ActiveSheet.PivotTables("MonTCD").PivotFields("VILLES").PivotItems.Count
// Exemple 2 - Nombre de villes qui commence par la lettre A
Dim MonCompteur As Long
MonCompteur = 0
For Each pitem In ActiveWorkbook.ActiveSheet.PivotTables("MonTCD").PivotFields("VILLES").PivotItems
If pitem.Value Like "A*" Then
MonCompteur = MonCompteur + 1
End If
Next pitem
MsgBox("Il y a " & MonCompteur & " éléments.")
Filtrer un champ de tableau croisé dynamique :
ActiveSheet.PivotTables("MonTCD" ).PivotFields("Genre" ).CurrentPage = "HOMME"
Un tableau croisé dynamique avec auto-sélection du tableau d'origine
' Création des variables
Public maplage As Range
Public numdeligne As Integer
Public lettredecolonne As String
Sub proc_creation_de_tcd()
' La feuille 1 contient un tableau de base
'selection du tablau d'origine
Sheets("Feuil1").Range("A1").Select
Selection.End(xlDown).Select ' soit Ctrl + Flêche bas
numdeligne = ActiveCell.Row ' on récupère le numéro de ligne de la cellule active
Selection.End(xlToRight).Select ' soit Ctrl + Flêche droit
lettredecolonne = Chr(ActiveCell.Column + 64) ' on récupère la lettre de la colonne de la cellule active
' le numéro ASCII de la lettre de la colonne correspond au numéro de la colonne + 64
' on initialise la plage avec la lettre de la colonne et le numéro de la ligne
Set maplage = Sheets("Feuil1").Range("A1:" & lettredecolonne & numdeligne)
Range("A1").Select
Sheets.Add
'Création du TCD avec la SourceData et la TableDestination dynamique
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=maplage, _
Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:=ActiveSheet.Range("A3"), _
TableName:="MonTCD", _
DefaultVersion:=xlPivotTableVersion15
Cells(3, 1).Select
With ActiveSheet.PivotTables("MonTCD").PivotFields("Semestre")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("MonTCD").PivotFields("Ville")
.Orientation = xlRowField
.Position = 2
End With
ActiveSheet.PivotTables("MonTCD").AddDataField ActiveSheet. _
PivotTables("MonTCD").PivotFields("Montant"), _
"Somme de Montant", xlSum
End Sub
Public maplage As Range
Public numdeligne As Integer
Public lettredecolonne As String
Sub proc_creation_de_tcd()
' La feuille 1 contient un tableau de base
'selection du tablau d'origine
Sheets("Feuil1").Range("A1").Select
Selection.End(xlDown).Select ' soit Ctrl + Flêche bas
numdeligne = ActiveCell.Row ' on récupère le numéro de ligne de la cellule active
Selection.End(xlToRight).Select ' soit Ctrl + Flêche droit
lettredecolonne = Chr(ActiveCell.Column + 64) ' on récupère la lettre de la colonne de la cellule active
' le numéro ASCII de la lettre de la colonne correspond au numéro de la colonne + 64
' on initialise la plage avec la lettre de la colonne et le numéro de la ligne
Set maplage = Sheets("Feuil1").Range("A1:" & lettredecolonne & numdeligne)
Range("A1").Select
Sheets.Add
'Création du TCD avec la SourceData et la TableDestination dynamique
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=maplage, _
Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:=ActiveSheet.Range("A3"), _
TableName:="MonTCD", _
DefaultVersion:=xlPivotTableVersion15
Cells(3, 1).Select
With ActiveSheet.PivotTables("MonTCD").PivotFields("Semestre")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("MonTCD").PivotFields("Ville")
.Orientation = xlRowField
.Position = 2
End With
ActiveSheet.PivotTables("MonTCD").AddDataField ActiveSheet. _
PivotTables("MonTCD").PivotFields("Montant"), _
"Somme de Montant", xlSum
End Sub
Plus d'infos :
silkyroad.developpez.com