VBA Excel: Última fila/columna en código para tablas dinámicas
Lena
-
Lena -
Lena -
Hola,
Estoy trabajando en Excel 2013 y quisiera automatizar la creación de una tabla dinámica (PVT) mediante VBA. Para ello, me basé en el grabador de macros, que me generó un código interesante:
Sub Macro2()
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Feuil1!R1C1:R13C6", Version:=xlPivotTableVersion15).CreatePivotTable TableDestination:="TT!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=5
Sheets("TT").Select
Cells(1, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ville")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nom")
.Orientation = xlRowField
.Position = 2
End With
End Sub
Me gustaría saber cómo adaptar este código a des données source que puedan tener beaucoup plus de lignes y colonnes et non 13 et 6 comme dans cet exemple, sans avoir à le préciser à chaque fois. En d’autres termes, y existe-t-il une possibilité pour qu’il détermine automatiquement la dernière ligne et colonne ? Quelqu’un aurait-il une piste?
Lien vers le fichier: https://www.cjoint.com/c/JGntI2srefN
Merci d’avance!
Estoy trabajando en Excel 2013 y quisiera automatizar la creación de una tabla dinámica (PVT) mediante VBA. Para ello, me basé en el grabador de macros, que me generó un código interesante:
Sub Macro2()
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Feuil1!R1C1:R13C6", Version:=xlPivotTableVersion15).CreatePivotTable TableDestination:="TT!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=5
Sheets("TT").Select
Cells(1, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ville")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nom")
.Orientation = xlRowField
.Position = 2
End With
End Sub
Me gustaría saber cómo adaptar este código a des données source que puedan tener beaucoup plus de lignes y colonnes et non 13 et 6 comme dans cet exemple, sans avoir à le préciser à chaque fois. En d’autres termes, y existe-t-il une possibilité pour qu’il détermine automatiquement la dernière ligne et colonne ? Quelqu’un aurait-il une piste?
Lien vers le fichier: https://www.cjoint.com/c/JGntI2srefN
Merci d’avance!
1 respuesta
-
Hola,
un ejemplo:
Sub Creation_TCD() Call DeletePivotTable adr = Sheets("feuil1").UsedRange.Address ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Feuil1!" & Sheets("feuil1").UsedRange.Address, Version:=xlPivotTableVersion15).CreatePivotTable _ TableDestination:="TT!R1C1", TableName="Tableau croisé dynamique1", DefaultVersion:=5 Sheets("TT").Select Cells(1, 1).Select With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ville") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nom") .Orientation = xlRowField .Position = 2 End With End Sub 'https://www.developpez.net/forums/d1423895/logiciels/microsoft-office/excel/vba-supprimer-tcd/ 'Philippe Tulliez 'Rédacteur Sub DeletePivotTable() Dim sht As Worksheet, pvt As PivotTable, Response As Byte, msgResponse As String Set sht = ThisWorkbook.Worksheets("TT") For Each pvt In sht.PivotTables With pvt msgResponse = msgResponse & .Name & vbCrLf & "Cellules : " & .TableRange2.Address Response = MsgBox(msgResponse, vbYesNo + vbExclamation, "Suppression tableau croisés dynamique") If Response = vbYes Then .TableRange2.Delete Shift:=xlToLeft ' ou Shift:=xlUp End With Next End Sub
A adapter