Filtrer champ (arborescence) d'un tableau croisé dynamique

fx62

XLDnaute Junior
Bonjour le forum,

Je viens vers vous car j'ai un problème pour filtrer mon tableau croisé dynamique par macro.
Tout d'abord je tiens à dire que les données de ce tableau proviennent de cubes OLAP (serveur). Il m'est malheureusement impossible de fournir un fichier avec les données.

Pour en revenir à mon soucis : je voudrais afficher les résultats d'un département pour la semaine qui vient de s'écouler, pour cela j'ai mis en place un TCD dans lequel j'ai un champ pour chaque département et un autre pour choisir la date.
Ce champs "Date" est construit sous la forme d'une arborescence. C'est à dire qu'il y a les années, les trimestres, les mois, les semaines, ainsi de suite ... ;) (cf. image en pièce jointe).

Voici le code relié à une commande "bouton". Je souhaiterais qu'un clic sur ce bouton, change le filtre du TCD, afin de visualiser les données de la semaine précédente. Mais à chaque fois, j'ai un message d'erreur (1004 : élément introuvable dans le cube OLAP) sur la ligne ActiveSheet.PivotTables("TCD_1").PivotFields(...
Pourtant les données existent bien puisque lorsque je le fais manuellement, cela fonctionne.
Code:
Sub Semaine_derniere()

Dim Semaine1, Semaine2, Mois, NomMois, Trimestre, Annee As Variant 'Définition des variables
Dim NumSemaine1, NumSemaine2 As String 'Définition des variables

Semaine1 = Now 'Définition date système
Semaine2 = DateAdd("ww", -1, Semaine1) 'Demande semaine précédente
NumSemaine1 = Format(Semaine2, "ww", vbMonday, vbFirstFourDays) 'Demande numéro semaine précédente
NumSemaine2 = "Semaine " & Format(Semaine2, "ww", vbMonday, vbFirstFourDays) 'Définition "Semaine ..."

If NumSemaine1 = 1 Or NumSemaine1 = 2 Or NumSemaine1 = 3 Or NumSemaine1 = 4 Or NumSemaine1 = 5 Then
Mois = "January" 'S01, 02, 03, 04, 05 = Janvier
ElseIf NumSemaine1 = 6 Or NumSemaine1 = 7 Or NumSemaine1 = 8 Or NumSemaine1 = 9 Then
Mois = "February" 'S06, 07, 08, 09 = Février
ElseIf NumSemaine1 = 10 Or NumSemaine1 = 11 Or NumSemaine1 = 12 Or NumSemaine1 = 13 Then
Mois = "March" 'S10, 11, 12, 13 = Mars
ElseIf NumSemaine1 = 14 Or NumSemaine1 = 15 Or NumSemaine1 = 16 Or NumSemaine1 = 17 Or NumSemaine1 = 18 Then
Mois = "April" 'S14, 15, 16, 17, 18 = Avril
ElseIf NumSemaine1 = 19 Or NumSemaine1 = 20 Or NumSemaine1 = 21 Or NumSemaine1 = 22 Then
Mois = "May" 'S19, 20, 21, 22 = Mai
ElseIf NumSemaine1 = 23 Or NumSemaine1 = 24 Or NumSemaine1 = 25 Or NumSemaine1 = 26 Then
Mois = "June" 'S23, 24, 25, 26 = Juin
ElseIf NumSemaine1 = 27 Or NumSemaine1 = 28 Or NumSemaine1 = 29 Or NumSemaine1 = 30 Or NumSemaine1 = 31 Then
Mois = "July" 'S27, 28, 29, 30, 31 = Juillet
ElseIf NumSemaine1 = 32 Or NumSemaine1 = 33 Or NumSemaine1 = 34 Or NumSemaine1 = 35 Then
Mois = "August" 'S31, 32, 33, 34, 35 = Août
ElseIf NumSemaine1 = 36 Or NumSemaine1 = 37 Or NumSemaine1 = 38 Or NumSemaine1 = 39 Or NumSemaine1 = 40 Then
Mois = "September" 'S36, 37, 38, 39, 40 = Septembre
ElseIf NumSemaine1 = 41 Or NumSemaine1 = 42 Or NumSemaine1 = 43 Or NumSemaine1 = 44 Then
Mois = "October" 'S41, 42, 43, 44 = Octobre
ElseIf NumSemaine1 = 45 Or NumSemaine1 = 46 Or NumSemaine1 = 47 Or NumSemaine1 = 48 Then
Mois = "November" 'S45, 46, 47, 48 = Novembre
ElseIf NumSemaine1 = 49 Or NumSemaine1 = 50 Or NumSemaine1 = 51 Or NumSemaine1 = 52 Then
Mois = "December" 'S49, 50, 51, 52 = Décembre
End If

