[Résolu] Modifier filtre de champ par vba

ERIC S

XLDnaute Barbatruc
Bonjour à tous

Les TCD restent assez mystérieux pour moi

dans l'exemple joint, j'utilise l'enregistreur de macro pour récupérer le code (voir macro dans fichier). Quand je le relance à la main, message d'erreur, impossible de lire la propriété pivotitems

j'ai le cerveau en bouillie et je ne décrypte pas les fils en ayant fait une recherche sur pivoitems, alors je joins mon exemple

Merci
 

Pièces jointes

  • TCDes.xlsm
    23.8 KB · Affichages: 121
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Modifier filtre de champ par vba

Bonjour Eric,

En effet, assez bizarre
J'ai essayé de le faire sur un autre TCD avec des valeurs "a", "b", "c", "d" en champ page, pas de soucis
J'ai essaye de refaire un autre TCD avec des date en champ page, pas de soucis
j'ai remplacé "a", "b", "c", "d" du 1er TCD par des dates et j'ai actualisé le TCD : plantage
Pas très clair du pourquoi pour moi...
 

Gurgeh

XLDnaute Occasionnel
Re : Modifier filtre de champ par vba

Salut ERIC S

J'ai déjà eu le même cas (qui m'a donné un mal de tête similaire). Le problème venait d'un tri qui existait sur un des champs du tableau croisé dynamique, et qui empêchait l'exécution d'une macro pourtant enregistrée 5 secondes avant...

Peut être cela peut-il t'aider ?

Gurgeh
 

Gurgeh

XLDnaute Occasionnel
Re : Modifier filtre de champ par vba

En changeant les dates par des lettres, ça marche sans problème.

En changeant le format des dates par un format standard, ça marche sans problème.

Je me demande si l'utilisation des dates n'implique pas un tri implicite dans le TCD... Je vais creuser !

Gurgeh
 

ERIC S

XLDnaute Barbatruc
Re : Modifier filtre de champ par vba

Bonjour le forum

les résultats de mes réflexions après mes recherches sur internet et la confirmation de mes doutes par Curgeh

un exemple avec les dates sous forme de texte pour éviter l'erreur sur la propriété visible

Néanmoins si quelqu'un a une idée géniale....
 

Pièces jointes

  • TCDesDateString.xlsm
    29.5 KB · Affichages: 84

tototiti2008

XLDnaute Barbatruc
Re : Modifier filtre de champ par vba

Bonjour Eric, Bonjour Gurgeh,

En enlevant ton champ datestring et en mettant le champ date à la place, le code suivant fonctionne chez moi
Mais ça nécessite toujours un CDate

Code:
Sub Macro8()
'
' Excel 2007, mise à jour TCD, date stockées sous forme de texte dans tableau feuil1
' car si dates sous forme de nombres, erreur sur la propriété visible
'
datedeb = CDate(Range("F1").Value)
datefin = CDate(Range("H1").Value)
If datefin < datedeb Then MsgBox "erreur sur dates de début et de fin - abandon": Exit Sub
Application.ScreenUpdating = False
'on error goto zéro_résultat
'
    ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("date"). _
        CurrentPage = "(All)"
    With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields( _
        "date")
        For i = 1 To .PivotItems.Count
            .PivotItems(i).Visible = True
            If Not CDate(.PivotItems(i).Value) >= datedeb Or Not CDate(.PivotItems(i).Value) <= datefin Then
                .PivotItems(i).Visible = False
            End If
        Next
    End With
    Exit Sub
Application.ScreenUpdating = True
    
'erreur si 0 enregistrement
zéro_résultat:
    MsgBox ("Il n'y a pas de date correspondant à votre demande")
    Application.ScreenUpdating = True
End Sub
 

ERIC S

XLDnaute Barbatruc
Re : Modifier filtre de champ par vba

Bonjour Tototiti

avec ta manip sur mon dernier fichier, j'arrive à une erreur de propriété non lisible, en effet, le cdate du pivotitem donne 1/1/2001 puis 1/2/2001 ..., le pb classique de date US date FR.
Donc si aucune date n'est valide, il y a erreur car tu ne peux pas utiliser le filtre si pas de donnée de filtrage

Sur mon vrai fichier j'ai avancé à partir de date sous forme texte, et pour éviter l'apparition d'erreur, sans utiliser on error, je sélectionne le tableau + une ligne vide, ce qui génère le choix "vide".

dans mon filtre, je valide le pivot item "blank" et donc si aucune autre valeur n'est dispo, le filtre fonctionne toujours. Voir ci-après

