Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1691 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA][Excel] Help ! Problème avec graphique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA][Excel] Help ! Problème avec graphique

n°1346893
bclinton
ex président
Posté le 14-04-2006 à 14:15:45  profilanswer
 

J'ai une routine qui fonctionne parfois et parfois ca plante sur la derniere ligne :  MaSerie.Values...

Code :
  1. Sub AjouterSeries(NomZone As String, NomGraphique As String, ColDebut As Integer, ColFin As Integer)
  2.     Dim i As Integer
  3.     Dim FeuilleCalcul As String
  4.     Dim MaSerie As Series
  5.    
  6.     FeuilleCalcul = NomZone & "_calculs"
  7.     Sheets(NomZone).ChartObjects(NomGraphique).Activate
  8.     For i = ColDebut To ColFin
  9.         Set MaSerie = ActiveChart.SeriesCollection.NewSeries
  10.         MaSerie.Name = "=" & FeuilleCalcul & "!R1C" & i
  11.         MaSerie.XValues = "=" & FeuilleCalcul & "!R2C" & ColDebut - 1 & ":R500C" & ColDebut - 1
  12.         MaSerie.Values = "=" & FeuilleCalcul & "!R2C" & i & ":R500C" & i
  13.     Next
  14. End Sub


Les valeurx en X sont dans une colonne (a partir de la ligne 2), toujours la meme, ce sont des dates.
Les valeurs en Y dans une autre colonne (a partir de la ligne 2), ce sont des nombres.
Le Name est la valeur de la ligne 1 de la colonne des Y.
 
Je ne comprends pas pourquoi le meme code peut passer ou planter.
"Erreur d'execution1004
Impossible de definir la propriete Values de la Classe Series"
 
Si vous avez une idee...

mood
Publicité
Posté le 14-04-2006 à 14:15:45  profilanswer
 

n°1346903
bclinton
ex président
Posté le 14-04-2006 à 14:27:27  profilanswer
 

Le truc tres trs bizarre c'est que si j'inverse l'ordre des lignes cela ne plante plus. :eek:

Code :
  1. MaSerie.Values = "=" & FeuilleCalcul & "!R2C" & i & ":R500C" & i
  2.        MaSerie.Name = "=" & FeuilleCalcul & "!R1C" & i
  3.        MaSerie.XValues = "=" & FeuilleCalcul & "!R2C" & ColDebut - 1 & ":R500C" & ColDebut - 1


Message édité par bclinton le 14-04-2006 à 14:27:52
n°1346906
bclinton
ex président
Posté le 14-04-2006 à 14:40:21  profilanswer
 

Finalement quand je l'appelle depuis une autre routine ca plante et quel que soit l'ordre des instructions, mais toujours sur la 3eme instruction.  :sarcastic:  
 
J'en ai marre ca ne marchera donc jamais ?
 
Ce n'est donc pas l'instruction qui est fausse mais VB qui plante a cet endroit precis, mais pourquoi ?


Message édité par bclinton le 14-04-2006 à 14:41:42
n°1392915
popaul54
Posté le 22-06-2006 à 16:30:44  profilanswer
 

Bonjour,  
 
Je suis un passionné d'Excel, je l'avoue, et je ne travail qu'avec lui (ou elle  :love: )
Et il est également vrai que je passe plus de temps à débeguer ses programmes qu'à les écrires, mais j'aime ça!
 
par contre, cela fait un bon bout de temps maintenant que j'ai exactement le même problème :  
j'ai un graphique dont je souhaite rendre la plage de donnée dynamique, mais Excel échoue sur les Xvalue des sérries de données (erreur 1004).
 
Voici mon code :  
 
    Sheets(Secteur).Select
    ActiveSheet.ChartObjects("Graphique 7" ).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartTitle.Select
    Selection.Characters.Text = "Méthode du double cumul" & Chr(10) & "Jour de départ : " & Depart
    ActiveChart.PlotArea.Select
     
    ActiveChart.SeriesCollection(1).Values = "=" & Calcul & "!R9C28:R" & NbDonnees + 8 & "C28"
    ActiveChart.SeriesCollection(1).XValues = "=" & Calcul & "!R9C29:R" & NbDonnees + 8 & "C29"
    ActiveChart.SeriesCollection(2).XValues = "=" & Calcul & "!R9C29:R" & NbDonnees + 8 & "C29"
    ActiveChart.SeriesCollection(2).Values = "=" & Calcul & "!R9C29:R" & NbDonnees + 8 & "C29"
 
 
en bleu, ce sont mes variables, préalablement déclarées.
j'ai donc mon graphique (n°7) auquel je définie un titre et deux séries de données.
Le graphique, ainsi que les séries sont déjà crées dans la feuille Excel nommé "Secteur".
Les séries sont simplement définie par leur titre, fixe, leuxs XValues vide, et leurs Value = {1}. C'est donc ma macro  qui définie le reste. ma macro est en fait lancé par une sélection dans une liste déroulante qui me renseigne sur la variable Depart. Et la variable NbDonnees est fonction de ce nombre, d'où mon graphique dynamique.
 
J'espere que je suis assez claire ???
mais en faite le probleme est le meme que celui de BCLINTON...
 
Merci de nous répondre. J'ai plus un seul cheveu sur le cailloux depuis le temps que je me les arrache pour résoudre ce problème. un coup la macro fonctionne, un coup elle plante.  :pt1cable:  :pt1cable:  :pt1cable:  
Mais je vous rassure elle plante beaucoup plus souvent qu'elle ne fonctionne   ;)  
 
Merci d'avance
Bonne soirée
 
PS : je suis sous environement Windows 2000 Pro avec un Excel 2000 ( 9.0.4402 SR-1)


Message édité par popaul54 le 22-06-2006 à 16:46:16

---------------
DJ Popaul, heureusement, il n'y en a qu'un !
n°1430393
freeman_78
Posté le 24-08-2006 à 10:08:05  profilanswer
 

Bonjour,
 
Je rencontre le même problème que vous sur des parcours de listes, impossible de trouver un endroit qui bloque en particulier parce que en mode pas à pas ça fonctionne ...
 
Si jamais quelqu'un a déjà eu un souci similaire, merci de nous éclairer :)


Message édité par freeman_78 le 24-08-2006 à 10:43:07
n°1430679
marcovino
Posté le 24-08-2006 à 14:41:56  profilanswer
 

quel type de graphique c'est?
pour XYScatter (nuage de points) et les graphiques Linéaires il vaut mieux utiliser :  
.SetSourceData Source:= sheet.Range("(Range ici)" ) PlotBy := xlRows (ou bien xlColumns)
 
sinon regardez le lien suivant car MS a un problème avec les cases dont les données sont bizarres (cases vides et cases N/A)
http://support.microsoft.com/defau [...] -us;213379

n°1430720
freeman_78
Posté le 24-08-2006 à 15:14:08  profilanswer
 

Merci pour la réponse :)
 
De mon côté le fait d'activer les feuilles (en utilisant WorkSheet(x).Activate) avant d'éditer des infos qui sont à l'intérieur semble résoudre les erreurs 1004 injustifiées.

n°1712786
zipohi2
Posté le 04-04-2008 à 14:42:42  profilanswer
 

bonjour,
je me permet de reactualiser ce (vieux!) sujet parce que je suis confronté  exactement au même problème. Depuis 2 jours j'écume les forums VB, ce problème y est souvent traité, mais jamais résolu!!!
je vous réexplique rapidement le problème: il m'est impossible de redefinir les Values et XValues de mes SeriesCollection. il y a:
 Error 1004
Unable to set the XValues property of the Series class
qui s'affiche a l'execution...
l'erreur se produit également lors de l'execution d'une macro enregistrée!!!
 
please...help...
 
j'utilise VBA, XL2003


Message édité par zipohi2 le 04-04-2008 à 14:47:31
n°1714452
zipohi2
Posté le 08-04-2008 à 15:42:58  profilanswer
 

