VB Excel OUTLOOK liste adresses mails

Résolu
Bonjour à tous,

Envoyer par VB Excel, un mail avec une liste d'adresses pré-complétée... Problème assez récurrent. J'ai beaucoup fouillé sur le web à ce sujet, et j'ai trouvé des réponses. mais faut voir les réponses... A croire que certaines personnes s'amusent à faire le plus compliqué possible. Vous allez me dire qu'ils n'ont peut-être pas le choix!
J'ai donc décidé de passer outre les propositions hasardeuses et incompréhensibles proposées à droite et gauche, et de faire mon petit code à moi, simplissime comme tout... Mais voilà, le résultat n'est pas parfait puisqu'il faut que je clique dans l'espace "A:" de Outlook et que je fasse "Entrée" pour pouvoir envoyer le mail!
Alors j'espère que quelqu'un pourra m'aider, parce que je suis incapable de reprendre les codes proposés sur d'autres post. Je n'y comprends pas grand chose.

Voili voilou comment je me suis débrouillée:
dans Excel, j'ai une cellule avec la liste des adresses mails séparées par des point-virgules.
Exemple: cellule J11 du feuillet admin: monsieur.dupont@imaginez.com ; monsieur.dupuis@imaginez.com

Dans VB: voici mon code:

                
                ' Récupérer les mails des destinataires
                Workbooks("test.xls").Activate
                Sheets("admin").Activate
                MailAd = Range("J11").Value
                
                ' Ouvrir une page Outlook pour envoyer le fichier
                Application.Dialogs(xlDialogSendMail).Show MailAd


Qu'en pensez-vous docteurs?
Configuration: Windows XP Internet Explorer 7.0

20 réponses

Résumé de la discussion

Envoyer par VB Excel un mail avec une liste d'adresses pré-complétée présente un problème récurrent lorsque les destinataires doivent être ajoutés automatiquement sans interaction manuelle. Des solutions évoquées incluent la mise en ligne du projet VBA Outlook via ThisOutlookSession et Application_Startup, la vérification des références Outlook et la gestion correcte des paramètres d'envoi. D'autres échanges concernent le découpage de la liste des destinataires par point-virgule avec Split, l'évitement des destinataires vides et l'appel correct des procédures entre Excel et Outlook. En cas d'insuffisance, les réponses suggèrent aussi de vérifier que Outlook est chargé et que les macros sont actives, afin d'éviter les messages de non reconnaissance des adresses.

