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 :

Un slicer (segment) pour les gouverner tous


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    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 660
    Points : 5 783
    Points
    5 783
    Par défaut Un slicer (segment) pour les gouverner tous
    Bonjour, pour remplir un tableau de bord j'utilise les données de 4 TCD dont les champs de lignes sont identique, pour ne pas avoir a refaire la même selection sur les 4 TCD j'aurais aimé utilisé une macro qui copie les choix d'un slicer vers un autre.
    J'ai presque trouvé mon bonheur ici:http://www.developpez.net/forums/d13...t-meme-source/ mais bien sur si j'ouvre un post c'est qu'il y a des problèmes ...

    Voici le code que j'ai utilisé:
    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
    52
    53
    54
    Sub slicer_copie()
     For Each Sh In ThisWorkbook.Sheets
            For Each TCD In Sh.PivotTables
                With Sh.PivotTables(TCD.Name)
                .ManualUpdate = True
                End With
            Next
        Next
    
            Application.EnableEvents = False
            'ligne suivante à répéter pour chaque autre segment en adaptant le nom
            ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS1").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS3").ClearManualFilter
            For Each Iitem In ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS2").SlicerItems
            'ligne suivante à répéter pour chaque autre segment en adaptant le nom
                 ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                 ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS1").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                 ActiveWorkbook.SlicerCaches("Slicer_POLICE_PAYS3").SlicerItems(Iitem.Name).Selected = Iitem.Selected
            Next
            
             'ligne suivante à répéter pour chaque autre segment en adaptant le nom
            ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT1").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT3").ClearManualFilter
            For Each Iitem In ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT2").SlicerItems
            'ligne suivante à répéter pour chaque autre segment en adaptant le nom
                 ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                 ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT1").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                 ActiveWorkbook.SlicerCaches("Slicer_TYPE_CLIENT3").SlicerItems(Iitem.Name).Selected = Iitem.Selected
            Next
            
             'ligne suivante à répéter pour chaque autre segment en adaptant le nom
            ActiveWorkbook.SlicerCaches("Slicer_TC_NOM").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Slicer_TC_NOM1").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Slicer_TC_NOM3").ClearManualFilter
            For Each Iitem In ActiveWorkbook.SlicerCaches("Slicer_TC_NOM2").SlicerItems
            'ligne suivante à répéter pour chaque autre segment en adaptant le nom
                 ActiveWorkbook.SlicerCaches("Slicer_TC_NOM").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                    'bloque ici
                 ActiveWorkbook.SlicerCaches("Slicer_TC_NOM1").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                      ou là
                 ActiveWorkbook.SlicerCaches("Slicer_TC_NOM3").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                  ou là
            Next
    For Each Sh In ThisWorkbook.Sheets
            For Each TCD In Sh.PivotTables
                With Sh.PivotTables(TCD.Name)
                .ManualUpdate = False
                End With
            Next
        Next
            Application.EnableEvents = True
    End Sub
    Pour les deux premiers slicers je n'ai pas eu de problèmes, mais pour le troisième (et le 4ème) il me met l'erreur "invalid procedure call or argument" a des lignes différentes suivant le choix dans le slicer.
    Quelqu'un saurait-il me dire pourquoi?

    Merci d'avance.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  2. #2
    Expert éminent sénior

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

    Ce fil concerne des segments correspondant à des TCD basés sur des sources différentes. Est-ce ton cas ?

    Si non il suffit de lier chaque segment aux divers TCD.

    Si oui quelques pistes :
    • si tu désactives, pour tester, la mise à jour différée est-ce que cela coince au même endroit ?
    • en vidant le cache de données des TCD avant le traitement (Options du TCD, Données, Nombre d'éléments à Retenir par champ : aucun. Valider puis actualiser) as-tu toujours le PB ?
    • es-tu certain d'avoir tous les mêmes éléments dans toutes les sources ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    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 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Ce fil concerne des segments correspondant à des TCD basés sur des sources différentes. Est-ce ton cas ?
    Oui j'ai 4 TCD qui viennent de 4 exports de Bdd différentes.

    •es-tu certain d'avoir tous les mêmes éléments dans toutes les sources ?
    Je suis sur que non pour certaines variables. Mais ça n'a pas arreter la macro pour le premier slicer qui pour un TCD a une valeur de plus que les autres

    •si tu désactives pour tester la mise à jour différée est-ce que cela coince au même endroit ?
    oui

    •en vidant le cache de données des TCD avant le traitement (Options du TCD, Données, Nombre d'éléments à Retenir par champ : aucun. Valider puis actualiser) as-tu toujours le PB ?
    oui

    Merci de ton aide

    edit: ".ClearManualFilter" selectionne toute les valeurs de la liste, existe-t-il quelque chose pour déselectionner tout?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    Expert éminent sénior

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

    A ma connaissance, on ne peut pas voir 0 valeur sélectionnée. Ce qui se produit cependant quand on filtre sur un niveau et qu'il n'existe pas valeurs à un niveau différent.

    Si les valeurs sources sont différentes et qu'il n'y a donc pas les mêmes éléments dans les slicers, cela devrait planter quand tu sélectionnes la valeur inexistante. Cependant j'ai remarqué que dans certains cas, selon la façon dont le code est fait, cela renomme l'entrée et met donc le souk mais ne plante pas...

    En mode debug si tu compares les propriétés des items sont-elles équivalentes sur les valeurs qui provoquent le plantage ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 660
    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 660
    Points : 5 783
    Points
    5 783
    Par défaut
    Citation Envoyé par 78chris Voir le message

    Si les valeurs sources sont différentes et qu'il n'y a donc pas les mêmes éléments dans les slicers, cela devrait planter quand tu sélectionnes la valeur inexistante. Cependant j'ai remarqué que dans certains cas, selon la façon dont le code est fait, cela renomme l'entrée et met donc le souk mais ne plante pas...
    J'ai testé sur un cas qui est présent dans les 4 TCD et ça ne marche pas non plus

    En mode debug si tu compares les propriétés des items sont-elles équivalentes sur les valeurs qui provoquent le plantage
    Malheureusement je ne connais pas le mode debug?

    Merci encore, mais vais surement devoir changer d'approche vu que mes bases ne seront jamais 100% identiques

    Du coup une question comment peut on récuperer les valeurs choisies dans un slicer?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  6. #6
    Expert éminent sénior

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

    Pour les valeurs sélectionnées, à part une boucle qui vérifie la propriété Selected...

    SlicerCache.VisibleSlicerItems donne également la liste du contenu visible du segment mais pas la notion de de sélection.

    Une dernière piste (pas testé) les items ont une propriété HasData : les noms qui plantent correspondent peut-être à des éléments sans données donc peut-être vérifier au préalable avec cette proprité avant de "sélecter" l'entrée...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

Discussions similaires

  1. une classe pour les dominer tous
    Par exe2bin dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 28/11/2015, 14h20
  2. [MVVM] Une vue pour les contrôler tous
    Par Atchioum dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 14/04/2015, 17h29
  3. Grid : Une row pour les remplir tous x)
    Par Arnard dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/03/2013, 09h57
  4. [Jobs] Supprimer tous les jobs pour les recreer
    Par yolepro dans le forum Oracle
    Réponses: 3
    Dernier message: 25/11/2005, 16h47

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