Etiquettes de données nuage de points VBA

  • Initiateur de la discussion Initiateur de la discussion Vilain
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Vilain

XLDnaute Accro
Bonjour à tous !

Je vous contacte concernant un "oubli" des développeurs excel. Je m'explique :
J ai un fichier avec une macro permettant de faire un nuage de points en fonction de l'âge en abscisse et du salaire en ordonnée. Je souhaiterai voir apparaître le nom des salariés (ma colonne B) plutôt que le salaire.
Je ne parviens pas à mettre en place le code me permettant de le faire.😕

D'avance merci pour votre aide 🙂
 

Pièces jointes

Dernière édition:
Re : Etiquettes de données nuage de points VBA

Voici ce que j'ai pu trouver sur l'excellent site de : Jacques Boisgontier
Associer un libellé à chaque point d'un graphique nuage de points XY.
Ci dessous, nous ajoutons des étiquettes à un graphique nuages de points.



Sub commentaire()
ActiveSheet.ChartObjects(1).Activate
On Error Resume Next
ActiveChart.SeriesCollection(1).ApplyDataLabels Type:=xlDataLabelsShowLabel
On Error GoTo 0
For i = 1 To ActiveChart.SeriesCollection(1).Points.Count
ActiveChart.SeriesCollection(1).Points(i).DataLabel.Select
Selection.Interior.ColorIndex = 36
Selection.Font.Size = 7
Selection.Text = ActiveSheet.Cells(i + 1, 1)
ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColorIndex = 4
Next i
End Sub

ou

Sub commentaire()
On Error Resume Next
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).ApplyDataLabels Type:=xlDataLabelsShowLabel
On Error GoTo 0
For i = 1 To Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points(i).DataLabel.Text = Cells(i + 1, 1)
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points(i).DataLabel.Font.Size = 7
Next i
End Sub


L'exemple fonctionne parfaitement, mais ne comprenant pas tout, je ne parviens pas à l'adapter à mon exemple.
Est-ce que quelqu'un pourrait m'aider à décortiquer ce bout de code ?
 
Dernière édition:
Re : Etiquettes de données nuage de points VBA

Tentative d'intégration du 1er code de Boisgontier dans ma dernière suggestion sur https://www.excel-downloads.com/threads/2-couleurs-pour-un-nuage-de-points-vba.165312/
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
        .ApplyDataLabels Type:=xlDataLabelsShowLabel
        For i = 1 To plg.Count
          With .Points(i)
            .MarkerBackgroundColorIndex = 7 - 40 * (plg(i).Value = "M")
            .MarkerForegroundColorIndex = 7 - 40 * (plg(i).Value = "M")
            .DataLabel.Text = ActiveSheet.Cells(i + 1, 1)
          End With
        Next i
    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

A te lire derrière tes tests...
 
Re : Etiquettes de données nuage de points VBA

Bonjour Bond, et une fois de plus, un grand merci pour ton aide.
Après différentes tentatives, je sens que je m'approche...
J'ai une fois de plus essayé d'intégrer ton code.
Une fois quelques erreurs corrigées, ma macro tourne, les étiquettes s'affichent, mais quelques soucis subsistent. Tout d'abord, la coloration des points n'a pas survécu... Des erreurs apparaissent alors que cela fonctionnait correctement jusqu'à présent. Deuxièmement, les étiquettes de données s'affichent, mais pas avec les valeurs souhaitées. Dans un cas j'ai l'âge et dans l'autre la tranche d'âge (en fonction de la couleur du point) alors que je souhaite avoir les noms.
Je ne parviens pas à arranger les choses...

Merci encore pour le temps passé sur mon souci 🙂
 

Pièces jointes

Re : Etiquettes de données nuage de points VBA

Dans une simalation 'abrégée' sur ton dernier fichier, le code adapté suivant à l'air de donner le résultat que tu attends...
Code:
'J'ai mis en commentaire (derrière ') les codes que je ne peux pas évaluer...
'sans doute car ils sont dépendants de la macro entière.
'Cela permet d'éviter l'arrêt sur erreur dans ce bout de code :
Dim i&, plg As Range
Set plg = Sheets("Base_pour_graph").Range("e2:e11")

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
        .ApplyDataLabels Type:=xlDataLabelsShowLabel
        For i = 1 To plg.Count
          With .Points(i)
            .MarkerBackgroundColorIndex = 7 - 40 * (plg(i).Value = "M")
            .MarkerForegroundColorIndex = 7 - 40 * (plg(i).Value = "M")
            .DataLabel.Text = ActiveSheet.Cells(i + 1, 2)
          End With
        Next i
    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
 
Re : Etiquettes de données nuage de points VBA

Merci pour ta réactivité 😀
Je ne comprends pas, ça ne fonctionne toujours pas...
Je commence à perdre patience, tout me semble bon, mais cela ne fait toujours pas ce que je souhaite.
Cela marche-t-il de ton côté ?
 
Re : Etiquettes de données nuage de points VBA

Je vais détailler un peu plus mon besoin. J'ai un fichier avec tous les salariés de mon entreprise (plus de 3000) avec leurs âges, la classification de leurs emplois, leurs salaires, etc...
Ma macro me permet de faire un nuage de points selon certains critères rentrés dans mon userform.
J'ai dans mon fichier 2 colonnes pour les noms : la B ou tous les salariés sont présents et la D ou je souhaire rentrer simplement les noms que je veux voir sur mon nuage de points (je veux afficher tous les points mais seulement quelques noms).
Je parviens à faire la manip sur un fichier "simple", mais impossible de l'adapter à ma macro...
Est-ce plus clair ?
 
Re : Etiquettes de données nuage de points VBA

Dans le code précédent :
Remplace
Code:
.DataLabel.Text = ActiveSheet.Cells(i + 1, 2)
Par :
Code:
.DataLabel.Text = ActiveSheet.Cells(i + 1, 4) 'colonne D

Pose qqs noms en col D pour évaluer...
 
Re : Etiquettes de données nuage de points VBA

Cela ne fonctionne pas non plus, j'ai seulement quelques étiquettes qui s'affichent (que je mette ou non des noms dans ma colonne D), ce ne sont pas les noms qui s'affichent mais les salaires et les données sont fausses (salaires placés au mauvais endroit).
J'ai du mal à comprendre qu'une chose si simple (les noms des étiquettes) soit si compliquée à mettre en place
 
Re : Etiquettes de données nuage de points VBA

De mon coté je visualise selon mon fichier du post #9, et avec cette modif, les étiquettes s'affichent correctement selon les noms présents en col D de l'onglet 'Base_pour_graph'...
 
Re : Etiquettes de données nuage de points VBA

là, je suis pas sur de te suivre...
Le fichier du post #9 vient bien de chez toi ?, et dedans y'a bien le code que je t'ai suggéré qui est lancé par un bouton 'test' sur l'onglet 'Base_pour_graph' et crée le graphique ? par contre, initialement, y'avait pas de code sauf un petit bout de Module1 pour lancer le userform... Tu devrai avoir qq part un code qui balance tes critères du userform vers le filtre, et ensuite le code qui crée le graphique, celui dont on parle ici.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
351
Réponses
6
Affichages
364
Retour