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

généraliser proc pour graphique

9 réponses
Avatar
J
Bonjour
J'ai une procédure dans un module qui modifie la couleur d'un
histogramme en fonction des valeurs d'un tableau. Cette proc. est
commandée par l'événement change de la feuille.

Mais, si je recopie cette feuille, bien sûr le graphique change de nom
et la macro ne fonctionne plus.

Peut-on, et comment svp, généraliser le code??

(Une autre petite question, je ne retrouve pas la méthode pour connaître
le nom du graphique, :-[, faut faire comment déjà??)


Merci beaucoup

J@@

Voici le code entier (aimablement modifié grâce à FrançoisL)
'--------------------------------------------------------------
Sub Couleur()
Dim lngIndex As Long
On Error Resume Next
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Application.ScreenUpdating = False
With ActiveChart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, lngIndex)
With .Points(lngIndex)
If a < 1 Then
.Interior.Color = RGB(60, 200, 80)
ElseIf a < 2 Then
.Interior.Color = RGB(230, 180, 70)
ElseIf a <= 3 Then
.Interior.Color = RGB(240, 20, 20)
Else
.Interior.Color = RGB(255, 255, 255)
End If
End With
Next
End With
Range("b2").Select
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------

9 réponses

Avatar
J
Re bonjour
La proc initiale fontionne bien sur la feuille1, mais si je duplique
cette feuille la macro ne foonctionne plus car le graphique a changé de nom.

Voici une modif, qui fonctionne sur les feuilles dupliquées depuis la
feuille1, *mais* elle ne fonctionne pas sur la feuille1.
Peut-on, svp, me dire pourquoi? et corriger le tir pour que cela
fonctionne tout le temps??

'******
' ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
'remplacée par :
If ActiveSheet.ChartObjects.Count > 0 Then
ActiveSheet.ChartObjects(ActiveSheet.ChartObjects.Count).Activate
End If
'******
Merci
@+
J@@

Bonjour
J'ai une procédure dans un module qui modifie la couleur d'un
histogramme en fonction des valeurs d'un tableau. Cette proc. est
commandée par l'événement change de la feuille.

Mais, si je recopie cette feuille, bien sûr le graphique change de nom
et la macro ne fonctionne plus.

Peut-on, et comment svp, généraliser le code??

(Une autre petite question, je ne retrouve pas la méthode pour connaître
le nom du graphique, :-[, faut faire comment déjà??)


Merci beaucoup

J@@

Voici le code entier (aimablement modifié grâce à FrançoisL)
'--------------------------------------------------------------
Sub Couleur()
Dim lngIndex As Long
On Error Resume Next
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Application.ScreenUpdating = False
With ActiveChart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, lngIndex)
With .Points(lngIndex)
If a < 1 Then
.Interior.Color = RGB(60, 200, 80)
ElseIf a < 2 Then
.Interior.Color = RGB(230, 180, 70)
ElseIf a <= 3 Then
.Interior.Color = RGB(240, 20, 20)
Else
.Interior.Color = RGB(255, 255, 255)
End If
End With
Next
End With
Range("b2").Select
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------


Avatar
Francois L

Bonjour,

Mais qu'est ce qu'ils font les gourous... ils ne répondent plus ! il n'y
a pourtant pas de concile en ce moment.

Nommer un graphique incorporé à la main :
maintenir la touche Ctrl enfoncée, sélectionner le graphique, entrer un
nom dans la zone des noms et valider.


'-------------------------------------
' Nommer un graphique incorporé par VBA
' A adapter

Sub zozo()
With ActiveSheet.ChartObjects.Item(1)
.Chart.Parent.Name = "jj"
End With
End Sub

'--------------------------------------


'-------------------------------------------------
' Récupérer le nom d'un graphique incorporé par VBA
' A adapter

Sub zaza()
With ActiveSheet.ChartObjects.Item(1)
a = .Chart.Parent.Name
End With
MsgBox a
End Sub

'-----------------------------------------------------

Testé sous XL 2000, en espérant que cela t'aide.

--
François L




Bonjour
J'ai une procédure dans un module qui modifie la couleur d'un
histogramme en fonction des valeurs d'un tableau. Cette proc. est
commandée par l'événement change de la feuille.

Mais, si je recopie cette feuille, bien sûr le graphique change de nom
et la macro ne fonctionne plus.

Peut-on, et comment svp, généraliser le code??

(Une autre petite question, je ne retrouve pas la méthode pour connaître
le nom du graphique, :-[, faut faire comment déjà??)


Merci beaucoup

J@@

Voici le code entier (aimablement modifié grâce à FrançoisL)
'--------------------------------------------------------------
Sub Couleur()
Dim lngIndex As Long
On Error Resume Next
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Application.ScreenUpdating = False
With ActiveChart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, lngIndex)
With .Points(lngIndex)
If a < 1 Then
.Interior.Color = RGB(60, 200, 80)
ElseIf a < 2 Then
.Interior.Color = RGB(230, 180, 70)
ElseIf a <= 3 Then
.Interior.Color = RGB(240, 20, 20)
Else
.Interior.Color = RGB(255, 255, 255)
End If
End With
Next
End With
Range("b2").Select
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------


Avatar
cb60

Bonjour
J'ai une procédure dans un module qui modifie la couleur d'un
histogramme en fonction des valeurs d'un tableau. Cette proc. est
commandée par l'événement change de la feuille.

Mais, si je recopie cette feuille, bien sûr le graphique change de nom
et la macro ne fonctionne plus.

Peut-on, et comment svp, généraliser le code??

(Une autre petite question, je ne retrouve pas la méthode pour connaître
le nom du graphique, :-[, faut faire comment déjà??)


Merci beaucoup

J@@

Voici le code entier (aimablement modifié grâce à FrançoisL)
'--------------------------------------------------------------
Sub Couleur()
Dim lngIndex As Long
On Error Resume Next
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Application.ScreenUpdating = False
With ActiveChart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, lngIndex)
With .Points(lngIndex)
If a < 1 Then
.Interior.Color = RGB(60, 200, 80)
ElseIf a < 2 Then
.Interior.Color = RGB(230, 180, 70)
ElseIf a <= 3 Then
.Interior.Color = RGB(240, 20, 20)
Else
.Interior.Color = RGB(255, 255, 255)
End If
End With
Next
End With
Range("b2").Select
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------



Avatar
cb60
Bonjour
remplace cette ligne:
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Par
ActiveSheet.ChartObjects(1).Activate 'la ligne en cause


Bonjour
J'ai une procédure dans un module qui modifie la couleur d'un
histogramme en fonction des valeurs d'un tableau. Cette proc. est
commandée par l'événement change de la feuille.

Mais, si je recopie cette feuille, bien sûr le graphique change de nom
et la macro ne fonctionne plus.

Peut-on, et comment svp, généraliser le code??

(Une autre petite question, je ne retrouve pas la méthode pour connaître
le nom du graphique, :-[, faut faire comment déjà??)


Merci beaucoup

J@@

Voici le code entier (aimablement modifié grâce à FrançoisL)
'--------------------------------------------------------------
Sub Couleur()
Dim lngIndex As Long
On Error Resume Next
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Application.ScreenUpdating = False
With ActiveChart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, lngIndex)
With .Points(lngIndex)
If a < 1 Then
.Interior.Color = RGB(60, 200, 80)
ElseIf a < 2 Then
.Interior.Color = RGB(230, 180, 70)
ElseIf a <= 3 Then
.Interior.Color = RGB(240, 20, 20)
Else
.Interior.Color = RGB(255, 255, 255)
End If
End With
Next
End With
Range("b2").Select
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------



Avatar
J
Bonjour François
Ah la la, ce n'est plus ce que c'était! Ils font le pont maintenant! On
aura tout vu ;-)

Merci pour l'aide. Je n'ai pas résolu le problème, mais compris d'où ça
vient:
Dans ma feuille XL2000 il y a une image groupée avec le graphique.

Quand c'est dégroupé : la macro fonctionne et ta macro zaza récupère le
nom du graphique, mais quand c'est groupé, la macro ne fonctionne plus,
et ta macro zaza me répond : Erreur 1004,impossible de lire la propiété
Item de la classe ChartObjects.

Que faire? Mon image c'est une légende adaptée, et si elle n'est pas
groupée, il y a risques de fausses manip, de plus, si on clique dasn le
graphique pour l'imprimer, on n'imprime pas ma légende...

Merci pour tes lumières

PS : c'est bientôt le Beauj** Nouv**? Mgr est dans les chais?

Amicalement
J@@



Bonjour,

Mais qu'est ce qu'ils font les gourous... ils ne répondent plus ! il n'y
a pourtant pas de concile en ce moment.

Nommer un graphique incorporé à la main :
maintenir la touche Ctrl enfoncée, sélectionner le graphique, entrer un
nom dans la zone des noms et valider.


'-------------------------------------
' Nommer un graphique incorporé par VBA
' A adapter

Sub zozo()
With ActiveSheet.ChartObjects.Item(1)
..Chart.Parent.Name = "jj"
End With
End Sub

'--------------------------------------


'-------------------------------------------------
' Récupérer le nom d'un graphique incorporé par VBA
' A adapter

Sub zaza()
With ActiveSheet.ChartObjects.Item(1)
a = .Chart.Parent.Name
End With
MsgBox a
End Sub

'-----------------------------------------------------

Testé sous XL 2000, en espérant que cela t'aide.



Avatar
J
Bonjour cb60
Merci pour ta proposition
en fait j'ai identifié le problème : c'est que j'ai groupé le graphique
avec une image(cf. réponse détaillée à François)
mais pas encore trouvé de solution.
merci
J@@


Bonjour
remplace cette ligne:
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Par
ActiveSheet.ChartObjects(1).Activate 'la ligne en cause


Bonjour
J'ai une procédure dans un module qui modifie la couleur d'un
histogramme en fonction des valeurs d'un tableau. Cette proc. est
commandée par l'événement change de la feuille.

Mais, si je recopie cette feuille, bien sûr le graphique change de nom
et la macro ne fonctionne plus.

Peut-on, et comment svp, généraliser le code??

(Une autre petite question, je ne retrouve pas la méthode pour connaître
le nom du graphique, :-[, faut faire comment déjà??)


Merci beaucoup

J@@

Voici le code entier (aimablement modifié grâce à FrançoisL)
'--------------------------------------------------------------
Sub Couleur()
Dim lngIndex As Long
On Error Resume Next
ActiveSheet.ChartObjects("Graphique 1").Activate 'la ligne en cause
Application.ScreenUpdating = False
With ActiveChart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
a = Application.WorksheetFunction.Index(.Values, lngIndex)
With .Points(lngIndex)
If a < 1 Then
.Interior.Color = RGB(60, 200, 80)
ElseIf a < 2 Then
.Interior.Color = RGB(230, 180, 70)
ElseIf a <= 3 Then
.Interior.Color = RGB(240, 20, 20)
Else
.Interior.Color = RGB(255, 255, 255)
End If
End With
Next
End With
Range("b2").Select
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------





Avatar
Francois L
Re,

Bon là, il y a problème qui dépasse mes compétences. Je vois une
solution de contournement mais je ne sais pas si ça te convient : mettre
les graphiques dans des feuilles graphiques et le calcul des couleurs
sur le Activate des feuilles.

--
François L

Bonjour François
Ah la la, ce n'est plus ce que c'était! Ils font le pont maintenant! On
aura tout vu ;-)

