TCD plage variable avec VBA

Résolu
manueHN -  
Heliotte Messages postés 1561 Statut Membre -
Bonjour,

Encore une fois je reviens vers le forum !
Je veux creer un tableau croise dynamique grace a VBA car mon fichier de base vari tous les mois (le nombre de lignes)

J'ai fait plusieurs tentatives mais a chaque fois, cela beuggue quelque part.

Ma derniere est la suivante :
Option Explicit

Sub TCD_recap()

Dim plage As Range
Dim num_ligne As Long
Dim DerLig As Long

num_ligne = Range("A1").CurrentRegion.Rows.Count
DerLig = num_ligne - 1

With Sheets("base valabs").Select
Set plage = .Range(.Cells(1, 1), .Cells(DerLig, 14))
End With
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
plage).CreatePivotTable TableDestination:=ActiveSheet.Range("A3"), TableName:="TCD_recap"

End Sub

Lors de l'execution, excel bloque ici :

Set plage = .Range(.Cells(1, 1), .Cells(DerLig, 14))

Je ne comprends pas pourquoi ! Aidez-moi s'il vousp lait, je vais m'arracher les cheveux :(

Je peux vous donner plus d'information si necessaire
Merci d'avance

11 réponses

Résumé de la discussion

Un utilisateur cherche à générer un tableau croisé dynamique via VBA dont le fichier source varie mensuellement, mais le script bloque lors de la définition de la plage. Les discussions portent sur la récupération du dernier numéro de ligne, l'utilisation de End(xlUp) pour DerLig, et les soucis de référence des cellules lorsque l'on applique Range. Plusieurs solutions proposées incluent corriger les références avec Worksheets(NomFeuille).Range(Cells(1,1), Cells(DerLig,14)) en ajoutant le préfixe Worksheets et vérifier DerLig avant la création du PivotTable, ou tester le résultat avec des MsgBox. En parallèle, certains commentaires évoquent la gestion des erreurs et la nécessité de créer la plage sur feuille source avant de lancer la création du tableau croisé dynamique, sans conclure sur l état du fil.

Bobot (l'IA à votre service)
  1. manueHN
     
    J'ai reussssi !!!!
    Il ne me reste qu'un soucis de format de TCD mais pour le moment, je vais me contenter de ca :)

    Je mets mon code si dessous si ca interesse quelqu'un :

    Option Explicit

    Sub TCD_recap()

    Dim plage As Range
    Dim DerLig As Long
    Dim NomFeuille As String

    NomFeuille = "base valabs"
    DerLig = Worksheets(NomFeuille).Range("A" & Rows.Count).End(xlUp).Row

    'Selection de la plage source presente sur l'onglet "base valabs"
    Set plage = Worksheets(NomFeuille).Range(Cells(1, 1), Cells(DerLig, 14))
    Sheets.Add.Name = "recap"

    'Creation du TCD
    ActiveSheet.PivotTableWizard _
    SourceType:=xlDatabase, _
    SourceData:=plage, _
    TableDestination:=Range("A3"), _
    TableName:="TCD_recap"

    'Mise en forme
    With ActiveSheet.PivotTables("TCD_recap")
    'Ajoute un champ de lignes nommé "CZTDCS".
    .AddFields RowFields:="CZTDCS"
    'Définit l'orientation du champ nommé "CZPN" en tant que Donnée.
    .PivotFields("CZPN").Orientation = xlDataField
    'Définit l'orientation du champ nommé "VALEURECAR" en tant que Donnée.
    .PivotFields("VALEURECAR").Orientation = xlDataField
    'Définit l'orientation du champ nommé "VALABS" en tant que Donnée.
    .PivotFields("VALABS").Orientation = xlDataField

    End With

    End Sub

    Encore merci a ce forum d'exister !
    Manue
    5
    1. Heliotte Messages postés 1561 Statut Membre 92
       
      Bonsoir manueHN,
      Félicitation et bonne continuation
      0