Partager via

Comment modifier via VBA la taille de la police d'une étiquette en fonction de sa valeur (Excel )

Anonyme
2020-02-28T13:18:17+00:00

Bonjour

J'ai un graphique combiné avec des histogrammes empilés.

Certaines données des séries peuvent être nulles.

Je souhaite dans ce cas ne pas afficher la valeur de zéro ou de définir la taille de la police égale à zéro ou de rendre cette étiquette invisible.

Merci pour votre aide

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

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2020-03-03T13:39:59+00:00

Bonjour,

Dan ce cas, il faut tester la valeur du point de données :

Sub test1()

  Dim S As Series, I As Long, Tabl As Variant

  With ActiveSheet.ChartObjects(1).Chart

    For Each S In .SeriesCollection

      If S.HasDataLabels = True Then

        Tabl = S.Values

        For I = 1 To S.DataLabels.Count

          If Tabl(I) = 0 Then

            S.Points(I).HasDataLabel = False

          End If

        Next I

        End If

    Next S

  End With

End Sub

Daniel

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

0 commentaires Aucun commentaire

5 réponses supplémentaires

  1. DanielCo 107.7K Points de réputation
    2020-02-28T14:32:27+00:00

    Et pour effacer aussi le formatage de l'étiquette :

    Sub test1()

      Dim S As Series, I As Long

      With ActiveSheet.ChartObjects(1).Chart

        For Each S In .SeriesCollection

          If S.HasDataLabels = True Then

            For I = 1 To S.DataLabels.Count

              If S.DataLabels(I).Text = 0 Then

                S.Points(I).HasDataLabel = False

              End If

            Next I

            End If

        Next S

      End With

    End Sub

    Daniel

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

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  2. Anonyme
    2020-03-03T12:56:26+00:00

    Bonjour Daniel

    J'ai encore un petit soucis!

    J'ai adapté ton code à mon besoin avec

     Dim S As Series, j As Long

                With oChart

                    For Each S In .SeriesCollection

                        If S.HasDataLabels = True Then

                            For j = 1 To S.DataLabels.Count

                                Debug.Print "Txt= " & S.DataLabels(j).Text

                                If S.DataLabels(j).Text = 0 Then

                                    S.Points(j).HasDataLabel = False

                                End If

                            Next

                        End If

                    Next

                End With

    Mais cela ne marche pas et "S.DataLabels(j).Text" est toujours vide

    Cela vient peut être de la façon dont j'ai créé les étiquettes:

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

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

                      Range(Cells(75 + I, 6), Cells(75 + I, 5 + nb)).Address, 0

                   .SeriesCollection(I).DataLabels.ShowRange = True

                   .SeriesCollection(I).DataLabels.ShowValue = False

    Merci

    Bernard

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2020-02-28T16:04:40+00:00

    Merci Daniel!

    C'est super.

    Bernard

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

    0 commentaires Aucun commentaire
  4. DanielCo 107.7K Points de réputation
    2020-02-28T13:42:27+00:00

    Bonjour,

    Par VBA :

    Sub test()

      Dim S As Series, I As Long

      With ActiveSheet.ChartObjects(1).Chart

        For Each S In .SeriesCollection

          If S.HasDataLabels = True Then

          For I = 1 To S.DataLabels.Count

            If S.DataLabels(I).Text = 0 Then S.DataLabels(I).Text = ""

          Next I

          End If

        Next S

      End With

    End Sub

    Cordialement.

    Daniel

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

    0 commentaires Aucun commentaire