Microsoft 365 Envoyer plusieurs mails avec des destinataires et des pièces jointes différentes avec Outlook

ivan27

XLDnaute Occasionnel
Bonsoir à tous,

J'ai trouvé des nombreux exemples de transmission de mail depuis Excel, avec Microsoft Outlook, mais aucun ne s'applique vraiment à mon cas.

Sur mon PC, dans le répertoire c:\Temp\STT, j'ai plusieurs classeurs au format excel (.xlsx) que je souhaites transmettre avec Outlook depuis excel.

Chaque classeur porte le nom du destinataire, inscrit dans la colonne A de la feuille STT. Exemple : ''FOURNISSEUR TITI.xlsx'' ou ''ESSAI.xlsx''

Donc chaque fichier présent dans le répertoire c:\Temp\STT, doit être transmis en pièce jointe d'un mail à l'adresse inscrite colonne E de la feuille STT.
Le classeur FOURNISSEUR TITI.xlsx doit étre transmis à autreFournisseur@postmail.fr
Le classeur ESSAI.xlsx doit être transmis à fournisseurESSAI@mail.com
etc...

Pour le contenu du mail (objet, corps, signature), soit on peut écrire le texte en dur dans le code, mais je préférerais utiliser les données de la feuille "paramètres''
OBJET : en G2
CORPS et SIGNATURE : en G3, G4

Merci d'avance pour votre aide

Ivan
 

Pièces jointes

  • testMail.xlsx
    17.7 KB · Affichages: 36

Jumarin

XLDnaute Nouveau
Re bonjour,
La version V3 jointe fait cela.
A tester
@+ Lolote83
Bonjour Lolote83,
j'ai utilisé ton support pour un envoi mail en automatique qui fonctionne très bien.
Cependant au niveau de mon fichier dans le chemin , j'ai une variable qui change tout le temps et une qui est toujours fixe: c:\Temp\STT\variable_fixe
j'aimerais que mon fichier soit envoyé en fonction de ma fixe et qui ne s'occupe pas de ma variable





 
Dernière édition:

Lolote83

XLDnaute Barbatruc
Re bonjour,
Merci pour le fichier joint.
Par contre, je ne saisis toujours pas vraiment la partie Fixe de la partie variable.
Dans quel champ doit on récupérer le client1, client2, client3 etc etc etc
Si je comprends, en fonction du client, le chemin (onglet Paramètres - cellule B7) devrait donc changer ?
Encore besoin de précision. Désolé
@+ Lolote83
 

Jumarin

XLDnaute Nouveau
Re bonjour,
Merci pour le fichier joint.
Par contre, je ne saisis toujours pas vraiment la partie Fixe de la partie variable.
Dans quel champ doit on récupérer le client1, client2, client3 etc etc etc
Si je comprends, en fonction du client, le chemin (onglet Paramètres - cellule B7) devrait donc changer ?
Encore besoin de précision. Désolé
@+ Lolote83
en fait, je ne peux pas savoir en avance car il s'agit d'un fichier pdj que je génère et qui s'intitule NomPrénom_FichierA (le fichierA correspond à une entreprise).
la seule partie qui ne bouge pas est "FichierA", la partie variable NomPrénom, il y a juste une séparation "_" entre les 2.
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
Voici le code modifié en fonction du NOM dans le chemin
VB:
Sub Envoi()
      
 Dim LeMail As Object
    
    With Sheets("Paramètres")
        xSujet = .[B3]
        xBody = .[B4]
        'xChemin = .[B7]
    End With
    
    Set OutlookApp = CreateObject("Outlook.Application")
    
    For Each xClasseur In Range("tblBase[Laiterie]")
        xLig = xLig + 1
        xFichier = Range("tblBase[Laiterie]")(xLig, 1)
        
        xChemin = "C:\Users\" & Range("tblBase[Nom]")(xLig, 1) & "\Desktop\Formation"
        
        If FichierExiste(xChemin & "\" & xFichier & ".pdf") = True Then
        
        'If xFichier <> Empty Then
            xFichier = xFichier & ".pdf"
            xTo = Range("tblBase[Mail]")(xLig, 1)
            xCc = ""
                
            Set LeMail = OutlookApp.CreateItem(0)
    
            With LeMail
                .To = xTo
                .CC = xCc
                .Subject = xSujet
                .Body = xBody
                .Attachments.Add xChemin & "\" & xFichier
                
                .Display
                '.Send
            End With
        End If
    Next xClasseur
    
    ' Effacer les variables objet pour libérer la mémoire
    Set LeMail = Nothing
    
    MsgBox "mail envoyé"
End Sub

La modification concerne xChemin = "C:\Users\" & Range("tblBase[Nom]")(xLig, 1) & "\Desktop\Formation"
@+ Lolote83
 

Jumarin

XLDnaute Nouveau
Re bonjour,
Voici le code modifié en fonction du NOM dans le chemin
VB:
Sub Envoi()
     
 Dim LeMail As Object
   
    With Sheets("Paramètres")
        xSujet = .[B3]
        xBody = .[B4]
        'xChemin = .[B7]
    End With
   
    Set OutlookApp = CreateObject("Outlook.Application")
   
    For Each xClasseur In Range("tblBase[Laiterie]")
        xLig = xLig + 1
        xFichier = Range("tblBase[Laiterie]")(xLig, 1)
       
        xChemin = "C:\Users\" & Range("tblBase[Nom]")(xLig, 1) & "\Desktop\Formation"
       
        If FichierExiste(xChemin & "\" & xFichier & ".pdf") = True Then
       
        'If xFichier <> Empty Then
            xFichier = xFichier & ".pdf"
            xTo = Range("tblBase[Mail]")(xLig, 1)
            xCc = ""
               
            Set LeMail = OutlookApp.CreateItem(0)
   
            With LeMail
                .To = xTo
                .CC = xCc
                .Subject = xSujet
                .Body = xBody
                .Attachments.Add xChemin & "\" & xFichier
               
                .Display
                '.Send
            End With
        End If
    Next xClasseur
   
    ' Effacer les variables objet pour libérer la mémoire
    Set LeMail = Nothing
   
    MsgBox "mail envoyé"
End Sub

La modification concerne xChemin = "C:\Users\" & Range("tblBase[Nom]")(xLig, 1) & "\Desktop\Formation"
@+ Lolote83
merci pour la réponse mais en fait le nom que j'ai mis dans le chemin était le mien alors que le nomprénom qui est dans mon fichier que j'envoie, je ne le connais pas.
il est renseigné nulle part.
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
On peut récupérer le nom d'utilisateur de la façon suivante
VB:
Sub Test()
    MsgBox Environ("UserName")
End Sub
Test ce petit code chez toi, tu devrais avoir un message avec ton nom d'utilisateur.
De fait, il faut modifier la ligne du post#22 par celle-ci
Code:
xChemin = "C:\Users\" & Environ("UserName") & "\Desktop\Formation"
Cordiallement
Lolote83
 

Jumarin

XLDnaute Nouveau
Re bonjour,
On peut récupérer le nom d'utilisateur de la façon suivante
VB:
Sub Test()
    MsgBox Environ("UserName")
End Sub
Test ce petit code chez toi, tu devrais avoir un message avec ton nom d'utilisateur.
De fait, il faut modifier la ligne du post#22 par celle-ci
Code:
xChemin = "C:\Users\" & Environ("UserName") & "\Desktop\Formation"
Cordiallement
Lolote83
Merci beaucoup pour tout ce que tu fais,
mais en fait je voudrais envoyer à mes clients bien spécifique, les participants d'une formation.

1639078549363.png
 

Pièces jointes

  • Variable_fixe.xlsm
    24.2 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 145
Messages
2 085 761
Membres
102 965
dernier inscrit
Mael44