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 :

Verification mail envoyé Outlook [AC-2003]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Verification mail envoyé Outlook
    Bonjour à tous,

    Voici mon grand problème. Dans le code ci dessous, je peux checker que la boite d'envoi s'est incrémenté de 1 et donc savoir que mon mail est parti.
    Or, si je ferme ma fenetre Outlook, toute l'appli plante puisque ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    While IsSentMail(oApp, counter) = False
    Wend
    va rester à false. Donc, je voudrais savoir s'il est possible de remédier à ce problème : Ne pas être obligé d'envoyer un mail si la fenetre est ouverte.

    Cordialement, polim78.

    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
    35
    36
    37
    38
    39
    Private Sub Envoyer_Click()
    Dim oNmSpce As Outlook.NameSpace, oOutbox As Outlook.MAPIFolder
    Dim oApp As Outlook.Application
    Dim oMail As MailItem
    Dim counter As Integer
    Set oApp = CreateObject("Outlook.application")
    Set oMail = oApp.CreateItem(olMailItem)
    Set oNmSpce = oApp.GetNamespace("MAPI")
    Set oOutbox = oNmSpce.GetDefaultFolder(olFolderSentMail)
     
    counter = oOutbox.Items.Count
     
    oMail.Display
    oMail.Body = Me!Message
    oMail.Subject = Me!Objet
    oMail.To = Me!Destinataire
     
    While IsSentMail(oApp, counter) = False
    Wend
    Set oMail = Nothing
    Set oApp = Nothing
    End Sub
    Public Function IsSentMail(olApp As Outlook.Application, counter As Integer) As Boolean
    Dim oNmSpce As Outlook.NameSpace, oOutbox As Outlook.MAPIFolder
    Dim bValRetour As Boolean
     
    Set oNmSpce = olApp.GetNamespace("MAPI")
    Set oOutbox = oNmSpce.GetDefaultFolder(olFolderSentMail)
     
    If oOutbox.Items.Count = counter + 1 Then
       bValRetour = True
    Else
       bValRetour = False
    End If
    Set oOutbox = Nothing
    Set oNmSpce = Nothing
     
    IsOutboxEmpty = bValRetour
    End Function

  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 : 78
    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,

    Je ferais comme ceci :

    Dans un module, pour disposer de la fonction KillApp :

    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
    35
    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
     
    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

    et dans le module de ton formulaire :

    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
    Private Sub Envoyer_Click()
    Dim oNmSpce As Outlook.NameSpace, oOutbox As Outlook.MAPIFolder
    Dim oApp As Outlook.Application
    Dim oMail As MailItem
    Dim counter As Integer
    Dim ret As Integer
    'ouvrir OutLook
    ret = Shell("C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE /profile adl", vbHide) ' à adapter !!!
    Set oApp = CreateObject("Outlook.application")
    Set oMail = oApp.CreateItem(olMailItem)
    Set oNmSpce = oApp.GetNamespace("MAPI")
    Set oOutbox = oNmSpce.GetDefaultFolder(olFolderSentMail)
     
    counter = oOutbox.Items.Count
     
    oMail.Display
    oMail.Body = Me!Message
    oMail.Subject = Me!Objet
    oMail.To = Me!Destinataire
    oMail.send
    While counter = oOutbox.Items.Count
    Wend
    'Fermer Outlook
    KillApp (ret)
     
    Set oMail = Nothing
    Set oApp = Nothing
    End Sub

    Aussi sur ce sujet : http://www.developpez.net/forums/d14...-mail-outlook/
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour Mr LELOUP,

    Merci pour votre réponse.

    Votre manière d'aborder ici nous oblige à envoyer le mail directement depuis l'application.
    Or, j'avais déjà réussi à régler ce problème avec mon code précédent. Cela ne posait pas de souci.

    Ce que je voulais savoir, c'est s'il y avait un moyen,dans la boucle qui vérifie l'envoi d'un mail,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While IsSentMail(oApp, counter) = False Wend
    de surveiller le processus et de voir qu'il est toujours actif. S'il ne l'est plus, on sortirait de la boucle.
    Donc je saurai quand sortir de la boucle.

    J'ai vu ce code qui pourrait être intéressant à adapter, qu'en pensez-vous :
    http://docvb.free.fr/apidetail.php?idapi=140

  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 : 78
    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,

    Votre manière d'aborder ici nous oblige à envoyer le mail directement depuis l'application.
    Effectivement.

    Désolé de ne pouvoir t'aider : je ne vois pas comment – dans ce contexte – utiliser l'API renseignée.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Claude, Polim78

    Une autre méthode sans utilisation de L'API

    http://vb.developpez.com/faq/?page=Systeme#listprocess

    Dans ce cas lister la liste des procédures ouvertes et vérifier quelle qui t'intéresse n'existe plus. Cette procédure est à glisser entre ton while...wend et te retournerait alors un indicateur booleen en fonction de ce que tu cherches à connaître.

    while retourfonction = false .... wend

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  6. #6
    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 : 78
    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
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/12/2009, 11h31
  2. Envoyer un mail hors Outlook
    Par dai.kaioh dans le forum Access
    Réponses: 13
    Dernier message: 19/10/2006, 18h11
  3. batch - Envoyer un mail par outlook express
    Par koKoTis dans le forum Windows
    Réponses: 5
    Dernier message: 16/08/2006, 08h44
  4. Réponses: 4
    Dernier message: 13/07/2006, 10h33

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