Macro VBA pour créer un TCD

Noeste

XLDnaute Nouveau
Bonjour à tout le forum,

Je me permets de vous demander de l'aide car je suis en panne d'inspiration, j'ai cherché une solution sur le forum mais en vain.

En fait, je voudrais créer une macro me permettant de créer un tableau croisé dynamique à partir d'un fichier hedbomadaire sur excel, bien entendu ce fichier n'est jamais le même et je me retrouve coincé pour la sélection de la source dans la macro.

J'ai fais ça mais, cela ne marche qu'une fois à cause de la source (ici en gras)

Sub TCDmensuel()

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
''Oct global'!R1C1:R10601C36').CreatePivotTable TableDestination:='', _
TableName:='PivotTable2', DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables('PivotTable2').AddFields RowFields:='Type', _
ColumnFields:='PK'
ActiveSheet.PivotTables('PivotTable2').PivotFields(' Amount LC'). _
Orientation = xlDataField
ActiveWorkbook.ShowPivotTableFieldList = False
End Sub

Merci de votre compréhension et de votre aide

Noeste
 

Dan

XLDnaute Barbatruc
Bonsoir,

Pas facile sans voir ton fichier.
Remplace ta macrro par celle-ci après :
Code:
Sub TCDmensuel()
' Macro enregistrée le 15/11/2005 par Dan pour XL download
' Post de Noeste  - [B]Lien supprimé[/B]

Sheets('Oct global').Activate
With ActiveWorkbook
    .Names.Add Name:='DataListe', RefersToR1C1:=ActiveSheet.UsedRange
    .PivotCaches.Add(SourceType:=xlDatabase, SourceData:='DataListe').CreatePivotTable TableDestination:='', _
 TableName:='TCD'
 End With
 With ActiveSheet
    .PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    .PivotTables('TCD').AddFields RowFields:='Type', ColumnFields:='PK'
    .PivotTables('TCD').PivotFields(' Amount LC').Orientation = xlDataField
End With
 ActiveWorkbook.ShowPivotTableFieldList = False
End Sub
Remarques :
- dans ta feuille OCT GLOBAL mets un espace entre OCT et GLOBAL, il vaut mieux éviter les espaces qui peuvent toujours causer des pb.
Si tu fais cela, n'oublie pas de corriger le nom dans la macro ci-avant.
- J'ai enlevé l'instruction 'DefaultVersion:=xlPivotTableVersion10' qui était placée après tablename :=TCD

Je n'ai pas pu tester sans fichier. Fais donc savoir si cela fonctionne

Si pb n'hésite pas.

;)

Message édité par: Dan, à: 15/11/2005 22:16
 

Noeste

XLDnaute Nouveau
Je suis désolé de ne pas avoir répondu plus vite mais je voulais remercier Dan et sa proposition.

Je ne l'ai pas complétement exploité mais son astuce (dataliste) m'a permis de trouver une autre solution de remplacement.

Donc pour ceux qui aimerait une petite macro permettant de faire un TCD en partant d'un fichier variable, je vous propose ce que j'ai trouvé, il faudra juste l'adapter à vos besoins. Cette macro permet de créer un TCD à partir du fichier de votre choix, la partie en rouge est à modifier car elle concerne mon fichier de départ. Pour le reste à vous d'adapter.


Public Sub Stats_Findemois()
Dim varReturn As Variant, intloop As Integer
varReturn = Application.GetOpenFilename(, , , , True)
If TypeName(varReturn) = 'Boolean' Then Exit Sub
If TypeName(varReturn) = 'String' Then
Workbooks.Open CStr(varReturn)

Else
For intloop = 1 To UBound(varReturn) Step 1
Workbooks.Open CStr(varReturn(intloop))

Next intloop
End If

Rows('1:4').Select
Selection.Delete Shift:=xlUp
Columns('A:A').Select
Selection.Delete Shift:=xlToLeft
Rows('2:2').Select
Selection.Delete Shift:=xlUp
Cells.Select
Selection.Replace What:='-', Replacement:='', LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=',', Replacement:='', LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Range('A1').Select
ActiveWorkbook.Names.Add Name:='DataListe', RefersToR1C1:=ActiveSheet.UsedRange
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
'dataliste').CreatePivotTable TableDestination:='', _
TableName:='PivotTable1', DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables('PivotTable1').AddFields RowFields:=Array('Type', _
'Data'), ColumnFields:='PK'
With ActiveSheet.PivotTables('PivotTable1').PivotFields(' Amount LC')
.Orientation = xlDataField
.Position = 1
End With
ActiveSheet.PivotTables('PivotTable1').PivotFields(' Amount LC'). _
Orientation = xlDataField
ActiveWorkbook.ShowPivotTableFieldList = False
Application.CommandBars('PivotTable').Visible = False
Range('B5').Select
ActiveSheet.PivotTables('PivotTable1').PivotFields('Sum of Amount LC'). _
Function = xlCount

End Sub

Voilà ma contribution au forum en guise de remerciement
Noeste
 

Dan

XLDnaute Barbatruc
Bonjour Noeste,

Bien vu ton code mais il y a pas mal de chose à modifier et à simplifier la dedans car pour faire un TCD par macro cela peut être plus compliqué.

Il vaut mieux ne pas prendre de modèle pour faire un TCD car les base de données sont totalement différentes et les résultats à exploiter aussi.
Donc à prendre avec toutes les restrictions voulues, sinon on va au casse-pipe à coup sûr.

J'avais notamment simplifié ton code et je vois que tu n'as pas repris cela. Dommage car cela permet de le simplifier tout en accélérant l'exécution de ta macro.

Sinon merci d'être revenue sur ce fil tout de même pour nous dire que tu as résolu ton pb.

Bon ap.

;)
 

Noeste

XLDnaute Nouveau
Dan,

Je suis revenu (je suis un mec :eek: ), tout simplement pour remercier ceux qui prennent du temps (toi en l'occurence) pour aider les débutants comme moi.

Je n'ai pas repris ton code qui c'est vrai, simplifiait la macro, car je ne suis pas arrivé à le faire fonctionner dans ma macro. Peut être une mauvaise manip de ma part, je ne sais pas ?

Par contre, j'ai mis mon résultat pour montrer le résultat que j'avais obtenu grâce à ton aide, mais il est certain qu'il vaut mieux chercher soit même ce dont on a besoin.

Sinon j'ai de nouveau besoin de vos services, en fait j'ai cherché cette macro pour simplifier le travail de mes 9 collègues qui passaient chaque mois une demi journée à faire des stats, maintenant ils mettront 5 minutes, mais comme on dit quand on donne un doigt, c'est le bras qu'on perd.... Mes collègues veulent une macro plus pointue.

Donc j'aimerais que n'apparaissent que certaines des valeurs de mon TCD, et par consèquent que les autres soient cachées.
J'ai un bout de code mais il n'est pas compris dans vb.

Je veux que les items 1, 4, 9, 11, 15 apparaissent et que tous les items restant soient masqués

Le code :

With ActiveSheet.PivotTables('PivotTable1').PivotFields('PK')
Fori = 1
.PivotItems(i).Visible = True
Fori = 4
.PivotItems(i).Visible = True
Fori = 9
.PivotItems(i).Visible = True
Fori = 11
.PivotItems(i).Visible = True
Fori = 15
.PivotItems(i).Visible = True
Fori = 5
.PivotItems(i).Visible = False
Fori = 6
.PivotItems(i).Visible = False
Fori = 7
.PivotItems(i).Visible = False
Fori = 8
.PivotItems(i).Visible = False
Fori = 16
.PivotItems(i).Visible = False
Fori = 19
.PivotItems(i).Visible = False

Si vous avez une solution ?
Merci par avance
Noeste

Message édité par: Noeste, à: 18/11/2005 14:26
 

Dan

XLDnaute Barbatruc
Bonsoir,

Tu es près de ce qu'il faut faire. Essaie ceci

Code:
Sub CachePivotItems()
With ActiveSheet.PivotTables('PivotTable1').PivotFields('PK')
.PivotItems(1).Visible = True
.PivotItems(4).Visible = True
.PivotItems(9).Visible = True
.PivotItems(11).Visible = True
.PivotItems(15).Visible = True
.PivotItems(6).Visible = False
.PivotItems(7).Visible = False
.PivotItems(8).Visible = False
.PivotItems(16).Visible = False
.PivotItems(19).Visible = False
End with
End sub
 

Noeste

XLDnaute Nouveau
Dan,

Merci pour ta proposition, Je l'ai essayé mais malheuresement ça ne fonctionne pas ....tous les pivots restent affichés

Malgré plusieurs tentative de création de code, je suis toujours au point mort, le plus simple pour moi serait de ne faire apparaître que les 'PivotItems' numéro 1 / 4 / 9 / 11 / 15 et cacher par défaut tous les autres quelque soit ma source.

Merci quand même.

@+
Noeste


PS : Je dois mal me servir du forum, mais existe-il un moyen de retrouver mon topic directement, car jusqu'à présent je suis obligé de lister toutes les pages pour arriver au mien ...

Message édité par: Noeste, à: 21/11/2005 14:56
 

Dan

XLDnaute Barbatruc
Bonsoir,

Si les chiffres 1 / 4 / 9 / 11 / 15 sont dans le champ, il te faut mettre ces chiffres entre ' '. Ce que je ne t'ai pas fait dans ma proposition. Mea culpa...

La structure doit être celle-ci :

Code:
With ActiveSheet.PivotTables('NOM DU TCD').PivotFields('NOM DU CHAMP')
        .PivotItems('ITEM A CACHER').Visible = False
        .PivotItems('ITEM A MONTRER').Visible = True
End With

L'item à cacher ou à montrer est la valeur trouvée dans le nom du champ.

Si pb n'hésite pas à placer ton fichier avec des donnes bidons ce sera plus facile.

Pour trouver ton topic, si tu n'es pas inscrit comme membre, c'est plus difficile. Il te faut chercher dans les pages. Mais en faisant CTRL + F sur ton clavier tu peux taper le sujet et la recherche sera effectuée sur la page active.

;)

Message édité par: Dan, à: 21/11/2005 23:17
 

Noeste

XLDnaute Nouveau
Bonjour à tous,

Suite à un pb de connexion internet, je n'ai pas pu répondre avant.

Dan, j'ai bien compris la structure du code, mais mon soucis est que les chiffres de ma colonnes sont variables, si il y aura toujours les chiffres 1 / 4 / 9 / 11 / 15 dans tous les fichiers, les autres chiffres ne seront pas forcement dans tous les fichiers à chaque fois.

Le plus simple serait peut être de supprimmer les lignes indésirables avant le TCD pour ne garder que les 5 qui m'intérresse ?

Sinon je vous mets un extrait d'un de mes fichiers, je dis extrait car ils font environ 10000 lignes chaque mois ...
Les colonnes en rouge sont celle que je prends en compte pour mon TCD.

Merci par avance
@+
Noeste

Message édité par: Noeste, à: 24/11/2005 15:20
 

Noeste

XLDnaute Nouveau
Décidement j'ai des soucis avec mon fichier, je fais un autre essai en attachant directement mon fichier sur le message [file name=SourceTCD.zip size=6664]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SourceTCD.zip[/file] [file name=SourceTCD.zip size=6664]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SourceTCD.zip[/file]
 

Pièces jointes

  • SourceTCD.zip
    6.5 KB · Affichages: 75

Discussions similaires

Statistiques des forums

Discussions
312 237
Messages
2 086 489
Membres
103 234
dernier inscrit
matteo75654548