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

Conception Discussion :

TCD - Répeter toutes les valeurs existantes d'une étiquette ligne même si valeur caculée inexistante


Sujet :

Conception

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut TCD - Répeter toutes les valeurs existantes d'une étiquette ligne même si valeur caculée inexistante
    Bonjour à tous,

    La question est la suivante

    Soit les données suivantes

    Groupe famille an vente
    gpe1 f1 2014 100
    gpe1 f1 2015 91
    gpe1 f2 2014 120
    gpe2 f4 2015 230

    j'obtiens le TCD suivant


    Somme de vente Étiquettes de colonnes
    Étiquettes de lignes 2014 2015 Total général
    gpe1 220 91 311
    f1 100 91 191
    f2 120 120
    gpe2 230 230
    f4 230 230
    Total général 220 321 541

    or je voudrais obtenir

    2014 2015
    gpe 1
    f1 100 91
    f2 120 0
    f4 0 0
    gpe2
    f1 0 0
    f2 0 0
    f4 0 230


    Merci par avance pour votre aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Je réponds à la question pour un traitement manuel

    Sélectionner un champ composant la ligne hiérarchique pour laquelle on veut afficher également les valeurs qui ont des valeurs clculées = 0
    Dans mon cas une valeur quelconque de l’étiquette famille
    Puis cliquer droit -> Paramètre du champ -> onglet disposition -> cocher afficher les éléments sans données -> Ok

    Et on obtient


    Étiquettes de lignes 2014 2015 Total général
    gpe1 220 91 311
    f1 100 91 191
    f2 120 0 120
    f4 0 0 0
    gpe2 0 230 230
    f1 0 0 0
    f2 0 0 0
    f4 0 230 230
    Total général 220 321 541


    Question subsidiaire, comment activer cette option en VBA?

    Merci par avance
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  3. #3
    Expert éminent sénior

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PivotTables("Nom du TCD").PivotFields("Nom du champ").ShowAllItems = True
    à adapter
    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é...

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour 78chris

    Merci pour ton aide, je l'ai adapté à mon code et ça marche impec.

    J'en profite pour te demander un conseil sur un autre problème qui est le suivant:
    Je doit faire apparaitre des valeurs de champs qui peuvent être inexistantes. Si je reprends mon tableau d'exemple:


    Groupe famille an vente
    gpe1 f1 2014 100
    gpe1 f1 2015 91
    gpe1 f2 2014 120
    gpe2 f4 2015 230

    Je dois forcer l'apparition de l'année 2013 en colonne même si aucune données 2013.

    Remarque: Les données sont extraites d'une BDD access dont j'ai la maîtrise.

    J'ai alors pensé ajouté une ligne gpe1 ou gp2 avec famille = vide et vente = 0 pour éviter de devoir faire le produit cartésien des tuple (gpe/famille dans mon exemple mais en vérité mon dev prend 4 champs ligne => produit cartésien des 4, possible avec SQL mais super lourd)

    Mais à l'affichage avec l'option .ShowAllItems = True, j'ai des lignes vides, normale !

    2013 2014 2015
    gpe 1
    f1 0 100 91
    f2 0 120 0
    f4 0 0 0
    vide
    0 0 0
    gpe2
    f1 0 0 0
    f2 0 0 0
    f4 0 0 230
    vide
    0 0 0

    La question est donc : Est-il possible de faire un filtre sur le champ famille pour ne faire apparaitre que les lignes dont la famille <> vide !!!!

    Dans le cas ou c'est pas niet, existe-il une autre solution côté Excel ou faut-il impérativement faire le produit cartésien dans mon extrait que je colle dans le fichier Excel?

    Encore merci pour ton aide 78chris
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    J'ai commencé à chercher sur les forums et j'ai trouvé le paramètre ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .PivotItems("(blank)").Visible = False
    Mon code adapté est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Set oTCD = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Source).CreatePivotTable(Destination, TcdName)
        With oTCD
     
            With .PivotFields("field1")
                .Caption = "field1"
                .Orientation = xlRowField
                .ShowAllItems = True
                .PivotItems("(vide)").Visible = False 
                .Position = 1
            End With
     
           .......
    End With
    Mais ça plante avec
    1. .PivotItems("(vide)").Visible = False
    2. .PivotItems("(blank)").Visible = False
    3. .PivotItems(0").Visible = False"

    J'ai le message d'erreur
    Impossible de lire la propriété PivotItems de la classe PivotField
    !!

    Quelqu'un a-t-il une idée sur mon erreur?

    REMARQUE: Par contre avec l'insertion d'un segment, c'est aux petits oignons l
    Merci par avance pour toute aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bon j'ai trouvé une solution à l'arrache donc pas jolie mais qui marche !

    Après la création du TCD, je boucle sur les champs de lignes pour lesquels je dois virer le blancs par le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range("A1").Select
        With ActiveSheet.PivotTables("monTCD").PivotFields("fieldX")
            .PivotItems("(blank)").Visible = False
        End With
    Et ça marche.

    J'imagine qu'il faut faire un range(Plage).select pour appliquer le PivotItemns. Une idée pour le faire avec l'objet oTCD de type pivot table car j'aurai préféré l'appliquer sur l'objet !

    Je suis preneur de toute proposition
    A+
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  7. #7
    Expert éminent sénior

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

    Il suffit d'ajouter une seule vente à 0 en 2013 pour une famille quelconque et dans les options du TCD d'indiquer 0 pour les cellules vides.

    Il y a un bug concernant la localisation des dates et des blanks : en VBA il faut contourner. Un fil sur le sujet http://www.developpez.net/forums/d13...eme-item-vide/ voir #8 et 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é...

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour 78chris,

    Merci pour la méthode d'ajout d'une année et le lien. Par contre pour faire disparaître les champs vide, je reste sur ma solution qui est:
    1. Ajout du TCD dans la page
    2. Activation de la page dans laquelle il y a le TCD
    3. Application des filtres sur les différents champs pour faire disparaitre les blank

    Avec cette méthode, PivotItems ne balance aucun message d'erreur.

    Encore merci pour ton aide 78chris
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  9. #9
    Expert éminent sénior

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

    Je n'ai pas compris l'intérêt d'ajouter des vides au départ puisqu'une vente à 0 suffit mais je n'ai peut-être pas tout saisi.

    Sinon en Access on peut remplacer Null par 0 (fonction NZ) si on fait un produit cartésien.
    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é...

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    Bonjour 78chris,

    Le truc c'est que j'ai besoin d'afficher des colonnes qui peuvent ne pas exister car aucune données en ligne associées, mais attendues en visuel. C'est une contrainte !

    Sinon à tout hasard, saurais-tu comment accéder à une structure déclarée et implémentée dans un module (pas de classe), alimentée au niveau d'une feuille et appelée dans une fonction déclarée dans le même module que la structure?
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  11. #11
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour informer, Bonjour Chris ,

    Sinon à tout hasard, saurais-tu comment accéder à une structure déclarée et implémentée dans un module (pas de classe), alimentée au niveau d'une feuille et appelée dans une fonction déclarée dans le même module que la structure?
    Euh... pas tout compris, essaye de voir du côté d'Application.Run peut-être

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/12/2014, 11h42
  2. Réponses: 6
    Dernier message: 29/05/2008, 12h06
  3. Rafraichissement toutes les X seconde d'une div
    Par zulot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/03/2007, 20h55
  4. [REFLEXION] Connaitre toutes les classes qui implémentent une interface
    Par narmataru dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 25/10/2006, 11h00
  5. Réponses: 2
    Dernier message: 08/06/2006, 17h42

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