Re,
Le code ci-dessous convient-il ? Les fichiers à joindre doivent se trouver dans le dossier inscrit en B1
Sub EnvoiEmails2()
' Utilise la signature par défaut
Dim dos As String
Dim objOutlook As Object
Dim objMail As Object
Dim i As Long
Dim tbl As Range
Dim nb As Long
Dim mess As String
Dim signature As String
' Tableau contenant les informations client
Set tbl = Range("Tableau_Factures")
' Nombre de lignes du tableau
nb = tbl.Rows.Count
' Chemin des fichiers à envoyer en pièce jointe
dos = Sheets("Factures").Range("B1").Value
' Création de l'objet Outlook
Set objOutlook = CreateObject("Outlook.Application")
' creation de l'objet FileSystemObject/Folder
Dim myFolder As Object
Set myFolder = CreateObject("Scripting.FileSystemObject").GetFolder(dos)
' adresse du fichier joint
Dim adrAtt As String
' Boucle sur les clients à qui envoyer une facture
For i = 1 To nb
' boucle de recherche du fichier joint
Dim f As Object
adrAtt = vbNullString
For Each f In myFolder.Files
If VBA.LCase$(VBA.Left$(f.Name, Len(tbl(i, 6)))) = VBA.LCase$(tbl(i, 6)) Then
If Not (adrAtt = vbNullString) Then
MsgBox "Problème ligne " & i & vbCrLf & _
"Attention les fichiers " & adrAtt & " et " & f.Name & " sont ambigus. " & vbCrLf & _
"Arret de la procédure", vbCritical, "ERREUR : Doublon"
Exit Sub
Else
adrAtt = f.Name
End If
End If
Next f
' Création de l'email
Set objMail = objOutlook.CreateItem(0)
' Afficher l'email pour que la signature automatique soit insérée
objMail.Display
' Récupérer la signature insérée par Outlook (en HTML)
signature = objMail.HTMLBody
' Construire le message personnalisé en HTML
mess = "<p>" & tbl(i, 4) & " " & tbl(i, 3) & ",</p>" & _
"<p>Veuillez trouver ci-joint votre facture.</p>" & _
"<p>Cordialement,</p>"
With objMail
.To = tbl(i, 5) ' Adresse du destinataire
.Subject = "Votre facture n°" & tbl(i, 1) ' Sujet de l'email
' Concaténer le message personnalisé et la signature
.HTMLBody = mess & signature
' Ajout de la pièce jointe
.Attachments.Add dos & "\" & adrAtt
' Affichage de l'email (remplacez .Display par .Send pour un envoi direct)
.Display
End With
' Libération de l'objet email
Set objMail = Nothing
Next i
' Libération de l'objet Outlook
Set objOutlook = Nothing
End Sub