Mails avec des pièces à joindre à partir d'une macro

Bonjour,

Je souhaite envoyer des mails avec des pièces à joindre à partir d'une macro,

En ce concerne le fichier a joindre qui est indiqué sur la 6e colonne du tableau, j'ai des fichiers à joindre qui ont toujours la même structure de titre à savoir : 1_202503 ou 242_202504.

Étant donné que dans la colonne 6 des pièces à joindre au mail j'aurais juste les caractères alphanumériques qui précède le tiret du 8 à savoir 1 ou 242 (et non tout le nom du fichier), est-il possible de modifier le code ci-dessous pour joindre le fichier y afférent :

.Attachments.Add dos & "\" & tbl(i, 6) 'Pièce jointe

Merci bien.

Bonjour,

J'ai un peu de mal à comprendre où vous récupérez la partie "droite" du nom du fichier dans ce cas…

Mais oui vous pouvez faire quelque chose comme :

.Attachments.Add dos & "\" & tbl(i, 6) & "_202504" & ".xlsx"

Ou bien, si le numéro à droite du "_" se trouve dans la colonne 7 du tableau,

.Attachments.Add dos & "\" & tbl(i, 6) & "_" & tbl(i, 7) & ".xlsx"

Pour vous éclaircir, je vous joins un fichier Excel qui contient la macro et qui contient le tableau Excel. Vous constaterez que dans la colonne 6 du tableau, les noms des fichiers à joindre ne correspondent pas totalement au nom des fichiers World ; c'est juste les caractères avant le tiret du 8 qui sont indiqués dans le fichier Excel en colonne 6.

J'espère que ces explications sont plus claires,

Merci.

12b01-20250203.docx (12.95 Ko)
91-20250402.docx (12.95 Ko)
1124-20240204.docx (12.95 Ko)

Ah d'accord j'ai compris, en gros vous connaissez seulement les premiers caractères, et il faut "trouver le reste" => le fichier qui correspond (au mieux).

Je vous écris une petite MAJ, avec recherche des fichiers. Cependant attention, si vous avez 2 fichiers qui commencent par le même préfixe, je vais vous ajouter un message d'alerte. On ne sait jamais.

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

Ah d'accord j'ai compris, en gros vous connaissez seulement les premiers caractères, et il faut "trouver le reste" => le fichier qui correspond (au mieux).

Je vous écris une petite MAJ, avec recherche des fichiers. Cependant attention, si vous avez 2 fichiers qui commencent par le même préfixe, je vais vous ajouter un message d'alerte. On ne sait jamais.

En fait il n'y a pas besoin de deviner le reste du nom. En ce qui concerne la pièce a joindre, si dans la colonne 6 du tableau figure « 1 », il doit seulement aller dans le répertoire indiqué et Regardez le nom du fichier qui contient « 1 » avant le tiret et joindre le fichier répondant à cette condition.

Pour un autre exemple si dans la colonne 6 du tableau figure « az22 » il doit aller dans le répertoire et trouver le fichier qui commence par « az22 » avant le tiret.

Merci.

Yes, vous avez testé la solution proposée ? C'est ce qu'elle fait.

Yes, vous avez testé la solution proposée ? C'est ce qu'elle fait.

cela ne fontionne pas "erreur d'acces chemin introuvable". Vous pouvez essaher svp?

J'ai testé justement, avec mon chemin local ça fonctionne.

Vérifiez :

  • Que le chemin est correct : copiez/collez depuis Windows explorer
  • Avez-vous bien les fichiers Words dans le dossier en question ?

J'ai testé justement, avec mon chemin local ça fonctionne.

Vérifiez :

  • Que le chemin est correct : copiez/collez depuis Windows explorer
  • Avez-vous bien les fichiers Words dans le dossier en question ?

Autant pour moi, cela fonctionne,

Je vous remercie bien

...

Autant pour moi, cela fonctionne,

Je vous remercie bien

Je vous en prie, bonne journée.

PS : Sélectionnez plutôt le message contenant la solution pour clôturer un fil.

Bon weekend.

...

Autant pour moi, cela fonctionne,

Je vous remercie bien

Je vous en prie, bonne journée.

PS : Sélectionnez plutôt le message contenant la solution pour clôturer un fil.

Bon weekend.

C'est fait merci.

Rechercher des sujets similaires à "mails pieces joindre partir macro"