Coucou,
Question toute simple, peut on prendre les données d'un graphique à partir de 2 feuilles différentes? (si oui comment? :roll: )
Version imprimable
Coucou,
Question toute simple, peut on prendre les données d'un graphique à partir de 2 feuilles différentes? (si oui comment? :roll: )
oui ... de la même maniére que lorsque tu créé un graphique.. dont les données sont dans la même feuilles... , rajoute des "séries" venant de ton autre feuille... pour avoir une idée du code généré commence par activer l'enregistreur de macro avant d'éffectuer la manip..;)
Ok ca roule :D
par contre, en fait les données que je voudrais rajouter sont des seuils, par exemple 0,4, je n'ai donc qu'une valeur et lorsque je la prend en nouvelle serie, il ne me met qu'un point (normal...) moi je voudrais qu'il me trace en fait la droite d'équation y=0,4 (voir la droite et non un point)
et là bah je trouve pas comment... une idée pour ca petit renard futé? :mouarf:
Moi j'ai une idée :mrgreen:
Dans ton tableau ou tu as les sources de ton graphique, tu rajout eune colonne (ou ligne je sais pas comment sont tes données), ou tu met 0,4 sur toutes les colonnes (ou lignes) et tu créé une nouvelle série avec comme plage celle ou tu as ton seuil :mrgreen:
Je sais pas si je me suis fait comprendre :?
sisi j'ai compris.
si j'ai 4 valeur je met 0,4 0,4 0,4 0,4
mais le souci est que l'utilisateur peut ajouter des données dans le fichier et il y a mise à jour automatique des graphiques (donc jdevrait ajouter un 0,4 encore..)
pour le moment ces seuils sont dans une feuille cachée et sont modifiable à partir d'un userform par l'utilisateur. j'ai ca en gros :
Citation:
Nom1 seuil1
[rien] seuil2
Nom2 seuil3
[rien] seuil4
etc.. et l'utilisateur doit ajouter un valeur par jour (dans une autre feuille)
donc je devrais ici modifier ma strcture car au boute des 365 jours, les 256 colonnes seront depassées...(nom1 seuil1 seuil1 seuil1 ....) si l'utilisateur change un seuil alors y'a plus de changement à effectuer etc... meme si ca ne prendra pas enormement plus de temps je pense :P
le souci est que je devrais modifier toute ma structure de stockage des données (et de recuperation pour l'affichage dans le userform) donc je prefere trouver une solution mon "bricolage"
tu peux surement le faire par macro la mise à jour non ? tu met dans la cellule "=0,4" et tu tire la formule quand otn tableau est mis à jour..Enfin après ça dépend de ce que tu as a faire :D
Je te dis ça parce que j'ai e le meme cas, j'avais un tableau et a droite du tableau j'ai rajouté une colonne avec une valeur fixe, et touss les jour sune ligne se rajoute au tableau donc je dois tirer ma dernière colonne pour que la graph se mette à jour :D
j'ai trouvé une piste
j'ajoute une courbe de tendance à ma courbe (qui sera mon seuil), je vais dans l'onglet "Options" je coche "Coupe l'axe horizontal X à" je met 0,04 et hop ca me trace ma droite, faut encore que je vois avec l'enregistreur comment modifier cette valeur ! ;)
pourquoi tu traces pas tout simplement une droite en rentrant ce code :
avec Xmin ta valeur min pour X et Xmax ta valeur maxCode:
1
2
3 ActiveChart.SeriesCollection(1).XValues = "={Xmin,Xmax}" ActiveChart.SeriesCollection(1).Values = "={0.4,0.4}"
Oula,
oubliez ce que j'ai dit juste avant c'est nimporte quoi :oops:
ca me parraissait bizarre aussi d'apres le nom... "coupe l'axe des x", j'ai pas fait gaffe, j'ai mi 0,4 et ca tombait pile sur y=0,4 mais c'etait un pur hasard...
jvais tester ton idée comcombre ! ;)
"Impossible de définir la propriété XValues de la classe Series"
:cry:
T'as bien fait gaffe de pas mettre :
mais plutôtCode:seriescollection(1)
??Code:seriescollection(Nom de ta série)
Je dis ça à tt hasard parceque des fois on fait des erreurs bêtes :P
Sinon je vois pas pkoi ça marcherait pas sachant que chez moi ça tourne très bien...
Juste un truc dans Xmin et Xmax tu dois mettre des valeurs pas des range.
Et pi aussi fait gaffe si ton Xmin et ton Xmax st des décimaux alors ça va se compliquer. Vu que tu veux juste une représentation graphique, je te conseille de mettreetCode:Fix(Xmin)
pour virer les virgules (because ce con de VBA confond "," et "." ds ce cas là :P )Code:Fix(Xmax)
Ceci dit si tu veux j'ai le code pour qu'il prenne en compte le chiffre à virgule
Uop,
jvois aps trop ce que tu veux.
au niveau de la mise à jour de mon graph j'ai ca :
(le code devrait te rappeler quelquechose :lol: )Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub MAJ_GRAPH(ByVal DerniereLigne As Long, ByVal NumeroGraph As Byte) Sheets(1).Select NoCol1 = 1 NoLigne1 = 5 NoCol2 = 1 NoLigne2 = DerniereLigne plage = Sheets(1).Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2)).Address NoCol1 = 2 * NumeroGraph NoLigne1 = 5 NoCol2 = 2 * NumeroGraph + 1 NoLigne2 = DerniereLigne plage = plage + "," + Sheets(1).Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2)).Address Charts(NumeroGraph).Select ActiveChart.SetSourceData Source:=Sheets(1).Range(plage), PlotBy:=xlColumns End Sub
et les données source de mes courbes sont comme ca
=Données!$A$5:$A$8;Données!$D$5:$E$8
Mouarf je me perd là j'ai fait nimporte quoi je pense
(ta pas interet à dire comme dab vilain dodo, jte vois venir ! :evilred: )
en fait là je t'ai donné le code qui trace mes courbes ( et non mes seuils)
pour les suils moi j'avais jsu mis ca dans une procedure
:oops: :oops:Code:
1
2 ActiveChart.SeriesCollection(1).XValues = "={Xmin,Xmax}" ActiveChart.SeriesCollection(1).Values = "={0.4,0.4}"
Je m'endors là j'ai trop mangé ce midi :?
jveux bien un exemple entier comcombre ;)
lol effectivement si t'avais mis juste ça et ben je crois (en fait non je suis sûr ;) ) que c'est normal que ça plante :lol:
Ton graphique doit bien avoir un nom?? On dira que c'est "graph", le code serait alors le suivant :
Tu auras bien compris que tu dois rentrer tes propres valeurs de xmin et xmax.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Sub Test() Dim XmiN, XmaX As Double Dim NbSeries, J As Integer XmiN = 127.35 XmaX = 289.3 ActiveSheet.ChartObjects("graph").Activate NbSeries = ActiveChart.SeriesCollection.Count For J = 1 To NbSeries If ActiveChart.SeriesCollection(J).Name = "Seuil" Then ActiveChart.SeriesCollection("Seuil").Delete Exit For End If Next J ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(NbSeries + 1).Name = "Seuil" ActiveChart.SeriesCollection("Seuil").XValues = "={" & Fix(XmiN) & "," & Fix(XmaX) & "}" ActiveChart.SeriesCollection("Seuil").Values = "={0.4,0.4}" End Sub
Ce code détecte si une série "Seuil" existe déjà et si oui l'efface, puis rajoute une série appelée "Seuil" sur ton graphique.
Sinon j'ai trouvé comment faire à la main (c'est une astuce de bricolage je trouve mais bon)
mais ca ne me satisfait pas entierement car là j'ai une droite qui aprcourt tout le graphique (là n'est pas le probleme) mais pour ca je doit modifier la graduation de l'axe secondaire de X et moi j'ai 2 courbe sur mon graph (plus les 2 seuils que je veux mettre) et leurs valeurs sont différentes donc j'utilisait 2 axe des Y pour avoir 2 graduations différentes, or maintenant lorsque j'associe ma courbe à l'axe secondaire, elle parcourt tout le graph (comme les droites des seuils) et l'axe des Y (secondaire) ne pernd plus ses valeurs en fonction de celles de ma seclonde courbe qui lui est ratachée (bref c'est la merde :lol: )Citation:
1. Entre dans deux cellules adjacentes la valeur du seuil (cette valeur peut
être le résultat d'une formule il faut juste avoir la même valeur dans deux
cellules voisines)
2. Copie ces cellules, sélectionne le graphique
3. Collage spécial pour ajouter la nouvelle série (par colonnes ou par lignes
suivant leur agencement). (a ce stade pas de ligne c'est normal).
4. Sélectionne la nouvelle série, clic droit
5. Va dans graphique/type de graphique et sélectionne une ligne sans marques
de valeurs. A ce stade, tu obtiens un bout de ligne horizontale à la bonne
hauteur mais qui ne va pas d'un coté à l'aitre de ton graphe (pas beau)
6. Sélectionne la série
7. Va dans le menu format/Format des séries sélectionnées/ Onglet des axes
et sélectionne axe secondaire
8. Sélectionne le graphique
9. Dans le menu graphique/options du graphique/onglet des axes
10. coche axe secondaire des X
11. décoche axe secondaire des Y
12.Sélectionne l'axe secondaire des X
13. dans le menu format/ Format de l'axe sélectionné/échelle
14. décoche toutes les options concernant les croisement des axes
15. va dans l'onglet motifs
16. Vérifie que "aucun" est sélectionné pour les marques de graduations
principales, secondaires, les étiquettes et l'axe
Mon graph avant :
Pièce jointe 3039
Mon graph avec seuil sans selectionner l'axe secondaire (on voit mal la courbe cpu car les valeur sont plus petites et laxe des Y secondaire prend des valeur je ne sais pas comment...)
Pièce jointe 3042
et si je choisi l'axe secondaire pour ma seconde courbe j'ai ca
Pièce jointe 3040
donc pas super
Tu as essayé ce que je t'ai filé?
ok comcombre je vasi tester ca :D
Moi j'aurai plutot dit : parce que ça t'arrive ? :mrgreen: m'enfin c'est personnel a moi meme :mrgreen:Citation:
Envoyé par Elstak
Sinon pour ton seuil, tu veux pas utiliser une dernière colonne ou tu mettra toujours la meme valeur ?
hmmm désolé si ces questions sont connes mais là j'ai 1/4 de cerveau qui n'est deja pas performant quand je l'ai en entier :lol:
j'ai modifié comme ca. J'ai une erreur sur la ligne en rouge :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Sub Test() Dim XmiN, XmaX As Double Dim NbSeries, J As Integer XmiN = 0.04 XmaX = 0.04 ActiveSheet.ChartObjects("ev25").Activate NbSeries = ActiveChart.SeriesCollection.Count For J = 1 To NbSeries If ActiveChart.SeriesCollection(J).Name = "Seuil" Then ActiveChart.SeriesCollection("Seuil").Delete Exit For End If Next J ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(NbSeries + 1).Name = "Seuil" ActiveChart.SeriesCollection("Seuil").XValues = "={" & Fix(XmiN) & "," & Fix(XmaX) & "}" ActiveChart.SeriesCollection("Seuil").Values = "={0.4,0.4}" End Sub
impossible de lire la propriete chartsobjects de la classechart
ensuite quelques questions...
c'est quoi ca : Fix(XmiN) ? :roll:
les Xvalues ce sont les valeur de l'axe des X et les values des Y?
Citation:
Envoyé par illight
comprend pas... une colonne encore? là pour mon exemple que j'ai cité au dessus j'ai du ajouter une colonne
Nom1 Seuil1 Seuil1
[rien] Seuil2 Seuil2
comme ca car il faut au moins valeurs pour faire une droite j'ai l'impression, tu peux pas lui dire de faire un Y=0,04 direct 8O
Mouarf je retire ce que j'ai dit j'ai mal lu :oops: je retourne me coucher :mrgreen:
lol, toi aussi.... :mouarf:
bon j'ai encore fait des conneries je crois, decidement ces graph...
bref
Code:ActiveSheet.ChartObjects("ev25").Activate
ev25 est le nom de la feuille qui contient mon graphique (je sais pas si je suis clair)
donc je dois plutot mettre
??Code:sheets("ev25").chartsobjects(monnom).activate
sinon comment trouve quel nom mettre? (monnom c'est quoi?? sacahnt que j'ai rien changé)
désolé mais j'ai jamais manipulé de graphiques... en regarde sur mon graph j'ai "zone de graphique" "zone de tracage"...
auskour !!
Citation:
Envoyé par Elstak
Pourquoi tu veux activer ton graphique ? normalement tu as juste a faire les modifications dessus :) tu dois avoir un nom sur ton graphique normalement :)
Sinon un truc de ce genre :
En faisant l'enregistreur de macro, tu clique sur ton graphique et tu verra le nom de ton graphique :)Code:ActiveSheet.ChartObjects("Graphique 11").Activate
Mais c'est qu'il commence à me plaire ce dodo !!
ca y'est y'a fait une image alors il est heureux de nous la montrer !! :mouarf:
brave bete va !
tout ca au lieu de m'aider car il sait bien ce que je cherche 8O
Si tous les dodo avaient ton comportement ca m'etonne pas qu'ils aient disparus :mrgreen:
bon jcontinue de chercher entre 2 phases de sommeil... jrepasse plus avant demain c'est promis :D
Edit : pour illight;
oui j'ai trouvé il s'appele Graph1.
sinon pour l'activation j'ai juste repris le code de comcombre, je cherche meme pas à comprendre pourquoi il active j'essaye deja de le faire marcher apres si y'a pas besoin d'activer je virerai :P
Dis tu l'as trouvé ou ? parce que j'en cherche un en ce moment :mrgreen:Citation:
j'ai 1/4 de cerveau qui n'est deja pas performant quand je l'ai en entier
ChartObjects c'est le nom du graphique, pas de la feuille ;)
euh lol ça va un peu vite là ;)
Effectivement tu voyais juste c'est bien ça que tu dois mettre :
Pour changer le nom du graph du vas dans la barre d'outil de dessin et pi tu cliques sur l'outil "sélectionner" (l'outil en forme de flèche). Ensuite tu cliques sur ton gaph (qui est alors sélectionnez comme une shapes, enfin je pense) et là tu renommes dans la case de nom habituelle en haut à gauche.Code:sheets("ev25").chartsobjects(monnom).activate
Cette manip doit être faite ss que ton graph soit sélectionné avant (de manière traditionnelle j'entends).
Pour fix(xmin) ça veut juste dire que tu prends la partie entière du nombre que tu as appelé xmin.
Ce xmin est simplement le plus petit x de tes données.
Xmin et Xmax te donne la longueur d'affichage de ton seuil au final. Mais je précise c'est pas des commandes, juste des noms de variable (j'aurais p les appeler "chou" et "fleur" :lol: )
Au final Xvalues représente bien les valeurs de l'axe des X et Values celles de l'axe des Y
J spr que tu as mieux compris
Re, (désolé j'ai menti me revoilà)
j'ai modifié le code et il fonctionne
j'ai emme fait une petite modif (ligne en rouge) car sinon il plantait lorsqu'il y avait deja une collection seuil (au niveau de la ligne en vert car il veux prendre le prochain seuil mais si on en a supprimé 1.... :P )Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Sub Test() Dim XmiN, XmaX As Double Dim NbSeries, J As Integer XmiN = 0.04 XmaX = 0.04 Charts("ev25").Activate '.ChartObjects("graph1").Activate NbSeries = ActiveChart.SeriesCollection.Count For J = 1 To NbSeries If ActiveChart.SeriesCollection(J).Name = "Seuil" Then ActiveChart.SeriesCollection("Seuil").Delete NbSeries = NbSeries - 1 Exit For End If Next J ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(NbSeries + 1).Name = "Seuil" ActiveChart.SeriesCollection("Seuil").XValues = "={" & Fix(XmiN) & "," & Fix(XmaX) & "}" ActiveChart.SeriesCollection("Seuil").Values = "={0.4,0.4}" End Sub
bref j'ai comme résultat ca :
Pièce jointe 3047
bref moi je voudrait pas uniquement un trait sur 2 valeurs mais sur autant qu'il y a de valeur pour les autres courbes, une idée sur la marche à suivre? :?
Ps : je suis arrivé à la moitiée de la limite de mes pieces jointes, comment je peux faire pour virer les anciennes de mes vieux messages? :roll:
Citation:
Envoyé par Elstak
Pour ton PS, tu vas dans tableau de bord, et en bas tu as un truc pièces jointes tu pourra les supprimer :)
Si c'est juste visuel je ne comprends pas pourquoi tu veux plus de deux points pour ta droite??
Pour la ligne en rouge je pensais pas que ce soit nécessaire... Vu qu'il y avait un exit for juste après, il était censé sortir de la boucle avant qu'un problème se pose (la valeur de j supérieur au nb de séries réelles)
bonsoir
si tes graphiques ne contiennent pas trop de points, tu peux tester cette adaptation
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Sub Test() Dim NbSeries As Integer, J As Integer, x As Integer Dim Tableau() Charts("ev25").Activate '.ChartObjects("graph1").Activate NbSeries = ActiveChart.SeriesCollection.Count For J = 1 To NbSeries If ActiveChart.SeriesCollection(J).Points.Count > x And _ ActiveChart.SeriesCollection(J).Name <> "Seuil" Then _ x = ActiveChart.SeriesCollection(J).Points.Count If ActiveChart.SeriesCollection(J).Name = "Seuil" Then _ ActiveChart.SeriesCollection("Seuil").Delete Next J ReDim Tableau(x) For J = 0 To x - 1 Tableau(J) = 0.04 Next J ActiveChart.SeriesCollection.NewSeries NbSeries = ActiveChart.SeriesCollection.Count ActiveChart.SeriesCollection(NbSeries).Name = "Seuil" ActiveChart.SeriesCollection("Seuil").Values = Tableau End Sub
bonne soiree
michel
Hello,
merci de vos réponses.
Alors mon dodo tout d'abord,
Ca implique que si j'ai 8 points sur ma croube je dois avoir 8 fois la valeur 0,4 (seuil) qui apparait quelque part ??Citation:
une troisième courbe que tu nommes seuil et qui a la valeur voulue pour chaque x.
Pour comcombre :
j'en veux pas plus de 2, je veux juste que les 2 points soient aux extremités et avec ta solution, ce sont les 2 premiers points qui sont dessinés :?Citation:
Si c'est juste visuel je ne comprends pas pourquoi tu veux plus de deux points pour ta droite??
sinon pour le for, biensur il y a un exit mais tu calcul le nombre de series (pour mon cas 3 si il y a deja un seuil) si il y a un seuil tu en supprime 1 (donc tu en as.. 2 !! :mouarf: ) et apres si tu met nombre+1 t'a nombre=4 alors que ca sera ta 3eme... enfin c'est un petit detail (mais qui fait planter si il y avait deja une colection seuil ;) )
Pour silky :
365 c'est beaucoup? :?Citation:
si tes graphiques ne contiennent pas trop de points
sinon j'essayai de bidouiller un solution comme celle que tu propose (mais la mienne est vraiment trop laide jvais pas la montrer :mouarf: )
voilà donc je vasi tester avec un Tableau, essaye de me dire pour le 365 ;)
rebonjour
Tu peux faire un essai mais je pense que ça ne passera pas . De mémoire , il me semble qu'on est limité à 255 caracteres pour définir une série dans la barre de formules.
bonne journée
michel
J'aurais bien aimé que tu te trompe cette fois !! :lol:
mais là deja quand je etste 55 valeurs ca va, quand je met 65 ca va plus :cry:
"Impossible de définir la propriété Values de la classe Series" :roll:
Donc ca pas :( n'est il pas possible de ne mettre que 2 points (celui de "début" et celui de la "fin" et de tracer la droite?
EDIT: meme si je ne prend que 55 valeurs (pour seuil, je met for J=0 to 55) et que j'en prend 65 pour mes courbes bah j'ai l'erreur 8O enfin bon ca va pas quoi :?
Alors voilà je pense que ca ira mieux en montrant directement comme ca se passe :
la feuille qui contient les données :
Pièce jointe 3074
La feuille (masquée qui contient les seuils) :
Pièce jointe 3075
sinon je pensais à autre chose,
dans ma feuille seuil, met mes données en colonne
ev25 [rien] ev26
0,04 0,004 ..... ......
.
.
.
.
et chaque fois que l'utilisateur ajoute les données d'un jour (dans Données), j'ajoute une ligne qui contient la meme valeur (dans la feuille seuils) et je change la palge de données servant au graph (mes courbe de temps cpu et elaps sont MAJ automatiquement lorsque l'utilisateur ajoute les données du jour suivant donc je mettrais egalement à jour lmes 2 courbes seuil)
le souci est que si l'utilisateur retire les données d'un jour, alors j'aurai une valeur "en trop" pour le seuil. Est-il possible de declencher une macro lors de la selection d'une feuille (ici je voudrais que lorsque l'utilisateur selectionne une feuille contenant un graph, que je prenne autant de ligne "seuil" qu'il y a de points dans mse autres courbes et ainsin j'aurai plus le souci que j'ai expliqué juste avant)
je sais pas si c'est tres clair :roll:
Ps : mouarf c'est chiant si on laisse plus d'un espace entre 2 mots, les autres sont supprimés du coup jdois mettre des [rien] :mouarf:
Bon, alors tu as la possibilité de créer plusieurs séries "Seuil" qui "se suivent".
Je ne suis pas passé par un tableau mais le principe consiste à créer une série qui va du 01/07/06 au 31/07/06 puis une série qui va du 01/08/06 au 31/08/06. Ainsi je ne suis pas limité par la limite du nombre de caractères dans la définition d'une série.
J'ignore comment et si c'est possible avec un tableau mais ça l'est avec une plage de cellules se trouvant dans une colonne masquée (une ligne pour moi) (!)
Pièce jointe 3078
Le trou entre les valeurs n'est là que pour te montrer le principe
Série seuil1 = Le tableau de 1 à 60
Série seuil2 = le tableau de 61 à 120
etc
Ta prochaine question : "Comment supprimer le nom de ces séries dans la légende ? ;)
Je cherche !
PS - J'ai remplacé l'image dans le post précédent (j'avais mis l'ancienne)
Hm, désolé de cette question mais je prefere etre sur d'avoir bien compris ;)
alors en gros toi tu me propose d'eviter de depasser la valeur limite d'une serie en decomposant ma droite de seuil en plusieur petites series? (d'un mois ici)
pour le 'trou' je l'imagine bien mais je comprend pas trop... t'a joint la bonne image là?? :mouarf:
EDIT : ok pour l'image
Citation:
Envoyé par Elstak
Ce que tu peux faire, c'est affecter à ta plage de données un nom de liste (Insertion>nom>définir) qui évolue quand la personne change de feuille ou quand elle est activée :)
Ok merci illight mais pour l'instant je repars sur la methode de silky qu'on modifie avec l'idée d'ouskel :P