OVH Cloud OVH Cloud

2 TCDs côte à côte

6 réponses
Avatar
Cucky
Bonjour,
avant de poster ma question croyez-moi j'ai bien cherch=E9 dans les
anciens messages de ce NG, mais en vain.
Alors cette question me trotte depuis longtemps dans la t=EAte:
j'ai 2 TCDs dans la m=EAme feuille s=E9par=E9e par une simple colonne.
Existe-t-il un moyen d'appliquer le m=EAme filtre de PAGE que pour le
TCD1 ??
Merci
Corinne

6 réponses

Avatar
isabelle
bonjour Corinne,

supposons que le champ de page du tcd1 est en cellule B1,
tu pourrais mettre cette macro sur la page code de la feuille,

Private Sub Worksheet_Calculate()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub


isabelle

Bonjour,
avant de poster ma question croyez-moi j'ai bien cherché dans les
anciens messages de ce NG, mais en vain.
Alors cette question me trotte depuis longtemps dans la tête:
j'ai 2 TCDs dans la même feuille séparée par une simple colonne.
Existe-t-il un moyen d'appliquer le même filtre de PAGE que pour le
TCD1 ??
Merci
Corinne



Avatar
dédélafinance
Bonjour Isabelle,

J'espère que vous serez toujours disponible sur ce sujet qui me passionne.

Votre réponse pourrait m'être très utile (4 TCD "commandés par le même tri
de page sur champ dynamique).

Je connais bien (sans être expert pour autant) les TCD, mais je ne connais
pas grand'chose à VBA.

Après avoir fait depuis ma feuille Excel : OutilsMacroNomAppliquer à ce
classeur Créer, j'ai incorporé votre suggestion entre Sub et End Sub puis
j''ai remplacé, dans votre example, le "NomDuChampDePage" par le mien
(Manager) et la référence de la cellule [B1] par la mienne [A3].

J'obtiens donc :

