Votre panier est actuellement vide !
Étiquette : dynamic_pivot
Creating a dynamic Pivot Table with Excel VBA
Overview:
A dynamic Pivot Table is one that automatically adjusts its data source when new data is added. This is especially useful for reports that get updated frequently. We’ll use VBA to create a Pivot Table, define its dynamic data source, and customize it to display various fields in a Pivot Table format.
Code Explanation:
Sub CreateDynamicPivotTable()    ' Declare variables    Dim wsSource As Worksheet    Dim wsPivot As Worksheet    Dim lastRow As Long    Dim lastCol As Long    Dim pivotRange As Range    Dim pivotTable As PivotTable    Dim pivotCache As PivotCache    Dim pivotSheetName As String      ' Define the source data sheet    Set wsSource = ThisWorkbook.Sheets("Sheet1") ' Change to your data sheet name      ' Find the last row and column with data in the source sheet    lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row ' Assumes data starts in column A    lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column ' Assumes header row is in row 1      ' Set the dynamic data range for the pivot table (including headers)    Set pivotRange = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, lastCol))      ' Check if a Pivot Table sheet already exists, and delete if found    On Error Resume Next    Set wsPivot = ThisWorkbook.Sheets("PivotTableSheet") ' Change to your desired pivot sheet name    On Error GoTo 0    If Not wsPivot Is Nothing Then        Application.DisplayAlerts = False        wsPivot.Delete        Application.DisplayAlerts = True    End If      ' Create a new worksheet for the Pivot Table    Set wsPivot = ThisWorkbook.Sheets.Add    wsPivot.Name = "PivotTableSheet"      ' Create a Pivot Cache from the data source    Set pivotCache = ThisWorkbook.PivotTableWizard(wsSource:=pivotRange)      ' Create the Pivot Table in the new worksheet    Set pivotTable = wsPivot.PivotTables.Add(PivotCache:=pivotCache, TableDestination:=wsPivot.Cells(1, 1), TableName:="DynamicPivotTable")      ' Add fields to the Pivot Table (example)    ' Row Fields    pivotTable.PivotFields("Category").Orientation = xlRowField    pivotTable.PivotFields("Category").Position = 1      ' Column Fields    pivotTable.PivotFields("Region").Orientation = xlColumnField    pivotTable.PivotFields("Region").Position = 1      ' Data Fields    pivotTable.PivotFields("Sales").Orientation = xlDataField    pivotTable.PivotFields("Sales").Function = xlSum    pivotTable.PivotFields("Sales").NumberFormat = "#,##0"      ' Optional: Formatting and layout settings    With pivotTable        .RowAxisLayout xlTabularRow        .ColumnGrand = True        .RowGrand = True    End With      ' Adjust the column width for better display    wsPivot.Columns.AutoFit End SubDetailed Explanation:
- Declare Variables:
- wsSource: The worksheet containing the raw data.
- wsPivot: The worksheet where the Pivot Table will be placed.
- lastRow and lastCol: To determine the size of the data range.
- pivotRange: The range of data to be used for the Pivot Table.
- pivotCache: A cache that holds the Pivot Table data.
- pivotTable: The actual Pivot Table object.
- Set the Data Range:
- We calculate the lastRow and lastCol to dynamically adjust the data range as the data changes (e.g., more rows are added).
- Delete Existing Pivot Table Sheet:
- We check if a sheet named « PivotTableSheet » exists. If it does, we delete it before creating a new one. This ensures you don’t have duplicate Pivot Tables.
- Create a New Worksheet for the Pivot Table:
- A new worksheet is created where the Pivot Table will be placed. It is named « PivotTableSheet ».
- Create a Pivot Cache:
- We create a Pivot Cache from the dynamic range of data. This allows the Pivot Table to pull data from the source sheet efficiently.
- Add Fields to the Pivot Table:
- You can define the rows, columns, and data fields in the Pivot Table. In this example:
- « Category » is used as a Row Field.
- « Region » is used as a Column Field.
- « Sales » is used as a Data Field, and the sum of sales is displayed.
- You can define the rows, columns, and data fields in the Pivot Table. In this example:
- Formatting and Layout Settings:
- The layout is set to xlTabularRow to display the rows in a tabular format.
- Row and column totals are enabled using .RowGrand and .ColumnGrand.
- AutoFit Columns:
- Finally, the columns in the Pivot Table are auto-fitted for better presentation.
Customizing:
- Change the data range based on the columns in your actual data.
- Modify the row, column, and data fields based on your requirements.
- Adjust the Function of the Data Field if you want something other than the sum (e.g., xlAverage, xlCount).
Conclusion:
This code dynamically creates a Pivot Table based on a range of data in Excel, allowing you to update the report without manually changing the data range each time new data is added.
- Declare Variables: