comment faire un code VBA "évolutif" dont le nom de référence change (pour TDC)

bouclesdor

XLDnaute Occasionnel
Bonjour à vous!

Je fais appel à vous pour un problème de VBA. J'ai un fichier dans lequel j'ai 1 onglet pour chaque moi et chaque moi je dois rouler un code VBA pour faire de la mise en page. J'ai réussi à faire mon code VBA qui utilise les infos d'un tableau (qui est différent chaque mois) et qui fait un Tableau Dynamique croisé par contre comme je ne savais pas comment faire pour nommé mon tableau j'ai tout simplement nommé "tableau" par contre lorsque je fais rouler ce code plus d'une fois, les infos du premier tableau son écrasé par ceux du deuxième...

bref comme c'est un peu compliqué à expliqué j'ai joint un fichier. L'onglet Nov et Déc sont OK c'est un exemple du résultat final donc prendre l'onglet Fev et Mars dans lesquelles j'ai exécuter ma macro dans chacun d'eu. Le résultat est que la feuille Fev le TDC prend les valeurs de la feuille Mars car le tableau de mars a été renommé "tableau" comme dans mon onglet "fev" et a ainsi écrasé les infos...

Je vous remercie à l'avance de votre aide si précieuse car je travaille sur ce dossier depuis 3-4 jours et j'y arrive pas... je me suis donc dit que peut-être pour vous c'était tout simple à faire...

SVP aidez-moi à trouver une piste de solution car je tourne en rond... :)

Bouclesdor
 

Pièces jointes

  • BONNE VERSION réduite.xlsm
    83.4 KB · Affichages: 47

bouclesdor

XLDnaute Occasionnel
Re : comment faire un code VBA "évolutif" dont le nom de référence change (pour TDC)

ah oui j'oubliais.... En premier lieu j'avais fait le code ci bas que j'ai créé avec l'enregistreur de macro mais comme le nom de l'onglet change à chaque mois (ici c'est pour "avr")et le nom de la table (table3_5) je dois le changer manuellement dans le code... Dans le but d'automatiser le plus possible mes taches j'ai voulu tenté de modifier mon code... j'ai donc pensé qu'en pouvant prédire le nom de la table en utilisant un code qui nomme ma plage de mon tableau ("tableau(+1)") à chaque fois que la macros est exécuter ça serait peut-être bien mais je ne sais pas comment faire donc je compte sur votre expérience pour m'aider à trouver la solution à mon problème!


Sub totauxEtTDC()
Range("Table3_5[[#Headers],[Prix par item]]").Select
ActiveSheet.ListObjects("Table3").ShowTotals = True
Range("Table3_5[[#Totals],[Valeur total en CDN du produit]]").Select
ActiveSheet.ListObjects("Table3").ListColumns("Valeur total en CDN du produit") _
.TotalsCalculation = xlTotalsCalculationSum
Range("W1").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"avr!R1C1:R1048576C21", Version:=xlPivotTableVersion12).CreatePivotTable _
TableDestination:="avr!R1C23", TableName:="PivotTable1", DefaultVersion:= _
xlPivotTableVersion12
Sheets("avr").Select
Cells(1, 23).Select

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Projet")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields("Valeur total en CDN du produit"), _
"Count of Valeur total en CDN du produit", xlCount
With ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"Count of Valeur total en CDN du produit")
.NumberFormat = "# ##0,00 $"
End With
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 16
Range("X1").Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"Count of Valeur total en CDN du produit")
.Caption = "Sum of Valeur total en CDN du produit"
.Function = xlSum
End With
Range("W8").Select
End Sub

Merci

Bouclesdor
 

chris

XLDnaute Barbatruc
Re : comment faire un code VBA "évolutif" dont le nom de référence change (pour TDC)

Bonjour

Pourquoi ne pas nommer tes tableaux du nom de la feuille, cela simplifierait.
Les tableaux ayant un nom, inutile de les renommer dans le code.

J'ai un peu simplifié ton code, renommé les tableaux : cela fonctionne.
 

Pièces jointes

  • Chris_BONNE VERSION réduite.xlsm
    85.2 KB · Affichages: 48

bouclesdor

XLDnaute Occasionnel
Re : comment faire un code VBA "évolutif" dont le nom de référence change (pour TDC)

Époustouflant!! :)

Grace à vous Chris j'ai découvert l'utilisation du "with ActiveSheet.... end with" !

Merci beaucoup de votre aide Chris! J'avais pas pensé utiliser le nom de l'onglet pour renommer mon tableau mais c'est une excellente idée!

C'est pour ça que je me suis dit quand demandant votre aide vous pourriez surement m'aider à résoudre mon problème en plus de m'aider dans mon apprentissage des codes VBA!

Puis-je me permettre de vous poser une petite question...? dans le code vous avez inscrit: Tsource = "=" & SheetName . Que veux dire le : "=" & ?

Merci mille fois Chris!

Bouclesdor
 

chris

XLDnaute Barbatruc
Re : comment faire un code VBA "évolutif" dont le nom de référence change (pour TDC)

Bonjour

Ravie que cela t'ai aidée.

Je n'ai pas revérifié mais comme dans ton code il y avait =suivi du nom j'ai préféré respecter cette syntaxe et faire une concaténation, c'est à dire une juxtaposition, du symbole = et du nom pour qu'EXCEL reçoive
"=janv"
ou autre nom selon le cas

Le & sert à cela.
 

bouclesdor

XLDnaute Occasionnel
Re : comment faire un code VBA "évolutif" dont le nom de référence change (pour TDC)

ah merci Chris pour les précisions!!

Un jour avec l'aide de ce forum je serai capable d'aider moi aussi les débutants en VBA! :)

Merci et bonne journée!
 

Discussions similaires

Réponses
9
Affichages
164

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg