Help ! Problème avec graphique [VBA][Excel] - VB/VBA/VBS - Programmation
Marsh Posté le 14-04-2006 à 14:27:27
Le truc tres trs bizarre c'est que si j'inverse l'ordre des lignes cela ne plante plus.
Code :
|
Marsh Posté le 14-04-2006 à 14:40:21
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.
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 ?
Marsh Posté le 22-06-2006 à 16:30:44
Bonjour,
Je suis un passionné d'Excel, je l'avoue, et je ne travail qu'avec lui (ou elle )
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.
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)
Marsh Posté le 24-08-2006 à 10:08:05
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
Marsh Posté le 24-08-2006 à 14:41:56
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
Marsh Posté le 24-08-2006 à 15:14:08
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.
Marsh Posté le 04-04-2008 à 14:42:42
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
Marsh Posté le 08-04-2008 à 15:42:58
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...)
Marsh Posté le 08-04-2008 à 15:44:20
Peux-tu mettre ton fichier en ligne que l'on puisse t'aider ?
Marsh Posté le 08-04-2008 à 16:05:11
ben en fait je ne sais pas comment on fait pour joindre un fichier...
Marsh Posté le 08-04-2008 à 16:07:45
sur un ftp perso
sur dlfree
sur un hébergeur de fichier : megaupload
...
Marsh Posté le 08-04-2008 à 16:10:02
mais voici le code...
Code :
|
Marsh Posté le 08-04-2008 à 16:15:53
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...
Marsh Posté le 08-04-2008 à 16:22:36
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
Marsh Posté le 16-04-2008 à 16:34:23
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 :
|
Si nb_steps > 13 : plantage
Si nb_steps <=13: ça marche
Tentative en perdant des donnees (ce qui ne me convient pas):
Code :
|
Plantage encore. Je ne comprends pas du tout.
Serait-ce un bug excel ?
Note: tout cela a été effectué sous excel 2002 SP3
Marsh Posté le 25-07-2008 à 11:27:26
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 :
|
en espérant que ça pourra aider quelqu'un...
Marsh Posté le 24-02-2009 à 09:57:30
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
Marsh Posté le 27-12-2009 à 13:57:40
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
Marsh Posté le 12-01-2012 à 08:57:39
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.
Marsh Posté le 15-07-2014 à 18:05:10
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 :
|
Ça marche pour moi.
Marsh Posté le 14-04-2006 à 14:15:45
J'ai une routine qui fonctionne parfois et parfois ca plante sur la derniere ligne : MaSerie.Values...
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...