TCD plage variable avec VBA
RésoluHeliotte Messages postés 1561 Statut Membre -
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
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.
-
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