VBA corréler les couleurs des pts d'un nuage aux couleurs de remplissage des cellules

Tioums

XLDnaute Nouveau
Bonjour à toutes et à tous,

Je voudrais un code qui me permette de corréler les couleurs des points de mon graphique (nuage de points) à celles du remplissage des cellules correspondantes du tableau, peut importe la plage de donnée sélectionnée pour le graphique (j'utilise le même graphique pour mon analyse mais j'ai beaucoup de plages de données à utiliser). Je précise que mes données sont déjà triées et que les plages à sélectionner se suivent dans mon tableau.

J'ai 3 colonnes (les données démarre à la deuxième ligne) :
- colonne A : Noms
- colonne B : conditionnements
- colonne C : Prix

J'ai en partie réussi avec un code que j'ai trouvé sur un autre post :

Sub ModifCouleur2()
ActiveSheet.ChartObjects("Graphique 1").Activate
For i = 1 To ActiveChart.SeriesCollection(1).Points.Count
ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColorIndex = _
ActiveSheet.Cells(i + 1, 3).Interior.ColorIndex
Next i
End Sub

Le problème avec ce code est qu'il ne fonctionne que si la plage de donnée sélectionnée pour le graphique commence à la deuxième ligne (première ligne de données). Si je prends une plage qui commence plus bas dans mon tableau les couleurs des points reprennent l'ordre des couleurs du début du tableau.

Je remercie à l'avance ceux qui se pencheront sur mon problème.

Cordialement,
 

Pièces jointes

  • Exemple illustratif.xls
    56 KB · Affichages: 77

Grand Chaman Excel

XLDnaute Impliqué
Re : VBA corréler les couleurs des pts d'un nuage aux couleurs de remplissage des cel

Bonjour Tioums et bienvenue sur le forum....

Essaie ceci, ça devrait fonctionner. Le truc consister à déterminer la plage qui contient les données. Pour ce faire, j'ai réutilisé un bout de code dans une autre de tes macros

VB:
Sub ModifCouleur2()
    Dim xVals As String, i As Integer
    
    ActiveSheet.ChartObjects("Graphique 1").Activate

   'Store the formula for the first series in "xVals". >> Permet de trouver la plage des cellules (colonne B)
   xVals = ActiveChart.SeriesCollection(1).Formula

   'Extract the range for the data from xVals.
   xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _
      Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
   xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
   Do While Left(xVals, 1) = ","
      xVals = Mid(xVals, 2)
   Loop


  For i = 1 To ActiveChart.SeriesCollection(1).Points.Count
    ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColorIndex = _
     Range(xVals).Cells(i, 2).Interior.ColorIndex               'Range(xVals).cells(i,2) correspond à la cellule dans la colonne C
  Next i
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas