besoin d'aide pour le code d'1 graphique

besoin d'aide pour le code d'1 graphique - VB/VBA/VBS - Programmation

Marsh Posté le 09-05-2005 à 13:35:24    

Bonjour tout le monde,
 
Je débute la prgmation VBA, et une fois encore j'ai 1 petit problème.
Ce forum m'a déjà bien aidé, j'espère que vous seriez me répondre  :bounce:  
 
Je dois tracer un graphique en partant d'une liste de données qui peut être augmentée par une autre macro, donc g pas trop le choix il faut que j'utilise la fonction xlDown
 
je vous montre le code:
 
    Range("C4" ).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("G4" ).Activate
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Charts.Add
    ActiveChart.ChartType = xlLineMarkersStacked
    ActiveChart.SetSourceData Source:=Sheets("electro usine" ).Range("C4:Selection.End(xlDown), G4:Selection.End(xlDown)" _        ), PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphe1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Suivi des consommations groupe électrogène"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Mois"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Consommation"
 
le problème vient de la partie en rouge dans ma déclaration de données.....
 
Est-ce que qlqu'un est assez calé pour m'aider?
 
Merci d'avance,

Reply

Marsh Posté le 09-05-2005 à 13:35:24   

Reply

Marsh Posté le 09-05-2005 à 14:11:09    

Essaye:

ActiveChart.SetSourceData Source:=Sheets("electro usine" ).Range([C4], _
[G4].End(xlDown)), PlotBy:=xlColumns


Message édité par AlainTech le 09-05-2005 à 14:12:32

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 09-05-2005 à 14:20:15    

Merci de ta réponse
 
J'ai essayé ton code,
j'obtiens une erreur d'éxécution '424' (objet requis)
 
Aie! je ne sais pas du tt ce qui va pas...

Reply

Marsh Posté le 09-05-2005 à 14:50:19    

Pour essayer d'isoler le problème, supprime, à la fin de ta ligne, la virgule et le PlotBy...


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 09-05-2005 à 14:56:02    

Autre méthode, plus "propre":

  Dim rChart as Range
  Set rChart = Range([C4],[G4].End(xlDown))  
  Charts.Add  
  ActiveChart.ChartType = xlLineMarkersStacked  
  ActiveChart.SetSourceData Source:=rChart, PlotBy:=xlColumns  
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphe1"


Message édité par AlainTech le 09-05-2005 à 14:56:29

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 09-05-2005 à 15:16:50    

ta méthode est pas mal du tout ;-)
j'ai juste remplacé :
    ActiveChart.Location Where:=xlLocationAsObject,   Name:="Graphe1"
par
     ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe1"
de manière que le graphe apparaît sur une nouvelle feuille.
 
Tu m'as bien aidé. Je voudrai pas abusé mais j'ai encore une question, avec ta méthode, mon graphe prend les données par lignes ce qui donne une multitude de courbe à la place d'obtenir une seule courbe.
Pour moi, cela vient de la définition abscisse & ordonnée (en abscisse: la colonne C4 & ordonnée: la colonne G4)
 
J'ai tenté de toucher au prgm que tu as rectifié mais ca marche pas
 
 Range("C4" ).Select
    Range(Selection, Selection.End(xlDown)).Select
    Range("G4" ).Activate
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
     
  Dim rChart As Range
  Set rChart = Range([C4], [G4].End(xlDown))
  Charts.Add
  ActiveChart.ChartType = xlLineMarkersStacked
  ActiveChart.SetSourceData Source:=rChart, PlotBy:=xlColumns
  ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe1"
 
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Suivi des consommations groupe électrogène"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Mois"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Consommation"
    End With
 
Est-ce que tu sais définir abscisse et ordonnée pr moi c du chinois
merci d'avance

Reply

Marsh Posté le 09-05-2005 à 16:18:09    

Sorry, je n'ai pas de data à disposition pour un chart.
As-tu essayé de faire ton graphe en passant par l'assistant et en activant l'enregistreur de macro?
 
Par contre, pourquoi les 5 lignes audessus de Dim rChart as Range?


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 09-05-2005 à 17:04:51    

Oui excuse moi les 5 lignes sont totalement inutiles
en revanche g tjrs le même pb;
J'ai essayé de passer par l'enregistrement d'une macro, ce qui m'a permis d'établir la trame de cette partie du prgm, mais je suis obligé de retoucher le code de cette macro car, ma liste de données est modulable avec une autre macro (c une base de données).
 
