Envoi mail plusieurs fichiers

Bonjour à tous,

Je poste sur ce forum une nouvelle fois, pas pour demander un code car je l'ai trouvé, mais pour me dire pourquoi mon fichier ne marche pas.

Je m'explique, j'ai créé un fichier pour archiver, envoyer automatiquement par mail au client ainsi qu'incrémenter un fichier de suivi pour des devis.

Tout fonctionnait très bien, à part quand j'ai commencé à vouloir envoyer par mail plusieurs fichier, en effet, je dois envoyer le devis par mail en pdf (ça c'est ok) ainsi qu'un onglet "EWR" en format EXCEL, et c'est là que ça bloque.

J'ai trouvé le code pour créé une copie de la feuille que j'ai besoin, l'envoyer et l'effacer mais j'ai un message d'erreur :

f6u5

Donc je pense que c'est au niveau des pièces jointes ".Attachment" du mail que ça bloque mais je ne sais pas débloquer moi même...

Cela serait dans cette partie de code que ça bloque :

'Envoie du pdf au client
    doc = CH & "\" & A & "\" & M & "\" & "2620-" & CStr(Year(Date)) & "-" & [D14].Value & ".pdf"

Dim Sh, nSh As Worksheet
Dim nWb As Workbook
Dim aApp, aMail As Object
Dim FilePath$

Set Sh = ThisWorkbook.Sheets("EWR") 'choisir la bonne feuille
Set nWb = Workbooks.Add()
Set nSh = nWb.Sheets(1)
Set aApp = CreateObject("Outlook.Application")
Set aMail = aApp.CreateItem(0)

Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1")
FilePath = ThisWorkbook.Path 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
nWb.SaveAs FilePath 'On sauvegarde une copie.
 With aMail
 .To = [G9].Value ' destinataires
       .Subject = "Devis " & LCase([D16].Value)    'Sujet
       .Body = "Bonjour M." & [L1].Value & "," & Chr$(10) & Chr$(10) & "Veuillez trouver ci-joint notre devis pour les travaux : " & LCase([D16].Value) & " , bonne réception." & Chr$(10) & Chr$(10) & "Cordialement, " & Chr$(10) & "Joffrey" 'Corps du mail
       .Attachments.Add doc & FilePath  'attachment pdf
       .Display 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
    End With
  nWb.Close 'On ferme le fichier...
 Kill FilePath 'et on le détruit.

En vous remerciant d'avance

Cordialement,

Julien.

24forum-excel.zip (29.47 Ko)

Tu n'aurais pas inversé doc et FilePath ?

.Attachments.Add doc & FilePath

Autre piste = que contient CH ?

Bonjour, merci d'avoir passer un peu de temps pour moi

