Etiquetage nuage de point

norip

XLDnaute Junior
Bonjour,
je cherche à faire une macro qui me permettra de créer un graphique de type nuage de point à partir d'une plage de données sélectionnée par l'utilisateur.
Autre petit problème le graphique devra étiqueter tous les points.
Par exemple si j'ai:
Etiquette X Y
Paris 7 / 9
Marseille -2 / 4
Bordeaux 5 / 2

je souhaite avoir un graphique m'affichant 3 points correspondants à chaque ville avec le nom de la ville affiché.

Pour sélectionner la plage de données:
Dim c As Variant
On Error Resume Next
Set c = Application.InputBox(prompt:="selectionner la plage de cellule ", _
Title:=" Plage de cellules à sélectioner", Type:=8)
On Error GoTo 0
If TypeName(c) = "range" Then c.Select


Ensuite pour créer le graphique:
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Range("??????")


Mais je ne sais pas quoi mettre comme données dans range car quand je met "c"
excel m'envoit sa comme erreur:
Erreur d'éxécution '1004'
La méthode d'éxécution 'range' de l'objet '_global' a échoué.


pour finir j'ai trouver sur le site de microsoft le code pour étiquetter :
Comment faire pour utiliser une macro pour ajouter des étiquettes aux points de données dans un graphique à nuages de points (XY) ou un graphique à bulles dans Excel
mais indépendamment de leur procédure cela ne marche pas.

voila si quelqu'un pouvait m'éclairer
merci d'avance
Norip
 

mromain

XLDnaute Barbatruc
Re : Etiquetage nuage de point

Bonjour norip, le forum,

Voici un essai :
VB:
Sub Test()
Dim c As Range, etiq As Range, zoneValeurX As Range, zoneValeurY As Range, graph As Chart, zoneGraph As Range, titi As Worksheet, serieG As Series, iPt As Long

    On Error Resume Next
     Set c = Application.InputBox(prompt:="selectionner la plage de cellule ", Title:=" Plage de cellules à sélectioner", Type:=8)
     'vérifier que la zone sélectionnée contient bien 3 colonnes et les séparer
     If Err.Number <> 0 Then Exit Sub
     If c.Columns.Count <> 3 Then Exit Sub
     Set etiq = Application.Intersect(c, c(1, 1).EntireColumn)
     Set zoneValeurX = Application.Intersect(c, c(1, 2).EntireColumn)
     Set zoneValeurY = Application.Intersect(c, c(1, 3).EntireColumn)
    On Error GoTo 0
    
    'définir la zone du graphique
    Set zoneGraph = ThisWorkbook.Sheets("Sheet1").Range("C2:G15")
    'créer le graphique "XYScatter"
    With zoneGraph
        Set graph = .Parent.ChartObjects.Add(.Left, .Top, .Width, .Height).Chart
    End With
    graph.ChartType = xlXYScatter
    'ajouter la série et ses valeurs
    Set serieG = graph.SeriesCollection.NewSeries()
    serieG.Name = "blablabla !"
    serieG.XValues = zoneValeurX.Value
    serieG.Values = zoneValeurY.Value
    'ajouter les étiquettes
    For iPt = 1 To zoneValeurX.Cells.Count
        serieG.Points(iPt).HasDataLabel = True
        serieG.Points(iPt).DataLabel.Text = etiq(iPt).Text
    Next iPt
    

End Sub
A+
 

norip

XLDnaute Junior
Re : Etiquetage nuage de point

je peut sélectionner la plage de données par contre lorsqu'il arrive à la ligne:
'définir la zone du graphique
Set zoneGraph = ThisWorkbook.Sheets("Sheet1").Range("C2:G15")

excel me sort l'erreur:
erreur d'éxécution 9
L'indice n'appartient pas à la sélection

j'ai beau changer le nom de la feuille ca ne marche pas
 

mromain

XLDnaute Barbatruc
Re : Etiquetage nuage de point

je peut sélectionner la plage de données par contre lorsqu'il arrive à la ligne:
'définir la zone du graphique
Set zoneGraph = ThisWorkbook.Sheets("Sheet1").Range("C2:G15")

excel me sort l'erreur:
erreur d'éxécution 9
L'indice n'appartient pas à la sélection

j'ai beau changer le nom de la feuille ca ne marche pas

Re bonjour,

Bizarre, à la place de Sheet1, il faut mettre le nom de la feuille (le nom de l'onglet plus précisément).

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla