Pivot table, wrong output

Bonjour a tous,

je suis entrain de travailler sur des datas. a partir d'un tableau de data je souhaite creer des graphs en passant par les pivots tables. cependant impossible d'arriver a mes fins.. Si quelqu'un a des conseils/astuces.

a partir d'un tableau de donnees comme celui en piece jointe (template). j'aimerais faire une pivot table et depuis cette pivot table creer facilement des graphs dynamiques et personalisables (tout l'interet des pivots tables).

cependant des que j'essaie de creer des pivot tables, je n'arrive pas a avoir ce que je veux.

En piece jointe le fichier excel avec parmis les sheets:

Data= sheet contenant mes donnees

Pivot table= un exemple de pivot table que vous pouvez manipuler

output souhaite= des exemples de courbes que j'aimerais faire

Merci d'avance pour votre aide.

ps:excusez moi pour l'orthographe et la ponctuation, je suis sur un clavier qwerty sans ponctuation francaise.

19template.xlsx (109.12 Ko)

Bonjour,

Ton tableau comporte principalement des données textes (pas numériques).

Ensuite, quelles opérations veux-tu effectuer (nombre de, somme de, etc...)

Merci de nous apporter quelques éclaircissements, en te rappelant que sur les versions Excel françaises, c'est la virgule, le séparateur décimal !...

Cdlt.

Bonjour

Multipost... Au moins ici on la version Excel...

...en te rappelant que sur les versions Excel françaises, c'est la virgule, le séparateur décimal !...

Là il y a un mélange de . et , qui ne semblent pas suivre une logique particulière...

Bonjour a tous,

merci pour vos retours.

Concernant les points et virgules, ici le separateur des decimales est le point et la virgule est un separateur de milliers.

Je souhaite creer des graphs avec pour chaque courbe, chaque point correspondant a la valeur d'un des champs de test (ETH,VDCPU, VDH, CDL, ..). et chaque courbe correspond ensuite a un des filtres (Release, platform, ...)

donc pour resume plusieurs graphs, pour chaque graphe on fixe toutes les colonnes avec du test sauf une qui varie et les points correspondent aux donnes sous les colonnes (ETH, VDCPU, ..)

si vous regardez sous l'onglet output shouaite vous avez quelques exemples des output souhaite.

Merci d'avance de votre help.

Bonjour,

Ton fichier en retour avec des valeurs numériques.

Tu peux donc créer tes TCDs et tes graphiques.

Cdlt.

6template.xlsx (112.85 Ko)

Bonjour Jean-Eric,

Merci de votre aide,

cependant j'ai maintenant la somme total pour chaque platform et je n'ai pas encore l'output souhaite.

il faudrait plutot quelque chose comme:

pout tel release, testmode et receive mode on a un tableau avec sur deux colonnes: les deux platforms (spear,lces) et sur les lignes: ETH2, VDCPU2,...

de cette maniere je peux je pense finir avec des graphs comme dans l'onglet Output Souhaite.

Merci de votre aide.

Bonsoir à tous,

Pour traiter les données de la feuille "data", j'ai remplacé les valeurs des colonnes F, H, J, L, N, P, R et T par du numérique.

J'ai traité uniquement la colonne "Release"

J'ai créé la Feuil1 manuellement pour la restitution

Option Explicit
Sub test()
Dim a, w(), e, i As Long, j As Long, n As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets("Data").Range("a1").CurrentRegion
        a = Application.Index(.Value, Evaluate("row(1:" & _
                    .Rows.Count & ")"), Array(1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20))
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 3)) Then
                Set dico(a(i, 3)) = _
                CreateObject("Scripting.Dictionary")
                dico(a(i, 3))(a(1, 2)) = _
                Application.Index(a, 1, Array(2, 6, 7, 8, 9, 10, 11, 12, 13))
            End If
            If Not dico(a(i, 3)).exists(a(i, 2)) Then
                dico(a(i, 3))(a(i, 2)) = _
                Application.Index(a, i, Array(2, 6, 7, 8, 9, 10, 11, 12, 13))
            Else
                w = dico(a(i, 3))(a(i, 2))
                For j = 6 To UBound(a, 2)
                    w(j - 4) = w(j - 4) + a(i, j)
                Next
                dico(a(i, 3))(a(i, 2)) = w
            End If
        Next
    End With
    Application.ScreenUpdating = False
    With Sheets("Feuil1").Range("a1")
        .Parent.UsedRange.Cells.Clear
        For Each e In dico.keys
            With .Offset(n)
                .Value = e
                .VerticalAlignment = xlCenter
                .HorizontalAlignment = xlCenter
                With .Font
                    .Bold = True
                    .Name = "calibri"
                    .Size = 14
                End With
            End With
            n = n + 1
            With .Offset(n).Resize(dico(e).Count, UBound(Application.Index(dico(e).items, 0, 0), 2))
                .Value = Application.Index(dico(e).items, 0, 0)
                With .Font
                    .Name = "calibri"
                    .Size = 10
                End With
                .VerticalAlignment = xlCenter
                .Borders(xlInsideVertical).Weight = xlThin
                .BorderAround Weight:=xlThin
                With .Rows(1)
                    .HorizontalAlignment = xlCenter
                    With .Offset(, 1).Resize(, .Columns.Count - 1)
                        .Interior.ColorIndex = 36
                        .BorderAround Weight:=xlThin
                    End With
                End With
                With .Columns(1)
                    .HorizontalAlignment = xlCenter
                    With .Offset(1).Resize(.Rows.Count - 1)
                        .Interior.ColorIndex = 40
                        .BorderAround Weight:=xlThin
                    End With
                End With
            End With
            n = n + dico(e).Count + 1
        Next
    End With
    Application.ScreenUpdating = True
    Set dico = Nothing
End Sub

gms821, est-ce le résultat attendu

klin89

Bonjour,

Une proposition à étudier.

Cdlt.

10template.xlsm (52.48 Ko)

Re

Voilà le traitement s'effectue désormais sur les 3 colonnes "Release" "TestMode" et "ReceiveMode"

Option Explicit
Sub test()
Dim a, w(), e, v, i As Long, j As Byte, col As Byte, n As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets("Data").Range("a1").CurrentRegion
        a = Application.Index(.Value, Evaluate("row(1:" & _
                    .Rows.Count & ")"), Array(1, 3, 2, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20))
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 2)) Then
                Set dico(a(i, 2)) = _
                CreateObject("Scripting.Dictionary")
                For col = 3 To 5
                    Set dico(a(i, 2))(a(1, col)) = CreateObject("Scripting.Dictionary")
                    dico(a(i, 2))(a(1, col)).CompareMode = 1
                    dico(a(i, 2))(a(1, col))(a(1, col)) = _
                    Application.Index(a, 1, Array(col, 6, 7, 8, 9, 10, 11, 12, 13))
                Next
            End If
            For col = 3 To 5
                If Not dico(a(i, 2))(a(1, col)).exists(a(i, col)) Then
                    dico(a(i, 2))(a(1, col))(a(i, col)) = _
                    Application.Index(a, i, Array(col, 6, 7, 8, 9, 10, 11, 12, 13))
                Else
                    w = dico(a(i, 2))(a(1, col))(a(i, col))
                    For j = 6 To UBound(a, 2)
                        w(j - 4) = w(j - 4) + a(i, j)
                    Next
                    dico(a(i, 2))(a(1, col))(a(i, col)) = w
                End If
            Next
        Next
    End With
    'restitution et mise en forme
    Application.ScreenUpdating = False
    With Sheets("Feuil1").Range("a1")
        .Parent.UsedRange.Cells.Clear
        For Each e In dico.keys
            With .Offset(n)
                .Value = e
                .VerticalAlignment = xlCenter
                .HorizontalAlignment = xlCenter
                .Interior.ColorIndex = 15
                .BorderAround Weight:=xlThin
                With .Font
                    .Bold = True
                    .Name = "calibri"
                    .Size = 14
                End With
            End With
            n = n + 1
            For Each v In dico(e).keys
                With .Offset(n).Resize(dico(e)(v).Count, _
                                    UBound(Application.Index(dico(e)(v).items, 0, 0), 2))
                    .Value = Application.Index(dico(e)(v).items, 0, 0)
                    With .Font
                        .Name = "calibri"
                        .Size = 10
                    End With
                    .VerticalAlignment = xlCenter
                    .Borders(xlInsideVertical).Weight = xlThin
                    .BorderAround Weight:=xlThin
                    With .Rows(1)
                        .HorizontalAlignment = xlCenter
                        With .Offset(, 1).Resize(, .Columns.Count - 1)
                            .Interior.ColorIndex = 36
                            .BorderAround Weight:=xlThin
                        End With
                    End With
                    With .Columns(1)
                        .HorizontalAlignment = xlCenter
                        With .Offset(1).Resize(.Rows.Count - 1)
                            .Interior.ColorIndex = 40
                            .BorderAround Weight:=xlThin
                        End With
                    End With
                End With
                n = n + dico(e)(v).Count + 1
            Next
        Next
    End With
    Application.ScreenUpdating = True
    Set dico = Nothing
