redimensionner un graphique histogramme selon le nombre de données

Roland_M

XLDnaute Barbatruc
Bien le bonsoir à tous,

je reviens vers vous au sujet de mon graphique histo barres horizontales
j'ai cherché sur le net mais rien à ce sujet pourtant simple et précis !

donc histo avec barres horizontales qui ressemble à ceci:
[REPARTITION DEFAUTS]
Defaut1 ___
Defaut2 ____
Defaut3 ___
. . .
mon problème est le suivant, régler la hauteur d'après le nombre de données, j'entend par là le nombre de barres qui peut aller 1 à 150 barres
si je règle sur une hauteur fixe exp, ActiveChart.ChartArea.Height=400, si j'ai seulement une dizaines de barres j'ai des barres énormes
par-contre si j'en ai 150 barres, tout est tassé et évidemment illisible !

pour 70 barres j'avais un histo correcte avec height de 940
j'ai donc essayé avec une hauteur de 940/70 barres et multiplié par le nombre réel de barres
je sais qu'il y a la hauteur du titre + en bas l'axe des x qu'il faudrait déduire pour multiplier ensuite . . .
mais malgré tous mes essais rien de concluant !?

je fais donc appel à vous !

d'une est-ce possible ?
si oui comment ?

grand merci d'avance à tous les intervenants.
la dernière fois c'est job75 qui m'a dépanné (encore merci à lui)


EDIT: après moult essais, j'arrive à ceci qui me dépanne bien ! (voir s'il y a mieux et surtout fiable!)
Hhisto = 50 + (12.75 * NbrDeBarres)
ActiveSheet.ChartObjects(GraphHisto$).Activate
ActiveChart.ChartArea.Height = Hhisto
ActiveChart.PlotArea.Top = 25
ActiveChart.PlotArea.Height = Hhisto - 25
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

bonsoir job75 ! oui effectivement c'est à étudier !?

je viens de mettre à l'instant un edit dans mon message précédent:

EDIT: après moult essais, j'arrive à ceci qui me dépanne bien ! (voir s'il y a mieux et surtout fiable!)
Hhisto = 50 + (12.75 * NbrDeBarres)
ActiveSheet.ChartObjects(GraphHisto$).Activate
ActiveChart.ChartArea.Height = Hhisto
ActiveChart.PlotArea.Top = 25
ActiveChart.PlotArea.Height = Hhisto - 25
 

Roland_M

XLDnaute Barbatruc
Bien le bonjour à tous,

Comme je n'ai pas eu d'intervenant, (excepté job75)
Je vous fais part de mes solutions(tout au moins une macro entres autres) (et merci google)
ceci pour en faire profiter la communauté !?

MAIS j'aimerais vous poser une question :
Avez vous remarqué qu'après excel 2007(tout au moins 2016) le formatnum étiquettes avait changé ?
j'ai du faire mes essais(avec 2016) chez mon fils pour chercher la soluce !

j'ai une fonction F$ = FFormatNumHisto$ pour adapter cela (0.00) ou (0,00)
ActiveChart.SeriesCollection(1).DataLabels.NumberFormat = F$ '%barres
ActiveChart.Axes(xlValue).TickLabels.NumberFormat = F$ 'bas de l'histo

C'est à dire qu'avant par exemple formatnum="0.00" côté vb et côté feuille ,
J'ai pensé incompatibilité, en fait formatnum="0,00" côté vb et côté feuille .
Franchement, inverser(. avec ,) il n'y a que microsoft pour ponde des daubes pareilles !

VB:
'M$ = le titre du graphique
'TotBarres le nbr de données(cellules)
'F$ = FFormatNumHisto$ fonction du formatnum dans les étiquettes
Public Sub RedimHistoFeuilActive(M$, TotBarres)
If TotBarres < 3 Then TotBarres = 2
Hhisto = 50 + (12.75 * TotBarres) '<<< adapte l'histo à la hauteur du nbr de barres
Lhisto = Range("A1").Width - 10   '<<< adapte la largeur à la colonne(A)
ActiveSheet.ChartObjects(GraphHisto$).Activate
'avant redim init à 0 (bizarrement il faut remettre à 0 sinon ça ne réagit pas!)
With ActiveChart
.ChartArea.Height = 0
.ChartArea.Width = 0
.PlotArea.Top = 0
.PlotArea.Left = 0
.PlotArea.Height = 0
.PlotArea.Width = 0
'dimensionne
With ActiveChart
.ChartArea.Height = Hhisto
.ChartArea.Width = Lhisto
.PlotArea.Top = 25
.PlotArea.Left = 0
.PlotArea.Height = Hhisto - 25
.PlotArea.Width = Lhisto
'place titre (centré)
If M$ > "" Then
   .ChartTitle.Text = M$
   .ChartTitle.Left = Lhisto 'là aussi bizarrerie, inutile faire Lhisto / 2 ça ne fonctionne pas!?
   .ChartTitle.Left = .ChartTitle.Left / 2
   .ChartTitle.Top = 0
End If
  F$ = FFormatNumHisto$
.SeriesCollection(1).DataLabels.NumberFormat = F$ '%barres
.Axes(xlValue).TickLabels.NumberFormat = F$ 'bas de l'histo
End With
End Sub
 
Dernière édition:

Statistiques des forums

Discussions
312 041
Messages
2 084 828
Membres
102 685
dernier inscrit
med_remi021