bonjour,
vraiment personne n'a d'idée... de mon cote je continue de chercher, et je continue de ne pas trouver.
Dans mon XYscatter, j'ai testé en effacant dans un premier temps le contenue des .Values et en les remplissant a nouveau, et dans ce cas precis cela fonctionne...parfois. Mais par contre il m'est impossible d'effacer le contenue des .Xvalue, donc mon problème reste entier!
 
J'ai pensé alors supprimer purement et simplement ma Seriecollection(i) et de la recréer. mon probème se trouve alors dans la manière d'accéder à cet indice i, car je souhaiterais maintenant pouvoir le modifier. j'ai eu beau chercher dans les locals de mon Workbook, je n'est pas trouvé ou cela se situait(peut etre n'est ce meme pas possible en fait).  
merci
j'utilise toujours VBA et XL2003 (qui bug...)

n°1714455
babasss
Posté le 08-04-2008 à 15:44:20  profilanswer
 

Peux-tu mettre ton fichier en ligne que l'on puisse t'aider ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
mood
Publicité
Posté le 08-04-2008 à 15:44:20  profilanswer
 

n°1714474
zipohi2
Posté le 08-04-2008 à 16:05:11  profilanswer
 

ben en fait je ne sais pas comment on fait pour joindre un fichier...

n°1714476
babasss
Posté le 08-04-2008 à 16:07:45  profilanswer
 

sur un ftp perso
sur dlfree
sur un hébergeur de fichier : megaupload
...


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1714479
zipohi2
Posté le 08-04-2008 à 16:10:02  profilanswer
 

mais voici le code...  

Code :
  1. Sub graph2()
  2.         ActiveSheet.ChartObjects("Chart 2" ).Activate
  3.        
  4.         With ActiveChart
  5.        
  6.             .SeriesCollection(1).XValues = "'Engine_Stage_Version_Tip_No Tip'!$e$3:$e$32000"
  7.             .SeriesCollection(2).XValues = "'Engine_Stage_Version_Tip_No Tip'!$e$32001:$e$64000"
  8.             .SeriesCollection(3).XValues = "'Engine_Stage_Version_Tip_No Tip'!$k$3:$k$32000"
  9.             .SeriesCollection(4).XValues = "'Engine_Stage_Version_Tip_No Tip'!$k$32001:$k$64000"
  10.            
  11.             .SeriesCollection(1).Values = "'Engine_Stage_Version_Tip_No Tip'!$g$3:$g$32000"
  12.             .SeriesCollection(2).Values = "'Engine_Stage_Version_Tip_No Tip'!$g$32001:$g$64000"
  13.             .SeriesCollection(3).Values = "'Engine_Stage_Version_Tip_No Tip'!$h$3:$h$32000"
  14.             .SeriesCollection(4).Values = "'Engine_Stage_Version_Tip_No Tip'!$h$32001:$h$64000"
  15.            
  16.         End With
  17.            
  18.         ActiveSheet.ChartObjects("Chart 1" ).Activate
  19.        
  20.         With ActiveChart
  21.        
  22.             .SeriesCollection(1).XValues = "'Engine_Stage_Version_Tip_No Tip'!$b$3:$b$32000"
  23.             .SeriesCollection(2).XValues = "'Engine_Stage_Version_Tip_No Tip'!$b$32001:$b$64000"
  24.             .SeriesCollection(5).XValues = "'Engine_Stage_Version_Tip_No Tip'!$h$3:$h$32000"
  25.             .SeriesCollection(6).XValues = "'Engine_Stage_Version_Tip_No Tip'!$h$32001:$h$64000"
  26.            
  27.             .SeriesCollection(1).Values = "'Engine_Stage_Version_Tip_No Tip'!$b$3:$b$32000"
  28.             .SeriesCollection(2).Values = "'Engine_Stage_Version_Tip_No Tip'!$b$32001:$b$64000"
  29.             .SeriesCollection(5).Values = "'Engine_Stage_Version_Tip_No Tip'!$j$3:$j$32000"
  30.             .SeriesCollection(6).Values = "'Engine_Stage_Version_Tip_No Tip'!$j$32001:$j$64000"
  31.            
  32.         End With
  33.            
  34. End Sub


Message édité par zipohi2 le 08-04-2008 à 16:13:06
n°1714483
zipohi2
Posté le 08-04-2008 à 16:15:53  profilanswer
 

en fait je ne sais pas si il y a besoin de plus... mon problème, c'est juste qu'il m'est impossible de changer la valeur des plages de données de mon chart!!
mais si vraiment vous voulez le fichier, il faudra sans doute que je le fasse de chez moi...


Message édité par zipohi2 le 08-04-2008 à 16:33:57
n°1714489
zipohi2
Posté le 08-04-2008 à 16:22:36  profilanswer
 

je rappelle que je n arrive meme pas executer une macro que je viens d'enregistrer!!!( macro qui doit bien entendu changer la valeur des series collection)
l'idee serait donc de tenter de trouver un moyen detourne pour changer les Values et Xvalues des series collection


Message édité par zipohi2 le 08-04-2008 à 16:31:12
n°1718657
Caminos pe​rdidos
Posté le 16-04-2008 à 16:34:23  profilanswer
 

Si vos séries ont plus de 14 éléments, regardez aussi ce sujet en Anglais: http://www.ozgrid.com/forum/showthread.php?t=38915
 
J'ai pour ma part un problème similaire à celui du lien: dès que j'ai un tableau de strictement plus de 14 éléments, et que je veux avec assigner les Values ou XValues d'une série, ça plante!  Ca ne plante pas quand la série est définie par une plage de cellules, mais je ne peux me permettre de créer des cellules pour mes données à afficher qui ont subi un traitement.
Je suis sans une impasse.
Pour info, ça plante aussi quand je redéfini un tableau de moins de 14 éléments à partir du tableau de plus de 14 éléments.
 
L'erreur obtenue est la suivante:
ERREUR 1004 "Impossible de définir la propriété Values de la classe Series" (sujet à renommer ainsi ?)
 
Exemple: pour chaque ligne d'un fichier source, j'ajoute à un graphique une série dont la longueur est définie par "nb_steps"

Code :
  1. dim donnees_aux()
  2.    redim donnees_aux(0 To nb_steps)
  3.         For k = 0 To nb_steps
  4.             donnees_aux(k) = Workbooks(nom_source).Sheets(fsour2).Cells(ligne, k).Value
  5.         Next k
  6.        donnees = donnees_aux
  7.        With serie
  8.            .Values = donnees
  9.        End With


Si nb_steps > 13 : plantage
Si nb_steps <=13: ça marche
 
Tentative en perdant des donnees (ce qui ne me convient pas):

Code :
  1. dim donnees_aux()
  2.    redim donnees_aux(0 To nb_steps)
  3.  
  4.         For k = 0 To nb_steps
  5.             donnees_aux(k) = Workbooks(nom_source).Sheets(fsour2).Cells(ligne, k).Value
  6.         Next k
  7.        donnees = donnees_aux
  8.        dim donnees_tronquees()
  9.        redim donnees_tronquees(0 to 12)
  10.        For k = 0 To 12
  11.             donnees_tronquees(k) = donnees(k)
  12.        Next k
  13.        With serie
  14.            .XValues = donneesX_tronquees
  15.            .Values = donnees_tronquees
  16.        End With


Plantage encore. Je ne comprends pas du tout. :??:  
 
Serait-ce un bug excel ?
Note: tout cela a été effectué sous excel 2002 SP3


Message édité par Caminos perdidos le 25-04-2008 à 11:08:17
n°1764702
nyoshy
Posté le 25-07-2008 à 11:27:26  profilanswer
 

Bonjour,
 
je me permet de répondre encore une fois à ce vieux sujet car je me suis bien arraché les cheveux dessus aussi...
je ne comprenais pas du tout d'ou pouvait venir ce problème...
 
je travaillais sur la macro à la fois sur excel 2007 et aussi sur Excel 2000.
Sur Excel 2007 tout fonctionne pas de soucis, mais sur 2000 ma macro ne fonctionnait qu'avec une plage de valeurs bien particulières... à n'y rien comprendre....
 
"impossible de définir la propriété XV Values de la classe Series"
à chaque fois....
 
en essayant un peu tout, je me suis rendu compte que sous Excel 2000, il fallait ajouter un setSource (ligne3) avant de définir le Xvalue (ligne5)...
 
voici le bout de code qui foctionne désormais..
 

Code :
  1. Charts.Add
  2.         ActiveChart.ChartType = xlLineMarkers
  3.         ActiveChart.SetSourceData Source:=Sheets("RELEVES" ).Range("A1" ), PlotBy _              :=xlColumns
  4.         ActiveChart.SeriesCollection.NewSeries
  5.         ActiveChart.SeriesCollection(1).XValues = TableAbs()


 
en espérant que ça pourra aider quelqu'un...

n°1854492
fmor
Posté le 24-02-2009 à 09:57:30  profilanswer
 

Bonjour,
 
j'ai aussi ramé comme pas possible avec ces remplissages de graphiques en dynamique. La petite différence avec vous c'est que mon graphique est intégré dans une UserForm (nommée GF). Après bien des essais infructueux, j'ai trouvé comment le remplir comme je voulais; ça peut être à partir d'un range, d'une matrice, ... le principe est le même :
 
Private Sub List3_Click()        
    'aide sur http://support.microsoft.com/kb/469351/fr
     
    Dim Range1 As Range, Range2 As Range, cellule As Range
    Dim i As Integer
    Dim String1 As String, String2 As String
     
    'Création du range des abscisses et du range des valeurs de la grandeur :
    With Sheets(2)
        Set Range1 = .Range(.Cells(1, 5), .Cells(1, 14))
        Set Range2 = .Range(.Cells(2, 5), .Cells(2, 14))
    End With
     
    'on ajoute une série à condition qu'elle n'existe pas déjà :
    If GF.ChartSpace1.Charts(0).SeriesCollection.Count = 0 Then
        GF.ChartSpace1.Charts(0).SeriesCollection.Add
    End If
     
    'On va mettre les valeurs de range1 et range2 dans string1 et string2 afin de pouvoir
    'les afficher via setdata :

    String1 = ""
    String2 = ""
    For Each cellule In Range1
        String1 = String1 & CStr(cellule.Value) & ","
    Next cellule
    String1 = Left(String1, Len(String1) - 1)
     
    For Each cellule In Range2
        String2 = String2 & CStr(cellule.Value) & ","
    Next cellule
    String2 = Left(String2, Len(String2) - 1)
     
    GF.ChartSpace1.Charts(0).SeriesCollection(0).SetData chDimCategories, chDataLiteral, String1
    GF.ChartSpace1.Charts(0).SeriesCollection(0).SetData chDimValues, chDataLiteral, String2

     
    'le type de graphique (ligne) :
    GF.ChartSpace1.Charts(0).SeriesCollection(0).Type = chChartTypeLineMarkers
    With GF.ChartSpace1.Charts(0).SeriesCollection(0).Border
        .Color = 3
        .Weight = 1
    End With
    With GF.ChartSpace1.Charts(0).SeriesCollection(0).Line
        .Color = vbRed
        .Weight = 3
    End With
     
    'le type de marqueur (carré), et sa taille :
    GF.ChartSpace1.Charts(0).SeriesCollection(0).Marker.Style = chMarkerStyleSquare
    GF.ChartSpace1.Charts(0).SeriesCollection(0).Marker.Size = 6
     
    'la couleur du carré :
    GF.ChartSpace1.Charts(0).SeriesCollection(0).Interior.Color = 5
     
   'le titre du graphique :    
    GF.ChartSpace1.Charts(0).HasTitle = True
    GF.ChartSpace1.Charts(0).Title.Caption = GF.List3.Value
     
    'le nom de l'axe des abscisses :
    GF.ChartSpace1.Charts(0).Axes(0).HasTitle = True
    GF.ChartSpace1.Charts(0).Axes(0).Title.Caption = "Mois"
     
End Sub


Message édité par fmor le 24-02-2009 à 10:01:58
n°1953282
Marina01
Posté le 27-12-2009 à 13:57:40  profilanswer
 

Bonjour à tous,
 
Je me permet de vous contacter afin d'avoir des réponses à mes interrogations. Je travail sur plusieurs exercices dont un qui bloque depuis trois jours. Vous l'aurez compris, cela porte sur VBA Excel 2003. [B]Méthode [/B]: Créer une liste déroulante avec en dessous un champs pouvant accueillir des images.
L'idée : Depuis la selection de l'info de la liste déroulante, l'image s'y rapportant s'affiche juste en dessous [B]automatiquement[/B].
Exemple : (Dans ma liste déroulante, j'ai des races de chiens, en choisissant le "berger allemand", l'image de berge allemand s'affiche juste en dessous.
 
J'ai mis en pièce jointe une maquette afin que vous ayez un aperçu de la forme que cela doit avoir.
 
 http://cjoint.com/?mBnM4yM6cd
 
Help me please, je serai très reconnaissante à la personne qui me donnera une réponse concrète

n°2120927
AlfredLeRo​uge
Posté le 12-01-2012 à 08:57:39  profilanswer
 

Bonjour, après avoir écumé beaucoup de sites, la solution la plus fiable est :
            Private Function Create(ByRef WB As Excel.Workbook, ByVal ChartType As Long, _
                                   ByRef OrdinateRange As Excel.Range, Optional ByRef AbscissRange As Excel.Range = Nothing, _
                                   Optional ByVal SerieName As String = "" ) As Excel.Chart
                '   First not empty value
                Dim i As Long = 1
                If AbscissRange Is Nothing Then
                    Do Until (OrdinateRange(i).value) IsNot Nothing
                        i += 1
                    Loop
                Else
                    Do Until Not ((OrdinateRange(i).Value) Is Nothing Or (AbscissRange(i).value) Is Nothing)
                        i += 1
                    Loop
                End If
               Dim Chart As Excel.Chart = WB.Charts.Add
                If OrdinateRange IsNot Nothing Then
                    WB.Activate()
                    With Chart
                        .Activate()
                              .ChartType = Excel.XlChartType.xlColumnClustered ' set blank data into valid ones
                              .SetSourceData(Source:=OrdinateRange(i), PlotBy:=Excel.XlRowCol.xlColumns)
                              .SeriesCollection(1).Values = "=" & OrdinateRange.Columns(1).Address(True, True, Excel.XlReferenceStyle.xlR1C1, True)
                              .SeriesCollection(1).XValues() = "=" & AbscissRange.Columns(1).Address(True, True, Excel.XlReferenceStyle.xlR1C1, True)
                        .ChartType = ChartType
                        .Name = SerieName
                    End With
                    WB.Save()
                    Return Chart
                Else
                    Return Nothing
                End If
            End Function
Avec l'interop en imports, of course.


---------------
Alfred
n°2233390
hidodu
Posté le 15-07-2014 à 18:05:10  profilanswer
 

Bonjour tous le monde
 
Dans le cas ou vos séries ne sont pas complètes, cette erreur peut souvent arriver (cf post de marcovino et son lien sur microsoft).
Perso, j'ai réussi à tracer des séries quasiment vides en activant puis désactivant l'option 'remplacer les cases vides par un zéro'
 

Code :
  1. 'Après avoir créer le graph et avant de définir les values
  2. 'Traitement des cellules vides : valeur zéro
  3. ActiveChart.DisplayBlanksAs = xlZero
  4. 'puis on défini les valeurs de la série
  5. '...
  6. 'et si on préfère, on repart sur cellule vide = on ne trace rien
  7. ActiveChart.DisplayBlanksAs = xlNotPlotted


 
Ça marche pour moi.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA][Excel] Help ! Problème avec graphique

 

Sujets relatifs
Torque : problème de socket réutiliséeprobleme de ciblage (qui est en fait un pb de onLoad())
exécuter un script avec une macro exceldebutant : probleme de bouton
problème sous ndocProblème de pagination
HELP : générer grille guiProbleme de mise à jour, cache navigateur
probleme avec substr[Résolu] [VBA] Boucle for qui déraille
Plus de sujets relatifs à : [VBA][Excel] Help ! Problème avec graphique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR