Envoi feuille classeur par mail avec Body

Bonjour,

Ce petit bout de code placé au milieu d'une grande macro fonctionnait très bien au boulot avant modif. en utilisant Outlook 2007 (XP pack2).

Le mail part, le sujet est bien présent, la feuille également, et pour rendre cet envoi plus convivial, j'ai voulu rajouter un texte.

J'ai donc placé quelques lignes supplémentaires, que j'ai coloré en rouge ci-dessous en passant que cela fonctionnerait ................ en vain

Est ce qu'une personne charitable aurait une idée, sans CDO ni autre, juste en modifiant ces quelques lignes s'il vous plait ?

Deuxième question : Puis-je supprimer "AccuséReception" ? à quoi sert-il ici ? je ne reçois en effet jamais de confirmation de lecture !

Merci par avance.

@ toute.....

Sub Macro1()

Dim Destinataires(2) As String

Dim Sujet As String

Dim Body As String

Destinataires(1) = "besoin-d-aide@orange.fr"

Destinataires(2) = "re-besoin-d-aide@orange.fr"

Sujet = "Programme de Fabrication"

Body = "Bonjour," & vbCrLf & vbCrLf & _

"Bla bla bla" & vbCrLf & vbCrLf & _

"Cordialement"

Application.ScreenUpdating = False

ThisWorkbook.Sheets("Feuil1").Copy

ActiveWorkbook.SendMail Destinataires, Sujet, Body, AccuseReception

ActiveWorkbook.Close False

Application.ScreenUpdating = True

End Sub

224envoi-feuille.zip (8.56 Ko)

Bonjour,

Toujours pas d'âmes charitables afin de me dépatouiller !

Si c'est vraiment infaisable, faites m'en part que je clôture le post s'il vous plait ?

Merci.

@ toute.

David

Re !

N'ayant pas de réponse, j'avais posté sur le site VBFrance.com mon problème, et une personne charitable vient de me répondre que ce n'était pas possible ; charitable !............. charitable !?

Je clos donc ce post et vais continuer à chercher une solution à mon problème !

Ci-dessous, le code me servant au quotidien si cela peut rendre service à quelqu'un d'autre ; j'ai installé ClickYes pour le message de sécurité à la fin de l'envoi.

Bonne continuation.

@ toute....

Sub Macro1() 

Dim Destinataires(4) As String 
Dim Sujet As String 

Destinataires(1) = "besoin-d-aide@orange.fr" 
Destinataires(2) = "re-besoin-d-aide@orange.fr"
Destinataires(3) = "re-re-besoin-d-aide@orange.fr" 
Destinataires(4) = "re-re-re-besoin-d-aide@orange.fr" 

Sujet = "Programme de Fabrication" 

Application.ScreenUpdating = False 
 ThisWorkbook.Sheets("Feuil1").Copy 
 ActiveWorkbook.SendMail Destinataires, Sujet, AccuseReception=False 
 ActiveWorkbook.Close False 
Application.ScreenUpdating = True 

Destinataires(1) = "pas-possible-dsl@orange.fr" 
Destinataires(2) = "re-pas-possible-dsl@orange.fr"
Destinataires(3) = "re-re-pas-possible-dsl@orange.fr" 
Destinataires(4) = "re-re-re-pas-possible-dsl@orange.fr" 

Sujet = "Maître de zone" 

Application.ScreenUpdating = False 
 ThisWorkbook.Sheets("Feuil2").Copy 
 ActiveWorkbook.SendMail Destinataires, Sujet, AccuseReception=False 
 ActiveWorkbook.Close False 
Application.ScreenUpdating = True 

MsgBOX "A bientôt", , "MERCI"

ActiveWorkbook.Close False

End Sub 

Bonjour,

Boff, sans être vraiment charitable je vais quand même te répondre..

Tu envois tes mail de la façon la plus simple qui soit, le sujet ne peu pas comporter de retour ligne et a un nombre de caractère limité.

Le plus facile serait de mettre une entête sur la feuille que tu copie qui est en somme le corps du mail.

Une autre façon si tu a Outlook

A+

Salut !

Ben si, toi tu l'es

......... charitable !

Je tenterai ta soluce au boulot demain, mais suis persuadé que ça ne fonctionnera pas dans la mesure où ces lignes se trouvent au milieu d'une macro !

Exact, au taf j'ai Outlook 2003 ...... bientôt 2010