Bobot (l’IA à votre service)
  1. Personne n'a une idée pour me sortir de mon problème?
    0
    1. la solution ne ne parait pas compliquée. Voici un exemple de code :

      1- procédure Excel VBA

      Sub test1

      ' Récupérer les mails des destinataires
      Workbooks("test.xls").Activate
      Sheets("admin").Activate
      MailAd = Range("J11").Value

      ' appelle une sous-procédure Outlook VBA
      Set appli_Outlook = New Outlook.Application
      call appli_Outlook .test2(MailAd)

      end Sub

      2- sous-procédure à mettre sous Thisoutlooksession dans le projet Outlook VBA pour éviter les avertissements de sécurité :

      Sub test2(mail_liste)

      On Error GoTo erreur_création_e_mail

      ' crée l'objet : e_mail
      Set e_mail = application.CreateItem(olMailItem)

      ' ajoute les destinataires
      destinataires = Split(mail_liste, ";")
      For i_destinataire = 0 To UBound(destinataires)
      e_mail.Recipients.Add destinataires(i_destinataire)
      Next i_destinataire

      ' remplit le sujet et le message
      e_mail.Subject = sujet
      e_mail.Body = Message

      ' envoie l'e-mail
      e_mail.Send

      ' fin traitement
      création_mail_exit:
      Exit Sub

      ' routine erreur
      erreur_création_e_mail:
      MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
      Resume création_mail_exit

      End Sub
      0
      1. Bonjour thev et merci pour ta réponse.

        La macro test1 ne s'exécute pas. J'ai le message d'erreur suivant: "erreur envoi e-mail -2147467259 Impossible de reconnaître un ou plusieurs noms".
        J'ai ajouté la référence: "Microsoft outlook Object Library". Faut-il que j'en ajoute une autre?

        J'ai aussi tenté de modifier le code car dans test1, on utilise MailAd et dans test2, on utilise mail_liste. Donc j'ai changé test1 en
        Sub test1()
            Sheets("admin").Activate
            mail_liste = Range("H11").Value
            'MsgBox (mail_liste)
            
            ' appelle une sous-procédure Outlook VBA
            Set appli_Outlook = New Outlook.Application
            Call appli_Outlook.test2(mail_liste)
        
        End Sub

        Mais toujours bloqué. :-(
        0
    2. Le message d'erreur indique qu'il ne trouve pas un ou plusieurs noms dans le carnet d'adresse Outlook.

      1) Pour visualiser un à un les destinataires placés dans le message envoyé, ajouter l'instruction suivante :
      'ajoute les destinataires
      destinataires = Split(mail_liste, ";")
      For i_destinataire = 0 To UBound(destinataires)
      MsgBox "destinataire = " & destinataires(i_destinataire)
      e_mail.Recipients.Add destinataires(i_destinataire)
      Next i_destinataire

      2) Pour voir le ou les destinataires qui posent problème, en essayer un seul, puis deux, ....
      0
      1. RE-bonjour thev, et merci de m'aider

        Suis-je obligée d'utiliser des adresses mails déjà enregistrées dans Outlook? Y-a-t-il une méthode pour pallier cela?

        Biz
        0
    3. réponse : oui et non

      1) oui si le destinataire fourni est fourni sous la forme d'un nom (par ex robert martin) auquel cas la macro fait appel au carnet d'adresses Outlook pour le traduire sous la forme d'une adresse e-mail

      2) non si le destinataire fourni est sous la forme d'une adresse e-mail (nnnnnn@ddddddd.ccc ) auquel cas l'accès au carnet d'adresse n'est pas nécessaire.
      0
      1. Bonjour thev,

        j'ai un nouveau problème que je n'avais pas hier (sur le même code...j'ai du mal à comprendre!).
        Sur la ligne
        Call appli_Outlook.test2(MailAd)


        J'ai le message "propriété ou méthode non gérée par cet objet". Pourtant les références:
        Microsoft outlook 11.0 Object LIbrary et
        OutlookAddin 1.0 TypeLibrary. QUelle référence peut-il bien me manquer? Surtout qu'entre hier et aujourd'hui je n'en ai pas enlevé!

        Par rapport à ma liste de destinataires, elle est déjà au format nnnnnn@ddddddd.ccc , et nom une liste de noms.
        Les 2 problèmes sont peut-être liés?
        0
    4. il ne trouve pas la procédure test2 dans outlook VBA
      2 raisons :
      1- l'application Outlook n'est pas démarrée,
      2- la procédure test2 ne setrouve pas sous ThisOutlookSession
      0
      1. Merci pour ta réponse thev.

        Outlook est bien démarré, et la procédure test2 est bien sous ThisOutlookSession. Et j'ai repris exactement ton code pour test1 (j'avais modifié MailAd contre Mail_liste).

        Sub test1()

        ' Récupérer les mails des destinataires
        Sheets("admin").Activate
        MailAd = Range("H11").Value
        MsgBox (MailAd)

        ' appelle une sous-procédure Outlook VBA
        Set appli_Outlook = New Outlook.Application
        Call appli_Outlook.test2(MailAd)

        End Sub

        Mais il plante toujours. Pourtant hier il fonctionnait. Il plantait juste par rapport au fait qu'il ne reconnaissait pas les adresses.
        0
    5. Pour le problème de reconnaissance des adresses, après test des 2 procédures, il faut en fait apporter la modification suivante :

      ' ajoute les destinataires
      destinataires = Split(mail_liste, ";")
      For i_destinataire = 0 To UBound(destinataires) - 1
      e_mail.Recipients.Add destinataires(i_destinataire)
      Next i_destinataire

      Il ajoutait en fait un destinataire vide de trop, ce qui provoquait l'erreur.

      Pour la nouvelle erreur, pour le moment je ne vois pas.
      0
      1. Pour la nouvelle erreur, essayer la modification suivante (suppression paramètre New):

        ' appelle une sous-procédure Outlook VBA
        Set appli_Outlook = Outlook.Application
        Call appli_Outlook.test2(MailAd)

        Par ailleurs, pour remplir objet et sujet du message apporter les modifications suivantes :

        ---- procédure Excel VBA -----------------
        Sub test1

        ' Récupérer les mails des destinataires
        Workbooks("test.xls").Activate
        Sheets("admin").Activate
        MailAd = Range("J11").Value
        sujet = "test01-sujet"
        message = "test01-message"


        ' appelle une sous-procédure Outlook VBA
        Set appli_Outlook = New Outlook.Application
        call appli_Outlook .test2(MailAd,sujet,message)

        end Sub

        -- procédure Outlook VBA ------
        Sub test2(mail_liste,sujet,Message)
        0
        1. J'ai testé en enlevant le "new", pas de changement.
          J'ai testé les autres modifications mais je suis bloquée par le bogue.
          Ce qui est dingue, c'est qu'hier il ne me faisait pas cela. J'ai travaillé sur du code VB, penses-tu que j'ai utilisé une instruction qui pourrait être source de ce problème? (genre Application.ScreenUpdating = false
          Application.DisplayAlerts = false...)
          0
      2. Je crois que le mieux est de reposter le code exact que tu utlises .
        0
        1. Dans un module de mon fichier .xls
          Sub test1()
          
          ' Récupérer les mails des destinataires
          Sheets("admin").Activate
          MailAd = Range("H11").Value
            
          ' appelle une sous-procédure Outlook VBA
          Set appli_Outlook = Outlook.Application
          Call appli_Outlook.test2(MailAd)
          
          End Sub


          Dans VB Outlook / ThisOutlookSession
          Sub test2(mail_liste)
          
          On Error GoTo erreur_création_e_mail
          
          ' crée l'objet : e_mail
          Set e_mail = Application.CreateItem(olMailItem)
          
          ' ajoute les destinataires
          destinataires = Split(mail_liste, ";")
          For i_destinataire = 0 To UBound(destinataires)
          e_mail.Recipients.Add destinataires(i_destinataire)
          Next i_destinataire
          
          ' remplit le sujet et le message
          e_mail.Subject = sujet
          e_mail.Body = Message
          
          ' envoie l'e-mail
          e_mail.Send
          
          ' fin traitement
          création_mail_exit:
          Exit Sub
          
          ' routine erreur
          erreur_création_e_mail:
          MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
          Resume création_mail_exit
          
          End Sub
          
          0
      3. Le code est correct mais il convient de modifier :

        For i_destinataire = 0 To UBound(destinataires)
        en
        For i_destinataire = 0 To UBound(destinataires) - 1
        pour résoudre le premier message d'erreur suivant: "erreur envoi e-mail -2147467259 Impossible de reconnaître un ou plusieurs noms".

        Pour le message d'erreur :"propriété ou méthode non gérée par cet objet", qui indique qu'il ne trouve pas la procédure test2 dans outlook VBA, cette erreur se produit également si les macros dans l'application Outlook sont désactivées.
        Il faut donc vérifier dans le menu outils --> macro --> sécurité, l'option retenue.
        0
        1. Bonjour thev, et merci encore de ton aide.

          J'ai fait les modifications que tu m'as conseillées. Effectivement je n'avais pas pensé à modifier la sécurité des macros sous Outlook. J'ai mis au niveau faible, mais ça plante toujours. En cherchant, je suis allée dans Outil --> Macro --> Sécurité, onglet "Editeurs approuvés". Le certificat à mon nom y est bien, mais je ne peux pas cocher "Faire confiance au projet Visual Basic", alors que sous Excel il est coché pour pouvoir exécuter certains programmes. Serait-ce la cause du blocage?
          0
      4. Je ne pense pas. Vérifie les bibliothèques chargées dans Outlook via l'éditeur VB : outils --> références. peut-être en manque-t-il une.
        0
        1. Merci thev, effectivement le problème venait des références dans VB outlook. Désormais cela fonctionne! ;-) Je te remercie de ta patience.
          Je me permets de te poser une autre question: je souhaite envoyer mon fichier Excel en fichier joint. Avant, j'utilisais le code suivant:
                          
          ' Récupérer les mails des destinataires
          Workbooks(FichierSource).Activate
          Sheets("admin").Activate
          MailAd = Range("H11").Value
          
          ' Aller sur le fichier à transmettre
          Workbooks(NomFichier).Activate
                          
          ' Ouvrir une page Outlook pour envoyer le fichier
          Application.Dialogs(xlDialogSendMail).Show MailAd
          


          Mais je ne sais pas comment adapter la dernière ligne de code par rapport au code que tu m'as proposé?
          0
      5. Je viens de rencontrer sous Outlook 2003 (j'avais testé sous Outlook 2007) le même souci de non accès à la procédure VBA Outlook. Cela venait du fait que le projet VBA Outlook n'était pas en ligne même si l'application OutlooK était chargée. Pour forcer la mise en ligne du projet VBA Outlook, ajouter dans VB Outlook / ThisOutlookSession :

        Private Sub Application_Startup()

        End Sub

        pour la pièce jointe :

        ---- procédure Excel VBA ----------------- 
        Sub test1 
        
        ' Récupérer les mails des destinataires 
        Workbooks("test.xls").Activate 
        Sheets("admin").Activate 
        MailAd = Range("J11").Value 
        
        sujet = "test01-sujet" 
        message = "test01-message" 
        
        'choix pièce jointe 
        NomFichier= Application.GetOpenFilename
        
        ' appelle une sous-procédure Outlook VBA 
        Set appli_Outlook = New Outlook.Application 
        call appli_Outlook .test2(MailAd,sujet,message,NomFichier) 
        
        end Sub 
        
        -- procédure Outlook VBA ------ 
        Sub test2(mail_liste,sujet,Message,NomFichier)
        
        If NomFichier Then
                Set pièce_jointe = e_mail.Attachments
                pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
        End If
        
         
        0
        1. Effectivement, en retestant d'exécuter la macro, ça ne fonctionnait plus. L'ajout du code:
          Private Sub Application_Startup() 
          End Sub 
          

          a résolu le problème.

          L'ajout du fichier en fichier jointe fonctionne également, j'ai juste relevé une toute petite erreur. Voici le code correct à ajouter dans VB Outlook/ macro test2:
          If NomFichier <> "" Then
                  Set pièce_jointe = e_mail.Attachments
                  pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
          End If
          


          Tout fonctionne donc parfaitement! :-) Encore une fois, merci thev et bonne journée.
          Je passe en résolu.
          0
      6. Bonjour,

        J'ai le même problème que Ludivine sur la même chose concernant le call du test2 en VB Outlook. J'aimerais comprendre surtout que je suis allé dans les références d'Outlook et que j'ai ajouté "MS Office Excel Library" et pareil Sous excel pour la library Outlook.

        Je m'entraine à ce qu'a fait ludivine, donc j'envoie mon code pour mieux comprendre :

        Sous VB Excel
        Sub test1()

        Workbooks("julieC - Irsem.xls").Activate

        ' Récupérer les mails des destinataires
        Sheets("admin").Activate
        MailAd = Range("N50").Value

        'choix pièce jointe
        NomFichier = Application.GetOpenFilename

        ' appelle une sous-procédure Outlook VBA
        Set appli_Outlook = Outlook.Application
        Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)

        End Sub

        Sous Outlook

        Sub test2(MailAd)

        On Error GoTo erreur_création_e_mail

        ' crée l'objet : e_mail
        Set e_mail = Application.CreateItem(olMailItem)

        ' ajoute les destinataires
        destinataires = Split(mail_liste, ";")
        For i_destinataire = 0 To UBound(destinataires) - 1
        e_mail.Recipients.Add destinataires(i_destinataire)
        Next i_destinataire

        ' remplit le sujet et le message
        e_mail.Subject = "Essai 1"
        e_mail.Body = "Essai Message"

        ' envoie l'e-mail
        e_mail.Send

        ' fin traitement
        création_mail_exit:
        Exit Sub

        ' routine erreur
        erreur_création_e_mail:
        MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
        Resume création_mail_exit

        'Attachement pièce jointe
        If NomFichier <> "" Then
        Set pièce_jointe = e_mail.Attachments
        pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
        End If

        End Sub

        Je suis encore débutant, en espérant que vous pourrez m'aider

        Bon week end

        Coklin
        0
        1. Pour que la procédure sous Outlook soit reconnue, il faut que :

          1- elle soit placée sous ThisOutlookSession,
          2- que les macros sous outlook soient activées (voir onglet sécurité),
          3- que outlook soit chargé,
          4- que outlook vba soit chargé : pour cela rajouter sous ThisOutlookSession le code événement :

          Private Sub Application_Startup()
          End Sub

          Par ailleurs, pour tester le chargement de outlook, le code sous excel doit être modifié ainsi :

          ' appelle une sous-procédure Outlook VBA
          Set appli_Outlook = Outlook.Application
          If appli_Outlook.Explorers.Count > 0 Then
              Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
          Else
              MsgBox "erreur envoi e_mail car outlook non chargé"
          End If
           
          0
          1. Salut thev,

            J'ai fait ce que tu m'as dit, ça a déjà pas mal avancé. Ce que je ne comprends pas c'est qu'au moment de lancer le programme, j'ai le message suivant qui s'affiche :

            "erreur envoi e-mail -2147467259 Les zones A, CC, cci doivent contenir au moins un nom ou une liste de distribution"

            Pourtant la case sélectionnée au départ est une adresse mail. Comment faire pour l'envoyer à cette adresse?

            Merci encore

            Coklin
            0
            1. 1 - Les noms de variables ne correspondent pas

              Sub test2(MailAd)

              On Error GoTo erreur_création_e_mail

              ' crée l'objet : e_mail
              Set e_mail = Application.CreateItem(olMailItem)

              ' ajoute les destinataires
              destinataires = Split(mail_liste, ";")

              2- Par ailleurs, le nombre et la position des variables doivent être les mêmes dans la procédure et l'appel de procédure

              Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier) -- appel procédure
              4 variables : variable 1 = liste destinataires, variable2 = objet message, variable 3 = texte message, variable 4 = nom pièce jointe

              Sub test2(MailAd) --- définition procédure
              doit donc avoir 4 variables selon l'ordre ci-dessus
              0
              1. Re Thev,

                J'ai à nouveau suivi tes instructions, mais maintenant il me mets que l'objet n'appartient pas à la sélection.

                Voici mon code pour le moment :

                Sous Excel VBA:

                Sub test1()

                Workbooks("julieC - Irsem.xls").Activate
                ' Récupérer les mails des destinataires
                Sheets("admin").Activate
                MailAd = Range("N50").Value 'la valeur est une adresse mail
                'sujet = "Test envoi"
                'Message = "coucou, recevez-vous ce message?"
                'Nomfichier = "Powerpoint"

                'choix pièce jointe
                NomFichier = Application.GetOpenFilename

                ' appelle une sous-procédure Outlook VBA
                Set appli_Outlook = Outlook.Application
                If appli_Outlook.Explorers.Count > 0 Then
                Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
                MailAd = Range("N50").Value
                sujet = "ESSAI"
                Message = "coucou"
                NomFichier = "Powerpoint"
                Else
                MsgBox "erreur envoi e_mail car outlook non chargé"
                End If

                End Sub

                Sous outlook: (ThisOutlookSession)
                Sub test2(MailAd, sujet, Message, NomFichier)
                MailAd = Workbooks("JulieC - irsem.xls").Sheets("Admin").Range("N50").Value
                sujet = "ESSAI"
                Message = "coucou"
                NomFichier = "Powerpoint"

                On Error GoTo erreur_création_e_mail

                ' crée l'objet : e_mail
                Set e_mail = Application.CreateItem(olMailItem)

                ' ajoute les destinataires
                destinataires = Split(Mail_liste, ";")
                For i_destinataire = 0 To UBound(destinataires) - 1
                e_mail.Recipients.Add destinataires(i_destinataire)
                Next i_destinataire

                ' remplit le sujet et le message
                e_mail.Subject = "Essai 1"
                e_mail.Body = "Essai Message"

                ' envoie l'e-mail
                e_mail.Send

                ' fin traitement
                création_mail_exit:
                Exit Sub

                ' routine erreur
                erreur_création_e_mail:
                MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
                Resume création_mail_exit

                'Attachement pièce jointe
                If NomFichier <> "" Then
                Set pièce_jointe = e_mail.Attachments
                pièce_jointe.Add NomFichier, olByValue, 1, NomFichier
                End If

                End Sub

                Private Sub Application_Startup()
                End Sub

                Quel est le pb docteur parce que j'ai du mal à comprendre la différence entre Mail_List, MailAd, etc.

                Peux-tu m'expliquer un peu le pb et ai-je bien respecté ce que tu souhaitais que je fasse.

                Merci d'avance et désolé de ne pas être très doué.

                Coklin
                0
                1. Sous Excel VBA:
                  
                  Sub test1()
                  
                  Workbooks("julieC - Irsem.xls").Activate
                  ' Récupérer les mails des destinataires
                  Sheets("admin").Activate
                  MailAd = Range("N50").Value 'la valeur est une adresse mail
                  sujet = "Test envoi"
                  Message = "coucou, recevez-vous ce message?"
                  
                  'choix pièce jointe
                  'NomFichier = Application.GetOpenFilename
                  
                  ' appelle une sous-procédure Outlook VBA
                  Set appli_Outlook = outlook.Application
                  If appli_Outlook.Explorers.Count > 0 Then
                      Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
                  Else
                      MsgBox "erreur envoi e_mail car outlook non chargé"
                  End If
                  
                  End Sub
                  
                  
                  Sous outlook: (ThisOutlookSession)
                  
                  Private Sub Application_Startup()
                  End Sub
                  Sub test2(Mail_liste, objet_message, texte_message, nom_pièce_jointe)
                  
                  ' la variable Mail_liste correspond au premier paramètre du call Call appli_Outlook.test2 (variable MailAd)
                  ' la variable objet_message correspond au secon paramètre du call Call appli_Outlook.test2 (variable sujet)
                  ' la variable texte_message correspond au troisième paramètre du call Call appli_Outlook.test2 (variable Message)
                  ' la variable nom_pièce_jointe correspond au quatrième paramètre du call Call appli_Outlook.test2 (variable NomFichier)
                  
                  On Error GoTo erreur_création_e_mail
                  
                  ' crée l'objet : e_mail
                  Set e_mail = Application.CreateItem(olMailItem)
                  
                  ' ajoute les destinataires
                  destinataires = Split(Mail_liste, ";")
                      For i_destinataire = 0 To UBound(destinataires) - 1
                      e_mail.Recipients.Add destinataires(i_destinataire)
                  Next i_destinataire
                  
                  ' remplit le sujet et le message
                  e_mail.Subject = objet_message
                  e_mail.Body = texte_message
                  
                  'Attachement pièce jointe
                  If nom_pièce_jointe <> "" Then
                      Set pièce_jointe = e_mail.Attachments
                      pièce_jointe.Add NomFichier, olByValue, 1, nom_pièce_jointe
                  End If
                  
                  ' envoie l'e-mail
                  e_mail.Send
                  
                  ' fin traitement
                  création_mail_exit:
                      Exit Sub
                  
                  ' routine erreur
                  erreur_création_e_mail:
                      MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
                      Resume création_mail_exit
                  
                  End Sub
                  0
                  1. Bonjour à tous,

                    J'ai remis le nez dedans, et effectivement, j'ai eu le même message que Coklin:
                    "erreur envoi e-mail -2147467259 Les zones A, CC, cci doivent contenir au moins un nom ou une liste de distribution" .

                    Mais je n'ai pas toujours ce message!
                    1) Ma liste de destinataires est ainsi constituée:
                    colonne A colonne B
                    mdupont mdupont@gmail.com
                    Ludivine50 Ludivine50@gmail.com


                    Hypothèse: Ludivine50 est mon identifiant Windows.

                    Si je lance la macro avec cette liste, pas de problème. Mais cette liste est pour les tests.

                    2) Si j'enlève Ludivine50 de la liste, la macro ne fonctionne plus! J'ai le message d'erreur.
                    colonne A colonne B
                    mdupont mdupont@gmail.com


                    3) A noter, que je je fais la liste suivante:
                    colonne A colonne B
                    mdupont Ludivine50@gmail.com

                    J'ai aussi le message d'erreur. Il semblerait que le nom de l'identifiant windows doive être dans la liste des utilisateurs. Cocklin, as-tu un problème dans ce genre?
                    0
                    1. 1- si le destinataire est sous la forme mdupont ou ludivine50, ce nom doit se trouver dans le carnet d'adresses Outlook

                      2- l'instruction : destinataires = Split(Mail_liste, ";") suppose que l'ensemble des destinataires soit fourni dans une seule cellule sous la forme : mdupont@gmail.com; Ludivine50@gmail.com .
                      Si les destinataires sont mis en colonne, c'est une autre instruction qu'il faut utiliser.

                      ci-jointes les modifications à apporter si la liste des destinataires est parv exemple en colonne B

                      Sous Excel VBA:
                      
                      Sub test1()
                      
                      Workbooks("julieC - Irsem.xls").Activate
                      ' Récupérer les mails des destinataires
                      Sheets("admin").Activate
                      
                      'les adresses mail sont en colonne B
                      Set début_liste = Range("B1")
                      Set fin_liste = Range("B1").End(xlDown)
                      MailAd = Range(début_liste, fin_liste).Valuesujet = "Test envoi"
                      Message = "coucou, recevez-vous ce message?"
                      Call test2(MailAd, sujet, Message, NomFichier)
                      
                      'choix pièce jointe
                      NomFichier = Application.GetOpenFilename
                      
                      ' appelle une sous-procédure Outlook VBA
                      Set appli_Outlook = Outlook.Application
                      If appli_Outlook.Explorers.Count > 0 Then
                          Call appli_Outlook.test2(MailAd, sujet, Message, NomFichier)
                      Else
                          MsgBox "erreur envoi e_mail car outlook non chargé"
                      End If
                      
                      End Sub
                      
                      
                      Sous outlook: (ThisOutlookSession)
                      
                      Private Sub Application_Startup()
                      End Sub
                      Sub test2(Mail_liste, objet_message, texte_message, nom_pièce_jointe)
                      
                      ' la variable Mail_liste correspond au premier paramètre du call Call appli_Outlook.test2 (variable MailAd)
                      ' la variable objet_message correspond au secon paramètre du call Call appli_Outlook.test2 (variable sujet)
                      ' la variable texte_message correspond au troisième paramètre du call Call appli_Outlook.test2 (variable Message)
                      ' la variable nom_pièce_jointe correspond au quatrième paramètre du call Call appli_Outlook.test2 (variable NomFichier)
                      
                      On Error GoTo erreur_création_e_mail
                      
                      Set appli_Outlook = Outlook.Application
                      
                      
                      ' crée l'objet : e_mail
                      Set e_mail = appli_Outlook.CreateItem(olMailItem)
                      
                      ' ajoute les destinataires
                      destinataires = Mail_liste
                      For i_destinataire = 1 To UBound(destinataires)
                          e_mail.Recipients.Add destinataires(i_destinataire, 1)Next i_destinataire
                      
                      ' remplit le sujet et le message
                      e_mail.Subject = objet_message
                      e_mail.Body = texte_message
                      
                      'Attachement pièce jointe
                      If nom_pièce_jointe <> "" Then
                          Set pièce_jointe = e_mail.Attachments
                          pièce_jointe.Add NomFichier, olByValue, 1, nom_pièce_jointe
                      End If
                      
                      ' envoie l'e-mail
                      e_mail.Send
                      
                      ' fin traitement
                      création_mail_exit:
                          Exit Sub
                      
                      ' routine erreur
                      erreur_création_e_mail:
                          MsgBox "erreur envoi e-mail " & Err.Number & " " & Err.Description
                          Resume création_mail_exit
                      
                      End Sub
                      0
                      1. merci Thev,

                        pour le second point, j'utilisais un contournement pour que ça fonctionne:

                        colonne A colonne B colonne C (calculée automatiquement)
                        mdupont mdupont@gmail.com 'mdupont@gmail.com'
                        Ludivine50 Ludivine50@gmail.com 'mdupont@gmail.com','Ludivine50'@gmail.com'

                        et je prenais ma liste d'adresse dans la dernière de la colonne C!!

                        C'est un peu du bricolage, mais bon, ça fonctionne alors je vais garder cela pour ce programme. Par contre, la prochaine fois, je testerais celui que tu nous a proposé.
                        0
                      2. Pour le premier point, je viens de tester. En fait, le problème, c'est quand j'ai une seule adresse. Malheureusement, parfois il y en aura parfois plusieurs, mais aussi parfois une seule.
                        0
                    2. Salut,

                      je reviens vers vous pour savoir si vous avez des news par rapports aux problèmes évoqués.
                      Bonne soirée.
                      Ludivine
                      0