Envoyer une pièce jointe Excel avecVBA et Live Mail

Résolu/Fermé
zikey Messages postés 116 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 14 mai 2016 - 28 mars 2015 à 20:59
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 11 avril 2015 à 18:15
Bonsoir,

A l'écran j'ai un fichier Excel (2010 et Win 7) ouvert et par une macro je veux l'envoyer à 3 destinaires connus.
Cet envoi je voudraisle faire en cliquant sur "Fichier" puis sur "Enregistrer et envoyer".
Il y a peut-être une autre solution.
Merci de vos aides
Zikey
A voir également:

12 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
29 mars 2015 à 09:33
Bonjour,

C'est la méthode la plus simple.
Pour le faire par macro:

Application.Dialogs(xlDialogSendMail).Show

0
zikey Messages postés 116 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 14 mai 2016
29 mars 2015 à 10:56
Bonjour et Merci le Pivert,
Mais je deviens un peu gourmand!
Le fichier "F1" concerné apparaît à l'écran dans le déroulement d'une macro créée dans un fichier "F2" qui demeure ouvert.
Après modification du fichier "F1" je souhaiterais l'envoyer par Live Mail en pièce jointe à 3 destinataires sélectionnés d'avance.
Après expédition je souhaite enregistrer et fermer le fichier "F2" en terminant la macro
Cordialement
Zikey
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
29 mars 2015 à 11:34
Comme ceci:

 Workbooks.Open Filename:="C:\chemin\Classeur1.xlsx" 'chemin fichier F1
    Application.Dialogs(xlDialogSendMail).Show
    Workbooks("Classeur2.xls").Close True 'nom fichier F2

0
zikey Messages postés 116 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 14 mai 2016
29 mars 2015 à 11:58
Encore merci, je vais essayer d'appliquer !
Cordialement
0
zikey Messages postés 116 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 14 mai 2016
29 mars 2015 à 14:47
Je profite de bons conseils pour continuer mes interrogations.
Etant donné que le mail est toujours envoyés aux 3 mêmes destinataires, est-il possible dans la macro de créer ce choix et d'envoyer le message ?
Cordialement
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
29 mars 2015 à 16:00
Voilà :

'Après avoir ajouté la référence "Microsoft CDO for Windows 2000 Library" dans l'éditeur VBA Outils- Références
Sub mail_en_direct()
Const cdoBasic = 1
Dim admail As String, i As Integer
Dim messmail As String, secours As String
Dim expediteur As String
   On Error Resume Next
      expediteur = InputBox("Adresse mail de l'Expéditeur", "ADRESSE ELECTRONIQUE", "machin@free.fr")
     ' admail = InputBox("choisir le destinataire", "DESTINATAIRE", "adresse du destinataire")
      messmail = "Bonjour,"
   With CreateObject("CDO.Message")
   If Err Then
      secours = MsgBox("Problème de CDO non installé sur le serveur")
      Exit Sub
   Else
      .From = expediteur
      .To = "truc@free.fr;tartempion@free.fr;gus@free.fr" '3 destinataires
     '.Bcc = ""
      .Subject = "Bonjour"
      .TextBody = messmail
      .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
      .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = expediteur
      .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "ton passeport windows live mail"
      .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
      .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.free.fr" 'attention mettre votre adresse messagerie
      .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
      .Configuration.Fields.Update
      .AddAttachment "C:\chemin\Classeur1.xlsx" 'chemin fichier joint
      .Send
      If Err Then MsgBox "Le message n'a pas pu être expédié."
   End If
   On Error GoTo 0
End With
 MsgBox "le fichier a été envoyé"
End Sub


Pour l'intégrer:

Workbooks.Open Filename:="C:\chemin\Classeur1.xlsx" 'chemin fichier F1
    mail_en_direct
    Workbooks("Classeur2.xls").Close True 'nom fichier F2


0
zikey Messages postés 116 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 14 mai 2016
29 mars 2015 à 16:25
A cs_Le Pivert,
Merci beaucoup pour votre disponibilité.
Cordialement
0
Bonsoir,
Si je peux me permettre de relancer la question
Cà ne va pas comme je veux en effet j'ai le classeur F1 ouvert à l'écran dans lequel j'apporte des modifications et que je veux envoyer par une fonction "Clique".
De plus le nom de ce classeur évolue car lié au numéro de semaine.
Cordialement
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
30 mars 2015 à 20:48
Oui, quel est le problème
Le chemin,le nom ou les 2?

Il faut mettre le chemin et le nom dans des variables par exemple
Dim chemin As String
Dim nom As String
chemin = "C\: chemin classeur.xls"
nom = "numéro de la semaine"
ces variable peuvent être contenues dans des cellules.
chemin = Range("A1").value
nom = Range("A2").value

Voilà, sans plus de précisions!!!
0
Je me répète mais encore merci.
Mais je me permets d'insister, le classeur (F1) que je veux envoyer est ouvert et je fais un click sur une cellule pour lancer l'envoi.
Je pense qu'au lieu d'ouvrir le classeur comme sur votre exemple, je me contente de l'activer.
Mais où je suis embêté c'est au niveau de l'instrction: AddAttachment "C:\Chemin\Classeur.xlsm"
Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 mars 2015 à 20:01
Bien sur si le classeur F1 est ouvert, il ne faut pas l'ouvrir de nouveau. Il faut donc supprimer cette ligne:

Workbooks.Open Filename:="C:\chemin\Classeur1.xlsx" 'chemin fichier F1


Mais où je suis embêté c'est au niveau de l'instrction: AddAttachment "C:\Chemin\Classeur.xlsm"

c'est simple, il faut mettre le chemin du classeur F1
0
Encore merci,
Je n'y suis pas arrivé, j'ai des progrès à faire!
Je ne vous embête pas plus
Cordialement
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
2 avril 2015 à 08:40
Je vais essayer de t'expliquer ce que j'ai compris.

Dans ta 1ère demande tu écris ceci:

A l'écran j'ai un fichier Excel (2010 et Win 7) ouvert et par une macro je veux l'envoyer à 3 destinaires connus.

Donc tu sais où se trouve ton classeur F1 puisque "ouvert par une macro".

C'est ce chemin qu'il faut mettre. C'est simple.

Par contre si tu crées ton fichier F1 à partir de ton classeur F2 et que tu envoies ton classeur F1 sans l'avoir enregistré. Là tu n'as pas de chemin!

Tu es obligé de passer par:

Application.Dialogs(xlDialogSendMail).Show


Voilà, j'espère que cela va te permettre de finaliser ton projet!
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
2 avril 2015 à 08:43
errata
Autant pour moi,
J'ai lu ouvert par une macro au lieu de
ouvert et par une macro

Donc c'est le 2ème cas qui t'interesse
0
Bonjour,
J'ai écrit un commentaire ce matin à 11h 30 mais je pense avoir eu des soucis d'envoi.
Je vais essayer d'être le plus clair possible:
Le classeur F1 que j'ai à l'écran a été créé par l'intermédiaire d'une macro1;
Le nom de ce classeur est composé de variables nommées par Dim et String:
Chemin = "C:\Bilans du centre été 2015\"
NomFichier = "Bilan du centre de"
Semaine = Range("T5").Value
Semaine = Right("S" + Semaine, 3)
Centre = Range("B3").Value
Extension = "xlsm"
Espace = " "
Il se présente sous la forme:
Chemin semaine espace Nomfichier Espace Centre Extension
soit:
"C:\Bilans du centre été 2015\ S14 Centre de Informatique.xlsm"
Hier soir j'ai réussi à envoyer la pièce jointe avec les conditions suivantes:
Fermer le fichier F1
et dans la procédure mettre le nom du fichier en clair à la ligne "AddAttachment"
Je souhaite pouvoir à l'aide de la procédure "mail_en_direct" envoyer le fichier F1 par mail en cliquant sur une cellule de la feuille active de F1 (à priori je sais faire).
A la fin de cette procédure je reprends le cours de la macro1 pour fermer le classeur F2 qui porte les 2 procédures publiques
J'espère ne pas avoir été trop long
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
2 avril 2015 à 15:01
Tu m'aurais expliqué cela au départ, on aurait perdu moins de temps.

Voici ton chemin:

Dim chemin, NomFichier, Semaine, Centre, Extension
chemin = "C:\Bilans du centre été 2015\"
NomFichier = "Bilan du centre de"
Semaine = Range("T5").Value
Semaine = "S" & Semaine
Centre = Range("B3").Value
Extension = ".xlsm"
chemin = chemin & Semaine & " " & Centre & Extension
MsgBox chemin


Apprends toi à toujours vérifier le résultat dans une MsgBox
Ensuite dans la macro "mail_en_direct" tu mets cela.

  .AddAttachment "= chemin 'chemin fichier joint


ça devrait fonctionner!
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
2 avril 2015 à 15:05
errata
guillemet en trop au moment du copier coller

