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 :

Passer Outlook.MailItem en Late Binding [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut Passer Outlook.MailItem en Late Binding
    Bonjour à tous

    J'utilise ce code pour envoyer un mail via vba, mais j'ai un problème lorsqu'il bug si j'ai pas la référence Microsoft Outlook 14. Object library activée. J'ai essayé de trouver la correspondance pour le passage en late binding mais j'ai rien trouvé.

    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
     
     Dim MyItem As Outlook.MailItem
     Dim strbody As String
     
     strbody = "<FONT face=" & Chr(34) & "Times New Roman" & Chr(34) & "size=" & Chr(34) & "2" & Chr(34) & "color=" & Chr(34) & "#17365D" & Chr(34) & ">" & _
                        " <br><br>" & _
                        "L'indicateur des données réceptionnées pour le " & Date - 1 & "." & _
                        " <br><br>" & _
                        "<b></b>" & _
                        " <br><br>" & _
                        "." & _
                        " <br><br>" & _
                        "</FONT>"
     
     Set myolapp = Outlook.Application 
        Set MyItem = myolapp.CreateItemFromTemplate("K:\" ".msg")
        MyItem.Subject = " "
        MyItem.htmlbody = strbody
        MyItem.Display
    Si vous avez une piste?

    En vous remerciant par avance.

  2. #2

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Salut dysorthographie, tu as changé de pseudo depuis rudupt?

    Alors j'ai adapté ton code pour mon besoin, cela fonctionne bien mais je souhaite ajouter la signature. Dans mon code précédant j'ouvrais un mail avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MyItem = myolapp.CreateItemFromTemplate
    du coup je pouvais avoir la signature propre. En effet, j'ai essayé d'ajouter une signature avec la méthode ron debuin

    http://www.rondebruin.nl/win/s1/outlook/signature.htm

    Mais le logo photo de l'entreprise n’apparaît pas, du coup j'avais opté pour cette méthode.

    Or la j'ai le jolie mail mais pas la signature.

    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
    Sub Test()
    Mail "Analyse des données de collecte", " ", "XXXX"
    End Sub
    Sub Mail(Sujet As String, Message As String, Destinataire As String, Optional DestinataireCopy As String, Optional DestinataireCopyCacher As String, Optional Pj As String = "")
    Set objOutlook = CreateObject("Outlook.application")
    Set MailObj = objOutlook.CreateItem(olMailItem)
    With MailObj
        .To = Destinataire
        .CC = DestinataireCopy
        .BCC = DestinataireCopyCacher
        .Subject = Sujet
        .BodyFormat = 2
        .HTMLBody = "<FONT face=" & Chr(34) & "Times New Roman" & Chr(34) & "size=" & Chr(34) & "2" & Chr(34) & "color=" & Chr(34) & "#17365D" & Chr(34) & ">" & _
                        "Bonjour, <br><br>" & _
                        "L'indicateur des données réceptionnées pour le " & Date - 1 & "." & _
                        " <br><br>" & _
                        "<b>.</b>" & _
                        " <br><br>" & _
                        "." & _
                        " <br><br>" & _
                        "</FONT>"
     
        .Display 'Can be .Send but prompts for user intervention before sending without 3rd party software like ClickYes
    End With
    End Sub

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un sujet avait été abordé pour un problème similaire.

    nous nous étions amusé avec du bricolage, sans arriver (à mes yeux) à une solution réellement propre
    https://www.developpez.net/forums/d1...-piece-jointe/

    regarde si tu trouves quand même un peu d'appui pour ta problématique

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par nonesofar Voir le message
    Bonjour à tous

    J'utilise ce code pour envoyer un mail via vba, mais j'ai un problème lorsqu'il bug si j'ai pas la référence Microsoft Outlook 14. Object library activée. J'ai essayé de trouver la correspondance pour le passage en late binding mais j'ai rien trouvé.
    De toutes façons, c'est maintenant systématique, OLE automation exige que la référence soit cochée; liaison tardive ou liaison précoce.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Clement, j'utilise des tonnes de procédures avec des liaisons tardives (pilotage outlook assez costaud, du powerpoint, du word, access etc...) sur du Excel 2010/2013/2016 (tout 32bits)

    Et je n'ai pas la nécessité de cocher une quelconque référence.

    Est-ce que tu peux développer ? C'est lié à un contexte particulier ou des actions spéciales ?

    Car par exemple sur Outlook, j'ai une application métier totalement pilotée par Excel, avec donc pas mal de manipulations assez avancées, et je devrai normalement tomber sous le couperet de ton explication ?

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour

    J'ai expérimenté plusieurs fois avec Office 2010 et maintenant avec Office 2016, l'obligation de cocher la référence à l'application pilotée pour déclarer les objets de l'application pilotée. Ce fut la même chose avec VB.net vs les applications Office. Pourquoi, je ne sais pas. Est-ce un paramétrage par défaut des applications, que je n'ai pas changé ou autre chose, je ne sais vraiment pas. Ou est-ce la version de Windows, je ne sais pas. J'avais Office 2010 avec Windows 7 et j'ai Office 2016 (Office 365, en fait).

    Ou, c'est peut-être imposé par l'installateur de VB.net, je ne sais vraiment pas.

    Il y a quelque mois, cela avait été soulevé, mais je n'ai pas retrouvé le conversation. Quelqu'un avait évoqué que de de déclarer les objets as Object suffisait à pallier le problème. Un jour que j'aurai le temps, je vais réessayer de trouver le discussion.

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Quelqu'un avait évoqué que de de déclarer les objets as Object suffisait à pallier le problème. Un jour que j'aurai le temps, je vais réessayer de trouver le discussion.

    C'est l'un des fondement du Late Binding justement, le fait que la variable objet soit déclarée 'As Object', ça ne pallie pas le problème, c'est son absence d'utilisation rigoureuse qui le génère (le problème)

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par joe.levrai Voir le message
    C'est l'un des fondement du Late Binding justement, le fait que la variable objet soit déclarée 'As Object', ça ne pallie pas le problème, c'est son absence d'utilisation rigoureuse qui le génère (le problème)
    À vrai dire, je ne suis pas sûr que as object soit valable en VBA. Je pencherais plus pour as Variant, encore que Variant est le type par défaut. Encore une fois, en VB.net, on considère que AS Object est l'équivalent de As Variant. VB.net ne supporte pas le type Variant.

    @Robert. Je suis tout à fait d'accord, parce que Microsoft a maintenu les mêmes GUIDs pour les PIA depuis Office 2003. Mais les PIA d'Office XP (2002) n'ont pas les mêmes GUIDs que ceux d'Office 2003 et. Cela m'avait causé quelques problèmes dans le temps. Mais les Office 2002 doivent bien commencer à être rares.

  10. #10
    Invité
    Invité(e)
    Par défaut
    bonsoir Clément,
    oui en vb.net tu peux cocher Outlook interop 2016 par exemple et et travailler en 2013!

    en revanche en vba c'est la version exate installé sur la machine qui doit être cocher c'est pour cela que j'utilise creatobject et je ne coche pas les références!

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tant qu'il subsistera un ambigüité entre 32 et 64 bits, ou si Microsoft ne reviens pas comme aux début de VBA a intégration des librairies dans le projet vb, plutôt que le path a cette libraires,nous n'aurons pas d'autre choix.

    Mais vue qu'il est pas question de remettre en cause l'abandon de VB de 2003!

    Certains nous parle de vba le parent pauvre alors qu'il suffit de faire enregistré sou 97 2003 pour se rendre compte qu'il s'agit de la fin programmé de vba!

    Maintenir une compatibilité entre le versions sous entend un mise a jour de VB!
    Dernière modification par Invité ; 21/03/2017 à 08h14.

  12. #12
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Salut à tous,

    Du coup pour revenir à mon problème de signature. J'ai ce fichu logo qui ne veut pas s'afficher sinon le code ci-dessous marche nickel sans cocher la référence outlook.

    Nom : Capture logo entreprise echec.PNG
Affichages : 1286
Taille : 776 octets

    Si vous avez une idée ?? J'ai essayé de mettre un display après MailObj mais mon HTMLBody écrase tout et fait disparaître la signature.

    Pour info le 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub Test()
    Mail " Analyse des données ", "---", "XXXX"
    End Sub
    Sub Mail(Sujet As String, Message As String, Destinataire As String, Optional DestinataireCopy As String, Optional DestinataireCopyCacher As String, Optional Pj As String = "")
    Set objOutlook = CreateObject("Outlook.application")
    Set MailObj = objOutlook.CreateItem(olMailItem)
    Dim SigString As String
     
      'Change signature
        SigString = Environ("appdata") & _
                    "\Microsoft\Signatures\sid.htm"
     
     
        If Dir(SigString) <> "" Then
            Signature = GetBoiler(SigString)
        Else
            Signature = ""
        End If
     
    With MailObj
        .To = Destinataire
        .CC = DestinataireCopy
        .BCC = DestinataireCopyCacher
        .Subject = Sujet
        .BodyFormat = 2
        .HTMLBody = "<FONT face=" & Chr(34) & "Times New Roman" & Chr(34) & "size=" & Chr(34) & "2" & Chr(34) & "color=" & Chr(34) & "#17365D" & Chr(34) & ">" & _
                        "Bonjour, <br><br>" & _
                        "L'indicateur des données réceptionnées pour le " & Date - 1 & "." & _
                        " <br><br>" & _
                        "<b></b>" & _
                        " <br><br>" & _
                        "" & _
                        " <br><br>" & _
                        "</FONT>" & "<br>" & Signature
     
        .display
    End With
    End Sub
     
    Function GetBoiler(ByVal sFile As String) As String
    'Dick Kusleika
        Dim fso As Object
        Dim ts As Object
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
        GetBoiler = ts.readall
        ts.Close
    End Function

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    rien que la ligne 6 de ton code m'interroge sur le fait que "ça fonctionne sans cocher de référence", puisque tu utilises une constante du modèle objet Outlook, qu'il faut remplacer par sa valeur numérique (0)

    tu as jeté un oeil sur ce message ?
    https://www.developpez.net/forums/d1...e/#post8954647

    c'était l'étape la plus avancée sur laquelle la discussion s'était soldée.
    non abouti, je le répète, mais regarde comment l'image est insérée dans le HTMLBody


    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
    40
    41
    Sub Sendings()
    Dim RepSignatures As String, MaSignatureTexte As String, MonCorps As String, NomSignature As String
    Dim CheminImage As String, NomFichierImage As String
    Dim AvecImg As Boolean
     
    ' on stocke le dossier des signatures
    RepSignatures = Environ("appdata") & "\Microsoft\Signatures\"
     
    ' on identifie la signature voulue
    NomSignature = "Test"
     
    ' on va aller chercher le premier nom d'image .png qui EXISTERAIT
    NomFichierImage = Dir(RepSignatures & NomSignature & "_fichiers\*.png")
     
    ' on est en mode "avec image" si on a trouvé au moins un fichier image
    AvecImg = NomFichierImage <> ""
     
    'on construit le chemin complet qui mène à l'image
    CheminImage = RepSignatures & NomSignature & "_fichiers\" & NomFichierImage
     
    'on prépare le corps
    MonCorps = "<p>test,<p>" & "<p>test<p>" & "<p>test<p>"
     
    ' on va chercher la signature
    On Error Resume Next
        MaSignature = CreateObject("Scripting.FileSystemObject").GetFile(RepSignatures & Dir(RepSignatures & NomSignature & "*.txt")).OpenAsTextStream(1, -2).ReadAll
    On Error GoTo 0
     
        ' on crée le mail
        With CreateObject("Outlook.Application")
            With .createitem(0)
                .To = "test@test"
                .CC = "test@test"
                .Subject = "TEST"
                ' si c'est "avec image", on charge l'image avec la balise HTML qui va bien
                .HTMLBody = MonCorps & MaSignature & IIf(AvecImg, "<br /><img src=" & CheminImage & ">", "")
                .Attachments.Add ("F:\test\Fichier_" & Format(Date, "YYYY_MM_DD") & ".xls")
                .Display
            End With
        End With
    End Sub

    Ps : l'intervention de Robert est également à étudier, il insère en Pj l'image, et ensuite l'embarque dans le HTLMBody
    https://www.developpez.net/forums/d1...e/#post8956421
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .Attachments.Add "C:\Users\Sumit Jain\Pictures\11\city.jpg", olByValue, 0
        'Now add it to the Html body using image name
        'change the src property to 'cid:your image filename'
        'it will be changed to the correct cid when its sent.
        .HTMLBody = .HTMLBody & "<br><B>Embedded Image:</B><br>" _
                    & "<img src='cid:city.jpg'" & "width='500' height='200'><br>" &  _               
      "<br>Best Regards, <br>Sumit</font></span>"

  14. #14
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Merci joe.levrai,

    J'ai bricolé une signature avec l'image et après j'ai mis du texte c'est pas top mais au moins j'ai pas le pb du logo. En fait j'ai repris ton code !!

    Dommage qu'il existe pas une solution propre pour ce problème.

    Ps : l'intervention de Robert est également à étudier, il insère en Pj l'image, et ensuite l'embarque dans le HTLMBody
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .Attachments.Add "C:\Users\Sumit Jain\Pictures\11\city.jpg", olByValue, 0
        'Now add it to the Html body using image name
        'change the src property to 'cid:your image filename'
        'it will be changed to the correct cid when its sent.
        .HTMLBody = .HTMLBody & "<br><B>Embedded Image:</B><br>" _
                    & "<img src='cid:city.jpg'" & "width='500' height='200'><br>" &  _               
      "<br>Best Regards, <br>Sumit</font></span>"
    Voila

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

Discussions similaires

  1. Pb late binding - Creation d'un rendez-vous Outlook
    Par gpinson dans le forum Général VBA
    Réponses: 1
    Dernier message: 31/01/2011, 20h19
  2. Problème late binding avec Word et Outlook
    Par sibama dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/12/2009, 21h24
  3. Outlook.MailItems : c'est lent!?
    Par kehops dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/01/2008, 18h17
  4. Late binding et Objets COM
    Par M4tthieu dans le forum C#
    Réponses: 4
    Dernier message: 07/08/2007, 12h28
  5. [C#, .NET 1.1]Ouvrir un classeur excel en late binding
    Par tontonplaisir dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/06/2007, 10h54

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