Easy-Micro

ESPACEMEMBRE VBA
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

ou bien cette syntaxe (version 2003) :
ActiveSheet.PivotTableWizard _
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.")

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

Plus d'infos :
silkyroad.developpez.com


< Page précédente VBA Page suivante >