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

Excel Discussion :

Peut on sélectionner par menu une valeur d'un TCD sans passer par la mise en forme. [XL-2013]


Sujet :

Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Peut on sélectionner par menu une valeur d'un TCD sans passer par la mise en forme.
    Bonjour,

    Je cherche une solution pour sélectionner une valeur d'un tableau croisé (comme dans le filtre).

    Dans l'exemple simplifié suivant, serait-il possible que sans passer par la sélection de données du tableau, on puisse soit afficher les ventes soit les achats.
    Nom : 2020-09-09 13_28_55-Window.png
Affichages : 134
Taille : 30,6 Ko
    La justification vient du fait que le choix du champ de valeur à afficher sera décidé par l'utilisateur à la vue du résultat global dans un autre tableau tableau dans lequel il compare deux périodes, s'il voit une dérive des ventes, il voudra voir la le détail des ventes, ou des achats.
    Dans le vrai besoin, j'ai une 30aine de valeurs disparates et je ne peux
    Pour l'instant j'envisage de faire une macro.
    Merci pour vos suggestions.
    Denis

    PS "non ce n'est pas possible" est aussi une réponse utile !

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Proposition:
    Cliquez sur le graphique pour passer de "Ventes" à "Achats" et inversement, les champs sont permutés à tour de rôle et la colonne du champ indésirable est masquée.
    le fichier
    Pièce jointe 578918

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Bascule()
        Application.ScreenUpdating = False
        If Range("G4").Value = "Somme de Achats" Then
            ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Somme de Achats").Orientation = xlHidden
            ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Somme de Ventes").Orientation = xlHidden
            ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ventes"), "Somme de Ventes", xlSum
            ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Achats"), "Somme de Achats", xlSum
        Else
            ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Somme de Achats").Orientation = xlHidden
            ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Somme de Ventes").Orientation = xlHidden
            ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Achats"), "Somme de Achats", xlSum
            ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ventes"), "Somme de Ventes", xlSum
        End If
    End Sub
    Cdlt

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci Arturo,

    Oui c'est ce que j'ai fait, mais je me demandais s'il n'y avait pas une autre astuce sans vb.
    Denis

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Oui c'est ce que j'ai fait, mais je me demandais s'il n'y avait pas une autre astuce sans vb.
    pourtant, j'avais crû comprendre!

    Pour l'instant j'envisage de faire une macro.

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    oui, mais m'étant fait recadrer par certains, je ne demande jamais de code.

    donc suite à ma demande initiale, je me suis mis au travail dans la soirée.

    Mais ton travail m'a donné l'idée d'utiliser le clic sur le graph pour changer la valeur, donc ton travail m'est utile.

    MERCI

    Bonne journée
    Denis

  6. #6
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Arturo,

    Mon vrai besoin contient beaucoup plus de champs de données.
    Je voulais boucler sur les PivotsItems pour tous les fermer et rouvrir celui qui est sélectionné.

    mon soucis c'est de ne fermer que les pivots.item de données.
    si je boucle sur tous les PivotsItems il me fermer tout lignes, colonnes, données.

    Sais tu quelle propriété je peux tester pour n'atteindre que les données ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim Pvit
     
    With ActiveSheet.PivotTables("Tableau croisé dynamique3")
        .ClearAllFilters
        For Each Pvit In .PivotFields
         Pvit.Orientation = xlHidden
        Next
    End With
    Merci

  7. #7
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Essayez ceci, sélectionnez le champ à afficher avec la liste déroulante en "J1".
    Pièce jointe 578993

    le code dans le module de la feuille
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Pvit
        Dim Champ
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Champ = Target.Value 'Le champ à afficher 'L champ sélectionné
        Som_Champ = "Somme de " & Champ 'Le champ à afficher
     
        'Vidage du TCD
        On Error Resume Next
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Somme de Achats").Orientation = xlHidden
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Somme de Ventes").Orientation = xlHidden
     
        'Affichage du champ sélectionné
        If Champ = "Tout" Then
            ActiveSheet.PivotTables("Tableau croisé dynamique3").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Achats"), "Somme de Achats", xlSum
            ActiveSheet.PivotTables("Tableau croisé dynamique3").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Ventes"), "Somme de Ventes", xlSum
        Else
            ActiveSheet.PivotTables("Tableau croisé dynamique3").AddDataField ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields(Champ), Som_Champ, xlSum
        End If
        Application.EnableEvents = True
    End Sub
    Cdlt

  8. #8
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci Arturo,

    Ta réponse est valable si on connait tous les champs.
    Je cherche plutot une boucle pour d'abord cacher tous les affichés, puis afficher le sélectionné.
    cela permet de généraliser le module à tous les TCD par la suite.

    Merci
    Denis

  9. #9
    Membre éclairé Avatar de PrinceCorwin
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Mars 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 337
    Points : 692
    Points
    692
    Par défaut
    Bonjour,

    J'avais fait presque le même style de projet il y a longtemps.
    Je compilais les informations dans des tableau (non TCD).
    Nom : Le tableau.PNG
Affichages : 101
Taille : 62,1 Ko
    En colonne A, la concaténation des colonnes B..E


    J'ai mis en place des noms avec des formules =DECALER(...) pour avoir les lignes de tableau
    Nom : Gestion des noms.PNG
Affichages : 99
Taille : 19,4 Ko

    pour les choix des lignes, une liste déroulante (B2).
    Nom : Liste déroulante B2.PNG
Affichages : 102
Taille : 4,6 Ko

    Est le numéro de la ligne équivalente au choix dans les cellules C4 et C5
    Nom : Formule ligne.PNG
Affichages : 108
Taille : 2,3 Ko

    Et dans le graphique
    Nom : Le graphique.PNG
Affichages : 98
Taille : 25,8 Ko
    Les séries de données sont construites via les noms définis plus haut
    Nom : Serie cde.PNG
Affichages : 110
Taille : 4,9 KoNom : Serie PRV.PNG
Affichages : 112
Taille : 4,9 Ko


    Idem pour les détails. Avec les listes déroulantes, des formules EQUIV et le gestionnaire de noms (formule DECALER)
    Deux listes déroulantes. La société et le type de composants
    Nom : Graph détail.PNG
Affichages : 112
Taille : 42,6 Ko


    Sans une seule macro !

    J'ai ensuite ajouté les capacités de production de notre atelier afin de "lisser" les besoins par rapport aux ressources.
    En espérant que cela puisse vous aider dans votre réflexion.
    Si ce message vous a aidé, appuyez sur le petit , ca fait toujours plaisir
    Merci.

  10. #10
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci Prince,

    C'est une solution qui mérite de s'y intéresser.

    MErci pour les explications détaillées.
    Bonnes journées.
    Denis

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 774
    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 : 12 774
    Points : 28 638
    Points
    28 638
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi ne pas utiliser les segments à la place des filtres ?
    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

  12. #12
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Le pire, c'est que j'ai créé plein de segments !!!!

    La lumière est toujours quelque part, il suffit d'ouvrir les yeux.

    Merci Philippe

    Merci à Arturo et à Prince pour leurs contributions intéressantes par ailleurs.

    Denis

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2014, 11h47
  2. Réponses: 1
    Dernier message: 30/08/2007, 14h21
  3. Réponses: 3
    Dernier message: 31/10/2006, 16h22
  4. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15
  5. Modifer une valeur dans un panier sans la valider
    Par budiste dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2006, 09h53

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