Merci pour l'aide. Je n'ai pas résolu le problème, mais compris d'où ça
vient:
Dans ma feuille XL2000 il y a une image groupée avec le graphique.

Quand c'est dégroupé : la macro fonctionne et ta macro zaza récupère le
nom du graphique, mais quand c'est groupé, la macro ne fonctionne plus,
et ta macro zaza me répond : Erreur 1004,impossible de lire la propiété
Item de la classe ChartObjects.

Que faire? Mon image c'est une légende adaptée, et si elle n'est pas
groupée, il y a risques de fausses manip, de plus, si on clique dasn le
graphique pour l'imprimer, on n'imprime pas ma légende...

Merci pour tes lumières

PS : c'est bientôt le Beauj** Nouv**? Mgr est dans les chais?

Amicalement
J@@



Bonjour,

Mais qu'est ce qu'ils font les gourous... ils ne répondent plus ! il
n'y a pourtant pas de concile en ce moment.

Nommer un graphique incorporé à la main :
maintenir la touche Ctrl enfoncée, sélectionner le graphique, entrer
un nom dans la zone des noms et valider.


'-------------------------------------
' Nommer un graphique incorporé par VBA
' A adapter

Sub zozo()
With ActiveSheet.ChartObjects.Item(1)
..Chart.Parent.Name = "jj"
End With
End Sub

'--------------------------------------


'-------------------------------------------------
' Récupérer le nom d'un graphique incorporé par VBA
' A adapter

Sub zaza()
With ActiveSheet.ChartObjects.Item(1)
a = .Chart.Parent.Name
End With
MsgBox a
End Sub

'-----------------------------------------------------

Testé sous XL 2000, en espérant que cela t'aide.





Avatar
J
RE bonjour(soir)
Bon je vais essayer cela.

Mais si j'essayais de faire une légende "en légende" et plus en image.
Ce que je voulais c'est que mes codes couleurs soient sur le graphique
avec le décodage : vert = bon, etc
Mais comme les données sont imprévisibles, je me retrouve des fois avec
rouge=bon (et la cela ne va plus)
Faudrait-y que je rajoute une colonne de données bidons, dont les
valeurs sont fixes?

J'ai regardé chez Peltier & co, mais mon écran et mon cerveau ont failli
fondre :-[

Hummm, à fouiller. Je n'ai pas fait de pont (depuis le début de l'année)
et mes neurones sont un peu ramollis.

As-tu un peu de 220V?
merci
@+
J@@


Re,

Bon là, il y a problème qui dépasse mes compétences. Je vois une
solution de contournement mais je ne sais pas si ça te convient : mettre
les graphiques dans des feuilles graphiques et le calcul des couleurs
sur le Activate des feuilles.



Avatar
J
Bon, voila:
J'ai viré mon image, source de problèmes, et ajouté 4 colonnes pleines
de zéros, dont je me sers des entêtes pour faire une jolie légende.
Et maintenant tout va bien.
merci encore
@+
J@@

RE bonjour(soir)
Bon je vais essayer cela.

Mais si j'essayais de faire une légende "en légende" et plus en image.
Ce que je voulais c'est que mes codes couleurs soient sur le graphique
avec le décodage : vert = bon, etc
Mais comme les données sont imprévisibles, je me retrouve des fois avec
rouge=bon (et la cela ne va plus)
Faudrait-y que je rajoute une colonne de données bidons, dont les
valeurs sont fixes?

J'ai regardé chez Peltier & co, mais mon écran et mon cerveau ont failli
fondre :-[

Hummm, à fouiller. Je n'ai pas fait de pont (depuis le début de l'année)
et mes neurones sont un peu ramollis.

As-tu un peu de 220V?
merci
@+
J@@


Re,

Bon là, il y a problème qui dépasse mes compétences. Je vois une
solution de contournement mais je ne sais pas si ça te convient :
mettre les graphiques dans des feuilles graphiques et le calcul des
couleurs sur le Activate des feuilles.