Modifier le format des étiquettes d'un graphique en VBA

chappyporfaro

XLDnaute Junior
Bonjour à tous,

J'ai un problème avec le format des étiquettes dans un graphique (histogramme 3D). J'essaie d'appliquer un format conditionnel via VBA afin de sauver un peu de temps mais je me bute à une erreur '1004' sur ce code (ce qui, en fait, me bouffe encore plus de temps ...:() :

Code:
    Dim boucle1
    For boucle1 = 1 To ActiveChart.SeriesCollection.Count
        ActiveChart.SeriesCollection(boucle1).DataLabels.Select
        Selection.NumberFormat = "[<2000]"""";Standard;# ##0"
    Next boucle1

Pourtant, la ligne - Selection.NumberFormat = "[<2000]"""";Standard;# ##0" - c'est l'enregistreur de macro qui me l'a offert sur un plateau ..... :confused::confused::confused:

Quelqu'un saurait-il où se trouve l'erreur? Sinon, auriez-vous un petit bout de code qui pourrait faire mon bonheur?

Merci à l'avance

Pierre
 

chappyporfaro

XLDnaute Junior
Re : Modifier le format des étiquettes d'un graphique en VBA

Bonjour Gardien de phare,

Je ne comprend pas très bien la question.
S'il y a plus d'une série dans le graphique 3D et que je désire appliquer le format, ne dois-je pas avoir une boucle afin de passer sur chaque série?

Je me débrouille tout de même un peu en VBA mais avec des connaissances limitées :( Mais je ne vois pas comment faire autrement.

Je viens de faire un autre essai quelque peu encourageant.
J'ai remplacé Selection.NumberFormat = "[<2000]"""";Standard;# ##0" par Selection.NumberFormat = "# ##0" et ça fonctionne! J'en conclus donc que le problème se situe dans le format que je tente d'imposer (et qui m'a été donné par Excel hahaha). Sauf que je n'Ai aucune idée comment l'écrire autrement.

Merci
 

Pièces jointes

  • GRAPHIQUE_3D_chappy.xlsm
    19.5 KB · Affichages: 39
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Modifier le format des étiquettes d'un graphique en VBA

Bonjour chappyporfaro, Salut Gardien de phare

