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 Sub

Je 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.

capture
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 Sub

Bonjour à 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 Sub

Merci ç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
Rechercher des sujets similaires à "creer tableau croise dynamique partir variable qui change"