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 :

Filtres de TCD en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut Filtres de TCD en VBA
    Bonjour,

    J'ai un classeur contenant un TCD avec pour filtre les mois de l'année.
    J'ai un autre classeur avec plusieurs feuilles qui correspondent aux mois de l'année et à leur cumul :
    janvier, février , CUMULfévrier, mars, CUMULmars....ect

    Je voudrais copier les données du TCD pour chaque mois dans la feuille correspondante.
    La partie copier/coller, je sais faire, identifier la bonne feuille aussi.
    Je n'arrive juste pas à cocher les filtres en fonction de la feuille sur laquelle je me trouve.

    Par exemple, si je suis sur la feuille "mars", dans le TCD il me faut le filtre mars de coché.
    Si je suis sur la feuille CUMULmars, il me faudra alors les filtres janvier, février et mars

    Savez-vous comment je peux faire ?

    Merci d'avance vous les réponses

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour Louis,

    Je pense qu'il te faut transformé quelque part tes mois en index (janvier = 1, février = 2, etc.)
    Ensuite, en fonction de ce qui est sélectionné, tu boucles sur tes mois en partant de 1.

    Si la feuille mars est sélectionnée, alors c'est simple, tu peux sélectionner la valeur "mars" dans le filtre TCD.

    Si c'est la feuille CumulMars qui est sélectionnée, alors tu boucle sur les mois allant de 1 à 3, puis tu ajoutes les filtres correspondant dans le TCD (à savoir, janvier, février et mars).

    Utilise l'enregistreur de Macro pour savoir comment ajouter ou enlever des filtres à un TCD.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut
    Bonjour Mat,

    Tout d'abord, merci pour ta réponse.

    Depuis hier, j'ai un peu avancé, mais "pas très proprement" :

    Enfait, le début de ma macro me renvoi une variable NomFeuille sur laquelle je dois travailler (correspondant au nom du mois, ou à CUMULmois)

    Je me sers ensuite de cette variable sous cette forme :

    SI NomFeuille="janvier"
    ALORS décocher tous les filtres
    cocher janvier

    SINON SI NomFeuille="mars"
    ALORS décocher tous les filtres
    cocher le filtre mars

    ect ect et ça fonctionne

    C'est là que mon code n'est pas très propre, donc actuellement j'essaye de boucler tout ça dans un FOR. Pour cela, j'ai stocké mes noms de feuilles dans un fichier (de A13 à A24)
    et je fais :
    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
     
        For i = 13 To 24
     
        tableauFeuil = Workbooks("MAJ_chiffre_X.xlsm").Sheets("Feuil1").Range("A" & i).Value1
     
            If NomFeuille = tableauFeuil Then ' => SI condition validée ALORS
     
                ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Mois cloture" _
                ).ClearAllFilters
                ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Mois cloture" _
                ).CurrentPage = tableauFeuil
     
            Else: MsgBox "sortie boucle"
            End If
        Next
    Mais ça ne marche pas très bien
    Déjà, ça me prend le A13 à A24 de la feuille active, donc bon, je pense régler cela en activant le bon classeur et la bonne feuille juste avant. Je m'y attelle juste après.
    Cette boucle gère juste de janvier à février, pour le CUMULmois je verrai après... Si quelqu'un à une idée, surement dans mon ELSE.

    Concernant l'enregistreur de macro, je l'ai utilisé, en fait j'ai tout décoché et coché seulement le filtre utile, sauf que l'enregistreur de macro coche tout et enlève ce dont-il a n'a pas besoin, il fait l'inverse en fait... (d'où de "Décocher tous les filtres puis cocher le bon")

    Merci d'avance pour les réponses

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Re,

    C'est un bon début.
    Effectivement comme tu l'as dit, tu dois spécifier le bon classeur et la bonne feuille avant de faire quoique ce soit pour éviter les surprises.

    Pour la partie concernant les feuilles Cumul :
    Après avoir testé si le nom de ta feuille correspond à la valeur tableauFeuil1, tu ajoutes une nouvelles condition en testant si tableauFeuil1 commence par CUMUL.
    Si ce n'est pas le case, alors il faut exécuter le code que tu as mis qui fonctionne bien apparemment.
    Sinon, tu fais une deuxième boucle, mais au lieu de la faire de 13 à 24, tu la fait de 13 à la variable i.
    Et à chaque fois qu'un nom de feuille de commence pas pas CUMUL, tu l'ajoutes à tes critères.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut
    Bonjour,

    Je reviens après quelques jours sans avoir travaillé sur cette macro, j'ai un problème avec une autre partie :
    J'ai aussi des feuilles cumul T2 mai, Cumul T2 juin ect.. qui correspondent au cumul par trimestre.
    Dans mon TCD j'ai un filtre Trimestre, que je cocherai après.

    J'ai essayé de tester une boucle for pour savoir si ma condition était vérifiée, mais apparemment non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For j = 1 To 4
            If Nom Like "Cumul T & j *" Then
            MsgBox "ok"
     
            Else: MsgBox "NOK"
            End If
     Next
    En sachant que Nom me renvoie "Cumul T2 mai" lorsque je l'affiche dans une MsgBox

    J'ai aussi essayé ça, sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For j = 1 To 4
            If Nom Like "Cumul T" & j & "*" Then
            MsgBox "ok"
     
            Else: MsgBox "NOK"
            End If
     Next
    Selon moi, je devrais avoir une msgbox lorsque J=2, non ?

    Merci pour les réponses

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut
    Re,

    Au final ça fonctionne, je ne sais pas ce qui ne marchait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    For j = 1 To 4
     
        If Nom Like "Cumul T" & j & "*" Then
            MsgBox "test ok"
            ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Trimestre" _
            ).ClearAllFilters
            ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Trimestre" _
            ).CurrentPage = j
     
        Else: MsgBox "test pas ok"
        End If
    Next

Discussions similaires

  1. 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
  2. [XL-2007] Filtre imposé sur TCD par VBA
    Par meolimo dans le forum Excel
    Réponses: 0
    Dernier message: 23/02/2014, 20h05
  3. [XL-2010] Automatiser un filtre d'un TCD en VBA via une liste
    Par Safety147 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/03/2012, 00h31
  4. [Toutes versions] Comment récuperer un filtre de tcd en vba
    Par lcolombain dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2012, 04h57
  5. [XL-2010] Recuperation de la valeur d'un filtre TCD en VBA
    Par lcolombain dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/02/2012, 09h07

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