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.Close

Christophe

Bonjour,

N'auriez pas intérêt à réaliser ce travail en deux étapes ?

  1. Exporter vos images dans un répertoire dédié.
  2. 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 Sub

Bonjour,

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

Rechercher des sujets similaires à "error 1004 suite copypicture puis picture paste second classeur"