Code:
         With Sheets(sh).PivotTables(tcd).PivotFields(champ)
           .PivotItems("(blank)").Visible = True
            nbdonnées = 0
            For j = 1 To .PivotItems.Count
                If Not .PivotItems(j).Name = "(blank)" Then
                    .PivotItems(j).Visible = True
                    nbdonnées = nbdonnées + 1
                    If Not CDate(.PivotItems(j).Value) >= datedeb Or Not CDate(.PivotItems(j).Name) <= datefin Then
                        .PivotItems(j).Visible = False
                        nbdonnées = nbdonnées - 1
                    End If
                End If
            Next
         If nbdonnées > 1 Then .PivotItems("(blank)").Visible = False
 

tototiti2008

XLDnaute Barbatruc
Re : Modifier filtre de champ par vba

Re,

Ta version d'Excel 2007 est anglaise (ou multilingue) ?

Par exemple chez moi quand j'enregistre la macro, à la place de

CurrentPage = "(All)"

Il met

CurrentPage = "(Tous)"

ça peut expliquer que le code que je t'ai proposé fonctionne chez moi mais pas chez toi, peut-être
(même chose pour les "(vide)" chez moi et "(blank)" chez toi)
Ou langage du système d'exploitation ?
ou alors une histoire de paramètres régionaux ??? Très classique comme problème mais pas toujours très clair sur les causes...
 

ERIC S

XLDnaute Barbatruc
Re : Modifier filtre de champ par vba

Re

Bienvenu dans le labyrinthe Microsoft.

Chez moi c'est l'office 2007 familial, appelé aussi home and student en français, id pour seven (pc HP) et effectivement avec des choses du style l'aide vba qui est tellment francisée que pour coder en vba je consulte plutôt l'aide 2003.


Les bases de mes codes sont issues de l'enregistreur

Peut-être effectivement le paramétrage....

Enfin, je vai sconsidérer ce fil comme résolu

A bientôt sur un autre fil
 

MJ13

XLDnaute Barbatruc
Re : [Résolu] Modifier filtre de champ par vba

Bonjour Eric, Tototiti

Il est vrai que ces problèmes de dates sont souvent pénibles :(.

Voici un fichier à tester. Dites moi, si c'est Ok avec votre config.

Je met aussi la version XL2003 (mais pas sur que cela soit compatible :confused:).
 

Pièces jointes

  • TCDProblèmeDates.xlsm
    23.7 KB · Affichages: 82
  • TCDProblèmeDates.xls
    49.5 KB · Affichages: 63
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : [Résolu] Modifier filtre de champ par vba

Bonjour MJ13

confirmation, les dates sont bien interprétées chez moi,
je me suis fait peur avec ta première macro, je ne comprenais pas le résultat qui ne prend qu'une borne
 

tototiti2008

XLDnaute Barbatruc
Re : [Résolu] Modifier filtre de champ par vba

Bonjour Eric, Bonjour Michel,

ça ne marche pas chez moi, les dates interprétées dans le TCD
datetest = CDate(Format(.PivotItems(i).Value, "MM/DD/YYYY"))
inversent mois et jour, ça inverse le problème, marche chez Eric mais plus chez moi...

Microsoft Office 2007 12.0.4518.1014 MSO
Partie de Microsoft Office Professional Plus 2007
Mystère et boule de gomme, ces problèmes de dates en VBA...

Bon le principal est que ça fonctionne chez Eric
 

MJ13

XLDnaute Barbatruc
Re : [Résolu] Modifier filtre de champ par vba

Bonjour à tous


Merci Eric et Tototiti pour vos tests qui nous permet de mieux appréhender l'univers magique des Dates dans Excel:).


ça ne marche pas chez moi, les dates interprétées dans le TCD
datetest = CDate(Format(.PivotItems(i).Value, "MM/DD/YYYY"))



inversent mois et jour, ça inverse le problème, marche chez Eric mais plus chez moi...

Tototiti: Et si tu mets la format en DD/MM/YYYY, est-ce pareil avec mon fichier? Sinon pourrais-tu nous dire si tes options régionnales sont en Français avec les dates formatée en JJ/MM/AAAA.

Notons, que j'ai mis le msgbox (MsgBox datetest) pour voir comment est interprétée la date.
 

Discussions similaires

Statistiques des forums

Discussions
312 191
Messages
2 086 051
Membres
103 108
dernier inscrit
Captain NRJ