Envoi d'une pièce jointe avec VBA

yellowmoon

XLDnaute Nouveau
Bonjour à tous,
Je sollicite votre aide pour une programmation VBA :
Sur mon fichier actuel, je clique sur un bouton pour envoyer automatiquement un mail pré-défini.
Jusque là, tout fonctionne correctement. Je souhaite maintenant inclure le dis fichier en tant que pièce jointe dans mon mail.

Pour info, la messagerie utilisée est gmail. Vous pouvez la tester, mais elle ne fonctionnera pas chez vous étant donné que la macro est liée au serveur de mon entreprise. Voici la maccro :
Sub Mail()
Dim iMsg As Object
Dim iConf As Object
Dim Strbody As String
Dim Flds As Variant

Dim Identifiant As String
Dim Dest As String
Dim Objet As String
Dim DestCC As String
Dim Corp_Mess As String
Dim PJointe As String

Identifiant = Range("Identifiant").Value
Dest = Range("Dest").Value
Objet = Range("Objet").Value
DestCC = Range("DestCC").Value
Corp_Mess = Range("Corp_Mess").Value

Serveur = "messagerie-app"

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Load -1 ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Serveur
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With

With iMsg
Set .Configuration = iConf
.From = Identifiant
.To = Dest
.CC = DestCC
.Subject = Objet
.TextBody = Corp_Mess
.Send

DoEvents

MsgBox ("Votre message a bien été envoyé")

End With
End Sub


J'ai bien essayé d'ajouter ".addattachment = PJointe" à la suite des champs CC, subject etc... mais sans succès.
Quelqu'un aurait-il la solution?
Merci pour votre aide.
 

Pièces jointes

  • 0 - Maquette-Groupe.xlsm
    46.4 KB · Affichages: 52

Roland_M

XLDnaute Barbatruc
Re : Envoi d'une pièce jointe avec VBA

bonjour,

voir comme ceci !?
avec modif <<<<<<<<<<<<<<<<<<<<<<<<<<<

Code:
Sub Mail()
    Dim iMsg As Object
    Dim iConf As Object
    Dim Strbody As String
    Dim Flds As Variant

    Dim Identifiant As String
    Dim Dest As String
    Dim Objet As String
    Dim DestCC As String
    Dim Corp_Mess As String
    Dim PJointe As String
    
    
    PJointe = "CheminEtFichierComplet" '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    Identifiant = Range("Identifiant").Value
    Dest = Range("Dest").Value
    Objet = Range("Objet").Value
    DestCC = Range("DestCC").Value
    Corp_Mess = Range("Corp_Mess").Value
    
    Serveur = "messagerie-app"

    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    iConf.Load -1    ' CDO Source Defaults
    Set Flds = iConf.Fields
    With Flds
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Serveur
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        .Update
    End With
 
    With iMsg
        Set .Configuration = iConf
        .From = Identifiant
        .To = Dest
        .CC = DestCC
        .Subject = Objet
        .TextBody = Corp_Mess
      If PJointe > "" Then .AddAttachment PJointe '<<<<<<<<<<<<<<<<<<<<<<<<<<<
        .Send
        
        DoEvents
        
        MsgBox ("Votre message a bien été envoyé")
          
    End With
End Sub
 

yellowmoon

XLDnaute Nouveau
Re : Envoi d'une pièce jointe avec VBA

Re-Bonjour à tous,

Roland_M, merci pour ta réponse je teste ça demain au boulot.

xhudi69 & phlaurent55, effectivement, j'aurais du effecteur une recherche plus approfondie sur le forum. En revanche, la majorité des forums existants traitent l'envoi de PJ via outlook, or, je veux effectuer cet envoi via Gmail. J'espère que cela est possible!!
En tout cas, je teste les différentes possibilités demain et reviens vers vous dans la foulée!
 

yellowmoon

XLDnaute Nouveau
Re : Envoi d'une pièce jointe avec VBA

Bonjour Roland_M,
j'ai testé ta solution : elle fonctionne parfaitement lorsque j'envoie un fichier autre que celui sur lequel je travaille. Par contre lorsque je veux envoyer le bon fichier, le .addattachment plante :
Erreur d'éxécution '-2147024864 (80070020)' Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus.

Est-il possible d'envoyer le fichier alors qu'on est dessus?

Je précise aussi que mon classeur est protégé (les utilisateurs ne peuvent pas enregistrer le fichier : ils effectuent une mise à jour du doc via un SQL et l'envoient par mail).
 

camarchepas

XLDnaute Barbatruc
Re : Envoi d'une pièce jointe avec VBA

Bonjour

Je crois que tu te créé une impasse tout xeul , un peu comme scier la branche sur laquelle tu est assi .

cependant une solution pourrait être de faire une copie de sauvegarde du fichier en cours .

Voir la commande :
Code:
Workbook.SaveCopyAs
Cette méthode enregistre une copie du classeur dans un fichier sans modifier le classeur ouvert en mémoire.
 

Roland_M

XLDnaute Barbatruc
Re : Envoi d'une pièce jointe avec VBA

re:

Impossible à ma connaissance !

mais pourquoi veux tu compliquer ?
tu fais une copie de ton classeur et puis c'est tout !
exemple:
MonClasseur.xls et copie MonClasseur2.xls que tu mets en pièce jointe !
c'est simple !?

mais ma parole, on rencontre parfois des personnes douées pour compliquer les choses
très certainement par manque de connaissance !?

EDIT:
et comme le suggère camarchepas, le supprimer une fois envoyé !
 
Dernière édition:

yellowmoon

XLDnaute Nouveau
Re : Envoi d'une pièce jointe avec VBA

Bonsoir à tous,
pour compléter çamarchepas, j'ai utilisé Activeworkbook.savecopyas. Merci donc à toi pour la solution !

Roland_M : c'est effectivement ce que j'ai fait. Quand à l'intérêt de ne pas créer une copie, cette macro sera utilisé sur 5 fichiers différents, ce qui en fait donc 10 avec les copies. De plus, je travaille dans une grande entreprise, je te laisse donc imaginer le nombre de fichiers Excel total qu'il peut y avoir entre les différents services et la "pollution" du serveur par ces fichiers. Cela me semble être un paramètre important mais si ce n'est pas possible je l'accepte parfaitement.

Et enfin, oui je ne suis absolument pas expert en VBA, je viens d'ailleurs ici pour APPRENDRE :).

Merci à tous pour vos réponses.
 

camarchepas

XLDnaute Barbatruc
Re : Envoi d'une pièce jointe avec VBA

Bon , pour compléter ,

Tu peux ensuite faire un kill du fichier pour le détruire, comme cela plus de pollution

Code:
Kill, instruction, exemple
Cet exemple utilise l'instruction Kill pour supprimer un fichier d'un disque.

' Suppose que le fichier FICHTEST contient des données.
Kill "FichTest"    ' Supprime le fichier.

' Supprime tous les fichiers *.TXT du dossier courant.
Kill "*.TXT"
 

Roland_M

XLDnaute Barbatruc
Re : Envoi d'une pièce jointe avec VBA

re:

il y a plus simple, tout est question d'organisation et de structure des données !?
mais si c'est ce classeur qu'il faut envoyer, alors peut être qu'il faut un autre classeur avec la macro pour l'envoyer !?

EDIT:

@camarchepas, ou encore ta solution !
 
Dernière édition:

yellowmoon

XLDnaute Nouveau
Re : Envoi d'une pièce jointe avec VBA

Bonjour à tous,
Désolé pour cette réponse tardive.

çamarchepas : effectivement, cela pourrait être une solution.

Roland_M : C'est plus simple d'avoir la macro d'envoi du mail directement dans le fichier puisque l'utilisateur doit au préalable actualiser une requête SQL. Mais oui, on pourrait imaginer d'actualiser les 5 fichiers, de les fermer et ensuite d'ouvrir un autre fichier permettant de les envoyer. Bon après faudra que je m'y mette, les 5 fichiers sont envoyés à des destinataires différents.
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 217
Membres
103 158
dernier inscrit
laufin