IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

TCD filtre par vba [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut TCD filtre par vba
    Bonjour,

    Je me permets ce post parce qu'ayant cherché sur d'autres posts, je n'arrive pas à résoudre mon problème.

    J'ai un TDC que je refresh et je voudrais qu'il me filtre uniquement une donnée dans le TDC en fonction d'une valo d'une cellule.
    J'ai donc fait ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub essai()
     
    Dim ligne As Double
     
    Set dep_oph = Sheets("Dépenses Ophtalmo").Range("J1", Sheets("Dépenses Ophtalmo").Range("J1").End(xlDown))
     
    ligne = 2
     
    Do Until ligne > dep_oph.Count - 1
     
     
        If Sheets("Dépenses Ophtalmo").Cells(ligne, 10) <> 3524 Then
     
            Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").PivotFields("UF").PivotItems(Sheets("Dépenses Ophtalmo").Cells(ligne, 10)).Visible = False
            Set dep_oph = Sheets("Dépenses Ophtalmo").Range("J1", Sheets("Dépenses Ophtalmo").Range("J1").End(xlDown))
     
        End If
     
    ligne = ligne + 1
     
    Loop
     
    MsgBox "Traitement terminé"
     
    End Sub
    Il me met malheureusement une erreur 438.
    En l'occurrence, Sheets("Dépenses Ophtalmo").Cells(ligne, 10) = 2530, qui est bien différent de 3524, donc je suis ok, d'ailleurs il rentre bien dans le if.

    J'ai essayé en mettant directement ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").PivotFields("UF").PivotItems("2530").Visible = False
    Cela a fonctionné, cela vient donc des guillemets.

    J'ai tenté également avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").PivotFields("UF").Sheets("Dépenses Ophtalmo") = Sheets("Dépenses Ophtalmo").Cells(ligne, 10).Value
    Mais cela n'a pas marché (avec et sans le value, avec et sans du visible.
    Pour info, j'ai essayé d'adapter ce que j'avais trouvé dans ce post:
    https://www.developpez.net/forums/d1...-tcd-sous-vba/

    Merci d'avance pour votre aide, je sèche un peu.

    Bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,,

    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").PivotFields("UF").Sheets("Dépenses Ophtalmo") = Sheets("Dépenses Ophtalmo").Cells(ligne, 10).Value
    Où est passé le .PivotItems?

    CDlt

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Je l'ai enlevé ^^

    Dans l'adresse du post que j'ai indique, voici le code qui était utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("b7:b9")) Is Nothing Or Target.Cells.Count > 3 Then Exit Sub
        Dim Sh As Worksheet, Pt As PivotTable
        For Each Sh In Worksheets
            For Each Pt In Sh.PivotTables
                With Pt
                    .PivotFields("REGION 04 2017").CurrentPage = Range("$B$7").Value
                    .PivotFields("ZONE 04 2017").CurrentPage = Range("$B$8").Value
                    .PivotFields("RU 04 2017").CurrentPage = Range("$B$9").Value
                End With
          Next Pt
        Next Sh
    End Sub
    Le pivot item avait été enlevé.
    J'ai voulu tenté de remplacer le CurrentPage par mon Sheets("Dépenses Ophtalmo") et Range().Value par Sheets("Dépenses Ophtalmo").Cells(ligne, 10).Value

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Le pivot item avait été enlevé. et pourquoi?

    Quelque chose dans ce genre, qu'est-ce que ça dit (je ne peux pas le tester)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").PivotFields("UF").PivotItems(Cells(ligne, 10)).Visible = False

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Malheureusement cela n'a pas marché.

    Erreur 1004, impossible de lire la propriété PivotItem de la classe PivotField.
    Même erreur que cela que j'avais à l'origine, puisque j'ai fait la même ligne de code mais avec le nom de la page en plus.

    D'autres idées?

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 86
    Par défaut
    Bon j'ai réussi à faire ce que je voulais en travaillant sur le filtre des étiquettes plutôt que des valeurs, à savoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub essai()
     
    Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").ClearAllFilters
    Sheets("Dépenses Ophtalmo").PivotTables("Tableau croisé dynamique2").PivotFields("UF").PivotFilters.Add Type:=xlCaptionEquals, Value1:=Sheets("Dépenses Ophtalmo").Cells(1, 9)
     
    End Sub
    Où Sheets("Dépenses Ophtalmo").Cells(1, 9) = valeur que je veux, dans ma cellule.

    Merci d'avoir pris le temps de m'aider, et si vous avez une autre technique, je suis preneur ; je pense que le filtre par valeur resterait plus opportun à un filtre sur l'étiquette.

    Bon aprem

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Filtre par VBA
    Par sasafca dans le forum Deski
    Réponses: 0
    Dernier message: 01/07/2015, 09h09
  2. Modifier Filtre TCD par VBA Excel 2010
    Par maxwellou dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/06/2014, 12h20
  3. [XL-2007] TCD Filtre par année
    Par pounette dans le forum Excel
    Réponses: 1
    Dernier message: 19/03/2014, 13h13
  4. [XL-2007] Filtre imposé sur TCD par VBA
    Par meolimo dans le forum Excel
    Réponses: 0
    Dernier message: 23/02/2014, 20h05
  5. Cumuler des Filtres par Selection en VBA ?
    Par Fredo67 dans le forum Access
    Réponses: 4
    Dernier message: 05/07/2006, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo