légende exel

10/01-2003 à 17:55 (?) je travail sur un graphique issus d'un tableau croisé dynamique. ce graphique (représentation en camembert), grace au TCD peut changer en fonction des séries que je veux visualiser. Mais la légende change à chaque fois. Par exemple j'ai 10 séries, automatiquement excel leur attribue une couleur, rose série 1, bleu série 2 etc.., si je n'utilise que deux séries, la deux et la quatre par exemple, la série deux sera rose et la quatre sera bleu. Hors j'aimerais fixer une couleur pour chaque série sans avoir à modifier à chaque fois la couleur de la légende, je veux que la série 1 reste rose et que la série deux reste bleu etc...Est-ce possible? [°)]


10/01-2003 à 22:31on peut créer une macro qui va repeindre ton graphique suivant le contenu de l'étiquette (qui elles sont statiques en principe)... ce qui pourrait donner ceci

Sub macro1()
ActiveSheet.ChartObjects("Graphique 9").Activate 'Pour activer le bon graphique
If ActiveChart.SeriesCollection(1).Points(5).DataLabel.Text = "pomme" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(5).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 33 'on y place une couleur de son choix
.Pattern = xlSolid
End With
End If
End Sub

ici, je n'ai pris qu'un seul quartier pour une question de clarté, tu peux bien sûr ajouter des séquences de IF pour chaque quartier de ton graphique

A toi aussi de personnaliser le nom du graphique


----------
Bipbipcoyote image


légende exel
13/01-2003 à 20:30merci bipbipcoyote
j'ai essayé d'écrire cette macro, pour tous mes quartiers, ils sont tous devenus de la même couleur, la couleur que j'avais choisi dans mon dernier If Then.
Par la suite j'ai testé avec des if then else, cela n'a pas fonctionné non plus. Pire les couleurs n'ont pas changé du tout. il faut dire que je ne connais pas visual basic.
Mon tableau croisé dynamique est composé de 15 lignes, et 10 colonnes, par exemple 15 types de fruits, et 10mois de l'année, avec une colonne somme de tous les mois. Dans mon graphe j'affiche le mois de janvier, et j'ai un camembert qui me présente en % la production de fruits de ce mois, par exemple des mandarines 20%, des oranges 30% des pommes 10% des poires 5%, des noix de coco 45%. Au mois de juillet par contre j'ai des tomates, des pommes des noix de coco etc..Sur l'année tous les fruits apparaissent. Mon problème est donc de pouvoir utilisé une représentation graphique en camenbert pour chaque mois de l'année et pour le total de l'année avec toujours les même couleur de camembert pour chaque fruit, les pommes : quartier de camembert vert, les tomates : rouges etc..
Voilà plus clairement le problème que jai, pour chaque mois mes couleur de mon graphe change puisque le nombre de fruits present chaque mois n'est pas le même, excel attribue automatiquement des couleurs de légende dans l'ordre que l'on peut choisir dans "préférence d'excel"

13/01-2003 à 20:33ok, je vais tenter de réaliser un petit dossier complet là dessus... wait and see


----------
Bipbipcoyote image


13/01-2003 à 23:37Petite constatation...

Mon tableau croisé dynamique est composé de 15 lignes, et 10 colonnes, par exemple 15 types de fruits, et 10mois de l'année

et si tu faisais directement un tableau comme celui ci, car je ne vois pas l'intérêt de faire un tableau croisé car rien ne t'empêche de mettre en colonne TOUS les légumes et fruits pour TOUS les mois, la différence c'est que tu peux avoir des cellules qui ne contiennent RIEN ou 0 (Zéro)...Avantage, c'est que leur emplacement dans le graphique est réservé....et donc leur couleur...Pas besoin alors de macro, le graphe peut être un peu plus confus, il est vrai....

Mais bon, c'est à toi de voir.... voici une macro un peu plus complète..Elle reprend les lignes d'instructions pour deux quartiers qui pourraient concerner soit des pommes, des poires ou des prunes...Pour en faire d'autres, ce qu'il faut modifier :
1. le nom du graphique : le mien s'appelle "Graphique 2" au cas où il te prend l'envie d'en faire pour février, mars, etc....
2. l'index de "šPoints" : qui en fait est le N°Ordre du Quartier
3. la variable de l'étiquette : 4 premières lettres.. tu dois réclamer dans ton graphe les étiquettes et les % , c'est le seul moyen que j'ai trouvé pour identifier le quartier
4. Par type de fruit , tu attribues une couleur avec colorindex
5. Comme on n'est pas sensé connaître le type de fruit sur le quartier exploré, il faut donc tester chaque quartier avec if ..then..else..pour déterminer la couleur à employer (on aurait pu aussi utiliser un Select Case...)

Sub macro1()
ActiveSheet.ChartObjects("Graphique 2").Activate 'Pour activer le bon graphique

If Left(ActiveChart.SeriesCollection(1).Points(1).DataLabel.Text, 4) = "Pomm" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(1).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 33 'on y place une couleur de son choix
.Pattern = xlSolid
End With

ElseIf Left(ActiveChart.SeriesCollection(1).Points(1).DataLabel.Text, 4) = "Poir" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(1).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 6 'on y place une couleur de son choix
.Pattern = xlSolid
End With

ElseIf Left(ActiveChart.SeriesCollection(1).Points(1).DataLabel.Text, 4) = "Prun" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(1).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 7 'on y place une couleur de son choix
.Pattern = xlSolid
End With
End If
'--------------------------------------- quartier suivant ---------------------------
If Left(ActiveChart.SeriesCollection(1).Points(2).DataLabel.Text, 4) = "Pomm" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(2).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 33 'on y place une couleur de son choix
.Pattern = xlSolid
End With
ElseIf Left(ActiveChart.SeriesCollection(1).Points(2).DataLabel.Text, 4) = "Poir" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(2).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 6 'on y place une couleur de son choix
.Pattern = xlSolid
End With

ElseIf Left(ActiveChart.SeriesCollection(1).Points(2).DataLabel.Text, 4) = "Prun" Then 'je récupére le nom de l'étiquette
ActiveChart.SeriesCollection(1).Points(2).Select 'On sélectionne le quartier à recolorer
With Selection.Interior
.ColorIndex = 7 'on y place une couleur de son choix
.Pattern = xlSolid
End With
End If
End Sub


----------
Bipbipcoyote image


légende exel
13/01-2003 à 23:57membres.lycos.fr/bipbipcoyote/Excel/GrapheEnCouleur/Fichiers/GraphiqueEnCouleur.xls Exemple à télécharger


----------
Bipbipcoyote image


14/01-2003 à 18:21merci pour ton aide.

(Je suis obligé de travailler avec un tableau croisé dynamique car ce tableau me permet de faire un tri et un comptage de données, cette méthode est très rapide. Avant cela pour un résultat équivalent j'étais obligé d'utiliser la fonction fréquence et je devais tripatouiller mes données en amont de cette fonction.)

Maintenant ça marche.
Pour cela j'ai du mettre mon graphe dans une feuille excel, ensuite plutôt que de réécrire les if Then Else pour chaque quartier, j'ai introduit un entier i, et la fonction For i=1 to 19 next i, j'ai 19 quartiers de camembert au total. Seul hic, mais de faible importance, lorsqu'il n'y a pas 19 quartiers la macro se plante. Toutefois pour les quartiers présents les couleurs sont celles voulues. Ce bug ne me gène pas trop, à moins que je ne veuille commercialiser ce programme au quel cas je serais obligé de te verser des royalties.
encore merci

14/01-2003 à 18:41essaie d'ajouter en début de ta macro ...juste après Sub.....()

On Error Resume Next

ce qui signifie en gros, "Mon cher Excel, si tu trouves une erreur dans le déroulement des instructions, ne t'arrêtes pas et passes à la suivante sans te préoccuper du reste"....

autre chose pour provoquer automatiquement la macro (donc la modification de ton graphe) tu peux dans le VBA de la feuille utiliser une macro qui appellera celle dans le module avec le code

Private Sub Worksheet_Change(ByVal Target As Range)
Call NomDeLaMacro
End Sub

ce qui signifie : "Chaque fois que le contenu d'une cellule de la feuille change, tu APPELLES (CALL) une macro appellée NomDeLaMacro"

