Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

modification d'un code VBA

8 réponses
Avatar
marc
Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé merveilleux.
Par contre, il est limité à trois colonnes et 4 lignes. J'aimerais rendre ce
code dynamique peut importe le nombre de colonne ou de ligne que j'ai. J'ai
alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué les
pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub

8 réponses

Avatar
isabelle
bonjour Marc,

il faut nommer la plage avec cette formule comme référence, cela permet
de la rendre dynamique,

ÞCALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A);NBVAL(Feuil1!$1:$1))

et ajouter ces lignes en début de la macro,

Set xx = Sheets("Feuil1").Range("Plage")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=xx, PlotBy:=xlColumns

isabelle

marc a écrit :
Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé merveilleux.
Par contre, il est limité à trois colonnes et 4 lignes. J'aimerais rendre ce
code dynamique peut importe le nombre de colonne ou de ligne que j'ai. J'ai
alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué les
pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub





Avatar
isabelle
et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :
Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé merveilleux.
Par contre, il est limité à trois colonnes et 4 lignes. J'aimerais rendre ce
code dynamique peut importe le nombre de colonne ou de ligne que j'ai. J'ai
alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué les
pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub





Avatar
marc
Bonjour Isabelle
Merci de prendre le temps de répondre à ma question. Voici, avec tes
explications, le nouveau code. Par contre, il y a deux problèmes. Le nouveau
code inverse mon axe des X et la légende, et en plus, pour les lignes, il ne
prend que 4 lignes. Pour ce qui est des colonnes, aucun problème, il ajoute
mes colonnes au fur et à mesure, mais pas les lignes.
Aussi, peut-on ajuster ce code pour l'utiliser sur n'importe qu'elle feuille
d'un fichier, Car ce code ne fonctionne que sur la feuille #1.
Merci de ton aide
marc
Voici le nouveau code
Sub commentaire()



Set graph = Sheets("Feuil1").Range("Tableau")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=graph,
PlotBy:=xlColumns



On Error Resume Next

n = Application.CountA(Sheets("Feuil1").Rows(1))

For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel

Next

On Error GoTo 0

For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count

tot = 0

For col = 1 To n

tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)

Next col

For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6

y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")

Next col

Next i

End Sub





"isabelle" a écrit dans le message de news:
uX1s0$
et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :
Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé
merveilleux. Par contre, il est limité à trois colonnes et 4 lignes.
J'aimerais rendre ce code dynamique peut importe le nombre de colonne ou
de ligne que j'ai. J'ai alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué les
pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub







Avatar
isabelle
bonjour Marc,

voici l'exemple : http://cjoint.com/?cmoWywfIQB
dit moi si ça va ?

isabelle

marc a écrit :
Bonjour Isabelle
Merci de prendre le temps de répondre à ma question. Voici, avec tes
explications, le nouveau code. Par contre, il y a deux problèmes. Le nouveau
code inverse mon axe des X et la légende, et en plus, pour les lignes, il ne
prend que 4 lignes. Pour ce qui est des colonnes, aucun problème, il ajoute
mes colonnes au fur et à mesure, mais pas les lignes.
Aussi, peut-on ajuster ce code pour l'utiliser sur n'importe qu'elle feuille
d'un fichier, Car ce code ne fonctionne que sur la feuille #1.
Merci de ton aide
marc
Voici le nouveau code
Sub commentaire()



Set graph = Sheets("Feuil1").Range("Tableau")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=graph,
PlotBy:=xlColumns



On Error Resume Next

n = Application.CountA(Sheets("Feuil1").Rows(1))

For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel

Next

On Error GoTo 0

For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count

tot = 0

For col = 1 To n

tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)

Next col

For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6

y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")

Next col

Next i

End Sub





"isabelle" a écrit dans le message de news:
uX1s0$

et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :

Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé
merveilleux. Par contre, il est limité à trois colonnes et 4 lignes.
J'aimerais rendre ce code dynamique peut importe le nombre de colonne ou
de ligne que j'ai. J'ai alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué les
pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n
Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub













