VBA problème avec la fonction Cut et Paste
Bonjour,
Je suis novice dans les macros et je suis en train de travailler sur un fichier avec plusieurs macros. Il y en a une qui me pose problème. Il s'agit de créer des graphes pour plusieurs feuilles et pour chaque graphe, je le coupe et colle à l'endroit voulu pour modifier sa position. Le problème est que de temps en temps j'ai un message d'erreur du type "La méthode CUT ou PASTE a échoué". Je ne l'ai pas tout le temps ce message d'erreur !
Voici le code de cette macro:
Sub grapheeuro()
'
' grapheeuro Macro
' Création du graphe en euro
Sheets("BD").Select 'On sélectionne la feuille BD
Dim DV As String ' On crée la variable DV
For J = 2 To 100 ' On parcours une boucle qui sélectionne chaque onglet DV
If Range("B" & J).Value <> "" Then
DV = Range("B" & J).Value
Sheets(DV).Select
Cells.Select
Cells.EntireColumn.AutoFit 'On spécifie des valeurs de largeur de colonne pour la mise en forme
Columns("J:J").Select
Selection.ColumnWidth = 2
Columns("K:U").Select
Selection.ColumnWidth = 10.78
Range("O1").Select
For I = 1 To 600 'On crée une boucle qui parcourt la colonne O. A chaque fois qu'il y a un "1" (ce qui correspond à une DV ou MU), on crée un graphe.
If Range("O" & I).Value = "1" Then
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select 'Création d'un graphe avec barres empilées
With ActiveChart ' on supprime la première série générée automatiquement par excel
Do Until .SeriesCollection.Count = 0
.SeriesCollection(1).Delete
Loop
End With
'On crée les séries du graphe
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "Mois N"
ActiveChart.FullSeriesCollection(1).Values = ActiveSheet.Range("B" & I + 8 & ",B" & I + 9 & ",B" & I + 10 & ",B" & I + 11 & ",B" & I + 18 & ",B" & I + 20)
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(2).Name = "Mois N-1"
ActiveChart.FullSeriesCollection(2).Values = ActiveSheet.Range("C" & I + 8 & ",C" & I + 9 & ",C" & I + 10 & ",C" & I + 11 & ",C" & I + 18 & ",C" & I + 20)
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(3).Name = "Année N"
ActiveChart.FullSeriesCollection(3).Values = ActiveSheet.Range("D" & I + 8 & ",D" & I + 9 & ",D" & I + 10 & ",D" & I + 11 & ",D" & I + 18 & ",D" & I + 20)
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(4).Name = "Année N-1"
ActiveChart.FullSeriesCollection(4).Values = ActiveSheet.Range("E" & I + 8 & ",E" & I + 9 & ",E" & I + 10 & ",E" & I + 11 & ",E" & I + 18 & ",E" & I + 20)
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(5).Name = "Budget"
ActiveChart.FullSeriesCollection(5).Values = ActiveSheet.Range("F" & I + 8 & ",F" & I + 9 & ",F" & I + 10 & ",F" & I + 11 & ",F" & I + 18 & ",F" & I + 20)
ActiveChart.FullSeriesCollection(1).XValues = ActiveSheet.Range("A10,A11,A12,A13,A20,A22") 'On met les légendes
ActiveChart.ChartTitle.Text = "Avancement matériel en montant €" 'On nomme le graphe
ActiveChart.ChartStyle = 202
ActiveChart.SetElement (msoElementPrimaryValueAxisShow) 'On montre les axes
ActiveChart.SetElement (msoElementChartTitleAboveChart) 'On affiche le titre
ActiveChart.SetElement (msoElementDataTableWithLegendKeys) 'On met la table des valeurs avec la légende en-dessous du graphe
xx = Right(ActiveChart.Name, Len(ActiveChart.Name) - 7) ' on définit une variable qui qui récupère le nom du graphique
ActiveSheet.Shapes(xx).ScaleWidth 1.5, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes(xx).ScaleHeight 1.8, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.ChartObjects(xx).Cut 'on sélectionne le graphe
'on le coupe
ActiveSheet.Paste Destination:=ActiveSheet.Range("K" & I + 1) 'on le met à l'endroit voulu
Else
End If
Range("O" & I + 1).Select
Next I
Else
End If
Sheets("BD").Select
Range("B" & J + 1).Select
Next J
'
End Sub
Quelqu'un a-t-il une solution ? J'ai essayé de vider le presse papier dans la boucle (ajout de Application cut copy mode = False) mais ça ne résout pas le problème...