Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

Envoi de mail via Excel, fermeture d'Outlook non voulue [OL-2010]


Sujet :

VBA Outlook

  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    juillet 2014
    Messages
    2 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 299
    Points : 4 941
    Points
    4 941
    Par défaut Envoi de mail via Excel, fermeture d'Outlook non voulue
    Bonjour et bonne année 2020,

    J'ai une question concernant les envoi de mail via Excel, je ne suis pas sur si je dois la poser ici ou dans le forum excel dans le doute je ferais les deux.

    J'envoi régulièrement des series de mails avec un code ressemblant à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Macro1()
    Dim ObjOutlook As Object
    Set ObjOutlook = CreateObject("outlook.application")
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
        '.Display
            .To = "" 'destinataire
            '.cc  'copie
           .Subject = "sujet" ' l'objet du mail
           .htmlbody = "message"
           .Display
     
     
        End With
    End Sub
    Sur mon poste ça fonctionne niquel car Outlook est ma messagerie de base.
    J'ai crée une macro similaire pour des collègues pour qui c'est différent, la macro va bien ouvrir la messagerie Outlook et prépare les mail a envoyer, mais au moment d'appuyer sur envoyer, si il n'y a pas d'autre mails en attente, Outlook se ferme immédiatement.
    Or en cas d'envoi multiple au moment ou Outlook se ferme certain mails ne sont pas encore parti, et la fermeture les empêche de partir

    D'où mes questions est-il possible en vba:
    -d'empêcher cette fermeture non voulue ?
    - vérifier si tout les mails on bien été envoyé?

    Merci d'avance a tous ceux qui pourront m'apporter des éléments de réponses/compréhension.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    3 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 3 833
    Points : 6 709
    Points
    6 709
    Billets dans le blog
    19
    Par défaut
    Salut,
    je pense que le problème se produit si Outlook n'est pas ouvert.

    voici une méthode qui doit fonctionner à mettre parès ta ligne 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
           'pour prendre soit le mail ouvert soit le mail selectionné selon la fenêtre active.
            Dim obj As Object
            Set obj = ObjOutlook.ActiveWindow
     
            If obj Is Nothing Then Set obj = ObjOutlook.Explorers.Add(appOutlook.Session.GetDefaultFolder(olFolderInbox)): obj.Display

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    juillet 2014
    Messages
    2 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 299
    Points : 4 941
    Points
    4 941
    Par défaut
    Merci pour la réponse
    je pense que le problème se produit si Outlook n'est pas ouvert.
    Oui c'est ça, chez moi il est toujours ouvert donc pas de souci, mais certains collègues utilisent une autre messagerie donc il n'est pas ouvert au moment de l'exécution de la macro et se ferme tout seul sans qu'on lui demande à la fin de l'exécution

    J'ai une erreur au niveau de cette ligne: 424 objet requis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set obj = ObjOutlook.Explorers.Add(appOutlook.Session.GetDefaultFolder(olFolderInbox))
    J'ai l'impression que ça vient de appOutlook, le gestionnaire de variable me dit qu'il est vide
    J'ai tenté de le remplacé par ObjOutlook en me disant que tu n'as pas fait attention qu'on appelait pas la variable de la même manière
    Mais j'ai une autre erreur: 5 argument ou appel de procédure incorrect

    Une idée de ce qui ne vas pas ?
    Merci d'avance


    le code complet utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Macro1()
    Dim ObjOutlook As Object
    Set ObjOutlook = CreateObject("outlook.application")
       'pour prendre soit le mail ouvert soit le mail selectionné selon la fenêtre active.
            Dim obj As Object
            Set obj = ObjOutlook.ActiveWindow
     
            If obj Is Nothing Then Set obj = ObjOutlook.Explorers.Add(ObjOutlook.Session.GetDefaultFolder(olFolderInbox)): obj.Display
    Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
        '.Display
            .To = "" 'destinataire
            '.cc  'copie
           .Subject = "sujet" ' l'objet du mail
           .htmlbody = "message"
           .Display
     
     
        End With
    End Sub
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    3 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 3 833
    Points : 6 709
    Points
    6 709
    Billets dans le blog
    19
    Par défaut
    Bonjour,

    Essaye comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Macro1()
        Dim ObjOutlook As Object
        Set ObjOutlook = CreateObject("outlook.application")
        'pour prendre soit le mail ouvert soit le mail selectionné selon la fenêtre active.
        Dim obj As Object
        Set obj = ObjOutlook.ActiveWindow
     
        If obj Is Nothing Then Set obj = ObjOutlook.Explorers.Add(ObjOutlook.Session.GetDefaultFolder(olFolderInbox), 0): obj.Display
        Set oBjMail = ObjOutlook.CreateItem(olMailItem)
        With oBjMail
            '.Display
            .To = ""    'destinataire
            '.cc  'copie
            .Subject = "sujet"    ' l'objet du mail
            .HTMLBody = "message"
            .Display
     
     
        End With
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    juillet 2014
    Messages
    2 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 299
    Points : 4 941
    Points
    4 941
    Par défaut
    Toujours l'erreur: 5 argument ou appel de procédure incorrect
    J'ai cherché des codes similaires au tien sur le net, j'ai en ai trouvé qui fonctionne en early binding mais dès que je tente en late binding j'ai l'erreur 5
    le code en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    J'Sub Outlk()
    Dim oOLApp As Outlook.Application
    Dim oOLXplr As Outlook.Explorer
    Dim oOLFldInbox As Outlook.MAPIFolder, oOLFld As Outlook.MAPIFolder
     
    ' Tenter de récupérer une instance d'Outlook
    On Error Resume Next
    Set oOLApp = GetObject(, "Outlook.Application")
    On Error GoTo 0
     
    ' Si échec tentative, créer Outook
    If oOLApp Is Nothing Then
        Set oOLApp = CreateObject("Outlook.Application")
    End If
     
    ' Référencer le dossier Outlook Inbox
    Set oOLFldInbox = oOLApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
     
    ' S'assurer qu'on a une fenêtre Outlook visible
    If oOLApp.Explorers.Count = 0 Then
       Set oOLXplr = oOLApp.Explorers.Add(oOLFldInbox)
       oOLXplr.Display
    Else
       ' Force l'affichage de la première fenêtre d'exploration
       Set oOLXplr = oOLApp.Explorers(1)
       oOLXplr.Display
    End If
     
    End Sub
    du coup j'ai retester ton code avec la référence activée et je n'ai plus d'erreur.
    Je pense malheureusement que je n'ai que deux solutions:
    expliquer au gens comment activé les références ou leur dire d'ouvrir Outlook et de ne pas le fermer trop vite avant d'utiliser la macro

    Un grand merci pour ton aide.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  6. #6
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    mars 2006
    Messages
    3 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : mars 2006
    Messages : 3 833
    Points : 6 709
    Points
    6 709
    Billets dans le blog
    19
    Par défaut
    Il faut juste déclarer les constantes OUTLOOK

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Envoi de mail, fermeture d'outlook non voulue
    Par halaster08 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/01/2020, 17h52
  2. [XL-2016] Envoi e-mail via Excel
    Par olivepao dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/07/2018, 20h43
  3. [XL-2010] Envoi de mail via Excel
    Par lumpys dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 05/08/2016, 17h27
  4. [AC-2007] Envoi de mail via MS-Access et Outlook
    Par e.elmahi dans le forum Access
    Réponses: 2
    Dernier message: 23/05/2016, 10h31
  5. Envoi de mail via Excel à partir de Notes
    Par neo79 dans le forum Excel
    Réponses: 0
    Dernier message: 26/11/2015, 22h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo