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 :

Intercepter la valeur d'un segment [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut Intercepter la valeur d'un segment
    Bonjour,

    Je souhaite intercepter la valeur sélectionnée dans un segment chaque fois que l'utilisateur clique sur un nouvel item afin de lancer des traitements particuliers.
    Je précise que la valeur sélectionnée doit être connue et traitée avant l'affichage résultant du choix de l'utilisateur.
    Pouvez-vous m'aider ?
    Merci

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pour avoir une chance d'obtenir une réponse exploitable, il va falloir être beaucoup plus détaillé.
    Qu'est-ce qu'un segment ?
    Dans quelles circonstances doit-il être "intercepté" ?
    Quelle est la nature des "item" ?
    Quels type de "traitements" sont lancés ? Sous quelle forme ?
    Quel "traitement" doit subir la "valeur" ?
    Qu'est ce qui génère le "résultat" ? Quelle est sa nature ?

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut
    J'ai un segment associé à un graphique croisé dynamique qui me permet de filtrer celui-ci et de n'afficher que les données directement liées à l'item sélectionné.
    Chaque fois que l'utilisateur clique sur un item de cette liste filtrante, je souhaite, AVANT d'afficher le graphique correspondant, exécuter une (ou plusieurs) macro pour ramener des données et les afficher à côté du graphique.

  4. #4
    Expert éminent

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

    Je me demande si tu n'est pas parti sur une mauvaise piste... D'où sortent les données à afficher à côté du graphique ?

    Le choix d'une valeur dans un segment déclenche l'évènement PivotTableUpdate

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Je me demande si tu n'est pas parti sur une mauvaise piste... D'où sortent les données à afficher à côté du graphique ?
    Merci Chris de me répondre

    En fait j'ai un graphique croisé dynamique qui m'affiche le nombre d'une population selon certains critères (fonctions professionnelles).
    L'axe horizontal représente les différents services de mon entreprise et l'axe vertical, le nombre d'agents. Le segment associé à ce GCD me permet de sélectionner le type d'agent selon sa fonction.
    Au moment où l'utilisateur clique sur Fonction1 ou Fonction2, en plus de lui afficher le graphique correspondant, j'ai besoin d'afficher en regard du graphique des informations descriptives de la fonction sélectionnée, issues d'un autre fichier.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Chris,
    D'après la demande, voir ci-dessous, il souhaite intercepter avant que la sélection ne fasse ses effets. C'est un peu comme un événement BeforeDoubleClick mais pour un Click or Slicer n'a pas de procédure événementielle tout au moins à ma connaissance
    Je précise que la valeur sélectionnée doit être connue et traitée avant l'affichage résultant du choix de l'utilisateur
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut
    Merci Philippe. C'est exactement cela.

  8. #8
    Expert éminent

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

    J'avais bien compris.

    Le choix dans le segment déclenche bien un évènement dans le TCD mais ne serait-il pas plus simple d'utiliser une formule ?

    Par formule :
    1. On peut récupérer la valeur du segment si la source est un cube (donc éventuellement construire le TCD avec PowerPivot)
    2. sinon on peut utiliser un second TCD planqué ne contenant que le champ Fonction en zone de filtre


    Ci-joint les 3 solutions illustrées: VBA en plus des 2 citées

    A noter que la solution VBA devrait être affinée car on ne teste que le 1er item du segment ce qui peut poser problème si le segment en a plusieurs sélectionnés
    Fichiers attachés Fichiers attachés

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut
    Citation Envoyé par 78chris Voir le message
    Ci-joint les 3 solutions illustrées: VBA en plus des 2 citées
    Merci Chris. Mais, "Par mesure de sécurité, les macros ont été désactivées par votre administrateur".
    Te serait-il possible de me transmettre le code directement depuis le corps de ta réponse SVP ?

    Par ailleurs, il ne m'est pas possible d'utiliser des formules parce que l'onglet "Stat" sur lequel s'affichent mes graphiques n'existe pas dans le fichier initial. Il se crée à la demande en fonction de certains choix de l'utilisateur.

    En tout cas Merci

  10. #10
    Expert éminent

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

    Rien n'empêche d'accéder au module VBA même si le code n'est pas activé à l'ouverture...

    dans le module de la feuille concernée par le TCD dont dépend le GCD et auquel est rattaché le segment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
        If Target.Name <> "NomTCD" Then Exit Sub
        For Each Cas In ActiveWorkbook.SlicerCaches("NomSegment").SlicerItems
            If Cas.Selected = True Then ... : Exit For
        Next Cas
     
    End Sub

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut
    Citation Envoyé par 78chris Voir le message
    dans le module de la feuille concernée par le TCD dont dépend le GCD et auquel est rattaché le segment
    Je pense qu'on avance.
    Mais, à l'ouverture de mon fichier, je n'ai qu'un seul onglet.
    Ensuite, selon le cheminement de l'utilisateur, je crée un onglet "Calculs" sur lequel j'effectue tous les traitements intermédiaires, puis je crée un onglet "Stat" sur lequel j'affiche les résultats, notamment les graphiques.
    Lors de l'utilisation suivante, j'initialise tout avec un delete des 2 onglets cités précédemment.
    En clair, je ne sais où je peux placer une procédure Worksheet.

  12. #12
    Expert éminent

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

    Dans ce cas dans le module du classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
        If Sh.Name <> "NomFeuilleduTCD" Or Target.Name <> "NomTCD" Then Exit Sub
        For Each Cas In ActiveWorkbook.SlicerCaches("NomSegment").SlicerItems
            If Cas.Selected = True Then ... : Exit For
        Next Cas
     
    End Sub

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2010
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 130
    Par défaut
    Mille Mercis.

    Il y avait un problème supplémentaire : Le TCD est sur une feuille et le GCD sur une autre.
    Par ailleurs, j'ai dû traiter à l'aide d'un indicateur le 1er passage (création du GCD avec son segment) et passages suivants avec modification de la valeur.

    Encore merci pour ta compétence et ta rapidité.

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

Discussions similaires

  1. [XL-2010] Récupération d'une valeur depuis un segment (Slicer)
    Par Abed_H dans le forum Excel
    Réponses: 0
    Dernier message: 28/04/2013, 17h55
  2. [XL-2010] Récupération de la valeur d'un Segment (Slicer)
    Par manard dans le forum Excel
    Réponses: 1
    Dernier message: 15/04/2013, 23h58
  3. Intercepter la valeur du retour d'une méthode dans le finally.
    Par Alain Defrance dans le forum Langage
    Réponses: 2
    Dernier message: 05/09/2009, 23h36
  4. ksh intercepter/tester valeur code touche
    Par jadey dans le forum Linux
    Réponses: 2
    Dernier message: 28/10/2008, 13h14
  5. Intercepter une valeur Null
    Par adrien.gendre dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/08/2007, 12h28

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