IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 Access Discussion :

Probleme d'envoi e-mail automatique via outlook


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Probleme d'envoi e-mail automatique via outlook
    Bonjour,

    J'ai une fonction dans mon programme access qui envoie automatiquement un e-mail à mon client lorsqu'on imprime une facture.
    Le problème c'est qu'il utilise le compte par défaut dans outlook et que nous devons envoyer ce mail via un second compte outlook.

    J'ai bien trouvé la possibilité de le faire avec la fonction .logon, mais étant un vrai débutant, je ne comprends pas comment l'intégrer dans notre code.

    Merci d'avance de votre aide

    Voici notre partie du code qui envoie le mail :

    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
    Set myOlApp = CreateObject("Outlook.Application")
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
     
        Set myOutboxFolder = myNameSpace.GetDefaultFolder(olFolderOutbox).Items
        Set mySentItemFolder = myNameSpace.GetDefaultFolder(olFolderSentMail).Items
        Set myMail = myOlApp.CreateItem(olMailItem)
     
        Dim CountSentItemFolder As Integer
     
        CountSentItemFolder = mySentItemFolder.Count
        With myMail
            .BodyFormat = olFormatHTML
            .To = Me.[E-Mail]
            .Subject = DLookup("[Objet]", "Config email", "[Msg]=2")
            .HTMLBody = txthtmlBody
            .Send
    et si jamais, la fonction que j'ai trouvé qui pourrait m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub StartOutlook()
     Dim myOlApp As Outlook.Application
     Dim myNameSpace As Outlook.NameSpace
     Set myOlApp = CreateObject("Outlook.Application")
     Set myNameSpace = myOlApp.GetNamespace("MAPI")
     myNameSpace.Logon "LatestProfile", , True, True
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Juste avant les instructions que tu montres ajoute celle-ci pour ouvrir Outlook avec le profil que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell "C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE /profile LeProfilQueTuVeux", vbHide
    Adapte éventuellement le chemin souligné s'il est différent chez toi.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette astuce.
    Cela fonctionne parfaitement.

    Le seul soucis de cette méthode est qu'elle ouvre Outlook en premier plan. Il faur ensuite revenir dans access manuellement.

    Y'a-t-il une possibilité que le mail s'envoie sans que outlook s'ouvre en premier plan ?

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Ce qui suit va te permettre
    1° d'ouvrir Outlook avec le bon profil ;
    2° envoyer le mail ;
    3° refermer Outlook.

    Dans un module, place ce code :

    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
    30
    31
    32
    33
    34
    Option Compare Database
    Option Explicit
     
    Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, _
       lpdwprocessid As Long) As Long
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
       ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, _
       ByVal nIndex As Long) As Long
    Private Const WM_CLOSE = &H10
    Private Const GWL_STYLE = (-16)
    Private Const WS_SYSMENU = &H80000
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Private Function CloseWindow(ByVal hwnd As Long, ByVal hInstance As Long) As Long
     
    Dim idproc As Long
     
    idproc = 0
     
    ' Reçoit dans idproc l'id du processus lié à cette fenêtre
    GetWindowThreadProcessId hwnd, idproc
    If (idproc = hInstance) And ((GetWindowLong(hwnd, GWL_STYLE) And WS_SYSMENU) = WS_SYSMENU) Then
         PostMessage hwnd, WM_CLOSE, 0, 0
    End If
     
    ' Obligatoire pour qu'EnumWindows continue l'énumération
    CloseWindow = True
     
    End Function
    Public Sub KillApp(hInstance As Long)
    EnumWindows AddressOf CloseWindow, hInstance
    End Sub

    Là où se trouve ton code actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    'ouvrir OutLook
    Dim ret As Integer
    ret = Shell("C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE /profile adl", vbHide)
    'Ici tes instructions pour créer l'e-mail
     
     
    'Fermer Outlook
    Sleep 2000   ' on attend 2 secondes pour lui laisser le temps
    KillApp (ret)  ' on referme Outlook

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci bcp pour cette réponse.
    Je vais tester ça dès que j'ai un moment.

Discussions similaires

  1. Envoi e-mail automatique via Excel
    Par nourmske dans le forum Excel
    Réponses: 1
    Dernier message: 30/10/2014, 16h10
  2. Réponses: 0
    Dernier message: 09/01/2013, 19h50
  3. envoie de mail automatique sur outlook via Excel 2003
    Par shakelife dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/12/2011, 08h04
  4. [Toutes versions] Envoi Mail automatique Via LOTUS NOTES (avec PDF en pièce jointe)
    Par jeep6259 dans le forum IHM
    Réponses: 1
    Dernier message: 02/10/2009, 16h40
  5. envoi mail automatique via macro excel
    Par ellewided dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 14/08/2009, 10h10

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