IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[XL 2010] Erreur 1004 pour création seriescollection (chart)


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 2
    Par défaut [XL 2010] Erreur 1004 pour création seriescollection (chart)
    Bonjour,

    Une erreur 1004:" erreur définie par l'objet ou l'application" apparait à l'execution de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    Sub essaichart1()
     
    Dim ChartObj As ChartObject
     
    Dim C1 As Series, C2 As Series
     
    Worksheets("Essai pivot1").Activate
     
     
    Set ChartObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=800, Top:=75, Height:=325)
     
    Set C1 = ChartObj.Chart.SeriesCollection.NewSeries
     
     
    With C1
    .Name = "2011"
    .Values = Sheets("Essai pivot1").Range("B3:B54")
    .XValues = Sheets("Data").Range("A2:A53")
    End With
     
    ChartObj.Chart.ChartType = xlLine
    ChartObj.Chart.Axes(xlValue).MaximumScale = 40
    ChartObj.Chart.Axes(xlValue).MinimumScale = 28
     
     
    Set C2 = ChartObj.Chart.SeriesCollection.NewSeries
     
    With C2
                .Name = "2010"
                .Values = Sheets("Data").Range("H2:H53")
                .XValues = Sheets("Data").Range("A2:A53")
     
    End With
     
    End Sub
    "

    L'erreur apparait dès le set C1. Pourtant j'utilise la fonction newsseries le plus basiquement possible.
    Le plus bizarre c'est que ça marchait parfaitement jusqu'à hier. pourtant pas de changement qui puisse affecter quelquechose là dedans
    J'ai beau cherché et je ne vois d'où vient le problème.

    Merci de votre aide

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    J'ai testé ceci et ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 essaichart1()
    Dim ChartObj As ChartObject
    Dim SerieObj As Series
     
    Set ChartObj = Worksheets("Essai pivot1").ChartObjects.Add(Left:=100, Width:=800, Top:=75, Height:=325)
    With ChartObj.Chart
        .ChartType = xlLine
        .Axes(xlValue).MaximumScale = 40
        .Axes(xlValue).MinimumScale = 28
        Set SerieObj = .SeriesCollection.NewSeries
        With SerieObj
            .Name = "2011"
            .Values = Sheets("Essai pivot1").Range("B3:B54")
            .XValues = Sheets("Data").Range("A2:A53")
        End With
        Set SerieObj = .SeriesCollection.NewSeries
        With SerieObj
            .Name = "2010"
            .Values = Sheets("Data").Range("H2:H53")
            .XValues = Sheets("Data").Range("A2:A53")
        End With
        Set SerieObj = Nothing
    End With
    Set ChartObj = Nothing
    End Sub
    Sinon, sans la variable SerieObj
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub essaichart1()
    Dim ChartObj As ChartObject
     
    Set ChartObj = Worksheets("Essai pivot1").ChartObjects.Add(Left:=100, Width:=800, Top:=75, Height:=325)
    With ChartObj.Chart
        .ChartType = xlLine
        .Axes(xlValue).MaximumScale = 40
        .Axes(xlValue).MinimumScale = 28
        With .SeriesCollection.NewSeries
            .Name = "2011"
            .Values = Sheets("Essai pivot1").Range("B3:B54")
            .XValues = Sheets("Data").Range("A2:A53")
        End With
        With .SeriesCollection.NewSeries
            .Name = "2010"
            .Values = Sheets("Data").Range("H2:H53")
            .XValues = Sheets("Data").Range("A2:A53")
        End With
    End With
    Set ChartObj = Nothing
    End Sub

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Chart avec deux SeriesCollection dans Excel VBA
    Bonjour jeff202,

    1. Ordre de définition de chaque série

    Citation Envoyé par jeff202 Voir le message
    L'erreur apparaît dès le set C1.
    Bien que l'erreur 1004 n'a pas été reproduite, il aurait été intéressant de savoir exactement si c'est réellement sur la propriété Name, Values ou XValues de la série C1 que vous l'avez rencontrée, autrement dit il faut donner le n° de ligne de l'erreur. Pour cela il faut encadrez votre code dans votre message entre les deux balises suivantes :

    Le modérateur a inséré pour vous avant la première ligne la balise [code] et après la dernière ligne de code la balise [/code]
    Dans l'éditeur du forum, vous trouverez dans la barre d'outil le bouton "#" qui ajoute automatiquement ces deux balises si vous sélectionnez au préalable toutes les lignes de votre code dans votre message.

    Dans la solution proposée, on a préféré commencer la définition de la série par Values puis XValues et enfin Name.

    2. Comportement différent hors débogueur

    Dans le débogueur en pas à pas dans essaichart1(), les deux courbes se dessinent parfaitement dans la limite indiquée entre 28 et 40 en abscisse.

    Symptôme
    Quand on exécute essaichart1() sans point d'arrêt, les coordonnées en abscisse et ordonnée sont énormes et la zone pour la courbe s'est considérablement réduite.

    Solution
    On a résolu le problème de facteur d'échelle en complétant le paramétrage du graphique.

    3. Typer le Chart avant de définir ses séries

    Diagnostique plus détaillé
    La caractéristique de la série C1 est qu'elle est définie avant le type du Chart.
    Il vaut mieux définir d'abord le type de Chart puis déclarer les deux séries.

    Pour vous, vous n'avez pas besoin de la création du contexte de test, puisque vous l'avez déjà.
    Par contre pour le lecteur, cela aide dans la description du problème de préciser un jeu de test le plus simple possible :

    A partir d'un classeur vide, créer les deux feuilles suivantes :
    Feuille "Essai pivot1" :
    B3:B54 : nombres entiers entre 28 et 40.

    Feuille "Data":
    A2:A53 : idem dans un ordre différent que la feuille précédente.
    H2:H53 : idem.

    L'idéal étant de simplifier la maquette du problème :
    - une seule feuille
    - nombre de 1 à 52 grâce à la facilité d'Excel d'incrémenter la valeur de la cellule au-dessus avec Ctrl + Drag down, etc.

    Commencer la maquette toujours par : Option Explicit ' Commentaire
    Comme cela, le lecteur est sûr que les variables ont été déclarées.

    VBE menu "Insérer" > "Module".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Option Explicit ' Chart avec deux series de valeurs
     
    Sub ChartPivotData()
    Dim ChartObj As ChartObject, rngXValues As Range
        Set rngXValues = Sheets("Data").Range("A2:A53")
        Worksheets("Essai pivot1").Activate
        Set ChartObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=800, Top:=75, Height:=325)
        With ChartObj
            .Chart.ChartType = xlLine ' Déclarer le type en premier
            CleanSeriesColl ChartObj.Chart ' dans le cas où il y a des series par défaut
            With .Chart.SeriesCollection.NewSeries
                .Values = Sheets("Essai pivot1").Range("B3:B54")
                .XValues = rngXValues
                .Name = "2011"
                .Border.Weight = xlMedium
            End With
            With .Chart.SeriesCollection.NewSeries
                .Values = Sheets("Data").Range("H2:H53")
                .XValues = rngXValues
                .Name = "2010"
                .Border.Weight = xlMedium
            End With
            .Chart.HasDataTable = False
            .Chart.Legend.Position = xlLegendPositionBottom
            .Chart.HasTitle = True
            .Chart.ChartTitle.Text = "Pivot Data"
            .Chart.PlotArea.Interior.ColorIndex = 0 'White
            .Chart.Axes(xlValue).MaximumScale = 40
            .Chart.Axes(xlValue).MinimumScale = 28
        End With
    End Sub
     
    Private Sub CleanSeriesColl(ChartObj As Chart)
        With ChartObj
            On Error Resume Next
            Do
                .SeriesCollection(1).Delete
                If Err.Number > 0 Then Exit Do
            Loop Until False
            On Error GoTo 0
        End With
    End Sub
     
    Sub ChartDelete()
        With ActiveSheet.ChartObjects
            While .Count > 0
                CleanSeriesColl .Item(1).Chart
                .Item(1).Delete
            Wend
        End With
    End Sub
    Notez que l'on a ajouté CleanSeriesColl() après la définition du type et avant de déclarer les deux séries.

    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER :
    On obtient le graphique souhaité à chaque appel de la procédure ChartPivotData().

    4. Conclusion

    La création d'un Chart avec CharObjects.Add est extrêmement sensible à l'ordre des définitions ou à des optimisations via With ... End With. Une fois que vous aurez trouvé votre ordre de définition qui fonctionne, il faudra s'y tenir éventuellement en s'inspirant de l'ordre de définition donné par l'enregistreur de macro.

    Il faut également gérer l'effacement du graphique quand on n'en a plus besoin : voir ChartDelete(). Car en phase de développement, la multiplication de création des graphiques pour mise en point risque de faire exploser Excel et si on n'a pas sauvegardé, on perd tout.

    Le cycle de vie d'un Chart, au moins pendant le développement, est :

    • Créer le code de gestion des graphiques et sauvegarder le .xls avant d'exécuter.
    • Lancer l'exécution de la création du graphe.
    • Effacer chaque graphe créé y compris en nettoyant ses SeriesCollection
      (sauf si bien sûr le but du classeur est de générer les courbes de façon persistante à sauvegarder avec le .xls).
    • Sortir d'Excel. Cela libère réellement la mémoire prise par tous les graphes.
    • Réouvrir Excel.


    ___________

    Si la discussion est résolue, vous pouvez cliquer sur le bouton

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

Discussions similaires

  1. [XL-2010] 2003 à 2010, erreur 1004 graphique
    Par bob456 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/07/2013, 16h25
  2. [XL-2007] erreur 1004 pour la création d'un tcd via vba
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/10/2012, 21h23
  3. [XL-2003] erreur 1004 pour un range.copy
    Par Flop1908 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/08/2012, 15h20
  4. Erreur 1004 pour création seriescollection (chart)
    Par jeff202 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/08/2011, 15h33
  5. Erreur syntaxe pour Création d'une vue
    Par MikeV dans le forum Outils
    Réponses: 2
    Dernier message: 05/09/2007, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo