Je vois que vous avez lié une question de stackoverflow où ils utilisent javascript pour créer un graphique avec google charts. Je pense que ce langage est le meilleur moyen de créer des graphiques complexes comme le vôtre.
Vous avez mentionné que vos compétences en codage n'étaient pas bonnes en vba, je ne sais pas si c'est la même chose avec javascript mais je vais essayer de décrire mon code du mieux que je peux.
Voici un code fonctionnel que j'ai écrit pour vous :
https://www.funfun.io/1/#/edit/5a73067991f44418b7b84218
Comme vous pouvez le constater, pour réaliser cet exemple, j'ai utilisé un éditeur en ligne avec une feuille de calcul intégrée. J'y entre mes données et j'y accède avec mon code en utilisant un fichier JSON, il s'agit du fichier short
sous le fichier Paramètres :
{
"data": "=A1:D27"
}
Après avoir obtenu l'accès à mes données, je les stocke dans des variables locales, vous pouvez le voir dans le fichier script.js
fichier. J'ai écrit quelques commentaires pour que vous sachiez quelle variable est quoi. Je lance mes données avec $internal.data
C'est l'endroit où les données de la feuille de calcul sont stockées de la colonne A à D, ligne 1 à 27 :
for (var i = 0; i < $internal.data.length; i++) // $internal.data.length = 27 in this example
{
if (i == 0 || i == 14) {
country.push($internal.data[i][0]);
continue;
}
if (i > 0 && i < 13) {
months.push($internal.data[i][0]); // months
dataA.push(
[
parseInt($internal.data[i][1]), // value 2015 countryA
parseInt($internal.data[i][2]), // value 2016 countryA
parseInt($internal.data[i][3]) // value 2017 countryA
]);
}
if (i > 13 && i < 27) {
dataB.push(
[
parseInt($internal.data[i][1]), // value 2015 countryB
parseInt($internal.data[i][2]), // value 2016 countryB
parseInt($internal.data[i][3]) // value 2017 countryB
]);
}
}
Après avoir stocké mes données correctement, je peux faire mon graphique avec une bibliothèque javascript, j'ai utilisé Highcharts (assez similaire à google charts), il a une bonne documentation avec beaucoup de exemples .
Je mets toutes les données et quelques options dans une variable de série qui utilise le format de highcharts, comme ceci :
var series = [];
// We enter the data we need in series
for(var i = 0; i < months.length; i++) {
series.push({
name: months[i] + " " + country[0],
type: 'column',
color: Highcharts.getOptions().colors[i+7],
data: dataA[i],
stack: country[0] // country A
});
series.push({
name: months[i] + " " + country[1],
type: 'column',
color: Highcharts.getOptions().colors[i+7],
data: dataB[i],
stack: country[1] //country B
});
}
...
// we enter series in the highchart chart
series: series
Je différencie les deux pays en mettant une valeur différente dans le champ stack
. Cette variable me permet de créer un graphique à barres empilées avec plusieurs barres ayant la même étiquette d'axe.
Une fois que c'est fait, vous obtenez un graphique comme celui-ci :
Si vous ne voulez pas afficher tous les mois, vous pouvez cliquer sur les étiquettes des mois que vous ne voulez pas et elles disparaîtront, comme ceci :
Une fois que vous avez construit votre diagramme, vous pouvez le charger dans Excel en utilisant une commande un module complémentaire pour Excel appelé Funfun Il suffit de coller l'URL de l'éditeur en ligne dans l'add-in. Voici à quoi cela ressemble avec mon exemple :
Vous pouvez ensuite enregistrer le graphique dans un autre format en cliquant sur le bouton en haut à droite du graphique :
J'espère que cela vous aidera, si je n'ai pas été clair dans mon explication, n'hésitez pas à commenter :)
Divulgation : Je suis un développeur de Funfun.