.AddAttachment  = chemin 'chemin fichier joint
0
Zikey > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
2 avril 2015 à 16:47
Il me reste plus qu'à appliquer.
Juste une petite inquiétude, hier soir j'ai réussi à envoyer un fichier avec la macro mais il fallait que le fichier soit fermé.
Pris actuellement j'essaierai ce soir.
0
Zikey > Zikey
6 avril 2015 à 21:30
Occupé par ailleurs je n'ai repris qu'aujourd'hui ce problème qui en reste toujours un.
J'ai suivi votre méthode
Concernant le chemin du fichier à envoyer je l'ai vérifié dans une boîte de dialogue chemin = C:\Bilans du centre hiver 2015-2016\S15 Bilan du centre de ROCHEFORT MONT.xlsm
ensuite je mets .AddAttachment = chemin
Le message me parvient (je suis en expéditeur et destinataire) mais sans la pièce jointe.
Par contre si je tape .AddAttachment "C:\Bilans du centre hiver 2015-2016\S15 Bilan du centre de ROCHEFORT MONT.xlsm" le message me parvient avec la pièce jointe.
J'ai vérifié et réécrit plusieurs fois les données afin de piéger des erreurs de saisie ou d'intervalle rien n'y a fait.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 avril 2015 à 11:07
il faut mettre simplement:

 .AddAttachment chemin  'chemin fichier joint

0
Ouf, ça marche
Encore merci
Juste une petite question: que signifie le "2" au niveau de la ligne "sendusing" ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
7 avril 2015 à 12:04
0
Zikey > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
8 avril 2015 à 18:41
C'est encore moi
J'ai fait une petite correction, en effet il faut que la pièce jointe (appelée fichier F1) soit fermée lorsque j'envoie le mail.
Le fichier nommé F2 qui porte les macros est toujours ouvert et sera fermé en dernier.
Lorsque le fichier F1 qui vient d'être créé est sur le bureau je fais des modifs dans certaines cellules et je souhaite lancer la macro "mail_en_direct" par un click sur une cellule de la feuille active de F1.
Dans la foulée j'enregistre le fichier F2 et je termine.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
8 avril 2015 à 18:52
Ce n'est pas possible, il faut que le classeur F1 en pièce jointe soit fermé. Qui plus est, la macro se trouve dans le classeur F2!
Ce que tu veux faire , il faut mettre dans le classeur F1 cette macro:

Application.Dialogs(xlDialogSendMail).Show


et remplir les destinataires manuellement.

Je ne te comprends plus du tout!!!!
0
Excuse-moi mais lorsque l'on n'est qu'un amateur ce n'est pas toujours facile d'être explicite.
Je vais essayer de résumer la procédure globale en l'allégeant un peu.
Je pars d'un classeur nommé "Présences hiver..." qui comporte plusieurs feuilles dont une qui se nomme "Bilan du centre". C'est lui que j'ai appelé F2.
Cette dernière est la collecte de toutes les indications qui sont saisies dans les autres feuilles impliquant aussi des calculs internes à cette feuille.
Les macros utilisées sont dans ce classeur
Il existe un second classeur se nommant "pièce jointe..." comportant 2 feuilles dont une est la copie structurelle de la feuille "Bilan du centre" du classeur "Présences hiver...".
Je copie les valeurs de toutes les cellules situées dans une même zone définie par un cadre.
La macro continue afin de créer le fameux classeur ou fichier F1
A la fin de la création de ce classeur qui se nomme dans l'exemple "S15 Bilan du centre de ROCHEFORT MONT.xlsm" j'ai une boîte de dialogue qui s'affiche donnant des consignes pour la suite et qui se ferme par "OK".
A ce niveau " N" je voudrais entrer des données dans la page active et ensuite cliquer sur un bouton pour lancer la macro "mail_en_direct"
Ensuite le classeur F2 s'enregistre et se ferme.

J'ai testé l'enchaînement des macros et cela fonctionne sauf que je n'ai pas la main au niveau "N".

J'ai été long.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
9 avril 2015 à 08:01
La solution:
Fermer F1 et envoyer le mail à la fermeture de F2, comme ceci:

mettre dans ThisWorkbook :

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  mail_en_direct
End Sub

0
Ouf, grâce à vous je suis arrivé au bout.
J'arrête la première macro avec le fichier F2 ouvert (celui qui supporte les macros) et le fichier F1 lui aussi ouvert.
C'est dans celui-là que j'apporte des modifications, ensuite je déclenche la macro "mail_en_direct" par un clic sur un bouton.
Avant la fin de cette macro je ferme les 2 fichiers.
Je n'ai pas osé me lancer dans le dernier conseil que vous m'avez donné mais je prendrai le temps de le faire.
Je travaille en autodidacte (çà doit se voir!) et j'utilise un livre "Macros et langage VBA -Apprendre à programmer sous Excel" (Editions ENI). Pourriez-vous avoir une indication à me donner pour essayer d'aller un peu plus loin.
Encore merci.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
11 avril 2015 à 18:15
Pour aller un peu plus voici quelques sites à consulter:

http://dj.joss.free.fr/index.htm

http://ericrenaud.free.fr/menubarre.htm

https://silkyroad.developpez.com/

Bonne programmation
0