En fait, doc et FilePath sont deux fichiers :

  • doc= le pdf du devis (qui s'enregistre sur le chemin "CH" avec le nom ""2620-" & CStr(Year(Date)) & "-" & [D14].Value & ".pdf""
  • FilePath = la copie de l'onglet que je veux envoyer en Excel

J'ai répondu à ta question concernant CH, il s'agit du chemin sur lequel le document en pdf est enregistrer.

J'ai essayé d'inverser "doc" et "FilePath" mais ça fait toujours le même message d'erreur.

Pourtant, je lis ceci

FilePath = ThisWorkbook.Path

et ensuite

nWb.SaveAs FilePath

c'est ce qui me mettait la puce à l'oreille.

Le mieux est que tu mettes par un exemple un espion ou un msgbox juste avant les enregistrements avec les valeurs supposées des fichiers, et tu les postes si besoin.

Par exemple

FilePath = ThisWorkbook.Path 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
MsgBox FilePath
nWb.SaveAs FilePath 'On sauvegarde une copie.

idem pour le suivant

MsgBox doc & FilePath
.Attachments.Add doc & FilePath

Au lieu de MsgBoxtu peux aussi mettre Debug.Print

Bonjour Steelson,

Merci en tout cas pour ton aide

J'ai fait quelques tests :

Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1")
FilePath = ThisWorkbook.Path 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
nWb.SaveAs FilePath 'On sauvegarde une copie.
doc2 = FilePath & "\Devis Dupont.xls"
MsgBox doc2
 With aMail
 .To = [G9].Value ' destinataires
       .Subject = "Devis " & LCase([D16].Value)    'Sujet
       .Body = "Bonjour M." & [L1].Value & "," & Chr$(10) & Chr$(10) & "Veuillez trouver ci-joint notre devis pour les travaux : " & LCase([D16].Value) & " , bonne réception." & Chr$(10) & Chr$(10) & "Cordialement, " & Chr$(10) & "Joffrey" 'Corps du mail
       MsgBox doc & doc2
       .Attachments.Add doc2 & doc  'attachment pdf
       .Display 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
    End With
  nWb.Close 'On ferme le fichier...
 Kill doc2 'et on le détruit.

Le problème se trouve au niveau de :

Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1")
FilePath = ThisWorkbook.Path 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
nWb.SaveAs FilePath 'On sauvegarde une copie.

car quand je vais cherche la copie de la feuille créée, elle ne se trouve pas dans "ThisWorkBook.Path" comme je lui ai indiqué mais dans son dossier parent. Ensuite elle prend un nom : "Devis Dupon.xls" que je ne lui ai pas demandé...

J'aurais voulu savoir d'où venait se problème et comment je peux prédire le nom de la copie créée (ce fichier ne sera pas utilisé sur mon poste c'est pour ça que j'utilise des chemins dynamiques) ?

En vous remerciant d'avance de l'aide que vous pourrez m'apporter

Cordialement,

Julien.

Bonjour,

j'insiste, il y a mélange entre les noms de dossier et de fichier

FilePath = ThisWorkbook.Path

donne le chemin d'accès, pas le nom du fichier à enregistrer

je suppose que le nom du fichier "Devis Dupon" n'est en fait rien d'autre que le nom du dossier que la macro a donc attribué au fichier ...

as-tu mis en place le Debug.Print, tu y verras plus clair

Bonjour Steelson,

Steelson a écrit :

Bonjour,

j'insiste, il y a mélange entre les noms de dossier et de fichier

FilePath = ThisWorkbook.Path

donne le chemin d'accès, pas le nom du fichier à enregistrer

On est bien d'accord, c'est pour cela que j'ai créé "doc2" qui correspond au fichier que je veux récupéré (la copie de la feuille);

Steelson a écrit :

je suppose que le nom du fichier "Devis Dupon" n'est en fait rien d'autre que le nom du dossier que la macro a donc attribué au fichier ...

Il s'agit bien du nom du dossier à la base.

Steelson a écrit :

as-tu mis en place le Debug.Print, tu y verras plus clair

J'ai en effet mis en place Debug.Print mais aucun changement.

Toujours fichier introuvable alors que quand je mets le Msgbox espion, j'ai la bonne valeur pour la variable...

Merci de ton aide encore une fois, et désolé de ne pas forcément tilter sur ce que tu me demandes car je débute en VBA...

Cordialement,

Julien.

Eureka, j'ai trouvé mon problème

Je mets le code si jamais ça intéresse quelqu'un

Application.ScreenUpdating = False
Sh.Cells.Copy nSh.Range("A1") 'Choisir un path (peu importe lequel puisqu'on écrase le fichier à la fin)..
FilePath = ThisWorkbook.Path
nWb.SaveAs FilePath 'On sauvegarde une copie.
ChDir (ThisWorkbook.Path)
ChDir ".."
doc2 = CurDir(ThisWorkbook.Path) & "\Devis Dupont.xlsx"
 With aMail
 .To = [G9].Value ' destinataires
       .Subject = "Devis " & LCase([D16].Value)    'Sujet
       .Body = "Bonjour M." & [L1].Value & "," & Chr$(10) & Chr$(10) & "Veuillez trouver ci-joint notre devis pour les travaux : " & LCase([D16].Value) & " , bonne réception." & Chr$(10) & Chr$(10) & "Cordialement, " & Chr$(10) & "Joffrey" 'Corps du mail
       .Attachments.Add doc2  'attachment pdf
       .Attachments.Add doc
       .Display 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
    End With
  nWb.Close 'On ferme le fichier...

 Kill doc2 'et on le détruit.

Merci Steelson pour ton aide!

Cordialement,

Julien.

Bonjour à tous,

Je tiens à faire une petite précision sur ce code car j'ai eu un problème.

Quand vous allez fermer excel, vous allez avoir un message d'erreur, disant : "Cette Image est trop grande et va être tronquée", ce qui peut faire planter Excel si vous le fermez à la fin de l’exécution de la macro.

Pour résoudre cela, très simple, sur la ligne de code

Sh.Cells.Copy nSh.Range("A1") 

, précisez le range car en fait il copie la feuille entière.

Merci à tous ceux qui m'ont aidé pour ce fichier en tout cas

Cordialement,

Julien.

Rechercher des sujets similaires à "envoi mail fichiers"