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 :

Modifier Filtre TCD par VBA Excel 2010


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut Modifier Filtre TCD par VBA Excel 2010
    Bonjour,

    J'aimerai modifier le filtre de plusieurs TCD par une seule action (via VBA ?)

    Mon fichier se compose de 4 TCD, et chacune est construit avec un filtre, ce dernier est le même pour les 4 TCD. Ainsi, j'aimerai qu'après avoir modifier le filtre du 1er TCD les 3 autres filtres se modifient aussi.

    Mon idée, est copier dans une cellule précise (A1) la donnée du 1er filtre , puis à partir du code ci-dessous, tous les autres TCD devraient aussi se modifier automatiquement.

    Mais ce code ne fonctionne pas.

    Peut-être existe des solutions plus facile via un userform mais je ne suis pas assez calé en vba pour arriver à faire ça.

    Pourriez-vous m'aider à trouver une solution svp ?

    Ci-joint un fichier EXCEL 2010 pour illustrer mes propose.

    Merci de votre aide


    Code essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "$A$1" Then Exit Sub
        Dim Sh As Worksheet, Pt As PivotTable
        For Each Sh In Worksheets
            For Each Pt In Sh.PivotTables
                With Pt.PivotFields("Noms")
                    .ClearAllFilters
                    .CurrentPage = Target.Value
                End With
            Next Pt
        Next Sh
    End Sub

    Cdt
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour,
    pour ton exemple:

    Tu renommes tes TCD comme ceci:

    Le premier en haut celui qui ne doit pas bouger : TCD_1
    ensuite en descendant : TCD_2, TCD_3, TCD_4

    ainsi on identifie les TCD donc si j'ai compris, ce sont les TCD_2 à TCD_4 qui changent

    donc dans le code on boucle sur la collections de TCD du classeur, si le TCD à un nom différent de TCD_1 alors on applique le changement
    en affectant comme critère la valeur de la cellule A1.

    voici 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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Pt As PivotTable
     
    If Target.Address <> "$A$1" Then Exit Sub
     
     
        For Each Pt In PivotTables
     
            If Pt.Name <> "TCD_1" Then
     
            With Pt.PivotFields("Num")
                .ClearAllFilters
                .CurrentPage = Target.Value
            End With
     
            End If
        Next Pt
     
     
    End Sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Merci beaucoup pour ton aide !

    J'ai juste un souci qui me rends dingue... je n'arrive pas à éxécuter la macro ! Voici la copie d'écran de ce qu'il se passe quand je met en lecture le code.


    Pourrais tu m'aider à renommer le modul stp...c'est super énnervant de ne pas y arriver !

    merci encore
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    il ne faut pas mettre ce code dans un module,
    mais directement dans la feuille TCD's

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    C'est ce que je fais...pourtant quand j'execute, le panneau "macro" s'affiche avec aucune macro dedans.

    c'est le (byval...) qui me pose problème ! La macro ne s'execute pas, donc je ne sais même pas si le code est fonctionnel ou non...grrr c'est dingue, j'ai l'impression d'être vraiment très bête !

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    il ne faut pas l'éxécuter:

    l'éxécution ce fait lorsque tu introduis dans la cellule A1 de la feuille TCD's une nouvelle donnée et que tu valides le changement.

    si tu as un soucis je te mettrais le fichier en pièce jointe...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Ah mais ouiii...trop bête !

    Bon il y a une petit blocage, ça ne fonctionne pas exactement comme je le voulais.

    L'idée pour moi était de faire en sorte que la cellule A1 soit alimentée par un simple '=valeur du filtre TCD_2' et ainsi la macro s'execute pour les deux autres TCD.

    En effet, si je modifie "manuellement" la valeur de la cellule A1, ça fonctionne parfaitement...mais j'ai 807 occurences que je ne connais pas coeur :-)

    Je dois donc réussir à modifier la valeur de la cellule A1, j'utilise pour cela une liste déroulante. Le probleme est quand je change le numero de la liste déroulante, la valeur de la celulle A1 change mais il n y a pas le "enter" qui permet de valider la maj.

    Aurais-tu une astuce pour m'aider stp ?

    Ci-joint un nouveau fichier (avec liste déroulante et j'ai supprimé qq lignes pour réduire la taille du fichier compressé)

    Grand merci !!!!
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 539
    Par défaut
    Bonjour

    Supprime ta formule en A1, ta liste déroulante et ton code actuel et mets dans le module de la feuille TCDs
    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
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim Pt As PivotTable
     
    If Target.Name = "TCD_2" Then
        Application.EnableEvents = False
        For Each Pt In PivotTables
     
            If Pt.Name <> "TCD_1" And Pt.Name <> "TCD_2" Then
     
            With Pt.PivotFields("Num")
                .ClearAllFilters
                .CurrentPage = Cells(13, 3).Value
            End With
     
            End If
        Next Pt
        Application.EnableEvents = True
     End If
     
    End Sub
    Cependant si une valeur du TCD2 n'existe pas dans les autres cela peut poser problème.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Mille mercis 78Cris ! Ca fonctionne parfaitement.

    Et aussi grand grand merci RVToulon !

    Encore une dernière question:

    Le code de 78chris fonctionne bien...toutefois lorqu'on ajoute un TCD supplémentaire (en le nommant TCD_5), il y a blocage sur le .ClearAllFilters

    Pourtant le code n'impose de nombre de TCD !

    Auriez-vous une idée ?

    Merci bcp !

  10. #10
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 539
    Par défaut
    Bonjour

    Merci de ne pas passer par des MP.

    Il faut lire les messages qu'affiche le code et travailler en mode débug : le problème vient du fait que ClearAllFilters défiltre le TCD qui occupe alors environ 850 lignes ce qui écraserait le TCD situé en dessous et c'est que refuse VBA.

    On peut enlever cette ligne du code.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Merci !

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

Discussions similaires

  1. [XL-2007] Filtre imposé sur TCD par VBA
    Par meolimo dans le forum Excel
    Réponses: 0
    Dernier message: 23/02/2014, 21h05
  2. VBA Excel 2010 : RechercheV et Filtre
    Par toto92 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/03/2013, 11h16
  3. Manipuler les Shapes par VBA Excel.
    Par Karimbon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/10/2007, 19h37
  4. Changer la largeur de colonnes par vba (excel 97)
    Par jneron dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/09/2007, 12h14
  5. Création de label par VBA (excel)
    Par WagaSeb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2006, 15h46

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