Vba insérer une pièce jointe dans un mail, qui diffère selon le destinataire [Résolu]

Signaler
-
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
-
Bonjour,

Je souhaite créer une macro vba qui permette d'envoyer un mail à différentes personnes avec une pièce jointe différente pour chaque personne.
Pour l'instant, mon code est :
Sub AddAttachment()
 
Dim Lemail As Variant
Dim Ligne As Integer
 
Set Lemail = CreateObject("outlook.application")
 
For Ligne = 3 To 4
 
With Lemail.CreateItem(olmailitem)
.to = Range("d" & Ligne)
.Subject = Range("c9") & Range("b" & Ligne)
.body = Range("j3")
.Attachments.Add = Range("c3") & Range("a" & Ligne)
.display 
End With
 
Next Ligne
 
End Sub


la ligne .Attachments.Add = Range("c3") & Range("a" & Ligne) ne fonctionne pas (message d'erreur : 'échec de l'opération'). Les fichiers à insérer se trouvent dans un même dossier dont le chemin est écrit en cellule c3, puis le nom de chaque fichier est écrit dans la colonne "a" et "Ligne" servirait à traiter les différentes lignes de la colonne "a" 'cela fonctionne pour "Subject" et "To"
Comment faut il faire pour que cela fonctionne?

Configuration: Windows / Edge 84.0.522.52

3 réponses

Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695
bonjour,
as-tu envisagé de nous donner des informations utiles, par exemple le contenu des deux cellules ("c3") & ("a" & Ligne)?
as-tu essayé ceci:
dim nomfichier as string
nomfichier=Range("c3") & Range("a" & Ligne)
.Attachments.Add = nomfichier

en cas d'erreur, il te suffit alors d'examiner le contenu de la variable nomfichier.
Bonjour,
Oui dans mon premier message, j'ai indiqué que la cellule "c3" contient le chemin d'accès aux différents fichiers (tous les fichiers se trouvent dans ce dossier); la colonne a contient le nom de chaque fichier, et "ligne" permet de traiter la demande pour chaque ligne
Ainsi, colonnes A : Nom du fichier , B: complément de l'objet du mail; C: chemin du dossier où se trouvent les fichiers (et "c9" le début d'objet du mail), D: Email destinataire

Votre code envoie le message d'erreur "Echec de l'opération" et renvoi à la ligne ".Attachments.Add = nomfichier". Pourtant, en cliquant dessus, le "nomfichier" correspond bien à la cellule c3 et "a" donc au nom du fichier existant
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 > axll6
tu ne nous a toujours pas montré le contenu de nomfichier.
tu peux éventuellement ajouter :
dim nomfichier as string, fichiertrouve as string
nomfichier=Range("c3") & Range("a" & Ligne)
fichiertrouve =dir(nomfichier)
.Attachments.Add = nomfichier

que contient la variable fichiertrouve?
Cela fait la même erreur que précédemment : "Echec de l'opération" sur la ligne ".Attachments.Add = nomfichier"
En passant sur "nomfichier" cela indique le nom de mon fichier qui doit être inséré en PJ dans le mail "C:\Users\213AE\Desktop\Envoi\fichier1.xls" où "C:\Users\213AE\Desktop\Envoi\" est contenu en "c3" et "fichier1.xls" en cellule a2
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695
que contient la variable fichiertrouve?
"fichier1.xls" est-il ouvert?
>
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020

non le fichier était fermé mais je viens d'essayer avec celui cii ouvert et cela ne change rien
Comment est ce que je vois ce que contient la variable fichiertrouve?
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 > axl6
comme tu as fait pour visualiser le contenu de la variable nomfichier.
>
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020

Fichier trouvé trouve le nom de mon fichier, et nomfichier trouve le chemin du fichier (chemin dossier+/+fichiertrouvé)
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695
ceci semble mieux fonctionner:
Dim Lappli As outlook.Application
Dim Lemail As outlook.MailItem
Dim Ligne As Integer
 
Set Lappli = New outlook.Application
For Ligne = 3 To 4
Set Lemail = Lappli.CreateItem(olMailItem)
With Lemail
' ...
J'ai essayé mais cela fait un message d'erreur "Type défini par l'utilisateur non défini" par rapport à "Lappli As outlook.Application"
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 > axl6
il faut sans doute ajouter ceci dans les références du projet: "microsoft outlook xxx object library".
>
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020

Ca marche! Il ne faut pas mettre de "=" entre .Attachments.Add et nomfichier
Merci beaucoup
Messages postés
12398
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 > ab6
parfait, peux-tu alors marquer la discussion comme résolue?