Mise en forme de graphique dynamique
Bonjour à tous !
J'aimerais réaliser sur Excel un graphique personnalisé du style de celui ci-dessous. Je récolte mes données que je transfère dans un tableau croisé dynamique, chaque score (Score Z) est associé à une catégorie. Je vous joins un fichier d'exemple avec un échantillon de donnée possible, et là où j'en suis dans mon avancé vers ce modèle.
L'objectif serait d'afficher graphiquement les scores des participants dans chacune des catégories, de mettre en forme les séries pour que les scores < à -1,64 soient en rouge, et d'afficher le gradient de couleur par catégorie en fond, avec la ligne en pointillé en y = 0 pour la moyenne.
J'ai pour le moment réussi à faire ce graphique en "courbe" basé sur le TCD, ce qui me permet d'afficher les scores comme je le souhaite en ne laissant paraitre que les marqueurs.
J'ai également pu faire cette macro qui permet de colorier les marqueurs des séries < à -1,64. Mais par contre, je ne vois pas comment faire pour ce qui est de la mise en forme du fond. J'ai pensé à utiliser une image de remplissage, ou des formes blanches pour cacher les intervalles entre catégories, mais ce n'est pas possible, car le nombre de catégories à afficher peut varier. Pour le moment, j'ai fait ça manuellement avec un dégradé à peu près, mais cela ne rend pas les données aussi lisibles que souhaité. Si besoin, les bornes de couleurs souhaitées sont : -4 ; -2 // -2 ; -1,65 // -1,65 ; 1,65 // 1,65 ; 2 // 2 ; 4
Auriez-vous des conseils pour adapter mon graphique actuel au modèle souhaité ?
Merci par avance pour votre temps !
Hugo
Sub ActualiserGraph()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim series As Series
Dim i As Long
' Définir la feuille contenant le graphique et le tableau croisé dynamique
Set ws = ThisWorkbook.Sheets("TCD 1")
' Actualiser le tableau croisé dynamique
ws.PivotTables("TCD1").RefreshTable
' Référencer le graphique
Set chartObj = ws.ChartObjects("Graph1")
' Actualiser le graphique
chartObj.Chart.Refresh
' Parcourir toutes les séries du graphique
For i = 1 To chartObj.Chart.SeriesCollection.Count
Set series = chartObj.Chart.SeriesCollection(i)
' Appliquer mise en forme identique
With series
.Format.Line.Visible = msoFalse ' Aucun trait de courbe
.MarkerStyle = xlMarkerStyleCircle ' Marqueur de style cercle
.MarkerSize = 7 ' Taille du marqueur
.Format.Fill.ForeColor.RGB = RGB(0, 0, 0) ' Remplissage noir
.Format.Line.Visible = msoFalse ' Aucun contour de marqueur
End With
' Appliquer une mise en forme spéciale pour les séries dont le nom est inférieur à "-1,64"
If Val(series.Name) < -1.64 Then
series.Format.Fill.ForeColor.RGB = RGB(255, 0, 0) ' Remplissage rouge
End If
Next i
' Informer l'utilisateur que la mise à jour est terminée
MsgBox "Graphique mis à jour avec succès!", vbInformation
End SubBonjour,
Je ne sais pas si c'est possible sur graph TCD.
Mais, en laissant le fond blanc, si vous arriviez à insérer une graphique de type "stacked bars" (voir image), avec des paliers fictifs correspondants à vos lignes colorées, ça pourrait peut etre fonctionner. Pour combiner 2 types de graphique il faut utiliser (sélectionner le graph) > Design > Changer le type de graph > combo : points + stacked bars, chacun avec leurs axes respectifs.
Juste une petite remarque, êtes-vous sur de parler de la "moyenne" (et si oui, celle de qui ?) en ayant un axe absolument horizontal à 0 pour toutes les catégories ? Selon moi, elle devrait varier/catégorie, et suivre les résultats justement (donc moyenne "memory" en bas, et "mental speed" en haut).
Bonjour,
En effet, ça peut être une solution, mais je ne pense pas que le graphique de fond pourrait s'adapter au nombre de catégories qui varie en fonction des données que je récupère.…
Mais merci beaucoup je n'avais pas pensé à compiler plusieurs graphiques, je vais voir s'il n'y a pas moyen de faire quelque chose !
Et pour les moyennes il n'y a pas besoin d'adapter car les scores sont déjà standardisés en score Z, donc pour chaque score la moyenne est de 0 et l'écart-type de 1.