OVH Cloud OVH Cloud

Graphiques en cascade

7 réponses
Avatar
Jean-Paul V
Bonjour à tous

http://www.excelabo.net/xl/graphtypes.php#graphlies

J’ai étudié dans excelabo la possibilité de faire des graphiques en cascade.
J’ai réussi à faire marcher la macro indiquée ( j’avoue que je n’ai pas tout
compris comment ça marche )
Comment modifier ma macro afin de faire disparaître le graph qui se
superpose lorsque l’on clic sur la barre 1 en cliquant par exemple sur le
premier graph en dehors des barres ?
La macro mise dans Graph1 est :
Option Explicit

Private Sub Chart_MouseDown(ByVal Button As Long, _
ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
Dim ElementID As Long
Dim arg1 As Long, arg2 As Long
GetChartElement X, Y, ElementID, arg1, arg2
If ElementID = xlSeries Then
Select Case arg2
Case 1 'first bar

Sheets("Cascade").Activate
Range("C7:D10").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Cascade").Range("C7:D10"),
PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graph1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "commercial"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Case 2 'second bar

MsgBox ("Vous avez cliqué la barre2")
Case 3 '3rd bar

MsgBox ("Vous avez cliqué la barre3")
End Select
End If
End Sub


Bien Amicalement

7 réponses

Avatar
Francois
Bonjour à tous

http://www.excelabo.net/xl/graphtypes.php#graphlies

J’ai étudié dans excelabo la possibilité de faire des graphiques en cascade.
J’ai réussi à faire marcher la macro indiquée ( j’avoue que je n’ai pas tout
compris comment ça marche )
Comment modifier ma macro afin de faire disparaître le graph qui se
superpose lorsque l’on clic sur la barre 1 en cliquant par exemple sur le
premier graph en dehors des barres ?


Bonsoir,

Il faut soit, déplacer le graphique sur une autre feuille, soit le
supprimer. Je te propose une solution qui n'est pas très jolie en terme
de programmation mais qui fonctionne...

Rajouter la procédure suivante
Sub Efface()
Sheets("Graph1").ChartObjects("serie1").Delete
Sheets("Graph1").ChartObjects("serie2").Delete
Sheets("Graph1").ChartObjects("serie3").Delete
End Sub


La macro mise dans Graph1 est :
Option Explicit

Private Sub Chart_MouseDown(ByVal Button As Long, _
ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)


Rajouter là :
On Error Resume Next
car la macro va tenter d'effacer des objets inexistants

Dim ElementID As Long
Dim arg1 As Long, arg2 As Long
GetChartElement X, Y, ElementID, arg1, arg2
If ElementID = xlSeries Then
Select Case arg2
Case 1 'first bar


Rajouter la un appel à la sub Efface
Efface

Sheets("Cascade").Activate
Range("C7:D10").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Cascade").Range("C7:D10"),
PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graph1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "commercial"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With


Nommer le graphique "serie1"
ActiveSheet.ChartObjects(ActiveChart.Parent.Name).Name = "serie1"

Bien sur pour les autres ce sera serie2 et serie3

Case 2 'second bar

MsgBox ("Vous avez cliqué la barre2")
Case 3 '3rd bar

MsgBox ("Vous avez cliqué la barre3")
End Select


Rajouter
Else
Efface


End If
End Sub



Les graphiques créés par un clic sur un point de série du graphique
principal seront effacés
- à chaque clic sur une série
- à chaque clic dans une zone quelconque du graphique autre qu'un point
de série

Pas très joli, tout ça, que les gourous de VBA corrigent s'ils le jugent
utile.

--
François L

Avatar
Jean-Paul V
Bonjour François

J'ai un peu tardé à regarder votre réponse

J'ai testé ta solution ça marche !!! merci !

Maintenant j'ai un nouveau problème lorsque je copie la feuil1 dans un autre
fichier qui a une quinzaine de feuilles ,j'ai recréé Grah1 et la macro de
Cascade qui fonctionne dans ce nouveau fichier , je l'ai donc sauvegardé
.Lorsque je l'ouvre à nouveau il m'appelle l'ouverture de l'ancien alors que
mon nouveau fichier ne fait référence à aucune macro de l'ancien fichier.Si
je supprime Grah1 le problème disparait.Pour l'instant je tourne en rond sur
ce problème .


Bonjour à tous

http://www.excelabo.net/xl/graphtypes.php#graphlies

J’ai étudié dans excelabo la possibilité de faire des graphiques en cascade.
J’ai réussi à faire marcher la macro indiquée ( j’avoue que je n’ai pas tout
compris comment ça marche )
Comment modifier ma macro afin de faire disparaître le graph qui se
superpose lorsque l’on clic sur la barre 1 en cliquant par exemple sur le
premier graph en dehors des barres ?


Bonsoir,

Il faut soit, déplacer le graphique sur une autre feuille, soit le
supprimer. Je te propose une solution qui n'est pas très jolie en terme
de programmation mais qui fonctionne...

Rajouter la procédure suivante
Sub Efface()
Sheets("Graph1").ChartObjects("serie1").Delete
Sheets("Graph1").ChartObjects("serie2").Delete
Sheets("Graph1").ChartObjects("serie3").Delete
End Sub


La macro mise dans Graph1 est :
Option Explicit

Private Sub Chart_MouseDown(ByVal Button As Long, _
ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)


Rajouter là :
On Error Resume Next
car la macro va tenter d'effacer des objets inexistants

Dim ElementID As Long
Dim arg1 As Long, arg2 As Long
GetChartElement X, Y, ElementID, arg1, arg2
If ElementID = xlSeries Then
Select Case arg2
Case 1 'first bar


Rajouter la un appel à la sub Efface
Efface

Sheets("Cascade").Activate
Range("C7:D10").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Cascade").Range("C7:D10"),
PlotBy _
:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graph1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "commercial"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With


Nommer le graphique "serie1"
ActiveSheet.ChartObjects(ActiveChart.Parent.Name).Name = "serie1"

Bien sur pour les autres ce sera serie2 et serie3

Case 2 'second bar

MsgBox ("Vous avez cliqué la barre2")
Case 3 '3rd bar

MsgBox ("Vous avez cliqué la barre3")
End Select


Rajouter
Else
Efface


End If
End Sub



Les graphiques créés par un clic sur un point de série du graphique
principal seront effacés
- à chaque clic sur une série
- à chaque clic dans une zone quelconque du graphique autre qu'un point
de série

Pas très joli, tout ça, que les gourous de VBA corrigent s'ils le jugent
utile.

--
François L




Avatar
Francois

J'ai testé ta solution ça marche !!! merci !


Bonjour,

J'ai amélioré depuis cette affaire, mais il me reste un doute sur la
stabilité à terme du système. Je vais mettre mon exemple sur le forum
pour que les gourous se prononcent.

Maintenant j'ai un nouveau problème lorsque je copie la feuil1 dans un autre
fichier qui a une quinzaine de feuilles ,j'ai recréé Grah1 et la macro de
Cascade qui fonctionne dans ce nouveau fichier , je l'ai donc sauvegardé
.Lorsque je l'ouvre à nouveau il m'appelle l'ouverture de l'ancien alors que
mon nouveau fichier ne fait référence à aucune macro de l'ancien fichier.Si
je supprime Grah1 le problème disparait.Pour l'instant je tourne en rond sur
ce problème .


Là, je ne vois pas... Si ton classeur ne contient pas de données
confidentielles, met le sur http://cjoint.com/ que l'on essaye de
comprendre le problème.

--
François L

Avatar
Jean-Paul V
Bonjour

Cela n'a rien de confidentiel puisque c'est une compil des différents
graphiques d'Exelabo de Misange.( Merci Excelabo ! )

J'ai mis mon fichier à :
http://cjoint.com/?fglbQTj2z4

à+



J'ai testé ta solution ça marche !!! merci !


Bonjour,

J'ai amélioré depuis cette affaire, mais il me reste un doute sur la
stabilité à terme du système. Je vais mettre mon exemple sur le forum
pour que les gourous se prononcent.

Maintenant j'ai un nouveau problème lorsque je copie la feuil1 dans un autre
fichier qui a une quinzaine de feuilles ,j'ai recréé Grah1 et la macro de
Cascade qui fonctionne dans ce nouveau fichier , je l'ai donc sauvegardé
.Lorsque je l'ouvre à nouveau il m'appelle l'ouverture de l'ancien alors que
mon nouveau fichier ne fait référence à aucune macro de l'ancien fichier.Si
je supprime Grah1 le problème disparait.Pour l'instant je tourne en rond sur
ce problème .


Là, je ne vois pas... Si ton classeur ne contient pas de données
confidentielles, met le sur http://cjoint.com/ que l'on essaye de
comprendre le problème.

--
François L




Avatar
Jean-Paul V
Bonjour François

En parcourant l'ensemble des réponses à mes questions j'ai trouvé une info
que je n'avais pas su interpréter à l'époque , un fichier FindLinks.xla
ajoute un outil à Excel qui résout mon problème voir dans cijoint:
http://cjoint.com/?fhhl5Ii7Zo
Mon fichier modifié devient :
http://cjoint.com/?fhhozwa57l
Je n'ai pas encore vu si la suppression des liens parasites ne créent pas
d'autre problèmes,je paie là ma paresse de créer mon fichier en en copiant
d'autre par édition Fichier Copier.

à +



J'ai testé ta solution ça marche !!! merci !


Bonjour,

J'ai amélioré depuis cette affaire, mais il me reste un doute sur la
stabilité à terme du système. Je vais mettre mon exemple sur le forum
pour que les gourous se prononcent.

Maintenant j'ai un nouveau problème lorsque je copie la feuil1 dans un autre
fichier qui a une quinzaine de feuilles ,j'ai recréé Grah1 et la macro de
Cascade qui fonctionne dans ce nouveau fichier , je l'ai donc sauvegardé
.Lorsque je l'ouvre à nouveau il m'appelle l'ouverture de l'ancien alors que
mon nouveau fichier ne fait référence à aucune macro de l'ancien fichier.Si
je supprime Grah1 le problème disparait.Pour l'instant je tourne en rond sur
ce problème .


Là, je ne vois pas... Si ton classeur ne contient pas de données
confidentielles, met le sur http://cjoint.com/ que l'on essaye de
comprendre le problème.

--
François L




Avatar
Francois L
(...)

Bonjour,

Ton classeur contient des liens vers d'autres classeurs et la macro pour
la série 2 contenait encore un appel vers Feuil1 (inexistante dans le
classeur). Je pense que c'est de là que venait ton problème.

J'ai modifié le code de la macro de Graph1 car le comportement n'était
pas vraiment celui attendu, en tout cas par moi ;-))) Tel qu'il est
maintenant je trouve que cela fonctionne mieux pour l'effacement des
graphiques secondaires sans passer par la zone de texte que tu as créée.

Version modifiée : http://cjoint.com/?fhhz7kyoNU

--
François L
Avatar
Jean-Paul V
Bonjour François
En effet cette nouvelle version est meilleure.
Merci

"Francois L" wrote:

(...)

Bonjour,

Ton classeur contient des liens vers d'autres classeurs et la macro pour
la série 2 contenait encore un appel vers Feuil1 (inexistante dans le
classeur). Je pense que c'est de là que venait ton problème.

J'ai modifié le code de la macro de Graph1 car le comportement n'était
pas vraiment celui attendu, en tout cas par moi ;-))) Tel qu'il est
maintenant je trouve que cela fonctionne mieux pour l'effacement des
graphiques secondaires sans passer par la zone de texte que tu as créée.

Version modifiée : http://cjoint.com/?fhhz7kyoNU

--
François L