Error 1004 suite CopyPicture puis Picture.paste vers un second classeur
Bonjour à tous,
Je recherche depuis quelques temps à rectifier mon code mais sans succès.
Objectif de ma procédure : mettre à jour et copier plusieurs graphiques (tableau de bord) d'un classeur source "Saisie" vers un classeur "Report" au format image et de répéter cette action en créant à chaque fois un nouvel onglet puis de générer un fichier pdf dans lequel on trouvera une page par onglet du classeur "Report".
Le code fonctionne mais il n'est pas stable. régulièrement la procédure génère le message d'erreur 1004 "Method Range of Object Global failed" sur la ligne .CopyPicture mais si je relance la procédure, elle fonctionne. Parfois elle fonctionne une un poste mais pas sur un autre.
Auriez-vous une idée ou une piste pour m'orienter vers un code plus stable ou une méthode élégante pour arriver à ce résultat.
Merci d'avance pour votre aide.
For i = 1 To NB_LINES_TABLE2
' mise à jour de la table source des graphiques sur condition
If wbSaisie.Sheets(SHEET_TABLE2).Cells(i, 6).Value = wbSaisie.Sheets(SHEET_SAISIE).Cells(15, 2).Value Then
wbSaisie.Sheets(SHEET_GRAPHVALUES).Cells(10, 2).Value = wbSaisie.Sheets(SHEET_TABLE2).Cells(i, 4).Value
wbReport.Activate ' Active le classeur de destination "Report"
j = j + 1 ' Le nombre de Tableaux de bords est variable
OngletTDB = "DASHBOARD" & j ' Définit le nom des onglets / un par tableau de bord créé
wbReport.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = OngletTDB ' Ajoute l'onglet pour y coller le tableau de bord
wbSaisie.Activate ' Active le classeur de saisie source "Saisie"
wbSaisie.Worksheets(SHEET_PCSGRAPH).Range("A1:Q52").CopyPicture Appearance:=xlScreen, Format:=xlPicture ' Copie au format image
wbReport.Activate ' Active le classeur de destination "Report"
wbReport.Worksheets(OngletTDB).Pictures.Paste ' Copie l'image dans l'onglet
Call procProprietesImpression ' Formate les propriétés d'impression de l'onglet
End If
Next i
' Génère un fichier "Report" des tableaux de bord
wbReport.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ReportPDF
' Enregistre le fichier XLS contenant un fichier par TDB au format image par onglet
wbReport.SaveAs Filename:=ReportXLS
wbReport.CloseChristophe
Bonjour,
N'auriez pas intérêt à réaliser ce travail en deux étapes ?
- Exporter vos images dans un répertoire dédié.
- Importer les images dans votre nouveau fichier.
Le code ci-dessous exporte des copies d'écran via un chartobject situé dans un onglet dédié. En numérotant vos images, vous n'aurez aucun mal à les réimporter dans l'ordre.
Option Explicit
Sub TestCreationImage()
CreationImage "D:\Documents\VBA Excel\Images\Export Jpeg\Images\", Range("TableauClients"), "1-Image.jpeg"
End Sub
Sub CreationImage(ByVal CheminImage As String, ByVal AireImage As Range, ByVal NomImage As String)
Dim ShChart As Worksheet
Dim ShapeChObj As ChartObject
Set ShChart = Sheets("Image")
Set ShapeChObj = ShChart.ChartObjects.Add(10, 10, AireImage.Width, AireImage.Height)
AireImage.CopyPicture xlScreen, xlBitmap
Application.DisplayAlerts = False
With ShapeChObj
.Chart.ChartArea.Select
.Chart.Paste
.Chart.Export CheminImage & NomImage
.Delete
End With
Application.DisplayAlerts = True
Set ShapeChObj = Nothing: Set ShChart = Nothing
End SubBonjour,
Merci beaucoup pour ces éléments très intéressants. Je vais essayer de m'y plonger afin de réécrire ma procédure.
Bien à vous,
Christophe