2 couleurs pour un nuage de points VBA

Vilain

XLDnaute Accro
Bonjour à tous

Je voudrai savoir s'il est possible grâce à une macro de choisir la couleur des points dans un nuage de points en fonction d'un critère défini dans une colonne.
Je m'explique :
Mon nuage de points actuel représente le salaire en fonction de l'âge. Je voudrai que les points soient roses pour les femmes et bleus pour les garçons (quelle originalité !)

D'avance merci pour votre aide

ps : je joins un fichier à titre d'exemple
 

Pièces jointes

  • Exemple.xlsx
    9.8 KB · Affichages: 83
  • Exemple.xlsx
    9.8 KB · Affichages: 94
  • Exemple.xlsx
    9.8 KB · Affichages: 93
  • Exemple.xls
    20 KB · Affichages: 86
  • Exemple.xls
    20 KB · Affichages: 88
  • Exemple.xls
    20 KB · Affichages: 100

Vilain

XLDnaute Accro
Re : 2 couleurs pour un nuage de points VBA

Merci pour cette réponse rapide.

J'ai déja penser à cette solution, j'ai aussi penser à faire 2 séries. Cela fonctionne effectivement, mais mon fichier fonctionne uniquement par macro (les utilisateurs finaux n'étant pas forcément des utilisateurs chevronnés d'excel) et je souhaiterai que ça reste ainsi.

Merci quand même pour cette idée.
 

ROGER2327

XLDnaute Barbatruc
Re : 2 couleurs pour un nuage de points VBA

Bonjour Gilus69, bond
Essayez ce code dans le module de la feuille Graph1 :
VB:
Private Sub Chart_Activate()
Dim i&, plg As Range
  Set plg = Sheets("Feuil1").Range("C2:C9")
  With ActiveChart.SeriesCollection(1)
    For i = 1 To plg.Count
      With .Points(i)
        .MarkerBackgroundColorIndex = 7 - 40 * (plg(i).Value = "M")
        .MarkerForegroundColorIndex = 7 - 40 * (plg(i).Value = "M")
      End With
    Next
  End With
  ActiveChart.Deselect
End Sub
Lors de l'activation de la feuille Graph1, le graphique devrait être mis à jour.​
ROGER2327
#5358


Jeudi 5 Gidouille 138 (Saint Ugolin, mansuet - fête Suprême Quarte)
1er Messidor An CCXIX, 8,8833h - seigle
2011-W24-7T21:19:12Z
 

Vilain

XLDnaute Accro
Re : 2 couleurs pour un nuage de points VBA

Bonjour le forum, merci Roger pour ton aide.

Je ne parviens pas à faire fonctionner ce bout de code. J'ai l'erreur suivante :
Erreur d'exécution '-2147024809 (80070057)':
L'élément portant ce nom est introuvable.

Une âme charitable pourrait-elle m'apporter son aide ?
 

bond

XLDnaute Occasionnel
Re : 2 couleurs pour un nuage de points VBA

Chez moi, le code de Roger fonctionne très bien:cool:, à cette modif près :
Code:
Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
Dim i&, plg As Range
  Set plg = Sheets("Feuil1").Range("C2:C9")
  With ActiveChart.SeriesCollection(1)
    For i = 1 To plg.Count
      With .Points(i)
        .MarkerBackgroundColorIndex = 7 - 40 * (plg(i).Value = "M")
        .MarkerForegroundColorIndex = 7 - 40 * (plg(i).Value = "M")
      End With
    Next
  End With
  ActiveChart.Deselect
End Sub

Edit : il fonctionne très bien, même sans cette modif... ! désolé Roger.
 
Dernière édition:

Vilain

XLDnaute Accro
Re : 2 couleurs pour un nuage de points VBA

Autant pour moi, cela fonctionne parfaitement, j'avais pas copier le code au bon endroit. Merci beaucoup pour cette astuce.
Cependant, j'ai toujours un problème dans mon "vrai" fichier. En effet, le graphique et l'onglet du graphique sont créé par ma macro. Par conséquent, je ne sais pas où je dois ajouter ce code...

Merci à tous pour le temps que vous passez sur mon problème
 

Vilain

XLDnaute Accro
Re : 2 couleurs pour un nuage de points VBA

Code:
'ajout du nuage de points
ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Name = "=base_pour_graph!$L$1"
    ActiveChart.SeriesCollection(1).XValues = "=base_pour_graph!$F$2:$F$5000"
    ActiveChart.SeriesCollection(1).Values = "=base_pour_graph!$L$2:$L$5000"
    ActiveChart.Axes(xlCategory).MinimumScale = jeune - 1
    ActiveChart.Axes(xlCategory).MaximumScale = vieux + 1
    ActiveChart.Axes(xlValue).MinimumScale = echelle_basse
    ActiveChart.Axes(xlValue).MaximumScale = hautsalaire + 2000
    ActiveChart.Axes(xlCategory).MajorUnit = 1
    
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.SeriesCollection(1).Select
    Selection.MarkerSize = 5
    
    ActiveChart.Axes(xlValue).Select
    Selection.TickLabels.NumberFormat = "# ##0"
    
    
    
    ActiveChart.ChartArea.Select
    ActiveChart.SetElement (msoElementPrimaryValueAxisTitleRotated)
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Salaire annuel"
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.ChartArea.Select
    
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Age"
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.ChartArea.Select
    
    
    
        
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Location Where:=xlLocationAsNewSheet
    ActiveSheet.Name = "Graphique"
    ActiveChart.Axes(xlValue).MajorUnit = 2000
    ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
    ActiveChart.ChartTitle.Text = ""
    ActiveChart.Legend.Select
    Selection.Position = xlBottom

Voila ce qui crée mon graphique sachant que l'onglet est créé plus tôt et que tout ça dépend d'un userform...
Il s'agit de ma première utilisation des userform, autant dire que je suis un peu perdu quant à son fonctionnement...

Encore une fois merci pour l'intérêt que vous portez à mon problème.
 

bond

XLDnaute Occasionnel
Re : 2 couleurs pour un nuage de points VBA

Voilà ce que ça donnerait si je ne me suis pas gauffré :eek:dans le nettoyage...
Code:
'ajout du nuage de points
Dim i&, plg As Range
Set plg = Sheets("Feuil1").Range("C2:C9")

ActiveSheet.Shapes.AddChart.Select
With ActiveChart
    .ChartType = xlXYScatter
    .SeriesCollection.NewSeries
    With .SeriesCollection(1)
        .Name = "=base_pour_graph!$L$1"
        .XValues = "=base_pour_graph!$F$2:$F$5000"
        .Values = "=base_pour_graph!$L$2:$L$5000"
        .MarkerSize = 5
        For i = 1 To plg.Count
          With .Points(i)
            .MarkerBackgroundColorIndex = 7 - 40 * (plg(i).Value = "M")
            .MarkerForegroundColorIndex = 7 - 40 * (plg(i).Value = "M")
          End With
        Next
    End With
    .Axes(xlCategory).MinimumScale = jeune - 1
    .Axes(xlCategory).MaximumScale = vieux + 1
    .Axes(xlValue).MinimumScale = echelle_basse
    .Axes(xlValue).MaximumScale = hautsalaire + 2000
    .Axes(xlCategory).MajorUnit = 1
    .Axes(xlValue).TickLabels.NumberFormat = "# ##0"
    .SetElement (msoElementPrimaryValueAxisTitleRotated)
    .Axes(xlValue, xlPrimary).AxisTitle.Text = "Salaire annuel"
    .SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
    .Axes(xlCategory, xlPrimary).AxisTitle.Text = "Age"
    .Location Where:=xlLocationAsNewSheet
    .Name = "Graphique"
    .Axes(xlValue).MajorUnit = 2000
    .SetElement (msoElementChartTitleCenteredOverlay)
    .ChartTitle.Text = ""
    .Legend.Position = xlBottom
End With
ActiveChart.Deselect

NB : Remplacer tout le code que tu as donné dans le post précédent par celui ci...
 

Discussions similaires

Statistiques des forums

Discussions
312 333
Messages
2 087 371
Membres
103 528
dernier inscrit
maro