Range de cellule dans corps de mail ne fonctionne pas
Bonjour au forum,
J'ai une procédure qui me permet d'envoyer 3 images dans un corps de mail, à partir de 3 plages de cellules.
Je rencontre aléatoirement un problème sur l'image n°1 (et uniquement celle-ci) qui parfois est vide.
Je ne trouve pas de raisons particulières, ce n'est pas dépendant du poste, ni de l'utilisateur, etc.
J'avais déjà posté pour ce problème il y a quelque temps et on m'avait recommandé de mettre un timer d'attente entre chaque génération d'image.
Malheureusement, le problème persiste malgré tout (je suis actuellement à une attente de 600ms entre chaque génération).
Auriez-vous une idée du problème ?
Option Explicit
Option Private Module
Sub Attendre()
Dim t1, t2
t1 = Timer
t2 = Timer + 0.6 'attendre 600 ms
Do
DoEvents
Loop While t1 <= Timer And Timer < t2
End Sub
Sub Chrt_Delete()
Err.Clear
On Error Resume Next
Do While Err.Number = 0 'normalement il n'y a qu'une image
Sheets("Graphique").Shapes(1).Delete
Loop
Attendre
On Error GoTo 0
End Sub
Sub EnvoiMail()
Dim oRange1, oRange2, oRange3 As Range
Dim oCht1 As Chart
Dim oImg As Picture
Dim objOL As Object, ObjMail As Object
Dim oAttach1, oAttach2, oAttach3 As Object, ColAttach As Object
Dim DestinatairesPrincipaux, DestinatairesCopie As String
Dim i As Long
'---------------------------------------------------------------------------------------------
Application.CutCopyMode = False
Application.ScreenUpdating = False
'---------------------------------------------------------------------------------------------
Set oCht1 = Sheets("Graphique")
oCht1.Visible = xlSheetVisible
Chrt_Delete
Set oRange1 = Sheets("Tableau de bord").Range("B10:G39")
oRange1.CopyPicture xlScreen, xlPicture
Attendre
oCht1.Paste
oCht1.Export Filename:="C:\Documents\Stock.jpg", Filtername:="JPG"
'---------------------------------------------------------------------------------------------
Chrt_Delete
Set oRange2 = Sheets("Tableau de bord").Range("L10:O39")
oRange2.CopyPicture xlScreen, xlPicture
Attendre
oCht1.Paste
oCht1.Export Filename:="C:\Documents\Alerte.jpg", Filtername:="JPG"
'---------------------------------------------------------------------------------------------
Chrt_Delete
Set oRange3 = Sheets("Tableau de bord").Range("T10:AB39")
oRange3.CopyPicture xlScreen, xlPicture
Attendre
oCht1.Paste
oCht1.Export Filename:="C:\Documents\Tendance.jpg", Filtername:="JPG"
'---------------------------------------------------------------------------------------------
Set objOL = CreateObject("Outlook.Application")
Set ObjMail = objOL.createitem(0)
Set ColAttach = ObjMail.Attachments
Set oAttach1 = ColAttach.Add("C:\Documents\Stock.jpg") 'Changer le chemin et le nom de l'image
Set oAttach2 = ColAttach.Add("C:\Documents\Alerte.jpg") 'Changer le chemin et le nom de l'image
Set oAttach3 = ColAttach.Add("C:\Documents\Tendance.jpg") 'Changer le chemin et le nom de l'image
'---------------------------------------------------------------------------------------------
With ObjMail
.To = "Monemail@domaine.fr" ' changer email
'.CC = DestinatairesCopie
'.BCC = ""
.Subject = "blabla"
.HTMLBody = "<BODY><FONT face=Arial color=#000080 size=2></FONT>" & _
"Bonjour, <br><br> Veuillez trouver ci-joint un récapitulatif de l'état du stock au " _
& Date & " à " & Time & " (Normes ISO incluses) : <br><br> <IMG src=cid:Stock.jpg> <br><br> <IMG src=cid:Alerte.jpg> <br><br> <IMG src=cid:Tendance.jpg> <br><br> Bonne journée !</BODY>" 'Nom de l'image sans chemin
Attendre
ObjMail.Save
.Send
End With
'---------------------------------------------------------------------------------------------
Set oAttach1 = Nothing
Set oAttach2 = Nothing
Set oAttach3 = Nothing
Set ColAttach = Nothing
Set ObjMail = Nothing
Set objOL = Nothing
'---------------------------------------------------------------------------------------------
oCht1.Visible = xlSheetVeryHidden
'---------------------------------------------------------------------------------------------
Application.ScreenUpdating = True
End Sub
- Messages
- 4'094
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Peut être tout simplement, ne pas désactiver la mise à jour de l'écran (mise en commentaire)
'Application.ScreenUpdating = False
Bonjour Thev,
J'ai testé votre proposition mais malheureusement le problème persiste...
Auriez-vous d'autres idées ?
bonjour,
0.6 sec est déjà beaucoup !?!
Je commencerais par ajouter un nouveau "Attendre" après "oCht1.paste", uniquement pour votre 1ere image et si cela ne fonctionne pas encore, un autre après le "Set oRange1=...." . A ce point, si tout fonctionne, peut-être ce vous pouvez réduire ce temps d'attendre de 0.6 à ... 0.4 (?).
Vous utilisez ceci avec Exce2013 ou 365 ?
Bonjour,
Croquignol des Pieds Nickelés vous suggère d'en faire une quatrième qui prendra la place de la première.
Nb : Je décline toute responsabilité dans cette proposition...
Bonjour BsAlv,
Merci pour la proposition, je vais tester cela dans la journée.
J'utilise Excel 365. Et effectivement, 600ms est beaucoup, mais j'y suis allé par palier, et le problème persistait à chaque fois. Cela dit, parfois cela fonctionne sans même aucun appel à "Attendre".
@Eric, c'est une idée qui mérite réflexion en effet ! Merci !
Re,
Malheureusement cela ne fonctionne toujours pas, malgré les ajouts des deux procédures "Attendre".
Je commence à désespérer
re,
système "Eric Kergresse"
'---------------------------------------------------------------------------------------------
Set oCht1 = Sheets("Graphique")
oCht1.Visible = xlSheetVisible
For i = 1 To 2
Chrt_Delete
Set oRange1 = Sheets("Tableau de bord").Range("B10:G39")
oRange1.CopyPicture xlScreen, xlPicture
Attendre
oCht1.Paste
oCht1.Export Filename:="C:\Documents\Stock.jpg", Filtername:="JPG"
Next
'---------------------------------------------------------------------------------------------
Re,
Et bien même cette solution ne fonctionne pas...
C'est incompréhensible ce truc
Y-a-t-il quelque chose spécial dans la première plage ?
Donc si on échange le premier et le 2ième, on commence avec "alerte" au lieu de "stock", alors la problème se déplace aussi ?
Oui le problème se déplace, du coup ma plage de cellule "Stock" est bien là mais c'est "Alerte" qui ne s'affiche pas.
Je suis en train de tester une variante du système Eric Kergresse :
Set oCht1 = Sheets("Graphique")
oCht1.Visible = xlSheetVisible
Chrt_Delete
Set oRange1 = Sheets("Tableau de bord").Range("B10:G39")
oRange1.CopyPicture xlScreen, xlPicture
'Attendre
oCht1.Paste
oCht1.Export Filename:="P:\MGL-SHARE\Labo LIHT\NREV\Tests\Stock.jpg", Filtername:="JPG"
'-----------------------------------------------------------------------------------------------------------------------
Chrt_Delete
Set oRange2 = Sheets("Tableau de bord").Range("L10:O39")
oRange2.CopyPicture xlScreen, xlPicture
'Attendre
oCht1.Paste
oCht1.Export Filename:="P:\MGL-SHARE\Labo LIHT\NREV\Tests\Alerte.jpg", Filtername:="JPG"
'-----------------------------------------------------------------------------------------------------------------------
Chrt_Delete
Set oRange3 = Sheets("Tableau de bord").Range("T10:AB39")
oRange3.CopyPicture xlScreen, xlPicture
'Attendre
oCht1.Paste
oCht1.Export Filename:="P:\MGL-SHARE\Labo LIHT\NREV\Tests\Tendance.jpg", Filtername:="JPG"
'-----------------------------------------------------------------------------------------------------------------------
Chrt_Delete
Set oRange1 = Sheets("Tableau de bord").Range("B10:G39")
oRange1.CopyPicture xlScreen, xlPicture
Attendre
oCht1.Paste
oCht1.Export Filename:="P:\MGL-SHARE\Labo LIHT\NREV\Tests\Stock.jpg", Filtername:="JPG"
Pour l'instant, ça à l'air de fonctionner (même sans les "Attendre").
Mais vu que le problème est aléatoire, je vais attendre un peu