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

Macros et VBA Excel Discussion :

Comment détecter qu'un mail a été envoyé [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut Comment détecter qu'un mail a été envoyé
    Bonjour

    Dans le cadre de la mise au point d'une petite application de suivi, je lance depuis un menu contectuel dans excel, la création d'un mail.
    Dans ce mail on retrouve des informations de la ligne saisie. Objectif, eviter la resaisie à la main des informations dans le corps du mail.

    Ensuite, c'est à la personne dans outlook de compléter le mail et de l'envoyer.

    Pour faire celà, j'utilise le code suivant :
    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
    Initialisation des variables mailsCréation du mail
     
            Set LolApp = Outlook.Application
            Set LobjMail = LolApp.CreateItem(olMailItem)
     
            ' Création du mail
            With LobjMail
     
                .To = "monmail@moi.com"
                .CC = ""
                .Subject = "Ceci est un essai"
                .BodyFormat = olFormatHTML
                .HTMLBody = "Ceci est le message"
                .Display
            End With
     
            ' on verifie s'il a été envoyé ou non
            If LobjMail.Sent = True Then
                MsgBox "Le message a été envoyé"
            Else
                MsgBox "Le message n'a pas été envoyé"
            End If
     
                ' On nettoie les variables
            Set LobjMail = Nothing
            Set LolApp = Nothing
    La communication avec outlook fonctionne bien.

    Par contre, la partie qui vérifie ou non l'envoi du mail ne fonctionne pas car : LobjMail.Sent est toujours à FALSE

    Existe-t-il un autre moyen de capturer le fait que la personne a bien envoyée le mail ou non?

    Le fait de capturer cette information, pourrait me permettre de mettre à jour mon fichier excel avec un statut "Envoyé"


    D'avance merci pour votre retour

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,
    C'est :
    et non :
    Hervé.

  3. #3
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut
    Bonjour

    C'est bien sent (qui est la propriété d'état) et non send (qui est l'action d'envoyer)

    Le but est bien pour moi d'initialiser un mail et qu'ensuite la personne envoie ce mail car des informations peuvent être ajouter.

    Mon souhait est ensuite dans mon code Excel de pouvoir détecter ce qu'a fait la personne et ainsi modifier le statut de la ligne.

    A+

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Le compilateur lit et exécute ton code ligne par ligne et il ne laisse la main qu'une fois qu'il rencontre une sortie (Exit Sub, End Sub, etc...) donc comme ton code n'exécute pas l'envoi avant le contrôle la valeur de Sent sera toujours à False !
    Tu peux bricoler quelque chose (j'ai bien dis "bricoler" donc pas très propre, à voir si on peut faire mieux !...) avec un DoEvents dans une boucle Do - Loop et chercher à savoir l'état de ton mail qui va générer une erreur une fois parti :
    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
     
    Sub Envoi()
     
        Dim LolApp As Outlook.Application
        Dim LobjMail As Outlook.MailItem
     
        Set LolApp = Outlook.Application
        Set LobjMail = LolApp.CreateItem(olMailItem)
     
        ' Création du mail
        With LobjMail
     
            .To = "monmail@moi.com"
            .CC = ""
            .Subject = "Ceci est un essai"
            .BodyFormat = olFormatHTML
            .HTMLBody = "Ceci est le message"
            .Display
        End With
     
        On Error Resume Next
        Do
     
            DoEvents
     
        Loop Until LobjMail.Sent = True
     
        'si erreur, le mail est parti et donc il n'existe plus
        If Err.Number <> 0 Then MsgBox "Le message a été envoyé"
     
            ' On nettoie les variables
        Set LobjMail = Nothing
        Set LolApp = Nothing
     
    End Sub
    Hervé.

  5. #5
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut
    Merci pour cette astuce.

    Maintenant je détecte bien que le mail est parti mais si l'utilisateur supprime le mail alors je suis dans l'incertitude.

    En tout cas, la piste que tu m'as donné me permet d'aller plus loin et de creuser un peu.

    Encore merci

  6. #6
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    SAlut,
    Sinon il faut utiliser les événements de OUTLOOK

    Référence du développeur Outlook
    MailItem.Send, événement
    Afficher tout
    Masquer tout
    Survient lorsque l'utilisateur sélectionne l'action Send pour un élément ou lorsque la méthode Send est appelée pour cet élément (ce dernier étant une instance de l'objet parent).
    Syntaxe

    expression.Send(Cancel)

    expression Variable qui représente un objet MailItem.

    Paramètres

    Nom Obligatoire/Facultatif Type de données Description
    Cancel Obligatoire Booléen (Non utilisé dans VBScript). Cet argument a la valeur False si l'événement survient. Si la procédure événementielle affecte à cet argument la valeur True, l'opération d'envoi n'est pas achevée et l'inspecteur reste ouvert.

    Remarques


    Dans Microsoft Visual Basic Scripting Edition (VBScript), si vous définissez la valeur renvoyée de cette fonction sur False, l'élément n'est pas envoyé.


    Exemple


    Cet exemple Visual Basic pour Applications (VBA) montre comment utiliser l’événement Send et envoyer un élément (élément : dans Outlook, unité de base pour le stockage d’informations (équivalent d’un fichier pour d’autres programmes). Les éléments incluent les messages électroniques, les rendez-vous, les contacts, les tâches, les entrées du journal, les notes, ainsi que les éléments et documents publiés.) avec une date d’expiration automatique. L’exemple de code doit être placé dans un module de classe tel que ThisOutlookSession et la procédure SendMyMail doit être appelée avant que la procédure événementielle puisse être appelée par Microsoft Outlook.

    Visual Basic pour Applications
    Public WithEvents myItem As Outlook.MailItem

    Sub SendMyMail()
    Set myItem = Outlook.CreateItem(olMailItem)
    myItem.To = "Dan Wilson"
    myItem.Subject = "Data files information"
    myItem.Send
    End Sub

    Private Sub myItem_Send(Cancel As Boolean)
    myItem.ExpiryTime = #2/2/2003 4:00:00 PM#
    End Sub

    Référence du développeur Outlook
    MailItem.Close, événement

    ou

    Référence du développeur Outlook
    MailItem.BeforeDelete, événement
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/05/2012, 11h16
  2. Comment modifier le corps d'un message envoyé par mail
    Par nico le noob dans le forum Langage
    Réponses: 8
    Dernier message: 15/05/2010, 18h00
  3. Comment détecter un changement du réglage de voume sonore ?
    Par mjlub dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 09/01/2004, 17h43
  4. Comment détecter la frappe d'une touche ?
    Par Bubonik software dans le forum C
    Réponses: 17
    Dernier message: 11/12/2003, 21h52
  5. Réponses: 9
    Dernier message: 01/10/2003, 18h43

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