Bonjour à tous,

Après de nombreuses recherches sur ce forum et sur internet, je n'ai malheureusement pas trouvé de solution à mon problème :
J'ai rédigé une macro me permettant d'afficher un diagramme de gantt à partir de taches rentrées par l'utilisateur sur une feuille excel. Ce dernier rentre à la main le nom de chaque tâche, son début et sa durée, puis la date de fin est calculée par le fichier.
Ma macro permet d'afficher un diagramme de Gantt à partir de ces données, sous la forme suivante :

Nom : taches.PNG
Affichages : 639
Taille : 18,9 Ko

Avec en abscisses de mon graphe, l'axe du temps :

Nom : dates.PNG
Affichages : 552
Taille : 21,3 Ko

L'utilisateur a ensuite la possibilité de rentrer un % d'accomplissement devant chaque tâche (illustration sur la photo : il écrit 50% devant la tâche 3 sur la feuille de données par exemple, et celle-ci va changer de couleur sur ses 50 premiers % sur le graphe).

Tout cela fonctionne très bien, jusqu'au moment ou je veux gérer la place des étiquettes du graphe (qui représentent la durée de chaque tâche). En effet, sur les graphe de type xlBarStacked comme celui que j'utilise, il est seulement possible de placer des étiquettes à l'intérieur de la barre de donnée, avec les paramètres "xlLabelPositionInsideBase" (au début de la barre de données), "xlLabelPositionCenter" (centré dans la barre de données) et "xlLabelPositionInsideEnd"(à la fin de la barre de données comme sur ma photo).

J'aimerais pouvoir décaler mes étiquettes de données à la fin de la barre de données, mais à l'extérieur de cette dernière pour plus de lisibilité, c'est à dire que j'aimerais pouvoir décaler les étiquettes de données de quelques points vers la droite par rapport à ce qu'on observe sur la photo.
J'ai essayé de définir la position des étiquettes sur "xlLabelPositionInsideEnd" puis de les décaler vers la droit en incrémentant la propriété "Left" des datalabels, mais sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
With Activechart.SeriesCollection(3)
For i = 1 To .Points.Count
            With .Points(i)
                       .HasDataLabel = True
                       .DataLabel.Text = Plage_Total.Cells(Ind(i - 1), 6)
                       .DataLabel.Position = xlLabelPositionInsideEnd
                       .DataLabel.Left = .DataLabel.Left + 10
           End With
Next i
End With
J'obtiens en effet le résultat suivant avec ce code, qui nèst pas sitisfaisant puisque toutes les étiquettes de données ne sont pas décallées de la même distance vers la droite :
Nom : tachespositionend.PNG
Affichages : 588
Taille : 18,1 Ko

J'ai aussi essayé de définir la position sur "xlLabelPositionInsideBase", puis de décaler les étiquettes vers la droite en fonction de la durée de la tâche concernée, mais sans succès non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
With Activechart.SeriesCollection(3)
For i = 1 To .Points.Count
            With .Points(i)
                       .HasDataLabel = True
                       .DataLabel.Text = Plage_Total.Cells(Ind(i - 1), 6)
                       .DataLabel.Position = xlLabelPositionInsideBase
                       .DataLabel.Left = .DataLabel.Left + CDbl(Plage_Total.Cells(Ind(i - 1), 17)) * 4 'Plage_Total.Cells(Ind(i - 1), 17) correspond à la durée de la tâche en jours sur mon fichier de données, 
                                                  'que je convertis en double et que je multiplie par un facteur d'échelle (le nombre de points ne correspond pas à des jours :  il faut faire la conversion)
           End With
Next i
End With
J'obtiens alors le résultat suivant, pas non plus satisfaisant pour les mêmes raisons :

Nom : tachespositionbase.PNG
Affichages : 591
Taille : 19,7 Ko

Quelqu'un saurait-il me dire comment faire? Ou alors pourquoi cela ne fonctionne pas dans mon code (peut-être une erreur de compréhension d'objets de ma part)?

Par avance merci pour votre aide !