Pas bien compris ce tu veux faire:
Code:
Selection.NumberFormat = "[<2000]"""";# ##0"

D'autre part tu remplace les valeurs inférieures à 2000 par rien alors que dans ton fichier aucune valeur n'atteint 2000.

Cordialement
 

chappyporfaro

XLDnaute Junior
Re : Modifier le format des étiquettes d'un graphique en VBA

Bonjour Efgé,

Tu as effectivement raison, dans le fichier j'ai inscrit des valeurs fictives. Mais le problème persiste, peu importe que l'on mette "[<2000] ou [<2].

Je ne veux pas faire apparaître les étiquettes qui sont sous la valeur indiquée (2000, ou 200 ou 20 :rolleyes:) afin d'alléger le graphique. Je peux toujours les effacer une à une, mais c'est très fastidieux surtout après chaque mise à jour.

Merci
 

chappyporfaro

XLDnaute Junior
Re : Modifier le format des étiquettes d'un graphique en VBA

Bonjour Gardien de phare,

Merci infiniment, ça semble fonctionner. :)

Si j'ai bien compris, le format Standard n'avait pas sa place?

Par contre, j'aurais une autre question. Comment puis-je modifier l'orientation des étiquettes par VBA?

Merci
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Modifier le format des étiquettes d'un graphique en VBA

Bonjour chappyporfaro, à tous,

Bien souvent, pour les formats en VBA, il faut utiliser les notations américaines :

  • l'espace séparateur des milliers devient: la virgule
  • le séparateur décimal devient: le point
  • Standard devient: General

Voir le code dans le fichier joint.

VB:
Sub SupA2000()
  Dim boucle1, rep&
  Application.ScreenUpdating = False
  rep = vbYes
  rep = MsgBox("Voulez-vous le format Standard" & vbLf & _
        "    ( sinon format '9 999,9' )", _
        vbYesNo + vbQuestion + vbDefaultButton1, _
        "Format des étiquettes à valeur > 2000")
  ActiveSheet.ChartObjects("Graphique 1").Activate
  For boucle1 = 1 To ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(boucle1).DataLabels.Select
    If rep = vbYes Then
      Selection.NumberFormat = "[<2000]"""";General"
    Else
      Selection.NumberFormat = "[<2000]"""";#,##0.0"
    End If
  Next boucle1
End Sub

Edit: Bonjour Gardien de phare :)
 

Pièces jointes

  • chappyporfaro-GRAPHIQUE_3D-v1.xlsm
    25.1 KB · Affichages: 61
Dernière édition:

chappyporfaro

XLDnaute Junior
Résolu : Modifier le format des étiquettes d'un graphique en VBA

Bonjour Gardien de phare, Efgé, mapomme,

Merci pour cet apprentissage. Je vais m'amuser avec ces notions (nouvelles pour moi :)).

Voici où j'en suis rendu grâce à vos précieux conseils :

Code:
Sub AjoutÉtiqGrph3D()


Dim boucle1, boucle2, boucle3, rep&
Dim LeftPos


  Application.ScreenUpdating = False
    
    ActiveChart.SetElement (msoElementDataLabelNone)
    ActiveChart.SetElement (msoElementDataLabelShow)
    
    
    For boucle1 = 1 To ActiveChart.SeriesCollection.Count
        ActiveChart.SeriesCollection(boucle1).DataLabels.Select
        With Selection
            .NumberFormat = "General"
            .Font.Color = RGB(255, 255, 255)
            .Font.Size = 12
            .Font.Bold = True
            .Orientation = 90
            '.NumberFormat = "[<2000]"""";#,##0.0"


            With Selection.Format.TextFrame2.TextRange.Font.Fill
                .Visible = msoTrue
                .ForeColor.ObjectThemeColor = msoThemeColorBackground1
                .ForeColor.TintAndShade = 0
                .ForeColor.Brightness = 0
                .Transparency = 0
                .Solid
            End With
        
        End With
        
    Next boucle1


' Ajuste le format de l'étiquette


  rep = vbYes
  rep = MsgBox("Voulez-vous le format >20?" & vbLf & _
        "    ( sinon format '9 999' )", _
        vbYesNo + vbQuestion + vbDefaultButton1, _
        "Format des étiquettes à valeur > 20")
  
  For boucle1 = 1 To ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(boucle1).DataLabels.Select
    If rep = vbYes Then
      Selection.NumberFormat = "[<20]"""";# ##0"
    Else
      Selection.NumberFormat = "# ##0"
    End If
  Next boucle1


' Ajustement de la hauteur de l'étiquette


    rep = vbYes
    rep = MsgBox("Voulez-vous ajuster la hauteur?" & vbLf & _
        "    ( sinon demeure ainsi )", _
        vbYesNo + vbQuestion + vbDefaultButton1, _
        "Format des étiquettes à valeur > 20")
    For boucle2 = 1 To ActiveChart.SeriesCollection.Count
        ActiveChart.SeriesCollection(boucle2).DataLabels.Select
        If rep = vbYes Then
            LeftPos = 2
            For boucle3 = 1 To ActiveChart.SeriesCollection(boucle2).Points.Count
                ActiveChart.SeriesCollection(boucle2).Points(boucle3).Select
                Selection.DataLabel.Top = Selection.Top + 2
                Selection.DataLabel.Left = Selection.Left + LeftPos
                LeftPos = LeftPos + 0.5
            Next boucle3
        Else
            GoTo Fin_Hauteur
        End If
    Next boucle2


Fin_Hauteur:


  
  Application.ScreenUpdating = True
  
End Sub

Il y a encore du code superflu mais pour le moment ça fonctionne et ça me permet d'avancer dans mon travail ;)

Merci à tous et bonne journée
 

Statistiques des forums

Discussions
311 737
Messages
2 082 030
Membres
101 876
dernier inscrit
JULIEN21370