If Mois = "January" Or Mois = "February" Or Mois = "March" Then
Trimestre = "Trimestre 1" 'Janvier, Février, Mars = Trimestre 1
ElseIf Mois = "April" Or Mois = "May" Or Mois = "June" Then
Trimestre = "Trimestre 2" 'Avril, Mai, Juin = Trimestre 2
ElseIf Mois = "July" Or Mois = "August" Or Mois = "September" Then
Trimestre = "Trimestre 3" 'Juillet, Août, Septembre = Trimestre 3
ElseIf Mois = "October" Or Mois = "November" Or Mois = "December" Then
Trimestre = "Trimestre 4" 'Octobre, Novembre, Décembre = Trimestre 4
End If

Annee = Year(Date) 'Définition de l'année

ActiveSheet.PivotTables("TCD_1").PivotFields( _
    "[OT Date fin réelle]").CurrentPageName = _
    "[OT Date fin réelle].[Tout OT Date de fin réelle].&[" & Annee & "].&[" & Trimestre & "].&[" & Mois & "].&[" & NumSemaine2 & "]"

End Sub

J'espère avoir été clair, si ça n'est pas le cas, faites le moi savoir, j'essayerai d'y remédier.
Merci d'avance pour votre aide malgrès la non-présence de fichier. :(
fx62
 

Pièces jointes

  • Menu.JPG
    Menu.JPG
    16.7 KB · Affichages: 270
  • Menu.JPG
    Menu.JPG
    16.7 KB · Affichages: 237
  • Menu.JPG
    Menu.JPG
    16.7 KB · Affichages: 228
Dernière édition:

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Bonjour le forum,

J'ai vu qu'il y avait eu pas mal de lecture du sujet (je vous en remercie ;)) mais aucune réponse ... ça commence à me faire peur, je commence à croire que mon problème n'est pas résolvable :(

De mon côté, je continue les recherches, je peux déjà affirmer que le début de mon code fonctionne car pour vérifier le résultat j'ai appliqué une Msgbox.
Code:
MsgBox "Année : " & Annee & Chr(13) & _
        "Trimestre : " & Trimestre & Chr(13) & _
        "Mois : " & Mois & Chr(13) & _
        "Semaine n° : " & NumSemaine1, vbOKOnly + vbInformation, "Vérification code VB"
Cela me retourne bien 2012, Trimestre 1, March, 13

J'en déduis donc que le problème vient bien du bout de code suivant :
Code:
ActiveSheet.PivotTables("TCD_1").PivotFields( _
    "[OT Date fin réelle]").CurrentPageName = _
    "[OT Date fin réelle].[Tout OT Date de fin réelle].&[" & Annee & "].&[" & Trimestre & "].&[" & Mois & "].&[" & NumSemaine2 & "]"
Merci,
fx62
 

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Après réflexion, le problème ne vient peut-être pas du code. Peut-être est-ce juste un problème d'accessibilité aux cubes ... un paramétrage à faire peut-être ?
Un collègue de travail va venir m'aidé à ce sujet, demain matin car pour le moment je nage ;)
fx62
 
Dernière édition:

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Bonjour le forum,

Je me permet un petit up ! ;)

Mon problème est toujours d'actualité, celui-ci concerne le bout de code suivant mais impossible de trouver l'erreur.
Est-ce au moins possible de filtrer un TCD quand celui-ci est basé sur un champs en cascade (arborescence) ? Je me le demande ...
Code:
ActiveSheet.PivotTables("TCD_1").PivotFields( _
    "[OT Date fin réelle]").CurrentPageName = _
    "[OT Date fin réelle].[Tout OT Date de fin réelle].&[" & Annee & "].&[" & Trimestre & "].&[" & Mois & "].&[" & NumSemaine2 & "]"