Avatar
marc
Bonjour Isabelle
Oui, ça fonctionne bien.
Par contre, j'ai un autre question. Dans ce cas-ci, la macro ne permet qu'un
seul graphique et c'est sur la page 1. Comme excel accepte une seule fois un
nom de plage, il est impossible de faire plusieurs tableau sur la même
feuille et d'utiliser la macro. Est-ce possible de faire quelque chose?
Merci énormément de ton aide.
Marc

"isabelle" a écrit dans le message de news:

bonjour Marc,

voici l'exemple : http://cjoint.com/?cmoWywfIQB
dit moi si ça va ?

isabelle

marc a écrit :
Bonjour Isabelle
Merci de prendre le temps de répondre à ma question. Voici, avec tes
explications, le nouveau code. Par contre, il y a deux problèmes. Le
nouveau code inverse mon axe des X et la légende, et en plus, pour les
lignes, il ne prend que 4 lignes. Pour ce qui est des colonnes, aucun
problème, il ajoute mes colonnes au fur et à mesure, mais pas les lignes.
Aussi, peut-on ajuster ce code pour l'utiliser sur n'importe qu'elle
feuille d'un fichier, Car ce code ne fonctionne que sur la feuille #1.
Merci de ton aide
marc
Voici le nouveau code
Sub commentaire()



Set graph = Sheets("Feuil1").Range("Tableau")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=graph,
PlotBy:=xlColumns



On Error Resume Next

n = Application.CountA(Sheets("Feuil1").Rows(1))

For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel

Next

On Error GoTo 0

For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count

tot = 0

For col = 1 To n

tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)

Next col

For col = 1 To n


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6

y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")

Next col

Next i

End Sub





"isabelle" a écrit dans le message de news:
uX1s0$

et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :

Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé
merveilleux. Par contre, il est limité à trois colonnes et 4 lignes.
J'aimerais rendre ce code dynamique peut importe le nombre de colonne
ou de ligne que j'ai. J'ai alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué
les pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub















Avatar
isabelle
bonjour Marc,

il faut changer Sheets(1) par ActiveSheet
et modifier la formule pour le nom de "Plage" par
ÞCALER(!$A$1;;;NBVAL(!$A:$A);NBVAL(!$1:$1))

Sub commentaire()
Set xx = ActiveSheet.Range("Plage")
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=xx,
PlotBy:=xlColumns
On Error Resume Next
n = Application.CountA(ActiveSheet.Rows(1))
For col = 1 To n

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error Resume Next
For i = 1 To
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col

For col = 1 To n

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub

isabelle

marc a écrit :
Bonjour Isabelle
Oui, ça fonctionne bien.
Par contre, j'ai un autre question. Dans ce cas-ci, la macro ne permet qu'un
seul graphique et c'est sur la page 1. Comme excel accepte une seule fois un
nom de plage, il est impossible de faire plusieurs tableau sur la même
feuille et d'utiliser la macro. Est-ce possible de faire quelque chose?
Merci énormément de ton aide.
Marc

"isabelle" a écrit dans le message de news:


bonjour Marc,

voici l'exemple : http://cjoint.com/?cmoWywfIQB
dit moi si ça va ?

isabelle

marc a écrit :

Bonjour Isabelle
Merci de prendre le temps de répondre à ma question. Voici, avec tes
explications, le nouveau code. Par contre, il y a deux problèmes. Le
nouveau code inverse mon axe des X et la légende, et en plus, pour les
lignes, il ne prend que 4 lignes. Pour ce qui est des colonnes, aucun
problème, il ajoute mes colonnes au fur et à mesure, mais pas les lignes.
Aussi, peut-on ajuster ce code pour l'utiliser sur n'importe qu'elle
feuille d'un fichier, Car ce code ne fonctionne que sur la feuille #1.
Merci de ton aide
marc
Voici le nouveau code
Sub commentaire()



