Bonjour,
j'ai un problème et j'espère que mon mauvais français ne posera pas de problème supplementaire.
Je développe pour un client des graphiques (de type histogramme groupé, Clustered Chart) pour les reportings de la production.
Le tableau d'origine est de la forme suivante (où E contient les données du mois janvier, K contient les données de fevrier et Y celles de mars):
Je veux créé des graphiques pour chaque mois où les données sont triées par groupe, donc les données pour la graphique du mois janvier seront triées de la façon suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 A B E K Y 4 Group One Green 5 3 3 5 Yellow 3 7 4 6 Blue 7 6 2 7 Grey 9 1 8 8 Group Two High 1 5 1 9 Low 2 6 6 10 Group Three Small 5 1 2 11 Large 1 1 5
Le tableau d'origine n'est pas a changer, mais car je vais avoir beaucoup des graphiques, je ne veux pas faire le tri etc. sur les feuilles; mais dans la graphique ou un macro VBA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 A B E 4 Group One Grey 9 5 Blue 7 6 Green 5 7 Yellow 3 8 Group Two Low 2 9 High 1 10 Group Three Small 5 11 Large 1
Jusqu'ici j'ai essayé plusieurs techniques, jusque là sans succès.
Range Collection - Sort Method - Chart.SetSourceData
La méthode la plus directe sera de stockées les données dans une range collection, trier les données avec la méthode Sort et finalement créer la graphique avec le résultat du tri.
C'est évident que ça ne peut pas marché comme ça, mais ça vous donnera peut-être l'idée.
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 Sub AddChartObject() Dim rA As Range Set rA = Range("A4:B11") Dim rE As Range Set rE = Range("E4:E11") Dim rangeAll As Range Set rangeAll = Union(rA, rE) rangeAll.Sort Key1:=X, Order1:=xlDescending, Key2:=Y, Order2:=xlAscending Dim myChtObj As ChartObject Set myChtObj = ActiveSheet.ChartObjects.Add _ (Left:=100, Width:=375, Top:=75, Height:=225) myChtObj.Chart.SetSourceData Source:=rangeAll myChtObj.Chart.ChartType = xlColumnClustered End Sub
Il y a plusieurs problème avec ça:
1) Je veux que les données sont triées par groupe, donc les lignes 4 à 7, après les lignes 8 à 9 et finalement 10 à 11. L'ordre des groupes n'est pas changé.
2) Je ne sais pas comment mettre le Key pour trier dans une range collection.
3) Je ne sais même pas si ça marche, si je fourni Chart.SetSourceData avec une range collection comme source.
Si vous avez des questions ou (mieux) des solutions, n'hesitez pas de les poser ou proposer.
Merci!
Partager