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.
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
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
Dernière édition: