Macro copy/send qui fonctionnait sur XP et plus sur Windows 7

Macro copy/send qui fonctionnait sur XP et plus sur Windows 7 - VB/VBA/VBS - Programmation

Marsh Posté le 18-07-2016 à 09:52:38    

Bonjour à tous,
 
Voilà, pour le travail, j'avais une macro qui copiait un tableau et l'envoyait via Outlook mais depuis que j'ai migré de XP à Wds 7, elle fonctionne plus. Le bug arrive au moment où le tableau doit être copié.  Je reçois un message plutôt général comme "method or data member not found".
 
J'ai essayé de chercher des pistes sur le net mais je ne trouve pas, je vous remercie pour votre aide.
 
Apparemment il y a des balises C/C pour les codes mais honnêtement, je ne comprends pas de quoi il s'agit, si vous m'expliquez, je modifierai le codes dans le format désiré.
 
Voici le code:
 

Code :
  1. Option Explicit
  2. Sub CreateEmail()
  3. 'create picture files
  4. Dim rng As Range
  5. Dim strFolder As String
  6. strFolder = ActiveWorkbook.path & "\"
  7. Set rng = Sheet5.Range("v_report" )
  8. If Not ExportRangeToPicture(rng, strFolder & "profile_vol.png" ) Then
  9.     MsgBox "Error while creating png files"
  10.     GoTo ExitProc
  11. End If
  12. 'prepare email
  13. Dim strHTML As String
  14. Dim myOlApp As Variant, myItem As Variant, olMailItem As Variant
  15. Set myOlApp = CreateObject("Outlook.Application" )
  16. Set myItem = myOlApp.CreateItem(olMailItem)
  17. myItem.Subject = Sheet5.Range("em_subject" ).Value
  18. myItem.To = Sheet5.Range("em_to" ).Value
  19. myItem.CC = Sheet5.Range("em_cc" ).Value
  20. 'myItem.Importance = Outlook.OlImportance.olImportanceLow
  21. myItem.Attachments.Add strFolder & "profile_vol.png"
  22. strHTML = "<html><img src='profile_vol.png'><br><br>"
  23. strHTML = strHTML + "</html>"
  24. myItem.HTMLBody = strHTML
  25. myItem.Display
  26. ExitProc:
  27. End Sub
  28. Function ExportRangeToPicture(rng As Excel.Range, img As String) As Boolean
  29. ' save a range from Excel as a picture
  30. ' rng = Range to export
  31. ' img = filename & path
  32. ' basic error checking
  33. ' check for valid filetypes
  34. ' from http://peltiertech.com/WordPress/e [...] mage-file/
  35. 'Const FILE_EXT As String = "gif,png,jpg,jpe,jpeg"
  36. 'If InStr(FILE_EXT, LCase$(Right$(img, 3))) = 0 Then
  37. 'GoTo ExitProc
  38. 'End If
  39. ' check for valid path
  40. 'Dim path As String
  41. 'path = Left(img, InStrRev(img, "\" ))
  42. 'If Dir(path, vbDirectory) = "" Then GoTo ExitProc
  43. ' check for valid range
  44. Dim rRng As Range
  45. On Error Resume Next
  46. Set rRng = rng
  47. On Error GoTo 0
  48. If rRng Is Nothing Then GoTo ExitProc
  49. ' check for protected worksheet
  50. If ActiveSheet.ProtectContents Then GoTo ExitProc
  51. ' copy range to picture, put into chart, export it
  52. 'Application.ScreenUpdating = False
  53. rRng.CopyPicture xlScreen, xlBitmap
  54. Dim cht As ChartObject
  55. Set cht = Sheet1.ChartObjects.Add(0, 0, rRng.Width + 1, rRng.Height + 1)
  56. With cht
  57. .Chart.ChartArea.Border.LineStyle = xlLineStyleNone
  58. .Chart.PasteSpecial.xlPasteValues
  59. .Chart.Export img, Filtername:="png"
  60. .Delete
  61. End With
  62. ' if we got this far, assume success
  63. ExportRangeToPicture = True
  64. ExitProc:
  65. 'Application.ScreenUpdating = True
  66. Set cht = Nothing
  67. Set rRng = Nothing
  68. End Function


 
Bien à vous


Message édité par Coellophysis le 19-07-2016 à 09:40:35
Reply

Marsh Posté le 18-07-2016 à 09:52:38   

Reply

Marsh Posté le 19-07-2016 à 08:45:45    

Salut,
 
Les balises [ cpp ][ /cpp ] s'utilisent très simplement : Tu mets ton code entre les deux et c'est tout.
 
Exemple :  [ cpp ]Toto[ /cpp ]  affichera
 

Code :
  1. Toto


 
Sinon, pour ton problème qu'appelle-tu le moment où le tableau doit être copié ?
C'est l'instruction rRng.CopyPicture xlScreen, xlBitmap qui plante ?
 
Si oui, est-ce que ca marche en pas à pas (Débogage puis F8) ?

Reply

Marsh Posté le 19-07-2016 à 09:42:41    

Bonjour Chelmi18,
 
Je te remercie pour ton explication cpp /cpp, j'ai pu édité le message.
 
Pour le code, non il ne fonctionne pas étape par étape via le F8, lors du bug, la surbrillance se trouve ici ".Chart.PasteSpecial.xlPasteValues"  
 
Bien à toi.
 

Reply

Marsh Posté le 19-07-2016 à 13:09:32    

Je ne comprends pas bien ce que tu cherches à faire : un objet Chart est un graphique pas une image.
Je ne suis donc pas sûr que tu puisses agir sur un graphique avec l'instruction .PasteSpecial.xlPasteValues.
 
Si tu cherches juste à sauvegarder un graphique déjà existant en tant qu'image, tu peux essayer en enlevant cette instruction je pense.
Sinon, essaye en passant plutôt par un objet de type Shape qui sera plus approprié à mon avis.
 
 
 

Reply

Marsh Posté le 19-07-2016 à 14:34:51    

Mon but est de copier un chart vers un email, cette méthode a fonctionné pendant 2 ans jusqu'à je migre vers Windows 7.

Reply

Marsh Posté le 20-07-2016 à 09:13:24    

Dans ce cas, remplace la ligne 80
 

Code :
  1. .Chart.PasteSpecial.xlPasteValues


 
par
 

Code :
  1. .Chart.Paste

Reply

Marsh Posté le 20-07-2016 à 09:57:01    

Bonjour,
 
Ca n'a pas fonctionné mais c'était bien tenté.

Reply

Marsh Posté le 20-07-2016 à 13:15:26    

C'est curieux, cela a fonctionné nickel chez moi ?!
 
J'avais bien une image de mon range dans le mail (Windows 7, Excel 2010).
 
Ça fait quoi chez toi ? même erreur ?

Reply

Marsh Posté le 20-07-2016 à 15:45:12    

Voici ce que je reçois comme message d'erreur:
 
Run time error '1004': Method Paste of Object_Chart failed
 
bien à toi

Reply

Marsh Posté le 21-07-2016 à 08:21:34    

Apparemment, ce problème semble se produire si la copy n'a pas fonctionné comme prévue, par exemple si le Range copié déborde de la partie visible de l'écran.
Est-ce ton cas ?
 
Si oui, regarde la solution expliquée là : http://stackoverflow.com/questions [...] creen-area
Notamment la partie ZoomToRange.
 
Hope this helps.

Reply

Sujets relatifs:

Leave a Replay

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