Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 17h32   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
Par défaut Effacer toutes les séries d'un graphique

Bonjour,

J'ai créé une macro qui modifie les séries d'un graphique. Problème : je n'arrive pas à effacer toutes les séries existantes avant de lancer le processus. Damned !!

Voilà le code que j'utilise :

Code :
1
2
3
4
5
ActiveSheet.Shapes("CompanyChart").Select
 
Do Until ActiveChart.SeriesCollection.Count = 0
    ActiveChart.SeriesCollection(1).Delete
Loop
Et Excel me dit : "Delete method of serie class failed".

Où est l'erreur ?
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 19h30   #2
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Je crois qu'il s'agit d'un bug. (également constaté)
Essaye avec de changer le type de série le temps de la suppression :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
With ActiveSheet.ChartObjects("Graphique 1").Chart
  Dim sType As XlChartType
  sType = .ChartType  ' sauvegarde le type courant
  .ChartType = xlArea
 
   Do Until .SeriesCollection.Count = 0
        .SeriesCollection(1).Delete
    Loop
 
   .ChartType = sType  ' restaure le type de série
End With
Sinon de quel type de séries s'agit-il ?

Code :
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
xlLine. Courbes 
xlLineMarkersStacked. Courbes empilées avec marqueurs 
xlLineStacked. Courbes empilées 
xlPie. Secteurs 
xlPieOfPie. Secteurs de secteurs 
xlPyramidBarStacked. Barres pyramidales empilées 
xlPyramidCol. Histogramme pyramidal 3D 
xlPyramidColClustered.  Histogramme pyramidal en cluster 
xlPyramidColStacked. Histogramme pyramidal empilé 
xlPyramidColStacked100. Histogramme pyramidal empilé à 100 % 
xlRadar. Radar 
xlRadarFilled. Radar plein 
xlRadarMarkers. Radar avec indicateurs de données 
xlStockHLC. Max-Min-Clôture 
xlStockOHLC.  Ouverture-Max-Min-Clôture 
xlStockVHLC.  Volume-Max-Min-Clôture 
xlStockVOHLC.  Volume-Ouverture-Max-Min-Clôture 
xlSurface. Surface 3D 
xlSurfaceTopView. Surface (vue du dessus) 
xlSurfaceTopViewWireframe.  Surface (Structure vue de dessus) 
xlSurfaceWireframe. Surface 3D (structure) 
xlXYScatter. Nuages de points 
xlXYScatterLines. Nuages de points avec courbes 
xlXYScatterLinesNoMarkers.  Nuages de points avec courbes et sans indicateurs de données 
xlXYScatterSmooth. Nuages de points avec courbes lissées 
xlXYScatterSmoothNoMarkers.  Nuages de points avec courbes lissées et sans indicateurs de données 
xl3DArea. Aires 3D 
xl3DAreaStacked. Aires 3D empilées 
xl3DAreaStacked100. Aires empilées 100 % 
xl3DBarClustered. Barres 3D en cluster 
xl3DBarStacked. Barres 3D empilées 
xl3DBarStacked100. Barres 3D empilées 100 % 
xl3DColumn. Histogramme 3D 
xl3DColumnClustered. Histogramme 3D en cluster 
xl3DColumnStacked. Histogramme 3D empilé   
xl3DColumnStacked100. Histogramme 3D empilé 100 % 
xl3DLine. Courbes 3D 
xl3DPie. Secteurs 3D 
xl3DPieExploded.Secteurs 3D éclatés 
xlArea. Aires 
xlAreaStacked. Aires empilées 
xlAreaStacked100. Aires empilées 100 % 
xlBarClustered. Barres en cluster 
xlBarOfPie. Barres de secteurs 
xlBarStacked. Barres empilées 
xlBarStacked100. Barres empilées 100 % 
xlBubble. Bulles 
xlBubble3DEffect. Bulles avec effets 3D 
xlColumnClustered. Histogramme en cluster 
xlColumnStacked. Histogramme empilé 
xlColumnStacked100. Histogramme empilé 100 % 
xlConeBarClustered. Barres coniques en cluster 
xlConeBarStacked. Barres coniques empilées 
xlConeBarStacked100. Barres coniques empilées 100 % 
xlConeCol. Histogramme conique 3D 
xlConeColClustered. Histogramme conique en cluster 
xlConeColStacked. Histogramme conique empilé 
xlConeColStacked100. Histogramme conique empilé 100 % 
xlCylinderBarClustered.  Barres cylindriques en cluster 
xlCylinderBarStacked. Barres cylindriques empilées 
xlCylinderBarStacked100. Barres cylindriques empilées 100 % 
xlCylinderCol. Histogramme en cylindres 3D 
xlCylinderColClustered.  Histogramme conique en cluster 
xlCylinderColStacked. Histogramme conique empilé 
xlCylinderColStacked100. Histogramme en cylindres empilés 100 % 
xlDoughnut. Anneau 
xlDoughnutExploded. Anneau éclaté 
xlLineMarkers. Courbes avec marqueurs 
xlLineMarkersStacked100. Courbes empilées 100 % avec marqueurs 
xlLineStacked100. Courbes empilées 100 % 
xlPieExploded. Secteurs éclatés 
xlPyramidBarClustered.  Barres pyramidales en cluster 
xlPyramidBarStacked100. Barres pyramidales empilées 100 %
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 20h15   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
Bonsoir,