J'ai cherché et encore cherché sur internet ... mais sans succès :(
A croire que je suis le premier à créer un tableau croisé dynamique avec un menu déroulant sous forme d'arborescence. :p

Merci,
fx62
 

MJ13

XLDnaute Barbatruc
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Bonjour fx62

A croire que je suis le premier à créer un tableau croisé dynamique avec un menu déroulant sous forme d'arborescence. :p

A mon avis, soit, tu es le premier au monde, soit ceux qui l'on fait n'ont pas besoin du forum et arrivent à se débrouiller tout seul :eek:.

Sinon, as-tu essayé de ne pas mettre d'espace dans tes noms :confused:. Et supprime aussi les accents.
 

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

soit ceux qui l'on fait n'ont pas besoin du forum et arrivent à se débrouiller tout seul .
Ouais c'est aussi une possibilité :p

Sinon mes variables n'ont pas d'accents, ni d'espaces.
Pour la base de données, il n'y a pas d'accents non plus car les mois sont exprimés en anglais par contre c'est vrai qu'il y a des espaces pour les trimestres et semaines ... mais impossible pour moi d'accéder à cette base de données pour aller modifier cela. :(

J'espère que ça n'est pas la cause du problème ... cela ferait tombé à l'eau mon travail !

L'ensemble du code te semble bon MJ13 ?

En tout cas merci pour ta réponse :)
 

chris

XLDnaute Barbatruc
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Bonjour

Comme MJ13 que je salue, sans fichier difficile de répondre...

Néanmoins dans les TCD les dates ne sont pas stockées telles qu'elles apparaissent d'où la difficulté pour s'y référer par macro.
Il suffit d'utiliser la fonction LIREDONNEESTABLEAUCROISE... pour voir que le mot janvier donne le chiffre 1.

Essaye d'utiliser cette fonction sur plusieurs cas de figure afin de voir comment les dates sont gérées et adapte ton code en conséquence.
 

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Dans mon premier post sur ce topic, je voulais inclure un fichier car je sais que c'est nettement plus facile d'aider quelqu'un lorsqu'il y en a un.

Je me suis donc dis que j'allais refaire à l'identique l'excel en mettant une base de données lambda insérée directement dans une feuille du fichier, mais le problème c'est que je ne sais même pas comment faire un menu déroulant sous forme d'arborescence. :confused:

J'ai regardé sur internet pour trouver mon bonheur mais je suis tombé que sur des menus déroulants en cascade (un choix dans le menu 1 filtre les possibilités du menu 2 qui filtre le menu 3 etc. ...).

Tu sais comment faire ça ?
Si c'est le cas, je peux prendre du temps pour refaire un exemplaire avec base de données intégrée.

Merci,
fx62
 

Misange

XLDnaute Barbatruc
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Bonjour
tu n'as pas besoin de faire un menu déroulant sous forme d'arborescence. Crée une petite base de donnée bidon avec des dates et crée le tcd en créant dedans l'arborescence des dates. Déjà sur cette petite base de données tu pourras tester ta macro pour voir si le problème vient d'elle ou si il est lié à tes données externes et à leur accessibilité.
 

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Ok merci à tous !
@ Misange : je fais mon tcd de suite et je vois ce que ça donne avec mon code.
@ Chris : je n'ai jamais utilisé "LIREDONNEESTABLEAUCROISE", je vais donc d'abord faire mon tcd avec base de donnée interne et si cela ne fonctionne pas, j'étudierai ta fonction. ;)
 

fx62

XLDnaute Junior
Re : Filtrer champ (arborescence) d'un tableau croisé dynamique

Alors voilà j'ai refais un tcd avec la base de donnée intégrée (cf. pièce jointe).
Ma macro fonctionne parfaitement mais comme j'ai pu dire auparavant, j'aurais besoin d'un menu déroulant avec arborescence.
Et là je bloque totallement. ;)
Auriez-vous une idée ?

Chris, j'ai vérifié avec la fonction "LIREDONNEETAB...", janvier ressort bien en "January" et non en "1" donc le problème ne doit pas venir de là ... enfin je pense.

Merci bien,
fx62
 

Pièces jointes

  • TCD_fx62.zip
    30.9 KB · Affichages: 71

Statistiques des forums

Discussions
302 172
Messages
2 001 021
Membres
215 058
dernier inscrit
gregoose