End Sub

klin89

Re

Voilà le traitement s'effectue désormais sur les 3 colonnes "Release" "TestMode" et "ReceiveMode"

Option Explicit
Sub test()
Dim a, w(), e, v, i As Long, j As Byte, col As Byte, n As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets("Data").Range("a1").CurrentRegion
        a = Application.Index(.Value, Evaluate("row(1:" & _
                    .Rows.Count & ")"), Array(1, 3, 2, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20))
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 2)) Then
                Set dico(a(i, 2)) = _
                CreateObject("Scripting.Dictionary")
                For col = 3 To 5
                    Set dico(a(i, 2))(a(1, col)) = CreateObject("Scripting.Dictionary")
                    dico(a(i, 2))(a(1, col)).CompareMode = 1
                    dico(a(i, 2))(a(1, col))(a(1, col)) = _
                    Application.Index(a, 1, Array(col, 6, 7, 8, 9, 10, 11, 12, 13))
                Next
            End If
            For col = 3 To 5
                If Not dico(a(i, 2))(a(1, col)).exists(a(i, col)) Then
                    dico(a(i, 2))(a(1, col))(a(i, col)) = _
                    Application.Index(a, i, Array(col, 6, 7, 8, 9, 10, 11, 12, 13))
                Else
                    w = dico(a(i, 2))(a(1, col))(a(i, col))
                    For j = 6 To UBound(a, 2)
                        w(j - 4) = w(j - 4) + a(i, j)
                    Next
                    dico(a(i, 2))(a(1, col))(a(i, col)) = w
                End If
            Next
        Next
    End With
    'restitution et mise en forme
    Application.ScreenUpdating = False
    With Sheets("Feuil1").Range("a1")
        .Parent.UsedRange.Cells.Clear
        For Each e In dico.keys
            With .Offset(n)
                .Value = e
                .VerticalAlignment = xlCenter
                .HorizontalAlignment = xlCenter
                .Interior.ColorIndex = 15
                .BorderAround Weight:=xlThin
                With .Font
                    .Bold = True
                    .Name = "calibri"
                    .Size = 14
                End With
            End With
            n = n + 1
            For Each v In dico(e).keys
                With .Offset(n).Resize(dico(e)(v).Count, _
                                    UBound(Application.Index(dico(e)(v).items, 0, 0), 2))
                    .Value = Application.Index(dico(e)(v).items, 0, 0)
                    With .Font
                        .Name = "calibri"
                        .Size = 10
                    End With
                    .VerticalAlignment = xlCenter
                    .Borders(xlInsideVertical).Weight = xlThin
                    .BorderAround Weight:=xlThin
                    With .Rows(1)
                        .HorizontalAlignment = xlCenter
                        With .Offset(, 1).Resize(, .Columns.Count - 1)
                            .Interior.ColorIndex = 36
                            .BorderAround Weight:=xlThin
                        End With
                    End With
                    With .Columns(1)
                        .HorizontalAlignment = xlCenter
                        With .Offset(1).Resize(.Rows.Count - 1)
                            .Interior.ColorIndex = 40
                            .BorderAround Weight:=xlThin
                        End With
                    End With
                End With
                n = n + dico(e)(v).Count + 1
            Next
        Next
    End With
    Application.ScreenUpdating = True
    Set dico = Nothing
End Sub

klin89

Hello Klin, merci de ton aide! lorsque j'essaie d'executer le script j'ai une erreur a la ligne suivante:

w(j - 4) = w(j - 4) + a(i, j)

run-time error '13': type mismatch.

sais-tu ce que je devrais faire?

Bonjour,

Pas de retour sur ma proposition du 27 mai ?

Cdlt.

Bonjour,

Pas de retour sur ma proposition du 27 mai ?

Cdlt.

Bonjour Jean-Eric je suis entrain d'etudier votre solution qui a l'air tres interessante! Je reviens vite vers vous pour vous donnez un retour.

Merci beaucoup de votre aide!

Bonjour,

Pas de retour sur ma proposition du 27 mai ?

Cdlt.

Bonjour Jean-Eric je suis entrain d'etudier votre solution qui a l'air tres interessante! Je reviens vite vers vous pour vous donnez un retour.

Merci beaucoup de votre aide!

Votre solution fonctionne vraiment bien merci beaucoup!

Je suis entrain de "jouer" avec les pivots table pour atteindre les graphs que je souhaite, cependant c'est vraiment bien fait, merci beaucoup!