""Sub Nom ()
""Private Sub Worksheet_Calculate()
"" ActiveSheet.PivotTables("Tableau croisé
dynamique2").PivotFields("Manager").
"" CurrentPage = "" & [A3]
""End Sub

""End Sub


Rien n'y fait et je tourne en rond depuis + d'1 heure. Je n'obtiens rien
automatiquement et si j'essaye d'exécuter la Macro "Nom", j'ai 1 message
d'erreur de compilation : " End Sub attendu" et la première ligne du script
"Sub Nom" apparait flèchée et surlignée en jaune. Malgré l'aide de MS, je ne
sais que faire !

Pourriez-vous expliquer SVP de façon suffisamment détaillée pour un
néophyte, comment mettre correcdtement cette macro sur la page code de la
feuille ?

Par la même occasion, quelle syntaxe adopter SVP pour asservir plusieurs TCD
(2,3,4, ...) se trouvant sur la même feuille de calcul au même champ de page
du TCD1 (lui-même sur la même feuille de calcul que les autresTCD) ?

J'allais oublier: mon OS est Windows 2000 Pro (ou XP Ed Fam au besoin) et je
suis sous Office 2000 Pro mis à jour régulièrement (dans les 2 cas !)

D'avance 1000 merci(s) et bon W-E


DD



bonjour Corinne,

supposons que le champ de page du tcd1 est en cellule B1,
tu pourrais mettre cette macro sur la page code de la feuille,

Private Sub Worksheet_Calculate()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub


isabelle

Bonjour,
avant de poster ma question croyez-moi j'ai bien cherché dans les
anciens messages de ce NG, mais en vain.
Alors cette question me trotte depuis longtemps dans la tête:
j'ai 2 TCDs dans la même feuille séparée par une simple colonne.
Existe-t-il un moyen d'appliquer le même filtre de PAGE que pour le
TCD1 ??
Merci
Corinne






Avatar
isabelle
bonjour DD,

tout d'abord vérifier que votre tcd ce nomme bien "Tableau croisé dynamique2" c'est à adapter.

pour l'explication:
c'est une macro événementiel (événement calculate de la feuille de calcul contenant le tcd)
c'est à dire que ce genre de macro s'exécute tout seul lorsqu'il se produit l'événement,
lorsque le tcd est mit à jour automatiquement l'action calculate se produit et il en suit l'exécution de la macro.
ce code doit être mit sur la page code de la feuille, si vous faite un click droit sur l'onglet de la feuille contenant le tcd,
vous sélectionner "Visualiser le code" automatiquement vous êtes diriger vers la page code de cette feuille.

donc pour résumer, si votre classeur contient 2 feuilles "Feuil1" et Feuil2"
dans visual basic(Atl+F11), à gauche il y a l'arborescence des classeurs ouvert,
sous le VBAProject(nomDeVotreClasseur) il y aura :

Feuil1(Feuil1)
Feuil2(Feuil2)
Module1
ThisWorkbook

vous pouvez aussi faire un double click sur Feuil1(Feuil1) pour afficher cette page à gauche.
cela revient au même que de faire un click droit sur l'onglet de la feuille contenant le tcd,
et sélectionner "Visualiser le code"

sur la barre de titre en haut de la fenêtre visual basic il y a le nom de la page de code actuellement afficher.(gauche)
par exemple : Microsoft Visual Basic - MonClasseur.xls - [module1(code)]
c'est probablement là que vous avez votre macro "Sub Nom ()"

si vous double click sur Feuil1(Feuil1) le titre de la barre changera pour :
Microsoft Visual Basic - MonClasseur.xls - [Feuil1(code)]
cela vous assure d'avoir atteint la bonne page de gauche. (bien entendu si le tcd est sur la Feuil1)

si le tcd est sur la Feuil1, la macro doit être mit sur la page code Feuil1(Feuil1)
si le tcd est sur la Feuil2, la macro doit être mit sur la page code Feuil2(Feuil2)

la macro à copier est la suivante (nom du tcd "Tableau croisé dynamique2" et nom du champ "NomDuChampDePage" sont à adapter)

Private Sub Worksheet_Calculate()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub

attention au retour à la ligne intempestif,
si la commande entre le sub et le end sub apparaît en rouge remettre la commande en une seule ligne.

si vous désirer que la macro s'exécute sur l'action click d'un bouton au lieu de l'événement calculate
placer un bouton (de la barre d'outils control) sur la feuille
faire un click droit sur le bouton et sélectionner "Visualiser le code"

automatiquement il sera écrit sur la page code de visual basic :

Private Sub CommandButton1_Click()

End Sub

placer la commande entre le sub et le end sub de cette macro :

Private Sub CommandButton1_Click()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub

voilà c'est presque tout, mais j'aurais besoin de savoir si les tcd sont sur la même feuille
pour répondre à l'autre partie de la question.

j'espère avoir été suffisamment détaillée, si ce n'est pas le cas, ne vous gêné pas pour reposer des questions.

bon travail et bon courage,
a+
isabelle



Bonjour Isabelle,

J'espère que vous serez toujours disponible sur ce sujet qui me passionne.

Votre réponse pourrait m'être très utile (4 TCD "commandés par le même tri
de page sur champ dynamique).

Je connais bien (sans être expert pour autant) les TCD, mais je ne connais
pas grand'chose à VBA.

Après avoir fait depuis ma feuille Excel : OutilsMacroNomAppliquer à ce
classeur Créer, j'ai incorporé votre suggestion entre Sub et End Sub puis
j''ai remplacé, dans votre example, le "NomDuChampDePage" par le mien
(Manager) et la référence de la cellule [B1] par la mienne [A3].

J'obtiens donc :

""Sub Nom ()
""Private Sub Worksheet_Calculate()
"" ActiveSheet.PivotTables("Tableau croisé
dynamique2").PivotFields("Manager").
"" CurrentPage = "" & [A3]
""End Sub

""End Sub


Rien n'y fait et je tourne en rond depuis + d'1 heure. Je n'obtiens rien
automatiquement et si j'essaye d'exécuter la Macro "Nom", j'ai 1 message
d'erreur de compilation : " End Sub attendu" et la première ligne du script
"Sub Nom" apparait flèchée et surlignée en jaune. Malgré l'aide de MS, je ne
sais que faire !

Pourriez-vous expliquer SVP de façon suffisamment détaillée pour un
néophyte, comment mettre correcdtement cette macro sur la page code de la
feuille ?

Par la même occasion, quelle syntaxe adopter SVP pour asservir plusieurs TCD
(2,3,4, ...) se trouvant sur la même feuille de calcul au même champ de page
du TCD1 (lui-même sur la même feuille de calcul que les autresTCD) ?

J'allais oublier: mon OS est Windows 2000 Pro (ou XP Ed Fam au besoin) et je
suis sous Office 2000 Pro mis à jour régulièrement (dans les 2 cas !)

D'avance 1000 merci(s) et bon W-E


DD




bonjour Corinne,

supposons que le champ de page du tcd1 est en cellule B1,
tu pourrais mettre cette macro sur la page code de la feuille,

Private Sub Worksheet_Calculate()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub


isabelle


Bonjour,
avant de poster ma question croyez-moi j'ai bien cherché dans les
anciens messages de ce NG, mais en vain.
Alors cette question me trotte depuis longtemps dans la tête:
j'ai 2 TCDs dans la même feuille séparée par une simple colonne.
Existe-t-il un moyen d'appliquer le même filtre de PAGE que pour le
TCD1 ??
Merci
Corinne








Avatar
dédélafinance
Merci Isabelle,

1°)Ah ça oui alors, ça marche vraiment beauuucouuuup mieux mieux. J'ai
supprimé la "macro ratée' et introduit le code comme indiqué : It work's very
well. Tellement que l'écran de mon vieux Dell s'est mis à trembler pendant
plusieurs secondes (véridique !) lors de l'essai

2°) Oui (je croyais l'avoir indiqué), tous mes TCD sont sur la même feuille
(je suis prudent par nature et ai déjà une certaine expérience avec .xls)

Si la suite de vos réponses est du même "tonneau", ça va être "du tonnerre"
--
Merci d'avance et bon WE

DD



bonjour DD,

tout d'abord vérifier que votre tcd ce nomme bien "Tableau croisé dynamique2" c'est à adapter.

pour l'explication:
c'est une macro événementiel (événement calculate de la feuille de calcul contenant le tcd)
c'est à dire que ce genre de macro s'exécute tout seul lorsqu'il se produit l'événement,
lorsque le tcd est mit à jour automatiquement l'action calculate se produit et il en suit l'exécution de la macro.
ce code doit être mit sur la page code de la feuille, si vous faite un click droit sur l'onglet de la feuille contenant le tcd,
vous sélectionner "Visualiser le code" automatiquement vous êtes diriger vers la page code de cette feuille.

donc pour résumer, si votre classeur contient 2 feuilles "Feuil1" et Feuil2"
dans visual basic(Atl+F11), à gauche il y a l'arborescence des classeurs ouvert,
sous le VBAProject(nomDeVotreClasseur) il y aura :

Feuil1(Feuil1)
Feuil2(Feuil2)
Module1
ThisWorkbook

vous pouvez aussi faire un double click sur Feuil1(Feuil1) pour afficher cette page à gauche.
cela revient au même que de faire un click droit sur l'onglet de la feuille contenant le tcd,
et sélectionner "Visualiser le code"

sur la barre de titre en haut de la fenêtre visual basic il y a le nom de la page de code actuellement afficher.(gauche)
par exemple : Microsoft Visual Basic - MonClasseur.xls - [module1(code)]
c'est probablement là que vous avez votre macro "Sub Nom ()"

si vous double click sur Feuil1(Feuil1) le titre de la barre changera pour :
Microsoft Visual Basic - MonClasseur.xls - [Feuil1(code)]
cela vous assure d'avoir atteint la bonne page de gauche. (bien entendu si le tcd est sur la Feuil1)

si le tcd est sur la Feuil1, la macro doit être mit sur la page code Feuil1(Feuil1)
si le tcd est sur la Feuil2, la macro doit être mit sur la page code Feuil2(Feuil2)

la macro à copier est la suivante (nom du tcd "Tableau croisé dynamique2" et nom du champ "NomDuChampDePage" sont à adapter)

Private Sub Worksheet_Calculate()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub

attention au retour à la ligne intempestif,
si la commande entre le sub et le end sub apparaît en rouge remettre la commande en une seule ligne.

si vous désirer que la macro s'exécute sur l'action click d'un bouton au lieu de l'événement calculate
placer un bouton (de la barre d'outils control) sur la feuille
faire un click droit sur le bouton et sélectionner "Visualiser le code"

automatiquement il sera écrit sur la page code de visual basic :

Private Sub CommandButton1_Click()

End Sub

placer la commande entre le sub et le end sub de cette macro :

Private Sub CommandButton1_Click()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub

voilà c'est presque tout, mais j'aurais besoin de savoir si les tcd sont sur la même feuille
pour répondre à l'autre partie de la question.

j'espère avoir été suffisamment détaillée, si ce n'est pas le cas, ne vous gêné pas pour reposer des questions.

bon travail et bon courage,
a+
isabelle



Bonjour Isabelle,

J'espère que vous serez toujours disponible sur ce sujet qui me passionne.

Votre réponse pourrait m'être très utile (4 TCD "commandés par le même tri
de page sur champ dynamique).

Je connais bien (sans être expert pour autant) les TCD, mais je ne connais
pas grand'chose à VBA.

Après avoir fait depuis ma feuille Excel : OutilsMacroNomAppliquer à ce
classeur Créer, j'ai incorporé votre suggestion entre Sub et End Sub puis
j''ai remplacé, dans votre example, le "NomDuChampDePage" par le mien
(Manager) et la référence de la cellule [B1] par la mienne [A3].

J'obtiens donc :

""Sub Nom ()
""Private Sub Worksheet_Calculate()
"" ActiveSheet.PivotTables("Tableau croisé
dynamique2").PivotFields("Manager").
"" CurrentPage = "" & [A3]
""End Sub

""End Sub


Rien n'y fait et je tourne en rond depuis + d'1 heure. Je n'obtiens rien
automatiquement et si j'essaye d'exécuter la Macro "Nom", j'ai 1 message
d'erreur de compilation : " End Sub attendu" et la première ligne du script
"Sub Nom" apparait flèchée et surlignée en jaune. Malgré l'aide de MS, je ne
sais que faire !

Pourriez-vous expliquer SVP de façon suffisamment détaillée pour un
néophyte, comment mettre correcdtement cette macro sur la page code de la
feuille ?

Par la même occasion, quelle syntaxe adopter SVP pour asservir plusieurs TCD
(2,3,4, ...) se trouvant sur la même feuille de calcul au même champ de page
du TCD1 (lui-même sur la même feuille de calcul que les autresTCD) ?

J'allais oublier: mon OS est Windows 2000 Pro (ou XP Ed Fam au besoin) et je
suis sous Office 2000 Pro mis à jour régulièrement (dans les 2 cas !)

D'avance 1000 merci(s) et bon W-E


DD




bonjour Corinne,

supposons que le champ de page du tcd1 est en cellule B1,
tu pourrais mettre cette macro sur la page code de la feuille,

Private Sub Worksheet_Calculate()
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("NomDuChampDePage"). _
CurrentPage = "" & [B1]
End Sub


isabelle


Bonjour,
avant de poster ma question croyez-moi j'ai bien cherché dans les
anciens messages de ce NG, mais en vain.
Alors cette question me trotte depuis longtemps dans la tête:
j'ai 2 TCDs dans la même feuille séparée par une simple colonne.
Existe-t-il un moyen d'appliquer le même filtre de PAGE que pour le
TCD1 ??
Merci
Corinne











Avatar
isabelle
bonjour DD,

pour tout les tcd sur une même feuille on peut utilisé une boucle,
par exemple à partir de l'action click sur un bouton :

Private Sub CommandButton1_Click()
For Each tcd In ActiveSheet.PivotTables
tcd.PivotFields("NomDuChampDePage").CurrentPage = "" & [B1]
Next
End Sub

isabelle

Merci Isabelle,

1°)Ah ça oui alors, ça marche vraiment beauuucouuuup mieux mieux. J'ai
supprimé la "macro ratée' et introduit le code comme indiqué : It work's very
well. Tellement que l'écran de mon vieux Dell s'est mis à trembler pendant
plusieurs secondes (véridique !) lors de l'essai

2°) Oui (je croyais l'avoir indiqué), tous mes TCD sont sur la même feuille
(je suis prudent par nature et ai déjà une certaine expérience avec .xls)

Si la suite de vos réponses est du même "tonneau", ça va être "du tonnerre"


Avatar
dédélafinance
Merci Isabelle, cela marche "du tonnerre"

Ai quand même eu une grosse frayeur avec le bouton de Cde que je n'avais pas
mis en oeuvre dans les essais précédents car je voulais alller vite; je ne
sais pas pourquoi, mais il a fallu que je ferme le fichier puis que je
l'ouvre à nouveau avant que tout cela fonctionne.
J'avais pourtant enregistré ces instructions "pas à pas" dans le fichier à
chaque fois qu'il était possible.
Désormais, mon écran ne tremble plus.

Je rêve d'un jour où le même clic serait actif dans mes 2 fichiers de même
structure (mêmes feuilles, même disposition,....) et reliés entre eux par
plusieurs cellules de TCD à comparer à côté des TCD.

Qui sait ... ?

--
Merci infiniment

DD



bonjour DD,

pour tout les tcd sur une même feuille on peut utilisé une boucle,
par exemple à partir de l'action click sur un bouton :

Private Sub CommandButton1_Click()
For Each tcd In ActiveSheet.PivotTables
tcd.PivotFields("NomDuChampDePage").CurrentPage = "" & [B1]
Next
End Sub

isabelle

Merci Isabelle,

1°)Ah ça oui alors, ça marche vraiment beauuucouuuup mieux mieux. J'ai
supprimé la "macro ratée' et introduit le code comme indiqué : It work's very
well. Tellement que l'écran de mon vieux Dell s'est mis à trembler pendant
plusieurs secondes (véridique !) lors de l'essai

2°) Oui (je croyais l'avoir indiqué), tous mes TCD sont sur la même feuille
(je suis prudent par nature et ai déjà une certaine expérience avec .xls)

Si la suite de vos réponses est du même "tonneau", ça va être "du tonnerre"