Set graph = Sheets("Feuil1").Range("Tableau")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=graph,
PlotBy:=xlColumns



On Error Resume Next

n = Application.CountA(Sheets("Feuil1").Rows(1))

For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel

Next

On Error GoTo 0

For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count

tot = 0

For col = 1 To n

tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)

Next col

For col = 1 To n


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6

y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")

Next col

Next i

End Sub





"isabelle" a écrit dans le message de news:
uX1s0$


et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :


Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé
merveilleux. Par contre, il est limité à trois colonnes et 4 lignes.
J'aimerais rendre ce code dynamique peut importe le nombre de colonne
ou de ligne que j'ai. J'ai alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué
les pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub




















Avatar
marc
Rebonjour Isabelle
Et est-ce que ce code va permettre de faire plus d'un graphique par page?
J'apprécie sincèrement ton aide
Merci
Marc


"isabelle" a écrit dans le message de news:
Ob$
bonjour Marc,

il faut changer Sheets(1) par ActiveSheet
et modifier la formule pour le nom de "Plage" par
ÞCALER(!$A$1;;;NBVAL(!$A:$A);NBVAL(!$1:$1))

Sub commentaire()
Set xx = ActiveSheet.Range("Plage")
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=xx,
PlotBy:=xlColumns
On Error Resume Next
n = Application.CountA(ActiveSheet.Rows(1))
For col = 1 To n
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error Resume Next
For i = 1 To
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col

For col = 1 To n

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub

isabelle

marc a écrit :
Bonjour Isabelle
Oui, ça fonctionne bien.
Par contre, j'ai un autre question. Dans ce cas-ci, la macro ne permet
qu'un seul graphique et c'est sur la page 1. Comme excel accepte une
seule fois un nom de plage, il est impossible de faire plusieurs tableau
sur la même feuille et d'utiliser la macro. Est-ce possible de faire
quelque chose?
Merci énormément de ton aide.
Marc

"isabelle" a écrit dans le message de news:


bonjour Marc,

voici l'exemple : http://cjoint.com/?cmoWywfIQB
dit moi si ça va ?

isabelle

marc a écrit :

Bonjour Isabelle
Merci de prendre le temps de répondre à ma question. Voici, avec tes
explications, le nouveau code. Par contre, il y a deux problèmes. Le
nouveau code inverse mon axe des X et la légende, et en plus, pour les
lignes, il ne prend que 4 lignes. Pour ce qui est des colonnes, aucun
problème, il ajoute mes colonnes au fur et à mesure, mais pas les
lignes.
Aussi, peut-on ajuster ce code pour l'utiliser sur n'importe qu'elle
feuille d'un fichier, Car ce code ne fonctionne que sur la feuille #1.
Merci de ton aide
marc
Voici le nouveau code
Sub commentaire()



Set graph = Sheets("Feuil1").Range("Tableau")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=graph,
PlotBy:=xlColumns



On Error Resume Next

n = Application.CountA(Sheets("Feuil1").Rows(1))

For col = 1 To n


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel

Next

On Error GoTo 0

For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count

tot = 0

For col = 1 To n

tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)

Next col

For col = 1 To n


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6

y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")

Next col

Next i

End Sub





"isabelle" a écrit dans le message de news:
uX1s0$


et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :


Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé
merveilleux. Par contre, il est limité à trois colonnes et 4 lignes.
J'aimerais rendre ce code dynamique peut importe le nombre de colonne
ou de ligne que j'ai. J'ai alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué
les pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub






















Avatar
isabelle
bonjour Marc,

non, pour appliquer la macro à plusieurs graphiques sur une même page il
faudrait y ajouter une boucle du style :

For i = 1 To ActiveSheet.ChartObjects.Count

ActiveSheet.ChartObjects(i)....suite

next

mais attention il faut aussi prévoir quel sera la source de chaque tcd

isabelle

marc a écrit :
Rebonjour Isabelle
Et est-ce que ce code va permettre de faire plus d'un graphique par page?
J'apprécie sincèrement ton aide
Merci
Marc


