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 Sub

Mais 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

annotation 2022 04 06 144330

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 Sub

Par contre, est-ce que la mise à jour de la valeur doit être fait de la même manière ?

ActiveChart.FullSeriesCollection(2).Points(35).Select

A+,
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 Sub

Pour 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 Sub

Mais 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 Sub

Merci beaucoup en tout cas !!

Rechercher des sujets similaires à "automatisation etiquette donnees vba"