Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VB] problème TCD

5 réponses
Avatar
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

5 réponses

Avatar
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" a écrit dans le message de 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



Avatar
jean-francois LEGRAS
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" a écrit dans le message de news:
%
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" a écrit dans le message de
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







Avatar
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" a écrit dans le message de 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
Avatar
jean-francois LEGRAS
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" a écrit dans le message de news:

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" a écrit dans le message de
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




Avatar
MichDenis
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" a écrit dans le message de groupe de
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" a écrit dans le message de news:

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" a écrit dans le message de
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