Merci pour cette réponse. C'est un graphique de type xlLine.

J'ai essayé la solution que vous proposez, mais Excel renvoit l'erreur suivante :

Citation:
Type Mismatch
Une idée ?

Ci dessous un fragment du code avec votre ajout :

Code :
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
ActiveSheet.Shapes("CompanyChart").Select
 
With ActiveSheet.ChartObjects("CompanyChart").Chart
  Dim sType As XlChartType
  sType = .ChartType  ' sauvegarde le type courant
  .ChartType = xlArea
 
   Do Until .SeriesCollection.Count = 0
        .SeriesCollection(1).Delete
    Loop
 
   .ChartType = sType  ' restaure le type de série
End With
 
'Création de la série 1
 
If Not Cells(705, 1) = "n.a." Then
 
With ActiveChart
    .SeriesCollection.NewSeries
    .SeriesCollection(1).ChartType = xlLine
    .SeriesCollection(1).XValues = Cells(714, 2).Value
    .SeriesCollection(1).Values = Cells(715, 2).Value
    .SeriesCollection(1).Name = Cells(705, 1).Value
    .SeriesCollection(1).MarkerStyle = xlNone
    With .SeriesCollection(1).Border
        .ColorIndex = 17
        .Weight = xlMedium
        .LineStyle = xlContinuous
    End With
End With
 
End If
 
'Création de la série 2
 
If Not Cells(706, 1) = "n.a." Then
 
With ActiveChart
    .SeriesCollection.NewSeries
    .SeriesCollection(1).ChartType = xlLine
    .SeriesCollection(2).XValues = Cells(717, 2).Value
    .SeriesCollection(2).Values = Cells(718, 2).Value
    .SeriesCollection(2).Name = Cells(706, 1).Value
    .SeriesCollection(2).MarkerStyle = xlNone
    With .SeriesCollection(2).Border
        .ColorIndex = 18
        .Weight = xlMedium
        .LineStyle = xlContinuous
    End With
End With
 
End sub
Merci beaucoup pour votre aide.
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 20h40   #4
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Re

Citation:
Excel renvoit l'erreur suivante :Type Mismatch
Sur quelle ligne de code ?
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 21h40   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
Sur la 12 :

Code :
.ChartType = sType  ' restaure le type de série
J'ai essayé en commentant cette ligne et en ajoutant les autres variables avec

Code :
.SeriesCollection(1).ChartType = xlLine
Mais quand je relance la macro certaines variables ne disparaissent pas toujours.
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 21h53   #6
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Re.

Et avec ? sans référence à .SeriesCollection(1)

Pou infos j'utilise régulièrement une méthode similaire avec le type xlXYScatterLines
Et je ne rencontre plus de problème depuis l'utilisation de cette astuce.
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 21h54   #7
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Testé sur un graphique de type Ligne sur Excel 2010
Code :
1
2
3
4
5
With ActiveSheet.ChartObjects("Graphique 1").Chart    'à adapter le nom de l'objet graphique
    Do While .SeriesCollection.Count > 0
        .SeriesCollection(1).Delete
    Loop
End With
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 22h29   #8
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Sous XLS2003, le code plante avec le message d'erreur "Delete method of serie class failed" (ou son équivalent Français)
lorsque les cellules contenant les valeurs des séries sont vides.


Exemple ci-joint. (cliquer sur le bouton pour lancer la suppression selon le code ci-dessous).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
   Range("A1:C32").ClearContents
 
   With ActiveSheet.ChartObjects("Graphique 1").Chart
         'Dim sType As XlChartType
         'sType = .ChartType
         '.ChartType = xlArea
 
         Do Until .SeriesCollection.Count = 0 
            .SeriesCollection(1).Delete
         Loop
 
         '.ChartType = sType
    End With
Sous XLS2003, en enlevant les commentaires (pour activer les lignes), le problème est corrigé.

[Edit : le problème est le même avec un boucle en Do While .SeriesCollection.Count > 0 ]
Fichiers attachés
Type de fichier : zip Tst suppr serie.zip (9,2 Ko, 1 affichages)
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 22h44   #9
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
Mmmmh, ça a l'air de marcher. Merci beaucoup.
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 22h55   #10
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Content qu'une solution ait été trouvé

Juste pour mon info, quelle est finalement la solution adoptée ?
(il a fallu changé le type de série temporairement ou ça n'a pas été nécessaire ?)

Sur quelle version d'Excel se produisait ce problème ?
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2012, 17h45   #11
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 46
Points : 12
Points : 12
Le problème se produisait sur Excel 2003.

Voici finalement le bout de code choisi :

Code :
1
2
3
4
5
6
With ActiveSheet.ChartObjects("SectorChart").Chart
  .ChartType = xlArea 
  Do Until .SeriesCollection.Count = 0 'boucle supprimant toutes les séries jusqu'à ce qu'on arrive à zéro
       .SeriesCollection(1).Delete
  Loop
End With
Merci beaucoup.
shimuno est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h22.


 
 
 
 
Partenaires

Hébergement Web