VBA envoi mails avec pj dans différents dossiers
Bonjour,
Je reviens vers vous concernant une macro pour envoyer des mails avec pièces jointes via Outlook. Elle fonctionne très bien !
Néanmoins, je souhaiterais permettre qu'elle récupère des pièces jointes dans d'autres dossiers placés ailleurs (sur le serveur du boulot en l'occurence). En effet, souvent nos fichiers sont classés dans des dossiers différents. Cela permettrait d'éviter d'avoir à tout copié dans une dossier unique.
Ce qui pourrait être bien c'est que la macro aille chercher le chemin dans une cellule du tableur dans laquelle elle serait renseignée. Par exemple la pièce jointe 1 pourrait être dans le dossier "\\fileruser2\Users\XXX\Bureau\Macromails" (pour faire simple) ce chemin serait indiqué en cellule I2. Même fonctionnement pour d'autres pièces jointes se situant ailleurs.
Quelqu'un pourrait m'aider à traduire ça en VBA ?
Mon code actuel est dispo dans le fichier ci dessous.
Merci pour votre lecture et pour votre aide
Bonjour x--ben,
vois si ça te convient, à adapter dans le code le chemin:
Sub Envoi_Mail()
Dim Fichier1 As String 'il faut déclarer autant de variables que de fichiers à joindre
Dim Fichier2 As String 'il faut déclarer autant de variables que de fichiers à joindre
Dim Fichier3 As String 'il faut déclarer autant de variables que de fichiers à joindre
Dim Chemin1 As String
Dim Chemin2 As String
Dim Chemin3 As String
Dim Table(), j As Integer
Dim fields As Variant
Dim ws As Worksheet
On Error Resume Next
Set oOutlook = CreateObject("Outlook.Application")
Chemin1 = "C:\Users\Sequoyah\Desktop\Forum\" '====>> à adapter
Chemin2 = "C:\Users\Sequoyah\Desktop\Forum\" '====>> à adapter
Chemin3 = "C:\Users\Sequoyah\Desktop\Forum\" '====>> à adapter
Set ws = ThisWorkbook.Sheets("Feuil1") 'Onglet ou feuille source de données ici Feuil1
Table = ws.Range("A2:J6") 'Plage de données que l'on veut sur la feuille source de données
For j = LBound(Table, 1) To UBound(Table, 1) 'on boucle chaque cellule de la première colonne de notre table
Application.StatusBar = "Nom processing file # " & j & "/" & UBound(Table, 1)
Fichier1 = Chemin1 & Table(j, 8) & ".docx" 'va chercher le nom de la PJ dans la colonne X du tableau et ajoute l'extention de fichier
'.docx. Si la PJ1 n'a pas toujours la même extension, il faut mettre changer l'extention
Fichier2 = Chemin2 & Table(j, 9) & ".pdf" 'idem
Fichier3 = Chemin3 & Table(j, 10) & ".txt" 'idem
Set oMailItem = oOutlook.CreateItem(0)
'Set All Email Properties
With oMailItem
.Subject = Table(j, 3) & " " & Table(j, 2) & " - Dispositif apiculture" 'l'objet prend la valeur dans la colonne X et la complète avec le texte
.To = Table(j, 7)
.HTMLBody = "<font size=3><font face=Verdana> " & Table(j, 1) & " " & Table(j, 2) & ", <br>" _
& "<br>" _
& "Le dossier que vous avez déposé dans le cadre du dispositif d'aide exceptionnelle aux apiculteurs mis en place pour " & Table(j, 4) & " colonies a été accepté." _
& " Ainsi, un aide d'un montant de " & Table(j, 6) & " € vous a été attribuée." _
& " <br>" _
& " Veuillez trouvez ci-joint les documents à fournir pour procéder au paiement de la subvention." _
& "<br>" _
& "<br>" _
& "Cordialement </font>" _
& "<br>" _
& "<br>" _
' & Signature("NA")
.Attachments.Add Fichier1
.Attachments.Add Fichier2
.Attachments.Add Fichier3
.Display
'.Save '<- sauvegarde l'email avant l'envoi (pour ne pas le sauvegarder, mettez cette ligne en commentaire)
'.Send '<- envoie l'email (si vous voulez seulement préparer l'email et l'envoyer manuellement, mettez cette ligne en commentaire)
End With
Next j
'nettoyage...
If (Not (oMailItem Is Nothing)) Then Set oMailItem = Nothing
If (Not (oOutlook Is Nothing)) Then Set oOutlook = Nothing
End Sub
Function Signature(NouvelleAquitaine As String) As String
Dim FSO As Object, TextStream As Object
Dim nom_fichier As String
Signature = Empty
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
nom_fichier = Environ("APPDATA") & "\Microsoft\Signatures\" & NA & ".htm" 'mettre nom de la signature
Set TextStream = FSO.OpenTextFile(nom_fichier)
If Err.Num = 0 Then
Signature = TextStream.ReadAll
'remplacement adresse relative images par adresse absolue
Signature = Replace(Signature, NA & "_fichiers/", Environ("APPDATA") & "\Microsoft\Signatures\" & NA & "_fichiers/")
End If
End Function
Merci Sequoyah pour ton aide. Si je travaille hors serveur cela marche bien mais avec des liens sur le serveur cela ne fonctionne pas
Peut-être faut-il que je donne des droits d'accès particuliers à Excel ?
Pourtant pour une autre macro, il est possible de créer des documents sur le serveur. Mais c'est "ThisWorbook.Path" qui est utilisé...
Là l'idéal serait que j'indique un chemin et que la macro puisse aller fouiller dans l'arborescence pour prendre les fichiers. Souvent on a une arborescence avec un dossier père et des sous-dossiers par bénéficiaires d'aide par exemple.
Bonjour,
je viens de tester la macro sur plusieurs dossiers sur un serveur et ça marche sans problème. Tu es sûr d’avoir indiqué le chemin correctement? Par exemple
Chemin3 = "\\fileruser2\Users\XXX\Bureau\Macromails\"
Pour éviter d’entrer le chemin dans le code on peut indiquer le chemin complet et le nom du fichier dans la cellule désirée
En effet, ça fonctionne ! Merci pour ton aide !
Le débile que je suis avait oublié le \ de fin...
Quelqu'un aurait une idée pour que la macro aille fouiller dans l'arborescence à partir d'un chemin donné vers un dossier père avec des sous dossiers ?
Bonjour x--ben,
merci pour ton retour. Pour obtenir ce que tu demandes il doit y avoir un identifiant unique entre le destinataire de l’e-mail et le nom du sous dossier.
Je ne suis pas sûr de comprendre ce que tu veux dire Sequoyah
Tu veux dire qu'il faudrait que ce soit rangé comme ci-dessous ?
Dossier père --> Sous-dossier 1 --> René.pdf ; Michelle.pdf ; Jacques.pdf
--> Sous-dossier 2 --> Sous-sous-dossier René --> René.docx
--> Sous-sous-dossier Michelle --> Michelle.docx
--> Sous-sous-dossier Jacques --> Jacques.docx
1 mail par personne avec un .pdf et .docx
Pour le premier document pas de soucis tout est dans le même sous-dossier.
Pour le Sous-dossier 2, il faut pouvoir aller plus loin dans l'arborescence avec ça par exemple ?
Chemin3 = "\\fileruser2\Users\XXX\Bureau\Macromails\" & "Table( j,3)"avec la colonne 3 = René, Michelle ou Jacques ?
EDIT :
J'ai réfléchis, j'ai testé et ça fonctionné
Le changement se fait au niveau de la définition de la variable fichier :
Fichier1 = Chemin1 & Table(j, 2) & "\" & Table(j, 8) & ".docx"Attention à ne pas oublier l'anti slash ( \ )...
Bon ç a pousse à avoir des dossiers triés d'une certaines manières mais ça reste utile.
Merci encore pour ton aide Sequoyah !!