Je reviendrais vers vous si j'ai besoin de plus amples informations!

bonjour Jean-Eric,

J'avais un peu laisse tombe ce projet, cependant je m'y remet en ce moment et j'aimerais avoir quelques clarifications:

Les Data sont ordonnes de la maniere suivante 0.112345. dans le code nous prenons le nombre apres la premiere virgule. A quelle endroit dans le code vous prenez le nombre juste apres la premiere virgule?

Nous avons desormais un nouveau set de data de la maniere suivante: 0,average,min,max. Nous souhaiterions ajouter en plus de la colonne amount une colonne Min et Max avec dedans les donnes presentes apres les virgules. Je suppose que l'on fait cela dans la fonction fnConvert? Auriez vous du temps a m'accorder par mail ou sur ce forum pour m'aider sur ce sujet?

Merci beaucoup!

Bonne journee,

Bonjour,

1 - Il y a un module Functions qui intègre la fonction fnConvert : Elle convertit une valeur texte en nombre décimal (voir aide VBA sur Val)

2 - Pour la suite, envoie un nouveau fichier (sur base de ce que j'avais fait) avec des explications claires.

A te relire

Cdlt.

Bonjour Jean-Eric,

En piece jointe tu peux trouver ton template avec en plus deux autres colonnes sur la feuille "Pivot Table". Une nouvelle colonne Min, une autre Max, et la precedente colonne qui s'apellait Amount est desormais Average.

Si on regarde dans le feuille Data, au niveau de la release 15, nous avons un nouveau format de Data.

Example : 0,10899.998,9500.0,11400.0

la virgule est toujours utilise en temps que separateur de la maniere suivante:

premier nombre, Average, Min, Max

Je souhaiterais donc que lors du process des datas, les datas Average aillent dans la bonne colonne, de meme pour Min et Max.

J'ai egalement une seconde amelioration que je souhaiterais faire:

Dans les feuilles "perPlatform" et "PerRelease" nous avons des pivot tables avec le graphique relie. lorsque nous modifions les variables le nouveau graphique est genere. Je souhaite garder cela, mais en plus, creer deux nouvelle feuilles(une pour le perPlatform et l'autre pour le perRelease), avec dedans tout les graphs possible du pivot table.

Je ne sais pas si je suis claire, n'hesitez pas a me redire.

Merci beaucoup pour votre aide.

8template.xlsm (79.77 Ko)

Bonjour,

Tu as 2 propositions :

1 - VBA tel que précédemment

2 - Récupérer et transformer (Power Query, natif Excel 2016).

Il faudrait envisager la solution Power Query !...

Bon, commence d'abord pour valider les résultats.

A te relire.

Cdlt.

4template.xlsm (114.99 Ko)

Bonjour Jean-eric,

Entre la precedente et la nouvelle version la Description n'est pas dans le meme ordre? Nous avions avant ETH puis VDCPU puis VDH.. et desormais nous avons ETH puis NMH puis NML ... ou pouvons nous changer ca pour remettre comme avant?

Concernant la nouvelle feuille "Power Query" C'est deux pivot table sur la meme feuille (les deux presente dans perPlatform et perRelease).

J'ai lu un peu ce qu'est Power Query et je ne comprends pas vraiment comment je peux appliquer cela a ma situation? je souhaite en realite avoir tout les graphs possible sur une nouvelle feuille.

Merci de ton aide!

Bonjour,

Je te propose 2 solutions, te demande de valider les résultats et tu me parles de mise en forme des données !...

Les résultats sont ils corrects ?

On verra la mise en forme après.

Pour la solution Power Query, dans la mesure tu ne maîtrises pas VBA, c'est certainement la voie la plus simple (avec cependant un certain apprentissage). Quitte à apprendre, autant aller au plus simple.

Je te renvoie le fichier avec ton souhait pour les libellés (il suffisait de sélectionner la ligne et de la déplacer dans le TCD !...)

A te relire.

Cdlt.

4template-v2.xlsm (115.60 Ko)

Bonjour Jean-Eric,

Avec les donnes mise en forme je peux maintenant dire que les resultats sont corrects

Tout cela est correct. Je suis entrain de regarder la feuille "power query". A partir des deux tableaux, avec Power Qwery je peux generer tout les graphs possible?

Par exemple pour tel platform, je souhaite avoir un graph par Release, ... De meme pour chaque release je souhaite avoir un graph par platform!

Cela est donc possible avec Power Query?

Thank you,

Rechercher des sujets similaires à "pivot table wrong output"