[VB] problème TCD

Le
jean-francois LEGRAS
Bonjour à vous !


J'ai une macro toute simple qui crée un TCD :

fichier de base = fichier contenant différentes colonnes : N° de compte
(appelé "Livré") ; article commandé ; rubrique de l'article ; quantité
commandée ; chiffre d'affaires (appelé "Net")
TCD obtenu = consolider pour chaque N° de compte le chiffre d'affaires de
chaque rubrique => "Livré" verticalement ; "Rubrique" verticalement ; "Net"
en données.


Voici la macro :


Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position =
1: End With

End With



Le problème est le suivant : Je ne souhaiterait prendre en compte que 16
rubriques (nommons-les "Rubrique 1", "Rubrique 2", ., "Rubrique16"). Or
au moins 18 peuvent se retrouver dans le fichier. Est-il possible dans le
TCD que l'on ne retrouve toujours QUE les 16 rubriques souhaitées ? Et si
oui, comment retranscrire cela dans VB ?

Je précise le fond du problème : ma macro lance ensuite de nombreux calculs
à partir du TCD. Ces calcules fonctionnent avec un TCD comptant 16
rubriques. Or je me suis aperçu que certaines rubriques anecdotiques
pouvaient apparaître dans les fichiers que je traitais. Forcément , la macro
ne fonctionne alors plus. Et je me vois mal réécrire toute la macro juste
pour une histoire de rubriques futiles qui se baladent de temps en temps
dans mes fichiers.



Merci beaucoup d'avance pour vos solutions !!


Slts
Jiffey
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jean-francois LEGRAS
Le #19071691
Re-bonjour,



Bon après qq recherches sur internet, j'ai trouvé qqch et j'ai modifié ma
macro :

Sub test()




Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position =
1: End With
With .PivotFields("Rubrique"): .PivotItems("rubrique 17").Visible =
False: End With

End With


End Sub



Le problème, c'est que lorsque la rubrique 17 n'est pas visible la macro
bug. Ce que je souhaiterait c'est que la rubrique 17 soit rendu invisible
uniquement si elle est dans le fichier...


Merci pour vos réponses !

A+
JF


"jean-francois LEGRAS"
Bonjour à vous !


J'ai une macro toute simple qui crée un TCD :

fichier de base = fichier contenant différentes colonnes : N° de compte
(appelé "Livré") ; article commandé ; rubrique de l'article ; quantité
commandée ; chiffre d'affaires (appelé "Net")
TCD obtenu = consolider pour chaque N° de compte le chiffre d'affaires de
chaque rubrique => "Livré" verticalement ; "Rubrique" verticalement ;
"Net" en données.


Voici la macro :


Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position
= 1: End With

End With



Le problème est le suivant : Je ne souhaiterait prendre en compte que 16
rubriques (nommons-les "Rubrique 1", "Rubrique 2", ...., "Rubrique16"). Or
au moins 18 peuvent se retrouver dans le fichier. Est-il possible dans le
TCD que l'on ne retrouve toujours QUE les 16 rubriques souhaitées ? Et si
oui, comment retranscrire cela dans VB ?

Je précise le fond du problème : ma macro lance ensuite de nombreux
calculs à partir du TCD. Ces calcules fonctionnent avec un TCD comptant 16
rubriques. Or je me suis aperçu que certaines rubriques anecdotiques
pouvaient apparaître dans les fichiers que je traitais. Forcément , la
macro ne fonctionne alors plus. Et je me vois mal réécrire toute la macro
juste pour une histoire de rubriques futiles qui se baladent de temps en
temps dans mes fichiers.



Merci beaucoup d'avance pour vos solutions !!


Slts
Jiffey



jean-francois LEGRAS
Le #19071671
Bonjour,



Bon ben j'ai trouvé la solution pour ceux que ca intéresse :



Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position =
1: End With

End With


Dim p As PivotItem
With MonTCD1.PivotFields("Rubrique")
For Each p In .PivotItems
p.Visible = True
Next p
For Each p In .PivotItems
If p.Value = "rubrique 17" Or p.Value = "rubrique 18" Then p.Visible
= False
Next p
End With



Autre possibilité peut-être plus sûre :


Dim p As PivotItem
With MonTCD1.PivotFields("Rubrique")
For Each p In .PivotItems
p.Visible = True
Next p
For Each p In .PivotItems
If p.Value = "rubrique 1" And p.Value = "rubrique 2" And p.Value =
"rubrique 2" And p.Value = "rubrique 3" And p.Value = "rubrique 4" And
p.Value = "rubrique 5" And p.Value = "rubrique 6" And p.Value = "rubrique
7" And p.Value = "rubrique 8" And p.Value = "rubrique 9" And p.Value =
"rubrique 10" And p.Value = "rubrique 11" And p.Value = "rubrique 12" And
p.Value = "rubrique 13" And p.Value = "rubrique 14" And p.Value =
"rubrique 15" And p.Value = "rubrique 16" And Then p.Visible = False
Next p
End With


Par contre, je voudrais savoir si la "grammaire" de cette macro est
correcte. Je reposte avec un autre sujet...

A+
JF





"jean-francois LEGRAS" %
Re-bonjour,



Bon après qq recherches sur internet, j'ai trouvé qqch et j'ai modifié ma
macro :

Sub test()




Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position
= 1: End With
With .PivotFields("Rubrique"): .PivotItems("rubrique 17").Visible =
False: End With

End With


End Sub



Le problème, c'est que lorsque la rubrique 17 n'est pas visible la macro
bug. Ce que je souhaiterait c'est que la rubrique 17 soit rendu invisible
uniquement si elle est dans le fichier...


Merci pour vos réponses !

A+
JF


"jean-francois LEGRAS" news:
Bonjour à vous !


J'ai une macro toute simple qui crée un TCD :

fichier de base = fichier contenant différentes colonnes : N° de compte
(appelé "Livré") ; article commandé ; rubrique de l'article ; quantité
commandée ; chiffre d'affaires (appelé "Net")
TCD obtenu = consolider pour chaque N° de compte le chiffre d'affaires
de chaque rubrique => "Livré" verticalement ; "Rubrique" verticalement ;
"Net" en données.


Voici la macro :


Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position
= 1: End With

End With



Le problème est le suivant : Je ne souhaiterait prendre en compte que 16
rubriques (nommons-les "Rubrique 1", "Rubrique 2", ...., "Rubrique16").
Or au moins 18 peuvent se retrouver dans le fichier. Est-il possible dans
le TCD que l'on ne retrouve toujours QUE les 16 rubriques souhaitées ? Et
si oui, comment retranscrire cela dans VB ?

Je précise le fond du problème : ma macro lance ensuite de nombreux
calculs à partir du TCD. Ces calcules fonctionnent avec un TCD comptant
16 rubriques. Or je me suis aperçu que certaines rubriques anecdotiques
pouvaient apparaître dans les fichiers que je traitais. Forcément , la
macro ne fonctionne alors plus. Et je me vois mal réécrire toute la macro
juste pour une histoire de rubriques futiles qui se baladent de temps en
temps dans mes fichiers.



Merci beaucoup d'avance pour vos solutions !!


Slts
Jiffey







MichDenis
Le #19072031
Bonjour Jean-François,

Si tu désires utiliser seulement les 16 premières rubriques
dans ton tableau croisé dynamique et que tu as une rubrique
par colonne, pourquoi ne pas limiter ta source de données
aux 16 premières colonnes ?

'-------------------------------------------------------
Dim Pt as Pivottable, Adr as String, Adr1 As String

'Définir où sera créé le pivottable
With Worksheets("Feuil1")
Adr1 = .Name & "!" & .Range("A1").Address
End With

With Worksheets("stats")
'Définir où sont les données pour le pivotcache
Adr = .Name & "!" & .Range("A1:P" & _
.Range("A65536").End(xlUp).Row).Address

'Création du PivotTable
Set PT = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, SourceData:=Range(Adr)) _
.CreatePivotTable(TableDestination:=Range(Adr1), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)

With Pt
'Reste du code
end with
'-------------------------------------------------------





"jean-francois LEGRAS" discussion :
Bonjour à vous !


J'ai une macro toute simple qui crée un TCD :

fichier de base = fichier contenant différentes colonnes : N° de compte
(appelé "Livré") ; article commandé ; rubrique de l'article ; quantité
commandée ; chiffre d'affaires (appelé "Net")
TCD obtenu = consolider pour chaque N° de compte le chiffre d'affaires de
chaque rubrique => "Livré" verticalement ; "Rubrique" verticalement ; "Net"
en données.


Voici la macro :


Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position 1: End With

End With



