Il est toujours possible d'envoyer un fichier Excel en pièce jointe.
Vous pouvez par exemple ne laisser que la feuille que vous souhaitez envoyer et si cette feuille contient des liens vers les autres feuilles et que vous ne souhaitez envoyer que les valeurs, vous pouvez sélectionner toute la feuille, clic droit copier, clic droit collage spécial "Valeurs".
Vous pouvez ensuite supprimer les autres feuilles et "sauvegarder sous" votre fichier en lui donnant un autre nom (sinon il écraserait le fichier d'origine !). Votre fichier est prêt à être envoyé en pièce jointe à votre message.
merci de ta réponse mais je cherche une solution en macro pour que mes collaborateurs puissent en appuyant sur un bouton envoyer une copie de cette feuille a leur client..
Alors votre demande est bien mal formulée et surtout incomplète.
Entre envoyer une feuille excel par mail (votre demande) et créer une macro pour générer cette feuille et l'envoyer par mail, ce n'est pas la même chose : on travaille dans le grand écart !
Pour commencer il faut pouvoir envoyer des mails par Excel Word ou autre.
Pour cela, il faut vérifier qu'il y a dans le menu Fichier la ligne de commande "Envoyer vers...".
Si ce n'est pas le cas, il faut rajouter dans le fichier win.ini les lignes suivantes :
('Rappel : le fichier win.ini se trouve dans le répertoire Windows)
En premier , merci de ton aide en cherchant j'ai trouvé une macro qui a fonctionné une fois ..j'ai voulu mettre des com et elle ne marche plus ! peut tu regarder ?
merci d'avance
Option Explicit
Sub envoie_devis()
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim Temp As String
Dim CdoMessage As Object
Dim Fichier As String
Set Sourcewb = ActiveWorkbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
Set CdoMessage = CreateObject("CDO.Message")
With CdoMessage
.Subject = "Réponse a votre demande de devis Portalux"
.From = "christ.meun@wanadoo.fr"
.To = "amsperpignan@orange.fr"
.CC = ""
.BCC = ""
.TextBody = "Bonjour, Veuillez trouver ci joint le devis en réponse à votre demande"
.AddAttachment Fichier
.Send
End With
Juste un conseil : éditez votre message et remplacez les adresses mails par des
"adresse mail destinataire" et "adresse mail expéditeur". Mieux vaut éviter de laisser trainer des adresses qui peuvent être ensuite utilisées sans votre consentement.
Votre code est pas mal, mais il ne marche qu'avec Outlook Express ou Windows mail. Pour le faire tourner sur d'autres messageries, il faut spécifier certaines choses pour la configuration.
Ci-après mon code que vous pouvez recopier dans un module de votre fichier Excel. Il vous suffit ensuite de renseigner le serveur SMTP et les adresses de messagerie pour le faire fonctionner :
Sub envoie_devis()
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim Temp As String
Dim CdoMessage As Object
Dim Fichier As String
Dim Config As Object
Dim Flds As Variant
Set Sourcewb = ActiveWorkbook
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
Temp = ThisWorkbook.Path & Application.PathSeparator & "devis.xls"
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Destwb.SaveAs Temp
Fichier = Destwb.Path & Application.PathSeparator & Destwb.Name
Destwb.Close
Application.DisplayAlerts = True
Set Config = CreateObject("CDO.Configuration")
Config.Load -1 ' CDO Source Defaults
Set Flds = Config.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") _
= "mettre ici le SMTP de votre messagerie" ' par exemple pour free : "SMTP.free.fr" 'mettre entre guillemets
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With
Set CdoMessage = CreateObject("CDO.Message")
With CdoMessage
Set .Configuration = Config
.Subject = "Réponse a votre demande de devis Portalux"
.From = "adresse mail expéditeur"
.To = "adresse mail destinataire"
.CC = ""
.BCC = ""
.TextBody = "Bonjour, Veuillez trouver ci joint le devis en réponse à votre demande"
.AddAttachment Fichier
.Send
End With
Application.ScreenUpdating = True
Set CdoMessage = Nothing
Kill Fichier
End Sub
je viens de tester et je te remercie car cela fonctionne parfaitement !!! une petite question
si je mets
'.To = Sheets(2).Range("A1") 'Ici je récupère l'adresse par exemple dans la feuille2
a la place de la ligne d'origine..est ce possible?
merci du temps passé pour m'aider
voila mon code
.Subject = "Réponse a votre demande de devis Portalux"
.From = Sheets(Portalux).Range("G6").Value
.To = Sheets(Portalux).Range("q15").Value
j'obtiens un message d'erreur
erreur execution "9"
L'indice n'appartient pas a la selection
as tu une idée ??
A écrire un code il serait préférable de passer directement par le SMTP (courier sortant) du navigateur et non par une messagerie ce qui permet plus de possibilités.
Une discussion récente, lien ci dessous ou la feuille prédéfinie est copiée en format PDF mais pourrait restée en XLS ou XLSX
Avec le bout de code de Chismeun impossible de savoir comment il traite l'accès au SMTP ou s'il appelle une application comme Outlook, sinon c'est sa messagerie par défaut qui s'ouvrira et c'est là que pose problème.
Dans la discussion que j'ai sitée, le demandeur passait par Incredimail avec un langage légérement différent qui posait problème, c'est pour cela que j'ai écrit le code pour éviter toute messagerie avec des langages pas toujours maitrisé et qui fonctionne avec toute connexion.
Regardez mon message #10.
Le seul problème qu'il rencontre c'est sur l'appel de la feuille qui est incorrect et que je viens de lui corriger (oubli des guillemets).
bonjour,
merci de ton aide...cela marche impeccable!!
juste une petite question dans ma bte mail je n'ai pas de trace des mails ainsi envoyés...normal? ou peut on imprimer un accuse d'envoi ou de reception?
merci de ton aide , elle m'est trés précieuse
christian
Normal puisque vous ne passez pas par votre messagerie mais directement par internet.
Si vous voulez une trace, vous pouvez mettre votre adresse en CC ou BCC .
Pour un accusé de réception, il faut rajouter avant .send :
.Fields("urn:schemas:mailheader:disposition-notification-to") = "adresse mail expéditeur"
.Fields("urn:schemas:mailheader:return-receipt-to") = "adresse mail expéditeur"
.Fields.Update
impec.....merci
j'abuse de votre savoir...si je peux sur un petit probleme different
je travaille sur mon doc de base puis je je sauvegarde en "memoire "par cette cde
ActiveWorkbook.SaveAs Filename:=Range("K14") & "Devis Portalux " & Range("E16") & " Type " & Range("J16") & " - " & Range("J17") & " - " & Range("K3")
le pbm c'est que ce document est a l'écran et que je ne sais pas comment revenir au doc de base automatiquement et en plus le doc que j'ai sauvegarde , je l'envoie par mail mais
1) il est modifiable
2) il contient les macros
comment faire si possible pour ne plus avoir ces deux pbms
merci
si je mets
'.To = Sheets(2).Range("A1") 'Ici je récupère l'adresse par exemple dans la feuille2
a la place de la ligne d'origine..est ce possible?
merci du temps passé pour m'aider
Il faut bien entendu que A1 soit une adresse valide.
Michel
.Subject = "Réponse a votre demande de devis Portalux"
.From = Sheets(Portalux).Range("G6").Value
.To = Sheets(Portalux).Range("q15").Value
j'obtiens un message d'erreur
erreur execution "9"
L'indice n'appartient pas a la selection
as tu une idée ??
Michel
Si c'est ok, mettre le sujet comme résolu
Michel