J'ai fais une autre méthode mais g tjrs le même pb mon graphe ne prend pas en abscisse les données de la colonne C et en ordonnée les données de la colonne G:
il réagit comme ça
colonne D en fonction de colonne C
colonne E en fonction de colonne C
colonne F en fonction de colonne C
colonne G en fonction de colonne C
 
Dans la logique il devrait n'égliger D, E, F
 
le code que j'ai établi a également ce pb:
Dim DerniereLigne As Integer
'----------------------------------------------------------------------------
DerniereLigne = 4
 
    While Not (IsEmpty(Worksheets("electro usine" ).Cells(DerniereLigne + 1, 3)))
    DerniereLigne = DerniereLigne + 1
    Wend
     
    Range("C4" ).Select
    Range("G4" ).Activate
           
    Charts.Add
    ActiveChart.ChartType = xlLineMarkersStacked
    ActiveChart.SetSourceData Source:=Sheets("electro usine" ).Range("C4:C" & DerniereLigne, "G4:G" & DerniereLigne), PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Suivi des consommations groupe électrogène"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Mois"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Consommation"
    End With
 
Peux-tu m'aider?
 
Ps:je débute en programmation (simplement pr satisfaire les exigences de mon patron...)

Reply

Marsh Posté le 09-05-2005 à 17:33:18    

J'ai trop besoin d'aide...
 

Reply

Marsh Posté le 10-05-2005 à 01:25:00    

T'ai envoyé un MP...


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 10-05-2005 à 01:25:00   

Reply

Marsh Posté le 10-05-2005 à 09:11:04    

Salut Alain,
 
g bien reçu ton mail, merci de te creuser la tête pr moi
Par contre je n'arrive pas du tout à le lire (impossible d'afficher cette page)
 
ps:je porte bien mon alias ;-)

Reply

Marsh Posté le 10-05-2005 à 09:26:51    

Je te disais que, si tes données ne sont pas trop "sensibles", tu peux m'envoyer ton classeur à alain point gerard at tiscali point be.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 10-05-2005 à 09:37:04    

ok c sympas,
mais je peux vriament pas te les envoyer car c elles sont confidentielles (suivi environnemental d'1 indus. chimiq.)
je vais essayé un truc, et je te tiens au courant.
 
au pire des cas je t'envoie le fichier avec seulement la macro
 
merci encore Alain
A+

Reply

Marsh Posté le 10-05-2005 à 10:13:24    

Ou des données bidons...
Tu peux changer les titres de colonnes et les valeurs.
 
Ce qui est important c'est que je comprenne la tête que ça doit avoir en finale.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 10-05-2005 à 10:32:24    

Bon après des heures de d'attente, de réflexion j'ai enfin trouvé:
j'ai contourné le pb en enregistrant une macro qui efface les courbes que je n'ai pas demandé ;-)
pourquoi je n'ai pas pensé +tot!
 
enfin un grand merci car sans toi je serai tjrs au même point. je te donne le prgm pour que tu comprennes ma logique qui est "illogique" mais bon, ça marche c le principal.
 
Dim DerniereLigne As Integer
'----------------------------------------------------------------------------
DerniereLigne = 4
 
    While Not (IsEmpty(Worksheets("electro usine" ).Cells(DerniereLigne + 1, 3)))
    DerniereLigne = DerniereLigne + 1
    Wend
     
    Range("C4" ).Select
    Range("G4" ).Activate
           
    Charts.Add
    ActiveChart.ChartType = xlLineMarkersStacked
    ActiveChart.SetSourceData Source:=Sheets("electro usine" ).Range("C4:C" & DerniereLigne, "G4:G" & DerniereLigne), PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Graphe1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Suivi des consommations groupe électrogène"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Mois"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Consommation"
    End With
     
    ActiveChart.Legend.Select
    ActiveChart.Legend.LegendEntries(1).LegendKey.Select
    Selection.Delete
    ActiveChart.Legend.Select
    ActiveChart.Legend.LegendEntries(1).LegendKey.Select
    Selection.Delete
    ActiveChart.Legend.Select
    ActiveChart.Legend.LegendEntries(1).LegendKey.Select
    Selection.Delete
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveChart.ChartArea.Select
 
PS: tu as l'air de touché pas mal en VBA, si tu as le temps today, j'ai envoyé sur le forum un deuxième sujet concernant l'affichage d'un commentaire d'une cellule dans un textbox.
Donc si le coeur te dit... En espérant qu'1 jour je puisse répondre a une de tes questions (après 10 ans de prgm peut-être lol)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed