Automatisation d'une étiquette de données sur VBA
Bonjour à tous,
Je dois faire un reporting de valeur. Pour ce faire, on m'a donné un fichier excel contenant des graphiques dans lesquels nous devons mettre à jour manuellement les étiquettes de données. J'ai effectué cette tâche pas passionnante avec l'idée de l'automatiser.
Je me suis donc lancé ! J'ai regardé plusieurs forum et j'ai réussi à faire ce que je voulais
Voici le code pour mettre en forme mes étiquettes de données :
Sub Macro4()
'
'Mettre le point sur la valeur selectionnée
ActiveChart.FullSeriesCollection(2).Points(35).Select
Selection.MarkerStyle = 1
Selection.MarkerSize = 7
'Mise en forme etiquette de données
ActiveChart.FullSeriesCollection(2).Points(32).ApplyDataLabels
ActiveChart.FullSeriesCollection(2).Points(32).DataLabel.Select
Selection.ShowCategoryName = -1
Application.CommandBars("Format Object").Visible = False
End SubMais maintenant, je suis bloqué.
Je n'arrive pas à trouver comment je peux demander à l'utilisateur, quel point sur la courbe il veut actualiser. (cf points(32) = mars22)
Je pensais à utiliser une inputbox mais je n'ai pas trouvé comment.
Merci d'avance pour votre aide
Hello,
Un proposition
Sub Macro4()
'
'Mettre le point sur la valeur selectionnée
With ActiveChart.FullSeriesCollection(2).Points(35)
.MarkerStyle = 1
.MarkerSize = 7
End With
pts = InputBox("Quel point voulez-vous mettre à jour sur la courbe ?")
'Mise en forme etiquette de données
ActiveChart.FullSeriesCollection(2).Points(pts).ApplyDataLabels
ActiveChart.FullSeriesCollection(2).Points(pts).DataLabel.Select
Selection.ShowCategoryName = -1
Application.CommandBars("Format Object").Visible = False
End SubPar contre, est-ce que la mise à jour de la valeur doit être fait de la même manière ?
ActiveChart.FullSeriesCollection(2).Points(35).SelectA+,
Kilian
Bonjour Kilian1906,
Merci tout d'abord pour ta réponse. Tu m'as débloqué sur mon problème.
Effectivement la mise à jour de la valeur doit fait de la même manière, du coup j'ai un peu modifié le code :
Sub Macro6()
pts = InputBox("Quel point voulez-vous mettre à jour sur la courbe ?")
'Mise en forme etiquette de données
ActiveChart.FullSeriesCollection(2).Points(pts).ApplyDataLabels
ActiveChart.FullSeriesCollection(2).Points(pts).DataLabel.Select
Selection.ShowCategoryName = -1
Application.CommandBars("Format Object").Visible = False
With ActiveChart.FullSeriesCollection(2).Points(pts)
.MarkerStyle = 1
.MarkerSize = 7
End With
End SubPour aller plus loin j'aimerai modifié mon code pour pouvoir modifier plusieurs graphiques, sous la même forme, grâce à un bouton sur une feuille différente.
La solution de faciliter (et de bricolage) serait de faire une boucle du style :
Sub Macro7()
'selection de la première feuille
Sheets("Courbe avancement").Select
pts = InputBox("Quel point voulez-vous mettre à jour sur la courbe ?")
'Mise en forme etiquette de données
ActiveChart.FullSeriesCollection(2).Points(pts).ApplyDataLabels
ActiveChart.FullSeriesCollection(2).Points(pts).DataLabel.Select
Selection.ShowCategoryName = -1
Application.CommandBars("Format Object").Visible = False
With ActiveChart.FullSeriesCollection(2).Points(pts)
.MarkerStyle = 1
.MarkerSize = 7
End With
'selection de la deuxième feuille
Sheets("Courbe global").Select
pts = InputBox("Quel point voulez-vous mettre à jour sur la courbe ?")
'Mise en forme etiquette de données
ActiveChart.FullSeriesCollection(2).Points(pts).ApplyDataLabels
ActiveChart.FullSeriesCollection(2).Points(pts).DataLabel.Select
Selection.ShowCategoryName = -1
Application.CommandBars("Format Object").Visible = False
With ActiveChart.FullSeriesCollection(2).Points(pts)
.MarkerStyle = 1
.MarkerSize = 7
End With
Sheets("Sommaire").Select
End SubMais si j'ai plusieurs feuilles la macro risque de prendre un peu de temps, y-a-t'il un moyen de réduire le code, c'est seulement par curiosité et je pense que ca peut servir à d'autres personnes.
En vous remerciant pour votre aide :)
Hello KFM,
Sans fichier exemple je ne peu rien faire de plus.
Je n'ai d'ailleurs pas beaucoup de temps à passer pour répondre à des interrogations si ceci n'a aucune valeur ajouté pour toi.
A+,
Kilian
Hello,
Pas de problème c'était seulement pour améliorer le code et surtout pour en apprendre d'avantage.
D'ailleurs, j'ai fait une macro qui supprime les étiquettes de données existantes, ça peut toujours servir à quelqu'un.
Sub Macro30()
'
' Macro30 Macro
'
ActiveChart.ChartArea.Select
ActiveChart.FullSeriesCollection(2).Select
Selection.MarkerStyle = -4142
ActiveChart.FullSeriesCollection(2).DataLabels.Select
Selection.Delete
Application.CommandBars("Format Object").Visible = False
End SubMerci beaucoup en tout cas !!