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 :

Reference outlook object library


Sujet :

Macros et VBA Excel

  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 Reference outlook object library
    Bonjour,

    J'ai développé une macro qui permet de télécharger la PJ d'un email dans un dossier sur le lecteur C de l'utilisateur.

    La macro fonctionne parfaitement sauf que lorsqu'un utilisateur est sous 2010, il faut activer Microsoft Outlook 14.0 Object Library

    Or sous 2013 il faut activer Microsoft Outlook 15.0 Object Library comme sur la capture d'écran ci-dessous.
    Nom : Capture_reference ourlook.PNG
Affichages : 6953
Taille : 17,5 Ko

    Cela fait bugger à chaque fois le code entre les deux utilisateurs, ce qui pénible !!

    J'ai essayé de bindé mon code sans succés .

    Si vous avez une piste sur ce sujet?

    Merci d'avance !!

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
        Dim olApp As Object
        Dim olSpace As Object
        Dim olInbox As Object
        Dim olFolder As Object
        Dim olMail As Object
        Dim pceJointe As Object
        Dim PJ As Boolean
     
     
    Dim NomDossier As String
    Dim i As Integer
    Dim strPath As String, PathOrigine As String
    Dim NomOrigine As String
    Dim reponse As Variant
     
    'test si outlook ouvert
        Set olApp = CreateObject("Outlook.Application")
     
     If olApp.ActiveWindow Is Nothing Then
            Sheets("Start").Activate
            Title = "Error"
            reponse = MsgBox("Thanks to open Microsoft Outlook before updating database", vbCritical + vbOKOnly, Title)
            Exit Sub
        End If
     
    Compare = False
    PJ = False
     
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
     
    'Défini le dossier OutLook recherché
    NomDossier = "LCR Wemed"
     
        Set olSpace = olApp.GetNamespace("MAPI")
        Set olInbox = olSpace.GetDefaultFolder(olFolderInbox)
        Set olFolder = olInbox.Folders(NomDossier)
        Set olMail = olApp.CreateItem(olMailItem)
        Set pceJointe = olMail.Attachments
     
    'Check si dossier tampon existe sur le pc et va le créer sinon
    If Len(Dir("C:\Tampon\", vbDirectory)) = 0 Then
       MkDir "C:\Tampon\"
    End If
     
    PathOrigine = "C:\Tampon\"
    Bascule = False
     
    For Each olMail In olFolder.Items
     
       If Day(olMail.SentOn) = Day(Now) And Abs(DateDiff("h", olMail.ReceivedTime, Now())) <= 24 And olMail.SentOn > lastin Then
           If olMail.Attachments.Count > 0 Then
     
               For y = 1 To olMail.Attachments.Count
                   Set pceJointe = olMail.Attachments(y)
     
                   If InStr(1, pceJointe.Filename, "LCR16-Voyage All Legs") Then
     
                        NomOrigine = y & "_" & pceJointe
                        pceJointe.SaveAsFile PathOrigine & NomOrigine
                        lastin = olMail.SentOn
     
                        Bascule = True
                   End If
     
                   Set pceJointe = Nothing
               Next y
     
            End If
        End If
     
    Next olMail

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    ne pas activer de référence dans le projet (déclaration anticipée) au profit de la déclaration tardive

    comme expliqué dans le tutoriel Les fiches VBA - Comprendre : Early ou Late Binding

    sans compter les nombreux exemples dans les discussions de ce forum !

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  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 Marc-L,

    J'ai déjà fait la demarche de déclarer les variables as object dans mon code.

    C'est pour ça que je ne comprends pas d'ou peut venir mon erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Dim olApp As Object
     
    Set olApp = CreateObject("Outlook.Application")

    Sinon j'ai vu qu'on peut activer les références en vba comme ci-dessous. Peut-être une solution??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub ActiveRef()
    'Active la référence à Outlook selon la version d'excel    
    Select Case Application.Version
            Case "11.0"
                Call Addref("c:\Program Files\Microsoft Office\OFFICE11\msoutl.olb")
            'Case le no de version de 2007
                'Call Addref("L'adresse du fichier")
        End Select
    End Sub
     
    Sub Addref(AdresseRef As String)
      On Error Resume Next
      ThisWorkbook.VBProject.References.AddFromFile AdresseRef
    End Sub

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    ne pas activer de référence dans le projet

  5. #5
    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 de ta réponse mais c'est encore un peu flou encore pour moi.

    Si je n'active pas les références à outlook mon code bloque à ce niveau avec un argument ou appel de procédure incorrect.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set olInbox = olSpace.GetDefaultFolder(olFolderInbox)
    Pourtant j'ai bien déclaré comme objet la variable!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Dim olInbox As Object
     
     
    Set olInbox = olSpace.GetDefaultFolder(olFolderInbox)
    Donc je peux en déduire que c'est cette déclaration qui ne fonctionne pas??


    Cordialement.

  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,

    en liaison tardive, c'est à dire sans activer la référence à Outlook, tu ne peux pas utiliser les constantes de façon nominatives, dans ton cas c'est olFolderInbox

    tu dois remplacer le nom de la constante par sa valeur numérique, cette constante, par exemple, est la numéro 6

  7. #7
    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
    Bonjour à tous,

    Merci pour votre expertise .

    En effet j'ai rajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Const olFolderInbox As Long = 6
    Const olMailItem = 0
    Cela semble fonctionner correctement avec les références désactivés du coup.


    Merci et bonne journée.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 34
    Par défaut Les constantes relatives à l'objet Outlook...
    Bonjour,
    Sans vouloir relancer ce sujet, je voudrais juste préciser une information qui me semble utile car tout à fait générique, afin de compléter le besoin potentiel de futures lecteurs, dans la programmation VBA en liaison tardive sur l'objet Outlook.
    J'ai trouvé toutes les constantes nécessaires sur le lien suivant:

    https://docs.microsoft.com/fr-fr/office/vba/api/outlook

    Voilà, tout est dit !
    @+
    Paolo

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

Discussions similaires

  1. [Débutant] (voir nul) Probleme reference Microsoft Office 12.0 Object Library
    Par Etudiant9822 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 24/05/2016, 19h18
  2. Réponses: 11
    Dernier message: 23/03/2007, 14h46
  3. A propose de 4D Office Object Library
    Par Turtle_fr dans le forum 4D
    Réponses: 16
    Dernier message: 19/02/2007, 20h39
  4. Réponses: 10
    Dernier message: 07/07/2006, 14h26
  5. Réponses: 1
    Dernier message: 28/06/2006, 12h32

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