j'ai introduit un entier i, et la fonction For i=1 to 19 next i

oui, il y a plusieurs possibilités pour parvenir à ses fins...Ici l'optimisation du code n'est pas trop importante, il y a tellement peu de données à traiter....mais ta solution est plus "correcte"


----------
Bipbipcoyote image


légende exel
15/01-2003 à 20:30merci encore pour tes conseils bipbipcoyote. J'ai fait ce que tu m'as suggeré, et comme l'erreur se produisait sur le dernier quartier, j'ai mis

on error goto

, qui renvoie à une boite de dialogue indiquant que le job est fini.
J'ai essayé de faire fonctionner cette macro( couleur pour les quartiers) pour ce qu'excel appelle "histogramme", et cela n'a pas fonctionné. Ceci est sans doute du au fait que les données sont sous forme de série (

serie "pomme", pointer"janvier").


Cet histogramme (en %, et cumulatif) représente tous les mois de l'année et la quantité de chaque fruit. Pour le mois de janvier j'ai des pommes, des poires etc sur une barre. Pour les quartiers j'avais

série "somme", pointer "pomme"

.

16/01-2003 à 01:15ok encore une petite astuce..... lorsque tu as des difficultés de cet ordre, il suffit, de lancer l'enregistreur de macro et de travailler avec la souris, tu sélectionnes l'objet.... de cette manière l'enregistreur de macro va écrire dans un module une ligne de commande comme

NomdeLObjet.select

puis tu arrêtes l'enregistreur de macro, tu récupères les noms ou variables ou même parfois la fonction complète ou une série d'actions et avec un copier-coller, tu l'incorpores dans ton propre code.... il te reste à effacer cette macro qui ne veut rien dire et qui ne te sert plus à rien

Petit exemple : celui du dessus... En fait, tout ce que j'ai fait; c'est de prendre un quartier et de le recolorer, ceci pendant que l'enregistreur tournait...une action toute simple, j'ai arrêté l'enregistreur , foncé dans le module, examiné le code, l'épurer et le débarasser des lignes inutiles (par exemple, parfois , on n'est pas obligé de sélectionner un objet pour travailler dessus, si tu as les bonnes références, le code s'applique) et puis c'est tout...

donc dans ton dernier problème, réalises la même chose que moi, colories un morceau de la barre du graphique - enregistreur de macro tournant et tu auras son nom


----------
Bipbipcoyote image


17/01-2003 à 11:33Merci encore. J'ai perfectionné mes histogrammes et mes camemberts, je remplis la légende sur une feuille et j'attribue la couleur de légende aux cellules. Ensuite dans mes conditions je vais chercher cette couleur. Par exemple pour l'histogramme.

Dim i As Integer
For i = 1 To 25
If ActiveChart.SeriesCollection(i).Name = "pomme" Then
Sheets("Légende").Select
Range("A1").Select
Cells.Find(What:="pomme", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Select
couleur = ActiveCell.Interior.ColorIndex
Sheets("fruits").ChartObjects("Graphique 1").Activate
ActiveChart.SeriesCollection(i).Select
With Selection.Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
Selection.Shadow = False
Selection.InvertIfNegative = False
With Selection.Interior
.ColorIndex = couleur 'on y place la couleur de la cellule
.Pattern = xlSolid
End With
ElseIf ActiveChart.SeriesCollection(i).Name = "poire" Then
Sheets("Légende").Select
Range("A1").Select
Cells.Find(What:="10", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Select
couleur = ActiveCell.Interior.ColorIndex
Sheets("fruits").ChartObjects("Graphique 1").Activate
ActiveChart.SeriesCollection(i).Select
With Selection.Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
Selection.Shadow = False
Selection.InvertIfNegative = False
With Selection.Interior
.ColorIndex = couleur
.Pattern = xlSolid
End With


ceci me permet de légender mes graphiques sans toucher à la macro.

Le post anonyme est désactivé.
Merci de vous identifier

« Forum technique (liste des messages)11 enregistrements / page 1/1

À la Une de MemoClic

Le saviez vous ? Vous pouvez installer cette bannière ↑ gratuitement sur votre site !