Tableau croisé dynamique

Résolu
Bonjour à tous,

J'ai un petit soucis avec la création d'un Tableau croisé dynamique en macro.

'Je compte le nombre de ligne de ma feuille (car le nombre de ligne est dynamique)

Sheets("Synthèse-AA").Select
nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row
MsgBox (nbl2)

Range("B1:E543").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"'Synthèse-AA'!R10C2:R" & nbl12 & "C4", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="% Client CA!R1C1", TableName:="TCD", _
DefaultVersion:=xlPivotTableVersion14

L'erreur concerne tout le 2eme bloc.

Il y aurait-il un problème avec la syntaxe suivante ?
"'Synthèse-AA'!R10C2:R" & nbl12 & "C4"

Merci d'avance pour votre aide, Cdlt

5 réponses

  1. Je vais m'expliquer car ce que je demande n'est pas très clair toute reflexion faite.
    J'ai une variable nbl2 qui compte le nombre de ligne.

    Jaimerai, a partir d'un onglet, faire un tableau croisé dynamique. Le hic, c'est que le nombre de ligne varie. J'aimerai savoir comment ca séecrit dans le source data?

    SourceData:= _
    "'Synthèse-AA'!R10C2:R" & nbl12 & "C4"

    ? car cette écriture ne fonctionne pas ..

    Merci
    0
    1. Bonjour,

      Je pense que le problème vient du fait que tu jongles avec 2 format différent :

      nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row

      Ta formule ci dessus te permet de déterminer la dernière ligne de ton tableau par rapport à la colonne "A".

      SourceData:= "'Synthèse-AA'!R10C2:R" & nbl12 & "C4",

      Le Source Data ci dessus permet de déterminé les limites de ton tableau mais il est au format R1C1. Les réfenres au Format R1C1 dépendent de la cellule active au moment ou la macro est lancé.

      Prenons un exemple : Supposons que ton tableau fasse 100 Lignes et 3 colonnes :
      Si la cellule active est A1 et que tu fais ta sélection celà donnera :
      Sheet1'!RC:R100C3
      Si la cellule active est A2 et que tu fais ta sélection celà donnera :
      Sheet1'!R-1C:R99C3
      Si la cellule active est B1 et que tu fais ta sélection celà donnera :
      Sheet1'!RC-1:R100C2

      Conclusion, tu ne peux pas utiliser ta variale nbl2 avec le Format R1C1.

      Pour résoudre ton problème il faut traduire la sélection avec le même format :
      par exemple : SourceData:= "'Synthèse-AA'!A1:G" & nbl12, si ton tableau va de la colonne "A" à "G".

      WepaonEDGE
      1
      1. Ah oui, je comprend. Je me suis un peu mélangé entre le web et l'enregistreur de macro

        Sheets("Synthèse-AA").Select
        nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row - 1

        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Synthèse-AA!B1:E" & nbl12).CreatePivotTable _
        TableDestination:="Client!A1:E" & nbl2, TableName:="TCD", _
        DefaultVersion:=xlPivotTableVersion10

        J'ai toujours un problème, Run time error'5'. Ca me met dans l'onglet ou je veux faire mon TCD, mais il reste vierge...
        0
        1. T'es sur quelle version d'Excel ?
          0
      2. C'est bon, j'ai réussi.
        POur ceux que ca intéresse, voici mon code

        Sheets("Synthèse-AA").Select
        nbl2 = Range("A65536").End(xlUp).Offset(1, 0).Row - 1

        Range("B1:E" & nbl2).Select

        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Synthèse-AA!R1C2:R" & nbl2 & "C5", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="Client!R1C1", TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion14
        Sheets("Client").Select
        Cells(1, 1).Select

        Merci WeaponEDGE de m'avoir aidé !! c'est grace à toi que j'ai trouvé !
        Bonne fin de journée !
        0
        1. De rien on est là pour ça.

          En relisant ton code tu peux même optimiser ta variable. voici le code

          nbl2 = Range("A65536").End(xlUp).Row

          Pour ma part je préfère utiliser le code ci dessous :

          Variable = Sheets("Sheet1").cells(65536,1).end(xlup).row

          Avec ce code quand tu relis ta macro tu sais de quelle feuille il s'agit.

          Quant au terme Cells, la position de la cellule est uniquement numérique et donc tu peux jouer plus facilement avec les variables pour déterminer la position.

          Range("B1") = [B1] = Cells(1,2)
          0