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 :

Enlever Filtre VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut Enlever Filtre VBA
    Bonjour j'ai un tableau dynamique qui commence en A49 et qui va jusqu'a la colonne K (étant un tableau dynamique, le nombre de ligne peut varier).

    J'ai un filtre qui est activé à la cellule A49. Je ne peux pas faire showalldata car je voudrais que les autres filtres restent !
    Et j'aurai voulu l'enlever via une macro (j'en ai besoin pour une autre macro que j'utilise). J'ai essayé vraiment plein de choses mais en vain.. L'autofilter je n'arrive pas à le faire marcher..

    Quand je fais enregistrer une macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        ActiveSheet.Range("$A$49:$K$460").AutoFilter Field:=1
    End Sub
    Mais quand je l'execute dans ma macro après ça ne marche pas..

    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Liste Encours").Range("A49:K1000").Select
    Selection.AutoFilter Field:=1, Criteria1:="*"
    Mais comme à chaque fois j'ai le droit à : erreur 1004, la méthode autofilter de la classe range a ecchoué..

    Une peu d'aide SVP ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peut être comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Liste Encours").Range("A49").Autofilter 1
    ça supprime les critères de filtres appliqués sur la colonne A, sans toucher aux critères appliqués sur les autres colonnes

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Bonjour je viens d'essayer et j'ai toujours le même problème..

    Erreur 1004, la méthode autofilter de la classe range a échoué..

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    dans l'ordre :

    1) le fichier est bien ouvert ?
    2) le nom de la feuille est correct ?
    3) la ligne des titres est bien en ligne 49 ?
    4) la plage est déjà filtrée quand tu lances la procédure ?


    moi j'ai aucun souci avec cette ligne de code quand les 4 conditions ci-dessus sont réunies

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    salut

    si tu essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ttt()
    Dim i As Integer
     
    For i = 1 To 11
    ActiveSheet.Range("$A$49:$K$1000").AutoFilter Field:=i
    Next i
     
     
    End Sub
    Je ne sais pas si il ne faut pas prendre tout le tableau ""$A$49:$K$1000"" par exemple si ton tableau se termine en colonne "Z" alors remplace le "K" par "Z" et
    "For i = 1 To 11" 1 étant la première colonne à prendre en compte et 11 la dernière!

  6. #6
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut
    Si c'est un Tableau croisé dynamique ne vaut-il pas mieux passer ainsi?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Worksheets("page en question").PivotTables("Tab cr dyn").PivotFields("STATUT") 'changer le nom du pivot tables avec le nom du TCD et pivot Fields le filtre
                .PivotItems("DA").Visible = False
                .PivotItems("INVITE_OUT").Visible = False
                .PivotItems("ABSENT").Visible = True
                ' ...
    End With
    DeathZarakai.

    P.S. : @jijie un TCD a une taille variable suivant les filtres, on ne peut sélectionner en dur le tableau (en dur je veux dire A34:E42)

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Oh mais quelle andouille ! J'avais pas vu que c'était un TCD, lu trop vite le début de son message

    désolé ! j'ai bêtement appliqué une méthode sur un filtrage de plage "classique"




    y'a sûrement une approche par autofilter, sans avoir à boucler sur les items du pivotfield. Sinon de mémoire on a une méthode pour clear le filtre d'un pivotfield

  8. #8
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut
    Personnellement pour dé filtrer un unique filtre je procède ainsi quand j'y ai été confronté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim PF As PivotItem
        With Worksheets("Evo TOG").PivotTables("Tab cr dyn").PivotFields("STATUT")
            For Each PF In .PivotItems
                PF.Visible = True
            Next PF
        End With
    End Sub
    En adaptant à tes variables bien sur, Evo TOG est mon nom de feuille, Tab cr dyn est le nom de mon RCD, et STATUT le nom de mon filtre.

    DeathZarakai.

    P.S. : Il me semblait qu'il y avait aussi un .Clear mais je n'arrive plus à retrouver la bonne expression

    Trouver, tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Evo TOG").PivotTables("Tab cr dyn implant").PivotFields("STATUT").ClearAllFilters
    A adapter toujours.

    DeathZarakai.

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Alors que je remette dans le contexte. Le but en fait est d'enlever un filtre qu'il y a sur une colonne d'un tableau croisé dynamique et ensuite de copier ce tableau dynamique dans un autre onglet prévu à cet effet.

    J'ai essayé ta méthode, alors il n'y a plus d'erreur mais maitenant quand il copie, il me copie le tableau mais sans ce qu'il y a dedans. J'ai essayé manuellement d'enlever le filtre pour voir si c'était pas la partie copier qui ne marchait pas mais non c'est pas ça car quand j'enlève ta ligne de code cela marche bien..

    Je vous mets le code si jamais ça peut vous aider :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Enlevefiltre()
        Dim PF As PivotItem
        With Worksheets("Liste Encours").PivotTables("Tableau croisé dynamique2").PivotFields("TDC")
            For Each PF In .PivotItems
                PF.Visible = True
            Next PF
        End With
    End Sub
    Sub MacroCopier()
     
        Dim plage As Range                                                      'plage qui contiendra les données de la feuille "Liste Encours"
        Dim plage2 As Range                                                     'plage qui contiendra les données de la feuille "Encours Copy"
     
        Enlevefiltre
        Sheets("EncoursCopy").Cells.Delete
        Sheets("Liste Encours").Select                                          'Selection feuille à copier contenant les données de MAJ
        Range("A49").Select                                                     'Initialisation
        Range(Selection, Selection.End(xlToRight)).Select                       'Selection 1ere ligne
        Range(Selection, Selection.End(xlDown)).Select                          'Selection plage entière
        Selection.Copy
     
             Set plage = Selection                                                  'déclaration d'objet range contenant la plage des donnés de la feuille à copier
     
        Sheets("EncoursCopy").Select                                            'Selection feuille de copie
        Range("A1").Select                                                      'initialisation
        ActiveSheet.Paste                                                       'colle dans la cellule active de la feuille
        Selection.PasteSpecial Paste:=xlPasteColumnWidths                       'colle suivant un format ici la taille des cellulles
        Nombre_Ligne_copie = Selection.Rows.Count                               'Compte le nombre de lignes de la feuille de copie
     
            Set plage2 = Selection                                                  'déclaration d'objet range contenant la plage des donnés de la feuille de copie
     
     
                    'mise a jour
    End Sub
    Merci en tout cas. C'est sympa d'essayer de m'aider !

  10. #10
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Avec l'enregistreur de macro j'obtiens ça et ca marche plutôt bien donc je pense que tu peux l'adapter à ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _
            ClearAllFilters
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotSelect "", _
            xlDataAndLabel, True
        Selection.Copy
        Sheets("Archive").Select
        Range("A59").Select
        Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Salut!

    Moi non plus je n'avais pas vu que tu étais sur un TCD.

    Pour un TCD c'est plus compliqué! C'est souvent source d'erreur , surtout que les noms de ta base de donnée peuvent évolué avec le temps.

    Donc mon principe est de répertorié tous les éléments dans la BD et pour ma part je les liste dans un listbox "Multiselected" à l'ouverture de l'onglet comme ceci:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Sub Worksheet_Activate()
     
     
     
     Feuil26.ListBox1.Clear
     
    Dim NbLgne As Variant
    Dim I As Integer
    Dim y As Integer
    Dim ValAnal As String
    Dim MonDico As Object, Cellule As Range
     
    Application.ScreenUpdating = False 'désactive la mise à jour de l'écranMsgBox ListBox1.List
     
    '*** on note les analytiques présents ds le récap cpte
      Set MonDico = CreateObject("Scripting.Dictionary")
          For Each Cellule In Sheets("Récap_cptes").Range("E2:E60000")
          If Not MonDico.Exists(Cellule.Value) Then MonDico.Add Cellule.Value, Cellule.Value
          Next Cellule
            Feuil26.ListBox1.List = MonDico.Items
            MonDico.RemoveAll
      'Feuil26.ListBox1.Height = 130.5
      'Feuil26.ListBox1.Width = 141
     
     
    '**** on sélectionne les analytiques filtrés ds le cpte de résultat
        NbLgne = Sheets("Cpte de résultat").Range("b65000").End(xlUp).Row
    For I = 7 To NbLgne
        ValAnal = Sheets("Cpte de résultat").Cells(I, 2)
     
     For y = 0 To ListBox1.ListCount - 1
      If ListBox1.List(y) = ValAnal Then ListBox1.Selected(y) = True
     Next y
    Next I
     
    -------
    Sur cette listbox je sélectionne tous ceux que je souhaite garder à true ou déselectionne pour false selon ta demande et par un bouton ;


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private Sub CommandButton1_Click()
     
     
    Application.ScreenUpdating = False 'désactive la mise à jour de l'écranMsgBox ListBox1.List
    Dim y As Integer
    Dim NomAnaly As Variant
    For y = 0 To ListBox1.ListCount - 1
    NomAnaly = ListBox1.List(y)
    If NomAnaly <> "" Then
     
     If ListBox1.Selected(y) = True Then
      If ActiveSheet.PivotTables("TCD").PivotFields("Analytique").PivotItems(NomAnaly).Visible = False Then _
          ActiveSheet.PivotTables("TCD").PivotFields("Analytique").PivotItems(NomAnaly).Visible = True
     End If
     
     
    End If
     
     Next y
    Dim x As Integer
    For x = 0 To ListBox1.ListCount - 1
    NomAnaly = ListBox1.List(x)
    If NomAnaly <> "" Then
     
     
     If ListBox1.Selected(x) = False Then
      If ActiveSheet.PivotTables("TCD").PivotFields("Analytique").PivotItems(NomAnaly).Visible = True Then _
          ActiveSheet.PivotTables("TCD").PivotFields("Analytique").PivotItems(NomAnaly).Visible = False
     On Error GoTo fin1
     End If
     
    End If
     
     Next x
     
    GoTo fin2
    fin1:
    MsgBox " Vous ne pouvez pas retirer tous les analytiques, il faut qu'il en reste au mois 1 ! "
    '**** on sélectionne les analytiques filtrés ds le cpte de résultat
    Dim NbLgne As Integer
    Dim I As Integer
     
        NbLgne = Sheets("Cpte de résultat").Range("b65000").End(xlUp).Row
    For I = 7 To NbLgne
        ValAnal = Sheets("Cpte de résultat").Cells(I, 2)
     
     For y = 0 To ListBox1.ListCount - 1
      If ListBox1.List(y) = ValAnal Then ListBox1.Selected(y) = True
     Next y
    Next I
    fin2:
    Donc si tu souhaite mettre tout à True tu adapte ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If ActiveSheet.PivotTables("TCD").PivotFields("Analytique").PivotItems(NomAnaly).Visible = False Then _
          ActiveSheet.PivotTables("TCD").PivotFields("Analytique").PivotItems(NomAnaly).Visible = True
    Voilà ma version, je sais qu'il est difficile de le faire fonctionner correctement, mais pour ma part ça fonctionne très bien depuis fort longtemps!

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Re Salut

    En gros pour tout afficher :

    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
    sub Essai()
    Dim c As Variant
    Dim MonDico As Object, Cellule As Range
     
     Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("Feuil1").Range("E2:E60000") 'ADAPTE TA PLAGE DE DONNÉE
         MonDico.Item(c.Value) = MonDico.Item(c.Value) + 1
      Next c
     
      For Each c In MonDico.keys
     
        If c <> "" Then
         If ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date").PivotItems(c).Visible = False Then _
          ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date").PivotItems(c).Visible = True
        End If
     
      Next c
    End Sub
    Donc il faut que tu adapte la plage de donnée de l'origine du TCD.
    Ici tu passe ton TCD avec toutes tes valeurs et si tu veux les supprimer il faut inverser les valeurs true et false

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Ok super, j'ai pas encore eu le temps de tester tout ça mais si ça marche je te fais signe ! En tout cas merci super sympa.

  14. #14
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Bonjour,

    J'ai finalement eu le temps de tester.. Donc voici ton code que j'ai adapté à mes besoins mais malheureusement toujours pareil ça ne marche pas. :/

    "Impossible de lire la propriété PivotItems de la classe PivotField.. J'ai mal recopier le 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub Essai()
    Dim c As Variant
    Dim MonDico As Object, Cellule As Range
     
     Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("Liste Encours").Range("A49:A600") 'ADAPTE TA PLAGE DE DONNÉE
         MonDico.Item(c.Value) = MonDico.Item(c.Value) + 1
      Next c
     
      For Each c In MonDico.keys
     
        If c <> "" Then
         If ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("TDC").PivotItems(c).Visible = True Then _
          ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("TDC").PivotItems(c).Visible = False
        End If
     
      Next c
    End Sub
    Sub MacroCopier()
     
        Dim plage As Range                                                      'plage qui contiendra les données de la feuille "Liste Encours"
        Dim plage2 As Range                                                     'plage qui contiendra les données de la feuille "Encours Copy"
     
        Essai
        Sheets("EncoursCopy").Cells.Delete
        Sheets("Liste Encours").Select                                          'Selection feuille à copier contenant les données de MAJ
        Range("A49").Select                                                     'Initialisation
        Range(Selection, Selection.End(xlToRight)).Select                       'Selection 1ere ligne
        Range(Selection, Selection.End(xlDown)).Select                          'Selection plage entière
        Selection.Copy
     
             Set plage = Selection                                                  'déclaration d'objet range contenant la plage des donnés de la feuille à copier
     
        Sheets("EncoursCopy").Select                                            'Selection feuille de copie
        Range("A1").Select                                                      'initialisation
        ActiveSheet.Paste                                                       'colle dans la cellule active de la feuille
        Selection.PasteSpecial Paste:=xlPasteColumnWidths                       'colle suivant un format ici la taille des cellulles
        Nombre_Ligne_copie = Selection.Rows.Count                               'Compte le nombre de lignes de la feuille de copie
     
            Set plage2 = Selection                                                  'déclaration d'objet range contenant la plage des donnés de la feuille de copie
     
     
                    'mise a jour
    End Sub

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    si tu fait ceci seulement:

    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
    Sub Essai()
    Dim c As Variant
    Dim MonDico As Object, Cellule As Range
     
     Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("Liste Encours").Range("A49:A600") 'ADAPTE TA PLAGE DE DONNÉE
         MonDico.Item(c.Value) = MonDico.Item(c.Value) + 1
      Next c
     
      For Each c In MonDico.keys
     
        If c <> "" Then
         If ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("TDC").PivotItems(c).Visible = True Then _
          ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("TDC").PivotItems(c).Visible = False
        End If
     
      Next c
    End Sub
    Dans le principe:

    La plage de donnée ou se trouve les données sont bien dans : Sheets("Liste Encours").Range("A49:A600")
    Et la sub essai doit se lancé lorsque la page du TCD est active!??

  16. #16
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    J'ai essayé mais toujours pareil, j'ai la même erreur..

    Je t'ai mis en pièce jointe un petit excel où j'ai réussi à refaire l'erreur sur un tableau croisé dynamique simple. Le but ici est défiltrer la colonne où il y écrit TDC. SF par TDC2.xlsm

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    le code est celui-ci:

    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
    Sub Essai()
    Dim c As Variant
    Dim MonDico As Object, Cellule As Range
     
     Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("Feuil1").Range("A2:A600") 'ADAPTE TA PLAGE DE DONNÉE
         MonDico.Item(c.Value) = MonDico.Item(c.Value) + 1
      Next c
     
      For Each c In MonDico.keys
     
        If c <> "" Then
         If ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("TDC").PivotItems(c).Visible = True Then _
          ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("TDC").PivotItems(c).Visible = False
        End If
     
      Next c
    End Sub

    Dans ton fichier j'ai ajoutée une autre version par selection

    Donc voici!
    SF par TDC2.zip

  18. #18
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Je viens de télécharger ton ficher modifié. Je lance la macro "Essai pour voir si ça défiltre bien la colonne TDC. Mais non ça me fait toujours "erreur 1004"..

    Tu l'avais essayé ta macro ?

    Quand à ta deuxième solution dès que j'ouvre le fichier et que je fais activer le contenu, le contenu du carré en rose devient vide et je ne peux rien faire avec..

    Merci tout de même d'avoir essayé !

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Citation Envoyé par Slysio Voir le message
    .

    Tu l'avais essayé ta macro ?

    Quand à ta deuxième solution dès que j'ouvre le fichier et que je fais activer le contenu, le contenu du carré en rose devient vide et je ne peux rien faire avec..

    Merci tout de même d'avoir essayé !
    SALUT

    NON je n'avais pas essayée :
    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
    Sub Essai()
    Dim c As Variant
    Dim MonDico As Object, Cellule As Range
     
     Set MonDico = CreateObject("Scripting.Dictionary")
      For Each c In Sheets("Feuil1").Range("A2:A600") 'ADAPTE TA PLAGE DE DONNÉE
         MonDico.Item(c.Value) = MonDico.Item(c.Value) + 1
      Next c
     
      For Each c In MonDico.keys
     
        If c <> "" Then
         If ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("TDC").PivotItems(c).Visible = False Then _
          ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("TDC").PivotItems(c).Visible = True
        End If
     
      Next c
    End Sub
    Pour le fichier il s'active en changeant de feuil alors va sur feuil1 puis sur feuil8!

  20. #20
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Par pur hasard j'ai fait l'enregistreur de macro sur le fichier sur lequel on travaille "SF par TDC 2" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("TDC")
            .PivotItems("TDCMS").Visible = True
            .PivotItems("TDCMY").Visible = True
            .PivotItems("TDCRN").Visible = True
            .PivotItems("TDCFM").Visible = True
        End With
    End Sub
    J'exécute et incroyable ça marche : c'est-à-dire que cela défiltre bien comme je voulais.

    J'ai voulu l'exporter sur le gros fichier sur lequel je travaille et il n'y a pas d'erreur mais cela ne défiltre pas.. "ascenseur émotionnel".. :'(

    Donc je me suis dit que ça doit surement être du à ton petit tableau rose qui permet de sélectionner. Donc comment as tu fais pour le faire ? Est ce que c'est lié au code ?

    Si jamais tu pouvais faire un petit tuto pour les nuls histoire que j'arrive (enfin!) à défiltrer mon TCD..

Discussions similaires

  1. filtre vba multi critères
    Par STANDBOY dans le forum VBA Access
    Réponses: 5
    Dernier message: 01/05/2010, 16h24
  2. Filtre VBA valeur cellule
    Par commetuveux dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2009, 15h49
  3. probleme copier coller de cellules filtrées vba
    Par nicola13 dans le forum Excel
    Réponses: 1
    Dernier message: 06/04/2009, 14h36
  4. filtre vba supprimer
    Par ferronimus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2007, 08h06
  5. Filtre VBA, problemme avec double quote
    Par choubak dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/06/2007, 09h31

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