Différence macro pas à pas vs exécution complète malgré application.wait

Bonsoir à tous,

je vous écris concernant un problème rencontré sur une macro qui me sélectionne une plage sous excel puis l'enregistre en format JPG à un emplacement donné.
Elle fonctionne très bien lorsque je la test en mode pas à pas mais lorsque je la lance en complet cela ne donne pas le même résultat. En mode éxécution, l'image enregistrée est blanche et encadrée (fond du graphique crée).

J'ai essayé d'insérer Application.Wait (Now + TimeValue("0:00:05")) aux endroits clés mais rien n'y fait, je n'ai que les fonds blancs d'enregistrés vs l'image souhaité en mode pas à pas.

Pouvez vous svp m'aider si quelqu'un a déjà connu ce cas ?

Merci beaucoup.

Sub creation_images()

Dim i As Variant
Dim dept As Variant
Dim nom As Variant
Dim plage As Range

Sheets("Pivot").Select

i = 2

While Cells(i, 1) <> ""

dept = Cells(i, 1)
nom = Cells(i, 3)
Sheets(dept).Select

With Sheets(dept)

Set plage = .Range("D10:Q389")

plage.CopyPicture
 With .ChartObjects.Add(plage.Left, plage.Top, plage.Width, plage.Height).Chart
        .Paste
        .Export "C:\Users\pchatela\Desktop\Frais Généraux\Dept FGX fichiers détail\" & dept & "\" & nom & ".jpg"

 End With
   .ChartObjects(.ChartObjects.Count).Delete

End With

Sheets("Pivot").Select

i = i + 1

Wend

End Sub

Bonsoir,

j'ai eu un problème équivalent lors du développement d'une application :

Sur un USF je donnais la possibilité de choisir une catégorie d'activité ainsi qu'une activité, et sur ce USF une représentation du choix était fait dans un contrôle image avec un copier/coller de l'image de la cellule correspondant au choix, le principe :

Dans un shape nommé "Choix" je copier coller l'image de la cellule, ce qui me permet après d'exporter l'image du shape en jpg pour enfin l'intégrer dans le contrôle image. Le code :

Private Sub ComboBox2_Change() ' type de catégorie
    Dim Col As Integer, Lig As Integer, S
    With Base_Données
        If ComboBox2.Value <> "" And ComboBox2.ListIndex <> -1 Then
            Col = ComboBox1.ListIndex + 1 + (ComboBox1.ListIndex * 2)
            Lig = ComboBox2.ListIndex + 2
            .Cells(Lig, Col + 1).Copy Destination:=[Mémoire]
            .Cells(Lig, Col).Copy Destination:=[Titre_Mémoire]
            .Cells(Lig, Col + 2).Copy Destination:=[Temps_Mémoire]
            If Col = 1 Then Action = 3 Else Action = 2

            On Error Resume Next
                .Shapes("Choix").Delete
            On Error GoTo 0
            .Cells(Lig, Col + 1).Copy
            .Pictures.Paste.Name = "Choix"
            Application.CutCopyMode = False
            Set S = .Shapes("Choix")
            S.CopyPicture xlScreen, xlBitmap
            With S.Parent.ChartObjects.Add(0, 0, S.Width, S.Height).Chart
                While .Shapes.Count = 0
                    DoEvents
                    .Paste
                Wend
                .Export "Monimage.jpg", "Jpg"
                .Parent.Delete
            End With
            Me.Image1.PictureSizeMode = 0
            Me.Image1.Picture = LoadPicture("Monimage.jpg")
            Kill "Monimage.jpg"
        Else
            Action = 0
        End If
    End With
End Sub

J'efface l'éventuel shape ayant pour nom Choix, car en effet il y en avait un de créer à chaque lancement de code et du coup seul le premier était lu lors de l'extraction en jpg...

Je copie la cellule, dans mon cas, dans le votre ce sera la plage.
On colle l'image de cette plage dans un shape avec le nom "Choix".
on annule la sélection de copie.
On attribue à "S" le shape "Choix", on le copie en tant que BitMap.
Dans une boucle que je ne comprend pas on le colle puis l'exporte en jpg et on efface le parant de S.
Ensuite cette image je l'intègre dans le contrôle image du USF et j'efface le fichier "temporaire" créé jpg.

Par rapport à votre code c'est la partie "While /DoEvents/Past/When" qui vous manque...

@ bientôt

LouReeD

Bonsoir,

Essayer ce code :

Sub creation_images()

    Dim i As Variant
    Dim dept As Variant
    Dim nom As Variant
    Dim plage As Range

    Sheets("Pivot").Select

    i = 2

    While Cells(i, 1) <> ""

        dept = Cells(i, 1)
        nom = Cells(i, 3)
        Sheets(dept).Select

        With Sheets(dept)

            Set plage = .Range("D10:Q389")

            plage.CopyPicture
            With .ChartObjects.Add(plage.Left, plage.Top, plage.Width, plage.Height)
                .Select
                With .Chart
                    .Paste
                    .Export "C:\Users\pchatela\Desktop\Frais Généraux\Dept FGX fichiers détail\" & dept & "\" & nom & ".jpg"
                End With
            End With

            .ChartObjects(.ChartObjects.Count).Delete

        End With

        Sheets("Pivot").Select

        i = i + 1

    Wend

End Sub

NB: Apprenez à indenter votre code, cela le rendra plus lisible pour tous

GENIAL Thev, cela fonctionne cette fois ! Merci beaucoup !

Pour ma compréhension (je débute en VBA avec Outlook) qu'est ce qui change par rapport au code initial ?

Merci également à LouReeD pour sa réponse.

Pour ma compréhension (je débute en VBA avec Outlook) qu'est ce qui change par rapport au code initial ?
Le ".Select". Il faut sélectionner l'objet sur lequel appliquer le collage. Un des rares cas où l'instruction "Select" est vraiment nécessaire.
Rechercher des sujets similaires à "difference macro pas execution complete application wait"