Création dossier, enregistrement fichier + mail
Bonjour à tous,
Je viens vers vous car j'ai épuisé toutes les solutions que je pensais trouver pour résoudre mes soucis en VBA.
J'espère vraiment que quelqu'un pourra m'aider.
Je vous explique mon problème.
J'ai crée un fichier excel pour gérer mes bons de livraison. Sur ce fichier j'ai ajouté un bouton qui doit me permettre d'effectuer les manipulations suivantes:
- créer un dossier s'il n'existe pas encore
- enregistrer mon fichier dans le dossier en Excel
- envoyer un mail au client avec une version PDF
Seulement jusqu'à maintenant je suis arrivé à enregistrer le fichier en PDF mais pas dans un dossier et j'arrivais à l'envoyer au client.
J'ai essayé à partir d'informations que j'ai récupéré d'autres posts d'ajouter ce qui me manque mais malheureusement rien ne fonctionne.
Voici le code que j'ai intégré :
Sub Mail_Outlook_fichier_PDF()
Dim nomfichier As String
Dim repert As String
Dim verif As String
CurFile = "C:\Users\" & Environ("username") & "\Desktop\Bon de livraison\" & Range("B7") & " " & Range("C1") & ".pdf"
repert = "C:\Users\" & Environ("username") & "\Desktop\Bon de livraison\" & ".xslm"
If (verif = Dir(repert & "\", vbDirectory)) = vbEmpty Then
Else
MkDir "C:\Users\" & Environ("username") & "\Desktop\Bon de livraison\" & Range("B7")
repert = Workbooks(ThisWorkbook.Name).Path & "\" & repert
End If
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
OpenAfterPublish:=False
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
CurFile = "C:\Users\" & Environ("username") & "\Desktop\Bon de livraison\" & Range("F1") & "du" & Range("B3") & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
OpenAfterPublish:=False
With OutMail
.To = Sheets("BL").Range("D12")
.CC = ""
.BCC = ""
.Subject = "Bon de livraison n° " & Sheets("BL").Range("F1") & "du" & Sheets("BL").Range("B3")
.Attachments.Add CurFile
.Body = "Bonjour," & vbCrLf & vbCrLf & "Vous trouverez ci-joint votre bon de livraison signé." & vbCrLf & vbCrLf & "Je reste à votre disposition pour tous renseignement complémentaire." & vbCrLf
.display
End With
Set OutMail = Nothing
Set OutApp = Nothing
Application.Quit
End Sub
Je me doute qu'il doit y avoir des erreurs. Quelqu'un pourrait-il m'aider SVP ?
Je vous remercie par avance pour votre aide.
PS: Je joint le fichier.
Personne ne saurait m'aider ???
Bonjour Rom68 et le Forum,
voici une proposition, vérifie la référence aux cellules dans le noms du fichier et du classeur:
Sub test()
Dim myPath As String, Dossier As String, Fichier As String, Classeur As String
Dim OutApp As Object
Dim OutMail As Object
Dossier = ActiveSheet.Range("B7").Value
myPath = Environ("USERPROFILE") & "\Desktop\Bon de livraison\" & Dossier & "\"
If Len(Dir(myPath, vbDirectory)) = 0 Then
MkDir myPath
End If
Fichier = myPath & Range("B7") & " " & Range("C2") & ".pdf"
Classeur = myPath & Range("B7") & ".xlsx"
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fichier, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
OpenAfterPublish:=False
Worksheets("BL").Copy
With ActiveWorkbook
.SaveAs Filename:=Classeur, FileFormat:=xlOpenXMLWorkbook
.Close SaveChanges:=False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Sheets("BL").Range("D12")
.CC = ""
.BCC = ""
.Subject = "Bon de livraison n° " & Sheets("BL").Range("F1") & " du " & Sheets("BL").Range("B3")
.Attachments.Add Fichier
.Body = "Bonjour," & vbCrLf & vbCrLf & "Vous trouverez ci-joint votre bon de livraison signé." & vbCrLf & vbCrLf & "Je reste à votre disposition pour tous renseignement complémentaire." & vbCrLf
.display
End With
Set OutMail = Nothing
Set OutApp = Nothing
' Application.Quit
Kill Fichier 'Si on veut supprimer le fichier PDF après l'envoi
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End SubC'est tout simplement parfait tout fonctionne c'est top
Merci beaucoup.
Un dernier point d'amélioration possible. Si je souhaite rajouter automatiquement la signature outlook à la fin du mail comment faire ?
Bonjour Rom68,
voici le code adapté pour ajouter la signature à l’e-mail:
Sub test2()
Dim myPath As String, Dossier As String, Fichier As String, Classeur As String, Message As String, Signature As String
Dim OutApp As Object
Dim OutMail As Object
Dossier = ActiveSheet.Range("B7").Value
myPath = Environ("USERPROFILE") & "\Desktop\Bon de livraison\" & Dossier & "\"
If Len(Dir(myPath, vbDirectory)) = 0 Then
MkDir myPath
End If
Fichier = myPath & Range("B7") & " " & Range("C2") & ".pdf"
Classeur = myPath & Range("B7") & ".xlsx"
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fichier, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
OpenAfterPublish:=False
Worksheets("BL").Copy
With ActiveWorkbook
.SaveAs Filename:=Classeur, FileFormat:=xlOpenXMLWorkbook
.Close SaveChanges:=False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.Display
End With
Signature = OutMail.HTMLbody
Message = "<style> body{color:black;font-family:calibri;font-size: 12pt;} </style>" & _
"<HTML><body>Bonjour,<br><br> " & _
"Vous trouverez ci-joint votre bon de livraison signé.<br>" & _
"Je reste à votre disposition pour tous renseignement complémentaire.<br>" & _
"Bien cordialement." & "</a></body>"
With OutMail
.To = Sheets("BL").Range("D12")
.CC = ""
.BCC = ""
.Subject = "Bon de livraison n° " & Sheets("BL").Range("F1") & " du " & Sheets("BL").Range("B3")
.Attachments.Add Fichier
.HTMLbody = Message & Signature
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
' Application.Quit
Kill Fichier 'Si on veut supprimer le fichier PDF après l'envoi
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub