Etiquettage d'un nuage de point en VBA

Résolu/Fermé
Padawan_95 Messages postés 8 Date d'inscription dimanche 5 avril 2015 Statut Membre Dernière intervention 6 mai 2016 - 5 avril 2015 à 19:09
Padawan_95 Messages postés 8 Date d'inscription dimanche 5 avril 2015 Statut Membre Dernière intervention 6 mai 2016 - 13 juil. 2015 à 18:14
Bonjour,

J'essaye d'affecter une étiquette à chaque point de mon nuage. Ces étiquettes viennent d'une autre colonne, la colonne AM, qui est donc la 39ème colonne.

Pour cela, j'enregistre une macro, et le fait manuellement avec un point du graphe. J'obtiens la macro suivante

Sub etiquettage()

' Touche de raccourci du clavier: Ctrl+e '

ActiveSheet.ChartObjects("ACP").Activate
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).Points(17).ApplyDataLabels
ActiveChart.FullSeriesCollection(1).Points(17).DataLabel.Select
Selection.Formula = "=ACP!R17C39"

End Sub


C'est à dire que j'ai pris le 17ème point du nuage, et que son étiquette provient de la cellule R17C39 (row 17, column 39)

Le problème c'est que quand j'essaye d'automatiser cette opération pour l'ensemble de mes points, je mets cette procédure dans une boucle:

For i = 1 to 35

ActiveSheet.ChartObjects("ACP").Activate
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).Points(i).ApplyDataLabels
ActiveChart.FullSeriesCollection(1).Points(i).DataLabel.Select
Selection.Formula = "=ACP!RiC39"

Next
End Sub

Et là.. c'est le drame: impossible de faire tourner la macro: Elle beug sur la ligne :
Selection.Formula = "=ACP!RiC39", et vu que la seule modification faite ici et le 17 que j'ai changé en i. Je dois trouver la bonne manière d'écrire cette ligne afin que VBA comprenne que la source de l'étiquette est en ligne i et colonne 39...

Vous avez une idée ?

Merci d'avance :)

2 réponses

via55 Messages postés 14512 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 janvier 2025 2 740
5 avril 2015 à 19:12
Bonsoir

Il faut recomposer par concatenation, essaie :
Selection.Formula = "=ACP!R" & i & "C39"

Cdlmnt
Via
1
Padawan_95 Messages postés 8 Date d'inscription dimanche 5 avril 2015 Statut Membre Dernière intervention 6 mai 2016
5 avril 2015 à 19:59
Merci à via55 et à Boisgontierjacques pour votre aide !!

J'ai une autre requête, toujours concernant un nuage de point et du VBA dans l'histoire, alors je me permets de rester sur ce post:

J'aimerai faire en sorte que l'utilisateur clique sur un bouton pour lancer la création du graphique :) J'utilise pour cela une macro:

Pour cela, je lance l'enregistreur de macro, je sélectionne mes données, nuage de points... Une fois que j'ai mon graphe qui est apparu j'ai la macro suivante:

Sub creation()
Range("AN1:AO35").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatter).Select
ActiveChart.SetSourceData Source:=Range("ACP!$AN$1:$AO$35")
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "ACP CAC40"
ActiveSheet.Shapes("Graphique 1").Name = "ACP"
Selection.Name = "ACP"

End sub

Je résume ici ce que j'ai fait pour que ce soit plus clair:
- J'ai sélectionné le tableau allant de AN1 à AO35
- J'ai cliqué sur nuage de points
- J'ai sélectionné le titre du dessin pour le renommer ACP CAC40
- J'ai changer le nom du graphique qui était celui par défaut (Graphique1) puisque c'est le premier graphique que je créé dans cet onglet excel, pour le renommer "ACP", en allant en haut à gauche, sans oublier de presser la touche entrée.

Jusque là tout va bien. Sauf que derrière cela je vais enregistrer une macro qui effacera le graphe en question pour le recréer à nouveau. C'est à dire que l'utilisateur pourra s'amuser à créer le graphe et le supprimer à sa guise.
Mais dans le code généré via l'enregistreur, il y a Graphique 1 qui est renommé, alors que l'utilisateur ne veut pas renommer le graphique 1, mais le nouveau graphe qu'il vient de généré, dont le nom par défaut sera Graphique 8, Graphique 9, s'il a fait 8 fois ou 9 fois un effacement et une création du graphique...

Qu'en pensez-vous ?

Merci d'avance
0
Boisgontierjacques Messages postés 175 Date d'inscription jeudi 19 septembre 2013 Statut Membre Dernière intervention 26 décembre 2018 64
Modifié par Boisgontierjacques le 5/04/2015 à 19:30
Bonsoir,


Exemple

http://boisgontierjacques.free.fr/fichiers/graphe/GrapheNuagesEtiquettes.xls

Sub Etiq()
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.Color = ActiveSheet.Cells(i + 1, 1).Interior.Color
Selection.Font.Size = 7
Selection.Text = ActiveSheet.Cells(i + 1, 1)
ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColorIndex = 4
ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColor = ActiveSheet.Cells(i + 1, 1).Interior.Color
Next i
End Sub


Jacques Boisgontier
0
Padawan_95 Messages postés 8 Date d'inscription dimanche 5 avril 2015 Statut Membre Dernière intervention 6 mai 2016
13 juil. 2015 à 18:14
Avec un peu de retard, merci beaucoup Jacques pour cette réponse
0