VBA outlook : Envoi de mails selon critère

Résolu
hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   -  
 Profil bloqué -

Bonjour,

Je dois envoyer des e-mails à 2 destinataires avec des pièces jointes. Chaque destinataire a ses pièces jointes stockées dans un dossier à part qui eux meme sont dans un dossier pricipal.

Le code suivant devrait faire ce travail, mais j'ai une erreur de débogage à la ligne

dossierDestinataire = Dir()

avant le dernier loop. Pouvez-vous m'aider s'il vous plait.

voici le code :

Sub EnvoyerEmailAvecPieceJointe()

    ' Définir le chemin d'accès au dossier principal contenant les sous-dossiers de chaque destinataire
    Dim dossierPrincipal As String
    dossierPrincipal = "D:\Pieces jointes\"
    
    ' Boucler sur les sous-dossiers pour envoyer un email à chaque destinataire
    Dim dossierDestinataire As String
    Dim destinataire As String
    Dim monMessage As Outlook.MailItem
    Dim fichier As String
    
    dossierDestinataire = Dir(dossierPrincipal & "*", vbDirectory)
    
    Do While Len(dossierDestinataire) > 0
        If dossierDestinataire <> "." And dossierDestinataire <> ".." Then
            
            ' Définir le destinataire en fonction du nom du sous-dossier
            Select Case dossierDestinataire
                Case "D1": destinataire = "Destinataire1@abc.com"
                Case "D2": destinataire = "Destinataire2@ijk.com"
                ' Ajouter d'autres cas pour chaque destinataire et chaque dossier
            End Select
            
            ' Créer un nouvel email pour ce destinataire
            Set monMessage = Application.CreateItem(olMailItem)
            
            ' Définir les destinataires, le sujet et le corps de l'email
            monMessage.To = destinataire
            monMessage.Subject = "TEST"
            monMessage.Body = "Ce mail est un test, Merci d'ignorer"
            
            ' Ajouter les pièces jointes du dossier correspondant à ce destinataire
            fichier = Dir(dossierPrincipal & dossierDestinataire & "\", vbNormal)
            Do While Len(fichier) > 0
                If fichier <> "." And fichier <> ".." Then
                    monMessage.Attachments.Add dossierPrincipal & dossierDestinataire & "\" & fichier
                End If
                fichier = Dir()
            Loop
            
            ' Envoyer l'email
            monMessage.Send
            
        End If
    dossierDestinataire = Dir()
    Loop

End Sub

17 réponses

  1. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    Bonjour,

    j'ai oublié de préciser que j'ai outlook 2016

    Merci de votre aide habituelle.

    0
  2. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Pouvez-vous indiquer le texte d'erreur ?


    0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Suite essai simulé selon ce que j'ai compris, essayer avec ce code (modifier boucle sur fichier)

    Sub EnvoyerEmailAvecPieceJointe()
    
        ' Définir le chemin d'accès au dossier principal contenant les sous-dossiers de chaque destinataire
        Dim dossierPrincipal As String
        dossierPrincipal = "D:\Jean-Pierre\Bureau\Test_hmcirta\" '"D:\Pieces jointes\"
        
        ' Boucler sur les sous-dossiers pour envoyer un email à chaque destinataire
        Dim dossierDestinataire As String
        Dim destinataire As String
      '  Dim monMessage As Outlook.MailItem
        Dim fichier As String
        
        dossierDestinataire = Dir(dossierPrincipal & "*", vbDirectory)
        
        Do While Len(dossierDestinataire) > 0
            If dossierDestinataire <> "." And dossierDestinataire <> ".." Then
                
                ' Définir le destinataire en fonction du nom du sous-dossier
                Select Case dossierDestinataire
                    Case "D1": destinataire = "Destinataire1@abc.com"
                    Case "D2": destinataire = "Destinataire2@ijk.com"
                    ' Ajouter d'autres cas pour chaque destinataire et chaque dossier
                End Select
                
                ' Créer un nouvel email pour ce destinataire
                Set monMessage = Application.CreateItem(olMailItem)
                
                ' Définir les destinataires, le sujet et le corps de l'email
                monMessage.To = destinataire
                monMessage.Subject = "TEST"
                monMessage.Body = "Ce mail est un test, Merci d'ignorer"
                
                ' Ajouter les pièces jointes du dossier correspondant à ce destinataire
    '***** Modification Le Pingou
    Dim Wk As Object
    Dim rep As Object
    Dim Chemin As String
        Chemin = dossierPrincipal & dossierDestinataire 'ThisWorkbook.Path
        Set rep = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
    
        For Each Wk In rep.Files
            monMessage.Attachments.Add Wk
        Next
                
    '            fichier = Dir(dossierPrincipal & dossierDestinataire & "\", vbNormal)
    '            Do While Len(fichier) > 0
    '                If fichier <> "." And fichier <> ".." Then
    '                    monMessage.Attachments.Add dossierPrincipal & dossierDestinataire & "\" & fichier
    '                End If
    '                fichier = Dir()
    '            Loop
    '**** fin modification
    
                ' Envoyer l'email
                monMessage.Send
                
            End If
        dossierDestinataire = Dir()
        Loop
    
    End Sub

    0
  4. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    Bonjour

    Merci de ton aide Le Pingou

    dans mon code la ligne :

    dossierDestinataire = Dir()

    renvoi l'erreur de débogage "Argument ou appel de procédure incorrect"

    Pour ta proposition, la ligne :

    monMessage.Attachments.Add Wk

    renvoi l'erreur de débogage : Propriété ou méthode non gérée par cet objet

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Dans ma proposition du poste 3, ne pas oublier de rétablir la ligne :

    ​
    dossierPrincipal = "D:\Jean-Pierre\Bureau\Test_hmcirta\" '"D:\Pieces jointes\"
    
    ​Corriger:
    ​
    dossierPrincipal = "D:\Pieces jointes\"
    
    ​

    0
  7. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    Bonjour, 

    oui ça été fait.

    Dans mon code le premier message est bien envoyé au destinataire qu'il faut, c'est au moment où le code passe au 2eme dossier que ça bug.

    0
  8. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Avez-vous essayé le code que j'ai modifié au poste 3 ... Oui /Non ou sa sert à rien....!

    La boucle sur les fichiers ne peut pas se faire avec Dir() car dès que vous revenez sur prochain dossier le Dir() reste référencé sur répertoire des fichier....!


    0
  9. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    Bonjour,

    Oui je l'avais essayé et je t'ai repondu au poste 4.

    Bien entendu j'ai corrigé "dossierPrincipal" par "D:\pieces jointes" 

    0
  10. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Merci du retour, sur ma simulation tout fonctionne correctement pour chaque destinataire je reçois tous ses fichiers

    Par contre je ne peut pas tester l'envoi du message ....manque des éléments que je ne connais pas...!

    Est-il possible d'avoir une copie d'écran ou se produit la faute...?


    0
  11. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    En faisant cette petite modification ca m'affiche correctement les fichiers de chaque dossier dans la fenetre execution, et les emails partent sans pieces jointes.

        For Each Wk In rep.Files
        Debug.Print Wk
            'monMessage.Attachments.Add Wk
        Next
    

    mais avec ca :

        For Each Wk In rep.Files
    '    Debug.Print Wk
            monMessage.Attachments.Add Wk
        Next
    

    j'ai le débogage

    0
  12. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonsoir.

    En relisant le code je pense que celà vient de ceci, la variable monMessage est neutralislée 


    0
  13. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    Bonjour,

    J'ai réactivé la ligne et c'est le même message à la même ligne qui s'affiche

    0
  14. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Je vais voir si j'arrive à faire fonctionner l'envoi de message  chez moi (pour l'instant cela ne fonctionne pas)...!


    0
  15. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Je pense que j'ai trouvé, 

    'Modifier
    monMessage.Attachments.Add Wk
    'Par
    monMessage.Attachments.Add dossierPrincipal & dossierDestinataire & "\" & Wk.Name

    0
  16. hmcirta Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   23
     

    Bonjour 

    NICKEL !!

    Ca fonctionne très bien, ....

    Merci beaucoup Le Pingou, tu vas me faire gagner un temps considérable.

    0
  17. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Merci du retour. 

    Pensez de marquer comme résolu si c'est le cas.......!


    0
  18. Profil bloqué
     

    Il n'est pas possible d'envoyer des mails selon des critères spécifiques dans Outlook. Cependant, vous pouvez créer des règles pour organiser vos messages entrants et sortants, et automatiser certaines tâches.

    je vous remercie de votre visite et espère que vous avez trouvé les informations que vous cherchiez. N'hésitez pas à revenir si vous avez d'autres questions ou besoins.

    0