"isabelle" a écrit dans le message de news:
Ob$

bonjour Marc,

il faut changer Sheets(1) par ActiveSheet
et modifier la formule pour le nom de "Plage" par
ÞCALER(!$A$1;;;NBVAL(!$A:$A);NBVAL(!$1:$1))

Sub commentaire()
Set xx = ActiveSheet.Range("Plage")
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=xx,
PlotBy:=xlColumns
On Error Resume Next
n = Application.CountA(ActiveSheet.Rows(1))
For col = 1 To n
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error Resume Next
For i = 1 To
ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col

For col = 1 To n

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

ActiveSheet.ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub

isabelle

marc a écrit :

Bonjour Isabelle
Oui, ça fonctionne bien.
Par contre, j'ai un autre question. Dans ce cas-ci, la macro ne permet
qu'un seul graphique et c'est sur la page 1. Comme excel accepte une
seule fois un nom de plage, il est impossible de faire plusieurs tableau
sur la même feuille et d'utiliser la macro. Est-ce possible de faire
quelque chose?
Merci énormément de ton aide.
Marc

"isabelle" a écrit dans le message de news:



bonjour Marc,

voici l'exemple : http://cjoint.com/?cmoWywfIQB
dit moi si ça va ?

isabelle

marc a écrit :


Bonjour Isabelle
Merci de prendre le temps de répondre à ma question. Voici, avec tes
explications, le nouveau code. Par contre, il y a deux problèmes. Le
nouveau code inverse mon axe des X et la légende, et en plus, pour les
lignes, il ne prend que 4 lignes. Pour ce qui est des colonnes, aucun
problème, il ajoute mes colonnes au fur et à mesure, mais pas les
lignes.
Aussi, peut-on ajuster ce code pour l'utiliser sur n'importe qu'elle
feuille d'un fichier, Car ce code ne fonctionne que sur la feuille #1.
Merci de ton aide
marc
Voici le nouveau code
Sub commentaire()



Set graph = Sheets("Feuil1").Range("Tableau")
Sheets(1).ChartObjects(1).Chart.SetSourceData Source:=graph,
PlotBy:=xlColumns



On Error Resume Next

n = Application.CountA(Sheets("Feuil1").Rows(1))

For col = 1 To n


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel

Next

On Error GoTo 0

For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count

tot = 0

For col = 1 To n

tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)

Next col

For col = 1 To n


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6

y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot


Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")

Next col

Next i

End Sub





"isabelle" a écrit dans le message de news:
uX1s0$



et aussi modifier
n = 3 ' nombre de mois
par
n = Application.CountA(Sheets("Feuil1").Rows(1))

isabelle

marc a écrit :



Bonjour à vous tous.
J'ai trouvé sur le web un code de JB pour un graphique empilé
merveilleux. Par contre, il est limité à trois colonnes et 4 lignes.
J'aimerais rendre ce code dynamique peut importe le nombre de colonne
ou de ligne que j'ai. J'ai alors besoin de votre aide.
Voici un document exemple. si vous exécuter la macro commentaire (par
contre, je n'ai pas fait de bouton), vous verrez le graphique indiqué
les pourcentages.
Voici le document.
http://cjoint.com/?clvgjlhe70

Merci de votre aide
marc

Voici le code
Sub commentaire()
On Error Resume Next
n = 3 ' nombre de mois
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).ApplyDataLabels
Type:=xlDataLabelsShowLabel
Next
On Error GoTo 0
For i = 1 To
Sheets(1).ChartObjects(1).Chart.SeriesCollection(1).Points.Count
tot = 0
For col = 1 To n
tot = tot +
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i)
Next col
For col = 1 To n

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Font.Size
= 6
y =
Application.Index(Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Values,
i) / tot

Sheets(1).ChartObjects(1).Chart.SeriesCollection(col).Points(i).DataLabel.Text
= Format(y, "0.00%")
Next col
Next i
End Sub