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 :

Cellule qui update le filtre d'un tcd


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Par défaut Cellule qui update le filtre d'un tcd
    Bonjour a tous,

    Je reviens vers vous pour continuer de m'instruire ^^.

    J'aimerais que le filtre (appele "season") d'un tcd (appele PivotTable2) s'ajuste automatiquement (sans faire appel a la macro a chaque fois qu'on change la valeur de la celulle) a une cellule.

    J'ai donc pense a une macro parce que je n'ai pas toruve d'autre moyens plus simples. S'il y en a un qui m'a echappe, je serais ravi de l'entendre .

    Donc pour le moment je viens avec ce code (inutile de preciser qu'il ne fonctionne pas) qui va dans la premiere ligne comparer les deux valeurs des cellules (la premiere cellule est la cellule qui doit "diriger", la seconde cellule est la cellule filtre du tcd).
    Dans la seconde ligne j'essaie de faire l'ajustement du filtre en fonction de la premiere cellule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Filtre()
     
        If Sheets("Model").Range("Y25") <> Sheets("Sheet7").Range("B196") Then
            Sheets("Sheet7").PivotTables("PivotTable2").PivotFields("Season") = Sheets("Model").Range("Y25")
        End If
    End Sub
    Selon le debugger il y a un probleme avec la deuxieme ligne.

    Premiere question, deja est ce que je dois utiliser une procedure ou une fonction et ou devrais-je copier ma macro? Dans le workbook ou dans une feuille ou alors dans un module?

    Merci d'avance pour l'aide et les explications que vous m'apporterez.

    Benjamin

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    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 569
    Par défaut
    Bonjour

    Selon que le champ du TCD est un champ de filtre sans multisélection, ou bien avec multisélection ou un champ de ligne ou bien de colonne, le code diffère mais dans tous les cas ce n'est pas celui que tu as fait : l'enregistreur de macro t'aurais donné la syntaxe (à améliorer ensuite).

    Dans le 1er cas on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Sheet7").PivotTables("PivotTable2").PivotFields("Saison").CurrentPage =...
    dans les autres il faut d'abord passer par un défiltrage du champ (ClearAllFilters) puis une boucle qui passe la propriété visible de chaque item du champ à False

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Par défaut
    Bonjour Chris,

    Merci pour le ".currentpage"
    Je l'ai teste d'abord avec une saison ecrite directement sur vba et cela focntionne.

    Mais je voudrais que pas pre-encoder la saison et remplacer le nom de la saison par une cellule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Filtre()
        If Sheets("Model").Range("Y25") <> Sheets("Sheet7").Range("B196") Then
            Sheets("Sheet7").PivotTables("PivotTable2").PivotFields("Season").CurrentPage = Sheets("Model").Range("Y25")
        End If
    End Sub
    Et malheureusement ici, le debbug me dit "invalid procedure call or argument". 3

    De plus, il semble que par ce code, je doive relancer ma macro manuellement (je voudrais que la macro l'ajuste automatiquement sans devoir la runner). Est ce que cela serait possible?

    merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par benja92 Voir le message
    De plus, il semble que par ce code, je doive relancer ma macro manuellement (je voudrais que la macro l'ajuste automatiquement sans devoir la runner). Est ce que cela serait possible?
    Bonjour,

    Oui via l'evenement worksheet_change dont tu peux trouver un tuto ici: http://silkyroad.developpez.com/VBA/EvenementsFeuille/

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    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 569
    Par défaut
    Re

    Tu n'es pas très attentif : si tu relis mon message, tu peux lire que le code ne marche que pour un champ de la zone de filtre quand la multisélection est désactivée.

    Or, si ton classeur est celui sur lequel nous avons déjà échangé, ce n'est pas le cas et c'est l'autre suggestion qu'il faut utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        With Worksheets("Sheet7").PivotTables("PivotTable2")
            .PivotFields("Saison").ClearAllFilters
            For Each Pi In .PivotFields("Saison").PivotItems
                If Pi.Caption <> Sheets("Model").Range("Y25").Value Then Pi.Visible = False
            Next
        End With
    Teste déjà cela et applique ensuite les conseil de halaster08 : il suffira d'utiliser call et le nom de cette macro

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 25
    Par défaut
    Merci a vous deux pour vos commentaires et reponses rapides.

    @halaster: Parfait merci beaucoup. Mais petite question complementaire: Ce type de commande s'ecrit dans une worksheet (ca semble evident). Mais ma macro veut lier le changement d'une sheet a une autre sheet. Ma question est: on ecrit la macro dans la sheet ou il y a le changement qui initie la macro? Ou dans l'autre feuille? Derniere option: vu que ca concerne deux feuilles discinctes, est ce que je dois ecrire ma macro dans le workbook (en utilisant la procedure Private Sub Workbook_SheetChange)?
    Deuxieme question. je pense que Target est une variable. Je presume que je dois lui dire a quoi elle correspond non? Est ce que ce code pour la nommer est correct?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Name = Sheets("Model").Range("Y25")
    @Chris: Je comprends tres bien mais je me suis assure de changer la multiselection en une unique selection pour ce filtre la
    Et pourtant mon code ne fonctionne pas (il ya surement pleins d'autres erreurs mais ce n'est pas a cause de la multiselection ou non que ca plante).

    J'ai fait plusieurs essais avec differents codes, dans differentes worksheets ou workbook. rien n'a jamais fonctionne.

    Ton code est super chris, je le comprends (vraiment je t'assure) mais je suis incapable de le faire fonctionner. Je ne sais pas si je dois le completer par le mien ou pas.

    Autre question: j'ai parfois un code qui semble sans erreur, je run ma macro mais alors excel me force a creer une macro en lui donnant un nom. Est ce necessaire? Qu'est ce que cela veut dire?

    Voici le code que j'ai ecrit dans la Sheet "Model" (feuille qui contient la cellule qui est censee initer la macro)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        Target.Name = Sheets("Model").Range("Y25")
        If Target <> Sheets("Sheet7").PivotTables("PivotTable2").PivotFields("Season").CurrentPage Then
            With Worksheets("Sheet7").PivotTables("PivotTable2")
                .PivotFields("Saison").ClearAllFilters
                For Each Pi In .PivotFields("Saison").PivotItems
                    If Pi.Caption <> Sheets("Model").Range("Y25").Value Then Pi.Visible = False
                    If Pi.Caption <> Sheets("Model").Range("Y25").Value Then Pi.Visible = True
                Next
            End With
    End Sub
    De plus, VBA m'a force a creer une macro dans un nouveau module quand j'ai essaye de runner ma macro.

Discussions similaires

  1. Fonction JavaScript qui fait un filtre
    Par soumou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/04/2007, 12h36
  2. [VBA-E] sommer une plage de cellules actives apres un filtre
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2007, 12h07
  3. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  4. Réponses: 1
    Dernier message: 18/09/2006, 12h59
  5. Taille d'une cellule qui varie selon la taille d'un mot
    Par shadeoner dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2006, 21h42

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