[RESOLU] mail auto s'affiche bien mais ne s'envoie pas

mail auto s'affiche bien mais ne s'envoie pas [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 20-01-2023 à 23:13:50    

Bonjour,
 
3 jours que je suis dessus, là je craque.
J'essaye d'envoyer un mail automatiquement depuis Excel.
ce que je ne comprends pas c'est que la méthode display fonctionne, mais pas la send, et l'idée c'est que justement cela s'envoie tout seul...
ci dessous le code.
 

Code :
  1. Sub envoimail2()
  2. Dim CeFichier As String
  3. CeFichier = ThisWorkbook.Name
  4. Dim oOutlook As Object
  5. Set oOutlook = CreateObject("Outlook.Application" )
  6. Dim oMail As Object
  7. Set oMail = oOutlook.CreateItem(0)
  8. Dim oObjetWord As Object
  9. Set oObjetWord = oMail.GetInspector.WordEditor
  10. With oMail
  11.     .To = Workbooks(CeFichier).Worksheets("surveillance" ).Range("K2" )
  12.     .Subject = Workbooks(CeFichier).Worksheets("surveillance" ).Range("K4" )
  13. 'ca, ca marche, mais il me faut envoyer un tableau
  14. '    .Body = Workbooks(CeFichier).Worksheets("surveillance" ).Range("C2" )
  15. '    .Send
  16. 'ca, ca marche aussi mais c'est display
  17. '     Workbooks(CeFichier).Worksheets("surveillance" ).Range("C2:F3" ).Copy
  18. '    oObjetWord.Range(0).Paste
  19. '    .Display
  20. 'ca, ca ne marche pas, ca bloque sur .send avec Erreur 5
  21. 'argument ou appel de procédure incorrect
  22.      Workbooks(CeFichier).Worksheets("surveillance" ).Range("C2:F3" ).Copy
  23.      oObjetWord.Range(0).Paste
  24.     .Send
  25.    
  26. End With


 
Vous auriez des pistes?


Message édité par wago le 22-01-2023 à 22:20:56
Reply

Marsh Posté le 20-01-2023 à 23:13:50   

Reply

Marsh Posté le 22-01-2023 à 20:17:01    

Alors solution trouvée, et c'était clairement pas si simple, un grand merci à BrunoM45 du forum developpez.net:
 
 

Code :
  1. Option Explicit
  2. ' Forum : https://www.developpez.net/forums/d [...] -vba-excel
  3. ' https://www.developpez.net/forums/u20954/brunom45/
  4. ' Constante type d'élément Outlook (pour le late binding)
  5. Const olMailItem As Integer = 0
  6. ' Constantes Formats de l'email
  7. Const olFormatHTML As Integer = 2
  8. ' Ce code permet d'intégrer une plage donnée dans le corps d'un mail
  9. Private Sub EnvoiMailAvecImg()
  10.   Dim OutApp As Object, OutMail As Object
  11.   Dim RngAcopier As Range
  12.   Dim StrHTML As String
  13.  
  14.   ' Définir la plage des cellules à envoyer
  15.   Set RngAcopier = ThisWorkbook.Sheets("surveillance" ).Range("C2:F3" )
  16.   ' Avec l'application
  17.   With Application
  18.     .EnableEvents = False ' Désactiver les évènements
  19.     .ScreenUpdating = False ' Désactiver le rafraichissement
  20.   End With
  21.   ' Créer une instance Outllok et Mail
  22.   Set OutApp = CreateObject("Outlook.Application" )
  23.   Set OutMail = OutApp.CreateItem(olMailItem)
  24.   With OutMail
  25.     .BodyFormat = olFormatHTML  ' Format HTML
  26.     .To = ThisWorkbook.Worksheets("surveillance" ).Range("K2" )
  27.     '.CC = "LaCopie@fai.fr"
  28.     '.BCC = "LaCopieCachee@fai.fr"
  29.     .Subject = ThisWorkbook.Worksheets("surveillance" ).Range("K4" )
  30.     StrHTML = "Bonjour, <br>" & "Vous trouverez ci-dessous le tableau"
  31.     .HTMLBody = StrHTML & RangetoHTML(RngAcopier)
  32.     .Send   'or use .Display
  33.   End With
  34.   With Application
  35.     .EnableEvents = True
  36.     .ScreenUpdating = True
  37.   End With
  38.   ' Effacer les variables objet
  39.   Set RngAcopier = Nothing: Set OutMail = Nothing: Set OutApp = Nothing
  40. End Sub
  41. Function RangetoHTML(Rng As Range)
  42.   Dim Fso As Object, Ts As Object
  43.   Dim TempFile As String
  44.   Dim TempWs As Worksheet
  45.   ' Créer le nom du fichier
  46.   TempFile = Environ$("temp" ) & "\" & Format(Now, "dd-mm-yy h-mm-ss" ) & ".htm"
  47.   ' Désactiver le rafraichissement ici aussi
  48.   Application.ScreenUpdating = False
  49.   ' Copier la plage et créer un classeur pour coller les données dedans
  50.   Set TempWs = ThisWorkbook.Worksheets.Add
  51.   Rng.Copy
  52.   With TempWs
  53.     With .Range(Rng.Address)
  54.       .PasteSpecial Paste:=8
  55.       .PasteSpecial xlPasteValues, , False, False
  56.       .PasteSpecial xlPasteFormats, , False, False
  57.     End With
  58.     Application.CutCopyMode = False
  59.     On Error Resume Next
  60.     .DrawingObjects.Visible = True
  61.     .DrawingObjects.Delete
  62.     On Error GoTo 0
  63.   End With
  64.   ' Publier la feuille dans un fichier HTML
  65.   With ThisWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, _
  66.     Filename:=TempFile, Sheet:=TempWs.Name, Source:=Rng.Address, HtmlType:=xlHtmlStatic)
  67.     .Publish (True)
  68.   End With
  69.   ' Lire les données du fichier
  70.   Set Fso = CreateObject("Scripting.FileSystemObject" )
  71.   Set Ts = Fso.GetFile(TempFile).OpenAsTextStream(1, -2)
  72.   RangetoHTML = Ts.readall
  73.   Ts.Close
  74.   RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
  75.     "align=left x:publishsource=" )
  76.   ' supprimer la feuille
  77.   Application.DisplayAlerts = False
  78.   TempWs.Delete
  79.   Application.DisplayAlerts = True
  80.   ' Supprimer le fichier HTML
  81.   Kill TempFile
  82.   ' Effacer les variables objet
  83.   Set Ts = Nothing: Set Fso = Nothing: Set TempWs = Nothing
  84. End Function

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed