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 :

Lier des segments qui ne partagent pas la même source


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Lier des segments qui ne partagent pas la même source
    Bonjour,

    Je souhaitais savoir si vous aviez trouvé la solution au problème de cette discussion?
    Je recherche à faire exactement la même chose (lier entre eux des segments ayant des sources différentes).
    Je me suis permise de reprendre votre code mais chez moi non plus il ne fonctionne pas, voir ci dessous sachant que j'ai 3 slicers dont le pilote est "Segment_Cslts1" et le TCD pilote "Tableau croisé dynamique2". Ca fait tellement longtemps que je cherche à trouver une solution!!!! Si vous pouviez m'aider!!! Merci!!!

    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
    Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
     
        If Sh.Name = "Fiche Eval par cslt" And Target.Name = "Tableau croisé dynamique2" Then
            Application.EnableEvents = False
     
            'ligne suivante à répéter pour chaque autre segment en adaptant le nom
            ActiveWorkbook.SlicerCaches("Segment_Cslts2").ClearManualFilter
            ActiveWorkbook.SlicerCaches("Segment_Cslts").ClearManualFilter
     
            For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Cslts1").SlicerItems
     
            'ligne suivante à répéter pour chaque autre segment en adaptant le nom
                 ActiveWorkbook.SlicerCaches("Segment_Cslts2").SlicerItems(Iitem.Name).Selected = Iitem.Selected
                 ActiveWorkbook.SlicerCaches("Segment_Cslts").SlicerItems(Iitem.Name).Selected = Iitem.Selected
            Next
     
            Application.EnableEvents = True
        End If
    End Sub

  2. #2
    Expert éminent sénior

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

    Oui cela fonctionne sur mes exemples et il me semble que cela a résolu le problème de pedrolapercu.

    Précise déjà ce qui ne marche pas : quel message d'erreur ou autre obtiens tu ? As-tu vérifié ce qui se passe en mode débug ?
    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
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Alors c'est ça qui semble bizarre. C'est qu'il y a eu une fois où la macro a commencé à s'éxécuter : les 2eme et 3eme slicers ont bien supprimé tout filtre et ensuite bug (mais je n'ai pas relever le message sorry) avec la ligne suivante surlignée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Iitem In ActiveWorkbook.SlicerCaches("Segment_Cslts1").SlicerItems
    Et maintenant j'ai beau réessayer rien ne se passe. Mon slicer pilote met à jour les TCd auxquels il est lié mais les deux autres slicers ne bougent pas.

    et merci beaucoup de prendre le temps de me repondre!! Avec bcp de reactivité en plus!

    encore moi!!

    Alors j'ai reessayé plusieurs et une des fois où j'ai essayé (après avoir fermé le fichier et l'avoir ré-ouvert), la macro a commencé à s'éxécuter et le bug s'est produit :
    erreur d'execution '5' : argument ou appel de procédure incorrecte avec la ligne surlignée suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SlicerCaches("Segment_Cslts").SlicerItems(Iitem.Name).Selected = Iitem.Selected
    Par contre c'est la seule fois où ça s'est passé. Maintenant il ne se passe rien.

  4. #4
    Expert éminent sénior

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

    Dans la macro il y a un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    si elle plante avant la fin et donc le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True
    Plus rien ne marche car la détection d'événements est désactivée.

    Crée toi une autre macro avec juste cette ligne afin de la rétablir et pouvoir refaire des tests.
    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
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Re,

    J'ai refait des tests en tenant compte de ta dernière remarque. Je te detaille ce qu'il se passe :

    1) je selectionne une valeur dans mon slicer pilote
    2) dans les 2 slicers suivant selection de toutes les valeurs : OK
    3) Valeurs decochées une à une dans ces slicers. Mais au bout de 4 valeurs decochées, bug à chaque fois :
    "erreur d'execution '5' : argument ou appel de procédure incorrecte"
    et la ligne surlignée en debogage est toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SlicerCaches("Segment_Cslts").SlicerItems(Iitem.Name).Selected = Iitem.Selected
    Me vient une question : si une valeur etait presente dans la liste du slicer pilote et egalement dans le slicer 2 mais qu'elle manque dans le slicer 3, cela pourrait t'il conduire à ce bug? Car ici une valeur est presente dans la liste 2 et pas dans la 3 et j'ai l'impression que ca coincide avec le bug.

  6. #6
    Expert éminent sénior

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

    Aïe : ce code partait du principe que les valeurs existaient toutes dans les différentes sources.

    J'ai fait un code pour un autre fil : on ne synchonise pas les slicers mais des champs de page (ce qui est assez proche sur le principe) et j'avais ajouté un test : si une valeur n'était pas présente dans une des sources la syncho était annulée.

    Je vais essayer de retrouver le fil et voir comment on peut mixer les 2 mais je ne vais pas avoir le temps tout de suite...
    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é...

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    ah ok! le pb doit donc venir de là!
    Initialmeent mon code portait sur la synchronisation de champ de page de mes TCD mais j'ai rencontré un soucis.
    A partir d'une liste deroulante la selection d'une valeur affectait la valeur selectionnée à tous les champs de page de tous les TCD de la feuille.
    Or le pb, c'est que lorsque la valeur n'existait pas dans le champ de page d'un TCD elle etait "forcée en affichage" et les valeurs affichées étaient fausses (les dernière valeurs affichées me semble t'il).
    Voilà pourquoi j'ai opté pour les slicers pour finalement m'apercevoir qu'on avait un soucis si tous les TCD n'avaient pas la meme source.

    Je te mets le code que j'avais à l'époque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Address = "$G$5" Then
        For e = 1 To PivotTables.Count 'variable du numéro de tableau, du TCD 1 à "cpter le nb de TCD"
        ActiveSheet.PivotTables(e).PivotFields("Cslts").CurrentPage = Target.Text
     Next
     On Error GoTo 0
    C'est déjà tres gentil de ta part de prendre le temps pour regarder mon pb donc pas de soucis reponds quand tu peux.
    D'ici là bon aprem!

    Bon j'espere avoir des nouvelles bientot parce que je ne m'en sors pas seule!!!
    Merci par avance!!

  8. #8
    Expert éminent sénior

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

    Il faudrait mieux ouvrir un fil ou continuer sur celui-ci (mais étant résolu, il ne sera pas lu...) mais pas en MP (d'autant que je vais m'absenter...)

    Je réponds donc ici à ton MP

    Le problème avec le besoin évoqué par rapport au projet vers le quel je t'avais renvoyé :

    Si on accepte la multi sélection, il faut tester chaque valeur pour vérifier si elle est on non cochée et, si il y a des dates ou des vides, on va tomber sur le bug évoqué ici http://www.developpez.net/forums/d13...ght=blank+vide

    car il faut en plus vérifier que (vide) existe dans la liste des valeurs du champs de page considéré si tu veux le sélectionner.

    Par ailleurs si on peut sélectionner plusieurs valeurs il faut tester l'existence de chacune des valeurs dans la source ou dans le TCD : que fait-on si certaines existent et pas d'autres ? Tu ne le précises pas dans ton message.

    Ci-joins un exemple de Walkenbach qui résout peut-être ton cas.
    Je n'ai pas eu le temps de le tester : il y aura sans doute le problème du bug sur les vides.
    Il raisonne sur une source commune : il faut donc y ajouter le test sur les sources qui existe dans le projet que je t'avais proposé mais qui se complique en muti sélection.

    Bref c'est nettement plus complexe même si c'est faisable.

    Je n'ai pas le temps de m'y pencher avant mon absence et c'est plus un développement qu'une simple assistance...

    Edit : pas sur que l'on puisse filter les TCD à l’intérieur de classeurs fermés...
    Edit 2 : si tu as 2010 une autre piste peut être Powerpivot
    Fichiers attachés Fichiers attachés
    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é...

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    merci pour ton retour.
    Si c'est trop compliqué je ne permettrais pas la multi selection...
    Par contre je voudrais vraiment qu'au cas où la valeur n'est pas presente on coche le champ "vide", et je suis sure qu'il sera dispo dans les filtres de chaque TCD.
    J'ai un petit peu regardé et je pense que ce sera compliqué de tout mettre à jour en fonction de mes besoins (vu mon niveau).

    Je vais essayé de me dépatouiller avec ça.

    Merci pour ton temps.


  10. #10
    Expert éminent sénior

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

    On peut assez facilement adapter le code pour le vide, toujours sans multiselection, par contre je reste dans le doute concernant l'aspect classeur fermé.
    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. [XL-2010] Lier des segments qui ne partagent pas la même source
    Par pedrolapercu dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/06/2018, 14h34
  2. [OL-2013] Partager des calendriers qui ne sont pas Exchange
    Par Yepazix dans le forum Outlook
    Réponses: 0
    Dernier message: 15/02/2014, 01h09
  3. Copier des données qui ne sont pas au même endroit
    Par nancy38 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/02/2013, 10h23
  4. comparer des variables qui n'ont pas le même attribut
    Par stagolee dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/02/2008, 11h14
  5. Réponses: 3
    Dernier message: 21/11/2006, 18h26

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