De plus je dois juste envoyer une feuille à des destinataires, et une différente à d'autres (et non un classeur ; ça j'sais faire avec le message qui va bien, mais que je n'arrive pas à adapter à mon problème !) comme tu as pu le constater....... comment ça j'suis pénible ???!!!

Je te remercie et te tiens au courant demain en cours de journée.

Bonne soirée

Bye

comment ça j'suis pénible ???!!

Trop tôt pour te dire

mais suis persuadé que ça ne fonctionnera pas

Et pessimiste en plus

Tu peu très bien mettre ton message dans feuil1 et un autre dans Feuil2 non ?

Hello !

Ca va venir, ça va venir

Pessimiste ? euhhh......... ça va venir aussi ; mais bon peut être pas en ce début d'année tout de même

Je reviens donc à la charge !

Tu peu très bien mettre ton message dans feuil1 et un autre dans Feuil2 non ?

Je ne comprends pas ce que tu veux me dire de par cette phrase ; je copie les feuilles différentes pour les envoyer en les fermant sans les enregistrer !?

Une autre façon si tu a Outlook

Avec ce code tu envois un fichier et non des feuilles ?

Pour finir, excuse pour mon amateurisme, et merci pour ta patience.......... et ton sens de l'humour

On devrait bien s'entendre............. du moins si tu aimes bien les pénibles...... lol

@ toute.

David

Re,

Avec ta solution : ta demande est de mettre un texte de "politesses" en plus de ta feuille, tu envoi à 2 destinataires différents mais avec des feuilles différentes.

Qu'est-ce qui t’empêche de mettre ces messages en haut des feuilles ?

Si tu ne veux pas que ça apparaisse dans le classeur principale tu peu ajouter dans la feuille copiée juste avant de l'envoyé.

Et quand tu dis que tu envoi la feuille -> faux, tu envoi un classeur qui ne contient que la feuille concernée, ce que tu fait avec la fonction Copy.

Avec Outlook c'est exactement la même chose, tu peu envoyé un classeur (en pièce jointe) avec uniquement la bonne feuille en employant la même copie. A la différence que tu peu mettre du texte dans le corps du message.

Et il y a encore une autre façon d'envoyer un mail avec Excel, il n'y a pas de pièce jointe mais c'est le contenu de la feuille qui est copié dans le corps du message.

Je n'ai pas encore fais l'essai mais je pense qu'il y a moyen d'y mettre également du texte additionnel.

A+

EDIT:

Je ne sais pas si cette dernière solution est déjà disponible avec Excel2003 faudrait voir..

J'essaie de travailler sur ta solution Outlook, celle qui me convient le mieux :

Avec Outlook c'est exactement la même chose, tu peu envoyé un classeur (en pièce jointe) avec uniquement la bonne feuille en employant la même copie. A la différence que tu peu mettre du texte dans le corps du message.

Sans succés jusque là je dois dire

Peux-tu s'il te plait me mettre un peu plus sur la voie pour transposer mon code au tien ?

Merci.

@ toute...

'Il faut activer la référence "Microsoft Outlook Library" Avant de lancer cette macro,
' Dans l'éditeur VBA: Faire Menu / Tools / Reference / Cocher "Microsoft Outlook Library"
Sub Envoyer_Mail_Outlook()
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String
Dim Destinataires As String
Dim Sujet As String
Dim Text As String

    Nom_Fichier = "C:\Tempo.xls"

    Set ObjOutlook = New Outlook.Application
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)
'---------------------------------------------------------
Destinataires = "besoin-d-aide@orange.fr,re-besoin-d-aide@orange.fr,re-re-besoin-d-aide@orange.fr,re-re-re-besoin-d-aide@orange.fr"
Sujet = "Programme de Fabrication"
Text = "Bonjour," & vbCrLf & vbCrLf & _
"Bla bla bla" & vbCrLf & vbCrLf & _
"Cordialement"
'---------------------------------------------------------
    ThisWorkbook.Sheets("Feuil1").Copy
    ActiveWorkbook.SaveAs Nom_Fichier
'---------------------------------------------------------
     With oBjMail
        .To = Destinataires ' le destinataire
       .Subject = Sujet       ' l'objet du mail
       .Body = Text 'le corps du mail ..son contenu
       .Attachments.Add Nom_Fichier
       .Display  '   Ici on peut supprimer pour l'envoyer sans vérification
       .Send
    End With
    ActiveWorkbook.Close
    Kill Nom_Fichier
