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 :

[VBA][EXCEL] Erreur génération d'un graphique


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut [VBA][EXCEL] Erreur génération d'un graphique
    Bonjour bonjour,

    j'ai un script vba qui génère 6 graphiques (dans 6 feuilles différentes) dans le meme fichier. Pour chaque graphique j'utilise ce code (plus ou moins) au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set mychart = xlapp.Charts.Add
        mychart.ChartType = xlLine
        For i = 1 To mychart.SeriesCollection.Count
            mychart.SeriesCollection(1).Delete
        Next i
     
        For i = 3 To nbcol
            mychart.SeriesCollection.NewSeries
            mychart.SeriesCollection(i - 2).Name = "=tableaux_unites!R" & debut & "C" & i
            mychart.SeriesCollection(i - 2).Values = "=tableaux_unites!R" & debut + 1 & "C" & i & ":R" & debut + 12 & "C" & i
        Next i
    et au final un mychart = nothing.

    Cela marche bien pour les 5 graphiques sauf quand il arrive au dernier, il me fait un erreur sur le mychart.SeriesCollection(1).Delete :
    La méthode Delete de la classe Series a échoué

    et ensuite une autre erreur sur mychart.SeriesCollection(i - 2).Name... :
    Impossible de définir la propriété Name de la classe Series.

    Est-ce que je fais un erreur à quelque part ? ce qui est bizarre c'est que ça marche bien pour les 5 premiers graphiques.

    Merci d'avance pour votre aide

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Si je comprends bien ce que tu fais, tu ajoutes un graphe et tu supprimes une série. C'est bien ça ?

    Je procéde autrement mais ce n'est valable que si tes graphes sont uniformes (même nombre de courbes)
    Est-ce le cas ?
    Si oui, je scinde les opérations en deux, création de tous les graphes, puis, effacement de la série voulue pour tous les graphes.
    J'ai mis le code la semaine dernière sur le forum

    Si ça t'intéresse, tu dis

    A+

  3. #3
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Oui ça m'interesse parce que c'est justement le problème. Les graphes n'ont pas forcément le meme nombre de série, et quand je créé un nouveau graphe, il a toujours les séries de l'ancien graphe, c'est pour ça que je les supprime au début.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Hello,

    Je n'ai pas retrouvé... et pourtant j'ai cherché. Sans doute un nom de sujet mal adapté.
    En relisant ton code, je me suis posé la question : As-tu accordé ton nombre de colonnes (nbcol) au décalage que je perçois entre ton n° de graphe et ton n° de colonne ?
    En attendant ta réponse, je regarde pour le code que j'utilise.

    A+

  5. #5
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    oui, les valeurs sélectionner sont les bonnes, mais de toute façon le problème ce n'est pas le résultat du graphique, puisqu'il ne me laisse pas générer le graphique a cause de l'erreur sur le series delete et sur le series.name

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonjour

    tu peux tester ce type de synthaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim J as Integer
    For j = mychart.SeriesCollection.Count To 1 Step -1
    mychart.SeriesCollection(j).Delete
    Next j

    par contre je ne comprend pas pourquoi tu supprimes des series dans un graphique que tu viens de crééer 2 lignes plus haut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set mychart = xlapp.Charts.Add

    pour le nom des series tu peux essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mychart.SeriesCollection(i - 2).Name = Sheets("tableaux_unites").Cells(Debut, i)

    bonne journée
    michel

  7. #7
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    en fait je supprimer les séries dans le graphique que je viens de créer car je ne sais pas pourquoi, mais excel conserve les séries du graphique précédent.

    si le graphique précédent a 5 séries, et que je créé un nouveau graphique, le nouveau aura ces 5 séries + les nouvelles que j'ajoute.

    Avec ta méthode du delete et ta méthode du name j'ai toujours les memes erreurs dans les deux cas.

    Merci quand meme

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    C'est la solution de SilkyRoad que je voulais te proposer en l'appliquant à tous les graphes. Si ça ne marche pas, pourquoi ne pas définir tes graphes à la création ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        LaPlage = "A1:D8"
        Charts.Add
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(LaPlage), PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
        Range("A1").Select     'Juste pour sortir du graphe
    Tu ne devrais pas avoir de problème de reproduction de l'ancien graphe...

    Tu dis

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    rebonjour

    est il possible de voir l'ensemble de la procedure , nottament la methode utilisée pour supprimer les anciens graphiques . il n'y a pas de raison que les anciennes series s'affichent dans un nouveau graphique



    bonne journée
    michel

  10. #10
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    ' GRAPHIQUE 5
        Me.lbl_etape.Caption = "En cours : étape 11/12"
        DoEvents
        debut = debut2
     
        Set xlSheet = xlBook.Worksheets("tableaux_unites")
        nbcol = 2
        Do
            nbcol = nbcol + 1
        Loop While xlSheet.Cells(debut, nbcol + 1).Value <> ""
     
        xlapp.ActiveChart.Deselect
     
        Set mychart = xlapp.Charts.Add
        mychart.ChartType = xlLine
        For i = 1 To mychart.SeriesCollection.Count
            mychart.SeriesCollection(1).Delete
        Next i
     
        For i = 3 To nbcol
            mychart.SeriesCollection.NewSeries
            mychart.SeriesCollection(i - 2).Name = "=tableaux_unites!R" & debut & "C" & i
            mychart.SeriesCollection(i - 2).Values = "=tableaux_unites!R" & debut + 1 & "C" & i & ":R" & debut + 12 & "C" & i
        Next i
        mychart.Location WHERE:=xlLocationAsNewSheet, Name:="TauxCumulDom"
        With mychart
            .HasTitle = True
            .ChartTitle.Characters.Text = "Taux cumulés Cimo par unité"
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With
        mychart.HasLegend = False
        mychart.HasDataTable = True
        mychart.DataTable.ShowLegendKey = True
        mychart.Axes(xlValue).Select
        xlapp.Selection.TickLabels.NumberFormat = "0.00%"
     
        If nombre_importation > 1 Then
            For i = 3 To nbcol
                mychart.SeriesCollection(i - 2).Select
                With xlapp.Selection.Border
                    .ColorIndex = 57
                    .Weight = xlThick
                    .LineStyle = xlContinuous
                End With
                With xlapp.Selection
                    .MarkerBackgroundColorIndex = xlNone
                    .MarkerForegroundColorIndex = xlNone
                    .MarkerStyle = xlNone
                    .Smooth = False
                    .MarkerSize = 3
                    .Shadow = False
                End With
            Next i
        End If
     
        Set mychart = Nothing
     
        ' GRAPHIQUE 6
        Me.lbl_etape.Caption = "En cours : étape 12/12"
        DoEvents
        debut = debut3
     
        Set xlSheet = xlBook.Worksheets("tableaux_unites")
        nbcol = 2
        Do
            nbcol = nbcol + 1
        Loop While xlSheet.Cells(debut, nbcol + 1).Value <> ""
     
     
     
        Set mychart = xlapp.Charts.Add
        mychart.ChartType = xlLine
        'For i = 1 To mychart.SeriesCollection.Count
            'mychart.SeriesCollection(1).Delete
        'Next i
        For i = mychart.SeriesCollection.Count To 1 Step -1
            'mychart.SeriesCollection(i).Delete
        Next i
     
     
        'For i = 3 To nbcol
        For i = 3 To mychart.SeriesCollection.Count + 2
            mychart.SeriesCollection.NewSeries
            'mychart.SeriesCollection(i - 2).Name = "=tableaux_unites!R" & debut & "C" & i
            mychart.SeriesCollection(i - 2).Name = xlapp.Sheets("tableaux_unites").Cells(debut, i)
            mychart.SeriesCollection(i - 2).Values = "=tableaux_unites!R" & debut + 1 & "C" & i & ":R" & debut + 12 & "C" & i
        Next i
        mychart.Location WHERE:=xlLocationAsNewSheet, Name:="TauxMobileDom"
        With mychart
            .HasTitle = True
            .ChartTitle.Characters.Text = "Taux mobiles Cimo par unité"
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With
        mychart.HasLegend = False
        mychart.HasDataTable = True
        mychart.DataTable.ShowLegendKey = True
        mychart.Axes(xlValue).Select
        xlapp.Selection.TickLabels.NumberFormat = "0.00%"
     
        If nombre_importation > 1 Then
            For i = 3 To nbcol
                mychart.SeriesCollection(i - 2).Select
                With xlapp.Selection.Border
                    .ColorIndex = 57
                    .Weight = xlThick
                    .LineStyle = xlContinuous
                End With
                With xlapp.Selection
                    .MarkerBackgroundColorIndex = xlNone
                    .MarkerForegroundColorIndex = xlNone
                    .MarkerStyle = xlNone
                    .Smooth = False
                    .MarkerSize = 3
                    .Shadow = False
                End With
            Next i
        End If
    set mychart = nothing
    en fait par supprimer l'ancien graphe j'entend : set mychart =nothing.

    ça serait un peu long d'afficher les 6, voila les 2 derniers. les 5 premiers n'ont jamais d'erreurs, c'est seulement le dernier qui me fait toujours une erreur.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Déjà, si tu mettais de

    Set mychart = xlapp.Charts.Add
    à
    Set mychart = Nothing
    dans une procédure indépendante, avec Debut et le nom du graphe en paramètres, tu n'aurais à l'écrire qu'une fois.
    Pour ces deux variables, tu pourrais faire un tableau
    Ensuite, tu n'aurais qu'à faire une boucle sur le nbre de tableaux que tu veux créer, appeler la procédure avec Debut() et nom() indexés

    Te réduirait par 6 le risque d'une erreur de code mal recopié.
    Par exemple, pourquoi une fois
    For i = 3 To nbcol
    et une fois
    For i = 3 To mychart.SeriesCollection.Count + 2
    A part ça, je ne vois pas

    A+

Discussions similaires

  1. VBA-Excel Erreur dans syntaxe requete en utilisant ADO
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/10/2006, 14h23
  2. VBA-EXCEL erreur de caractère ' dans requete
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2006, 08h42
  3. [VBA-Excel] Erreur automation
    Par argv666 dans le forum Macros et VBA Excel
    Réponses: 27
    Dernier message: 18/09/2006, 19h03
  4. [VBA][EXCEL]Erreur '1004' avec "Application.Run"
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2006, 10h50
  5. [VBA EXCEL] Problème d'éxécution avec graphiques
    Par RedBurn dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/11/2005, 09h55

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