Le problème est le suivant : Je ne souhaiterait prendre en compte que 16
rubriques (nommons-les "Rubrique 1", "Rubrique 2", ...., "Rubrique16"). Or
au moins 18 peuvent se retrouver dans le fichier. Est-il possible dans le
TCD que l'on ne retrouve toujours QUE les 16 rubriques souhaitées ? Et si
oui, comment retranscrire cela dans VB ?

Je précise le fond du problème : ma macro lance ensuite de nombreux calculs
à partir du TCD. Ces calcules fonctionnent avec un TCD comptant 16
rubriques. Or je me suis aperçu que certaines rubriques anecdotiques
pouvaient apparaître dans les fichiers que je traitais. Forcément , la macro
ne fonctionne alors plus. Et je me vois mal réécrire toute la macro juste
pour une histoire de rubriques futiles qui se baladent de temps en temps
dans mes fichiers.



Merci beaucoup d'avance pour vos solutions !!


Slts
Jiffey
jean-francois LEGRAS
Le #19072011
Bonjour Mich,


Non, dans le tableau source, la colonne "Rubrique" est unique. Ensuite sur
chaque ligne le nom de la rubrique peut être différente.

concrètement, le tableau source ressemble à ça :


article commandé ; rubrique ; quantité commandée ; chiffre d'affaires
(appelé "Net")
157796 papier 15
45
130008 écriture 100
13
etc.



Quant au TDC, le problème (enfin, je ne sais pas si c'en est un...) c'est
que les rubriques qui m'intéresse ne sont pas adjacentes. Pour être plus
précis les rubriques qui m'intéressent sont les rubriques 1 à 15 puis 19.


Masi je pense que le code que j'ai écrit dans mon 3ème mail fonctionne.
Après, peut-être peut-on l'écrire mieux ou différemment.

Je serais ravi de lire vos suggestions !


A+
JF






"MichDenis"
Bonjour Jean-François,

Si tu désires utiliser seulement les 16 premières rubriques
dans ton tableau croisé dynamique et que tu as une rubrique
par colonne, pourquoi ne pas limiter ta source de données
aux 16 premières colonnes ?

'-------------------------------------------------------
Dim Pt as Pivottable, Adr as String, Adr1 As String

'Définir où sera créé le pivottable
With Worksheets("Feuil1")
Adr1 = .Name & "!" & .Range("A1").Address
End With

With Worksheets("stats")
'Définir où sont les données pour le pivotcache
Adr = .Name & "!" & .Range("A1:P" & _
.Range("A65536").End(xlUp).Row).Address

'Création du PivotTable
Set PT = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, SourceData:=Range(Adr)) _
.CreatePivotTable(TableDestination:=Range(Adr1), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)

With Pt
'Reste du code
end with
'-------------------------------------------------------





"jean-francois LEGRAS" groupe de
discussion :
Bonjour à vous !


J'ai une macro toute simple qui crée un TCD :

fichier de base = fichier contenant différentes colonnes : N° de compte
(appelé "Livré") ; article commandé ; rubrique de l'article ; quantité
commandée ; chiffre d'affaires (appelé "Net")
TCD obtenu = consolider pour chaque N° de compte le chiffre d'affaires de
chaque rubrique => "Livré" verticalement ; "Rubrique" verticalement ;
"Net"
en données.


Voici la macro :


Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position
> 1: End With

End With



Le problème est le suivant : Je ne souhaiterait prendre en compte que 16
rubriques (nommons-les "Rubrique 1", "Rubrique 2", ...., "Rubrique16"). Or
au moins 18 peuvent se retrouver dans le fichier. Est-il possible dans le
TCD que l'on ne retrouve toujours QUE les 16 rubriques souhaitées ? Et si
oui, comment retranscrire cela dans VB ?

Je précise le fond du problème : ma macro lance ensuite de nombreux
calculs
à partir du TCD. Ces calcules fonctionnent avec un TCD comptant 16
rubriques. Or je me suis aperçu que certaines rubriques anecdotiques
pouvaient apparaître dans les fichiers que je traitais. Forcément , la
macro
ne fonctionne alors plus. Et je me vois mal réécrire toute la macro juste
pour une histoire de rubriques futiles qui se baladent de temps en temps
dans mes fichiers.



Merci beaucoup d'avance pour vos solutions !!


Slts
Jiffey




MichDenis
Le #19072361
Ce que je voulais te signifier, c'est qu'il n'est pas nécessaire
d'inclure dans la plage source 18 colonnes si on sait d'avance
que l'information contenue dans les 2 dernières colonnes ne sera
pas pertinente pour la suite des opérations.

| Pour être plus précis les rubriques qui m'intéressent sont les
| rubriques 1 à 15 puis 19.

OK.
Si la présentation des données est toujours la même, il ne t'est pas permis
d'intervertir les colonnes avant le début de la création du Pivottable ?




"jean-francois LEGRAS" discussion :
Bonjour Mich,


Non, dans le tableau source, la colonne "Rubrique" est unique. Ensuite sur
chaque ligne le nom de la rubrique peut être différente.

concrètement, le tableau source ressemble à ça :


article commandé ; rubrique ; quantité commandée ; chiffre d'affaires
(appelé "Net")
157796 papier 15
45
130008 écriture 100
13
etc.



Quant au TDC, le problème (enfin, je ne sais pas si c'en est un...) c'est
que les rubriques qui m'intéresse ne sont pas adjacentes. Pour être plus
précis les rubriques qui m'intéressent sont les rubriques 1 à 15 puis 19.


Masi je pense que le code que j'ai écrit dans mon 3ème mail fonctionne.
Après, peut-être peut-on l'écrire mieux ou différemment.

Je serais ravi de lire vos suggestions !


A+
JF






"MichDenis"
Bonjour Jean-François,

Si tu désires utiliser seulement les 16 premières rubriques
dans ton tableau croisé dynamique et que tu as une rubrique
par colonne, pourquoi ne pas limiter ta source de données
aux 16 premières colonnes ?

'-------------------------------------------------------
Dim Pt as Pivottable, Adr as String, Adr1 As String

'Définir où sera créé le pivottable
With Worksheets("Feuil1")
Adr1 = .Name & "!" & .Range("A1").Address
End With

With Worksheets("stats")
'Définir où sont les données pour le pivotcache
Adr = .Name & "!" & .Range("A1:P" & _
.Range("A65536").End(xlUp).Row).Address

'Création du PivotTable
Set PT = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, SourceData:=Range(Adr)) _
.CreatePivotTable(TableDestination:=Range(Adr1), _
TableName:="Denis", DefaultVersion:=xlPivotTableVersion10)

With Pt
'Reste du code
end with
'-------------------------------------------------------





"jean-francois LEGRAS" groupe de
discussion :
Bonjour à vous !


J'ai une macro toute simple qui crée un TCD :

fichier de base = fichier contenant différentes colonnes : N° de compte
(appelé "Livré") ; article commandé ; rubrique de l'article ; quantité
commandée ; chiffre d'affaires (appelé "Net")
TCD obtenu = consolider pour chaque N° de compte le chiffre d'affaires de
chaque rubrique => "Livré" verticalement ; "Rubrique" verticalement ;
"Net"
en données.


Voici la macro :


Set MonTCD1 = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,
SourceData:=[stats!A1:B2]).CreatePivotTable(TableDestination:=Sheets("onglet1").Cells(3,
1), TableName:="Tableau croisé dynamique",
DefaultVersion:=xlPivotTableVersion10)

With MonTCD1

.SourceData = [stats!A1].CurrentRegion.Address(, , xlR1C1, True)
.AddFields RowFields:="Livré"

With .PivotFields("Net"): .Orientation = xlDataField: .Position = 1:
.Function = xlSum: End With
With .PivotFields("Rubrique"): .Orientation = xlColumnField: .Position
> 1: End With

End With



Le problème est le suivant : Je ne souhaiterait prendre en compte que 16
rubriques (nommons-les "Rubrique 1", "Rubrique 2", ...., "Rubrique16"). Or
au moins 18 peuvent se retrouver dans le fichier. Est-il possible dans le
TCD que l'on ne retrouve toujours QUE les 16 rubriques souhaitées ? Et si
oui, comment retranscrire cela dans VB ?

Je précise le fond du problème : ma macro lance ensuite de nombreux
calculs
à partir du TCD. Ces calcules fonctionnent avec un TCD comptant 16
rubriques. Or je me suis aperçu que certaines rubriques anecdotiques
pouvaient apparaître dans les fichiers que je traitais. Forcément , la
macro
ne fonctionne alors plus. Et je me vois mal réécrire toute la macro juste
pour une histoire de rubriques futiles qui se baladent de temps en temps
dans mes fichiers.



Merci beaucoup d'avance pour vos solutions !!


Slts
Jiffey




Publicité
Poster une réponse
Anonyme