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 SubBonsoir,
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 SubJ'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
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 SubNB: 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.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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.