Problème avec un code VBA sur Excel

Anonyme
2020-02-25T10:23:21+00:00

Bonjour

Pour un graphique je souhaite modifier les étiquettes pour quelles affichent un pourcentage défini dans un range différent de celui des données.

J'utilse le code suivant

 .FullSeriesCollection(i).ChartType = xlColumnStacked

               .FullSeriesCollection(i).AxisGroup = 1

               .FullSeriesCollection(i).Name = Cells(142 + i, 4).Value

               .SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange2.InsertChartField msoChartFieldRange, oSheet.Range(Cells(157 + i, 8), Cells(157 + i, 7 + nb)), 0

               .SeriesCollection(1).DataLabels.ShowRange = True

               .SeriesCollection(1).DataLabels.ShowValue = False

               .FullSeriesCollection(i).ApplyDataLabels

J'ai une erreur indéterminée "non spécifiée" à la ligne 4.

Dans la doc sur InsertChartField j'ai noté la syntaxe

expression. InsertChartField (ChartFieldType, Formula, position)

que j'ai également essayé sans succès.

Merci

Bernard

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

9 réponses

  1. DanielCo 107.7K Points de réputation
    2020-02-26T12:01:26+00:00

    J'étais passé à côté "TextRange" au lieu de "TextRange2" :

                   .SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.InsertChartField _

                      msoChartFieldRange, "'" & oSheet.Name & "'!" & _

                      Range(Cells(157 + i, 8), Cells(157 + i, 7 + nb)).Address, 0

    Ne me demande pas pourquoi ! la doc indique que TextRange renvoie un objet textRange2

    C'est comme ça.

    Daniel

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  2. Anonyme
    2020-02-25T13:02:01+00:00

    Merci

    Non cela ne marche pas!

    Pour verifier j'ai chargé l'adresse avec

    nom = "'" & oSheet.Name & "'!" & _

                      Range(Cells(157 + i, 8), Cells(157 + i, 7 + nb)).Address

    Et j'obtiens 'nom ="Comparatif!$H$158:$M$158"

    qui la bonne.

    J'ai une erreur d’exécution 438 : Propriété ou méthode non gérée par cet objet

    Merci

    Bernard

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. DanielCo 107.7K Points de réputation
    2020-02-25T11:59:53+00:00

    Oups ! Il faut indiquer l'adresse de la plage :

    .FullSeriesCollection(i).ChartType = xlColumnStacked

                   .FullSeriesCollection(i).AxisGroup = 1

                   .FullSeriesCollection(i).Name = Cells(142 + i, 4).Value

                   .SeriesCollection(1).HasDataLabels = True

                   .SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange2.InsertChartField _

                      msoChartFieldRange, "'" & oSheet.Name & "'!" & _

                      Range(Cells(157 + i, 8), Cells(157 + i, 7 + nb)).Address, 0

                   .SeriesCollection(1).DataLabels.ShowRange = True

                   .SeriesCollection(1).DataLabels.ShowValue = False

                   .FullSeriesCollection(i).ApplyDataLabels

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. DanielCo 107.7K Points de réputation
    2020-02-25T11:39:34+00:00

    Plutôt :

    .FullSeriesCollection(i).ChartType = xlColumnStacked

                   .FullSeriesCollection(i).AxisGroup = 1

                   .FullSeriesCollection(i).Name = Cells(142 + i, 4).Value

                   .SeriesCollection(1).HasDataLabels = True

                   .SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange2.InsertChartField msoChartFieldRange, oSheet.Range(Cells(157 + i, 8), Cells(157 + i, 7 + nb)), 0

                   .SeriesCollection(1).DataLabels.ShowRange = True

                   .SeriesCollection(1).DataLabels.ShowValue = False

                   .FullSeriesCollection(i).ApplyDataLabels

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. DanielCo 107.7K Points de réputation
    2020-02-25T11:10:59+00:00

    Bonjour,

    Essaie en définissant d'abord les étiquettes :

     .FullSeriesCollection(i).ChartType = xlColumnStacked

                   .FullSeriesCollection(i).AxisGroup = 1

                   .FullSeriesCollection(i).Name = Cells(142 + i, 4).Value

                   .FullSeriesCollection(i).ApplyDataLabels

                   .SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange2.InsertChartField msoChartFieldRange, oSheet.Range(Cells(157 + i, 8), Cells(157 + i, 7 + nb)), 0

                   .SeriesCollection(1).DataLabels.ShowRange = True

                   .SeriesCollection(1).DataLabels.ShowValue = False

    Cordialement.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire