Créer un tableau croisé dynamique à partir d'une variable qui change
Bonjour,
je souhaite créer un tableau croisé dynamique en dessous d'un tableau qui changent tout le temps.
pour cela je détermine la cellule où je vais créer mon tableau. dans l'exemple ci dessous la valeur de la cellule va être feuille A R32C2, dans un autre cas elle va être R36C2, ou R23C2, ect
ce que je n'arrive pas à faire(et je ne sais pas si c'est posible) c'est modifier cette valeur en utilisant x et y dans le code pour créer mon tableau
merci
Range("A6").Select
Selection.End(xlDown).Select
ActiveCell.Offset(2, 1).Select
x = ActiveCell.Row 'ligne
y = ActiveCell.Column 'colonne
MsgBox ("A!" & "R" & x & "C" & y)
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"tableau1", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="A!R32C2", TableName:="Tableau croisé dynamique1", _
DefaultVersion:=xlPivotTableVersion10
Sheets("A").Select
Cells(32, 2).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1")
Bonjour,
A tester :
Option Explicit
Sub Test()
Dim I As Integer
Dim CelTcd As Range, AireDonnees As Range
Dim ShDonnees As Worksheet
Dim Pvt As PivotTable
Set ShDonnees = Sheets("A")
With ShDonnees
.Activate
If .PivotTables.Count > 0 Then
For I = .PivotTables.Count To 1 Step -1
.PivotTables(I).TableRange2.Delete
Next I
End If
Set AireDonnees = .Range("tableau1")
With AireDonnees.Columns(1)
Set CelTcd = ShDonnees.Cells(.Row + .Rows.Count + 1, .Column)
End With
End With
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=AireDonnees.Address).CreatePivotTable TableDestination:=CelTcd, TableName:="TCD1"
Set Pvt = ShDonnees.PivotTables("TCD1")
With Pvt
' A adapter
' With .PivotFields("Type d'opération")
' .Orientation = xlColumnField
' .Position = 1
' End With
' With .PivotFields("Date")
' .Orientation = xlRowField
' .Position = 1
' End With
'
' .AddDataField Pvt.PivotFields("Id"), "Nombre de Id", xlCount
End With
Set ShDonnees = Nothing
Set AireDonnees = Nothing: Set CelTcd = Nothing
Set Pvt = Nothing
End SubJe te remercie de ton aide. Mais à vrai dire cela fait à peine 3 jours que je me suis mis au macro, et je ne sais pas trop quoi faire de ce que tu me donnes.
j'ai essayer de lancer ta macro test mais cela ma mis debogage sur la ligne ActiveWorbook.
si tu veux avoir une idée de quoi je part l'export tableau que j'ai.
merci
Il faut vous forcer à déclarer vos variables. Dans l'éditeur VBA, Outils/Options/Editeur/Déclaration des variables obligatoire coché. Il va vous falloir déclarer vos variables.
Option Explicit, ne peut être présent deux fois dans un module.
Effacez, le code que vous avez ajouté dans votre module4 et insérez en un nouveau et testez ce code :
Nb : Il n'y aucun village saisi dans la colonne, vous allez obtenir ceci selon le code de votre procédure macro12.
Sub Test()
Dim I As Integer
Dim CelTcd As Range, AireDonnees As Range
Dim ShDonnees As Worksheet
Dim Pvt As PivotTable
Set ShDonnees = Sheets("A")
With ShDonnees
.Activate
If .PivotTables.Count > 0 Then
For I = .PivotTables.Count To 1 Step -1
.PivotTables(I).TableRange2.Delete
Next I
End If
Set AireDonnees = .Range("Tableau1[#All]")
With AireDonnees.Columns(1)
Set CelTcd = ShDonnees.Cells(.Row + .Rows.Count + 1, .Column)
End With
End With
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=AireDonnees.Address).CreatePivotTable TableDestination:=CelTcd, TableName:="TCD1"
Set Pvt = ShDonnees.PivotTables("TCD1")
With Pvt
With .PivotCache
.RefreshOnFileOpen = False
.MissingItemsLimit = xlMissingItemsDefault
End With
.RepeatAllLabels xlRepeatLabels
.AddDataField Pvt.PivotFields("Village"), "Nombre de Village", xlCount
With .PivotFields("Village")
.Orientation = xlRowField
.Position = 1
End With
.AddDataField Pvt.PivotFields("Absent"), "Nombre de Absent", xlCount
With .DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
End With
Set ShDonnees = Nothing
Set AireDonnees = Nothing: Set CelTcd = Nothing
Set Pvt = Nothing
End SubBonjour à tous,
Une autre proposition TCD en VBA !?
Bonne journée.
Cdlt.
Option Explicit
Public Sub CreatePivotable()
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim lo As ListObject
Dim PTCache As PivotCache, PT As PivotTable
Set wb = ActiveWorkbook
Set wsData = wb.Worksheets("A")
Set wsPT = wb.Worksheets("TCD")
Set lo = wsData.ListObjects("Tableau1")
On Error Resume Next
wb.Worksheets("TCD").PivotTables("PT_1").TableRange2.Clear
On Error GoTo 0
Set PTCache = wb.PivotCaches.Create(xlDatabase, lo.Range)
Set PT = PTCache.CreatePivotTable(wsPT.Cells(3, 1), "PT_1")
With PT
.ManualUpdate = True
.AddFields RowFields:="Village"
With .PivotFields("Village")
.Orientation = xlDataField
.Position = 1
.Function = xlCount
.Caption = "Nb. villages"
End With
With .PivotFields("Absent")
.Orientation = xlDataField
.Position = 2
.Function = xlCount
.Caption = "Nb. absents"
End With
.RowAxisLayout xlTabularRow
.ManualUpdate = False
End With
End SubMerci ça fonctionne. je vais essayer maintenant de comprendre le truc pour essayer de le reproduire.
j'ai compris en tout cas que le positionnement du tableau vient de ce paragraphe suivant et que si je souhaite le déplacer il suffit de jouer avec les + , par exemple mettre +2 pour décaler de 2 colonnes. je vais donc essayer de le reproduire pour rajouter un 2ème tableau en décaler.
et encore merci de ton aide.
Set AireDonnees = .Range("Tableau1[#All]")
With AireDonnees.Columns(1)
Set CelTcd = ShDonnees.Cells(.Row + .Rows.Count + 1, .Column + 2)
End With