'=========================================================
Destinataires = "besoin-d-aide@orange.fr,re-besoin-d-aide@orange.fr,re-re-besoin-d-aide@orange.fr,re-re-re-besoin-d-aide@orange.fr"
Sujet = "Maître de zone"
Text = "Bonjour," & vbCrLf & vbCrLf & _
"Bla bla bla" & vbCrLf & vbCrLf & _
"Cordialement"
'---------------------------------------------------------
    ThisWorkbook.Sheets("Feuil2").Copy
    ActiveWorkbook.SaveAs Nom_Fichier
'---------------------------------------------------------
     With oBjMail
        .To = Destinataires ' le destinataire
       .Subject = Sujet       ' l'objet du mail
       .Body = Text 'le corps du mail ..son contenu
       .Attachments.Add Nom_Fichier
       .Display  '   Ici on peut supprimer pour l'envoyer sans vérification
       .Send
    End With
    ActiveWorkbook.Close
    Kill Nom_Fichier
'---------------------------------------------------------
'Libère la mémoire
    ObjOutlook.Quit
    Set oBjMail = Nothing
    Set ObjOutlook = Nothing
End Sub

Une piste ? en voila une mais je ne sais pas tester, ma version 2000 ne va plus sur Vista.

Hello !

T'es super sympa, je te remercie.

Quant à moi je testerai ton code que lundi car 35H00 oblige, je suis en RTT demain ; elle est pas belle la vie

Je te ferai un retour et clôturerai certainement ce post

Encore merci.

Bonne soirée.

David

Bonjour,

As-tu passer un bon week-end ?

Je reviens à la charge !!!

J'ai une erreur sur le deuxième envoi dans ton code :

Erreur d'éxécution '-1560018678 (a304010a)':

La méthode 'To' de l'objet'_MailItem' a échoué

Avec cette ligne en erreur, donc en jaune :

.To = Destinataires ' le destinataire

La macro s'arrête donc à cette ligne, n'envoie pas et n'écrase donc pas le fichier.

Currieux tout de même du moment où le premier envoi fonctionne à la perfection, non ?

Merci.

Bonne journée.

@ toute.....

Re,

C'est que tu a une erreur dans le libellé des destinataires, contrôle les un à un

Regarde aussi si tu à bien mis les virgules.

EDIT : J'ai une autre idée..

Inverse l'ordre d'envoi et tu dis..

Si l'erreur se répète je pense savoir pourquoi

Re !

Je pensais également aux destinataires, mais pour être sûr, j'en avais mis qu'un seul ; en l'occurence moi

Je viens d'essayer en inversant l'ordre d'envoi suivant tes préconisation et c'est idem.

Merci.

@ toute...

Re,

Essaye en modifiant juste avant le 2èm With oBjMail pour avoir

   ThisWorkbook.Sheets("Feuil1").Copy
    ActiveWorkbook.SaveAs Nom_Fichier
'---------------------------------------------------------
    Set oBjMail = Nothing
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)
    With oBjMail
    .....

Tu dis..

A+

Bonjour,

Oui ton flaie était bon, c'était bien ceci qui clochait

Un grand merci pour ton aide et ta gentillesse.

@ bientôt j'espère.

Bonne journée.

@ toute.....

Hello !

Puis-me permettre de te solliciter encore s'il te plait ?

Je suis passé à la version 2010 hier, et je "bug" maintenant sur cette ligne :

ActiveWorkbook.SaveAs Nom_Fichier

J'ai beau changé Nom_Fichier = "C:\Pointage hebdo Jean-Pierre ALADENISE.xls" par Nom_Fichier = "C:\Pointage hebdo Jean-Pierre ALADENISE.xlsm"

Rien n'y fait

J'ai toujours une message box me disant :

Les fonctionnalités ne peuvent pas être enregistrées dans des classeurs sans macro :

. Projet VB

Pour enregistrer un fichier avec ces fonctionnalités, cliquez sur non puis sélectionnez un type de fichier prenant en charge les macros dans la liste type de fichier.

Pour continuer à enregistrer en tant que classeur sans macro, cliquez sur Oui

Sur le oui, ça tourne mais c'est assez contraignant d'avoir à exécuter cette manip à chaque fois

Je te remercie par avance.

@ toute.......

Rechercher des sujets similaires à "envoi feuille classeur mail body"