VBA references and early binding pour charger des PJ outlook

Bonjour à tous,

Petit sujet un peu tricky !!

J'ai une macro qui télécharge des pièces jointes et les enregistres dans un folder.

Mes collègues utilisent ce programme sur les versions excel 2010 et 2013.

Du coup pour éviter le problème de conflit j'ai essayé de binder le code.

Tout va bien pour 2013, mais un utilisateur de 2010 (j'ai pourtant insisté pour qu'il passe sous 2013 lool), rencontre un problème car la référence microsoft object library 15.0 n'est pas disponible sur son ordi. Du coup le code bug et indique que la référence n'est pas disponible !!

Pourtant avec mon code je devrais pas rencontrer ce problème. Si quelqu'un à un œil expert sur ce sujet?

Merci d'avance, 8)

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 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("Index").Activate
        Title = "Error"
        reponse = MsgBox("Thanks to open Microsoft Outlook before updating NAF port report database", vbCritical + vbOKOnly, Title)
        Exit Sub
   End If

Compare = 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

'test si email bien reçu dans le folder lcr
If Bascule = True Then

Bonne soirée.

Bonjour,

Au lieu d'utiliser les "libraries", les quelles sont différentes d'une version à l'autre de Excel, je suggère de déclarer les objets au début du code. Ainsi, le code devient indépendant de la version de Excel.

Je vais te revenir sur le sujet sous peu pour te soumettre un exemple. Il faut que je retrouve l'info sur un autre forum.

Gelinotte

Bonjour,

Je n'ai pas retrouvé la référence ... mais, on déclare les objets ainsi ...

(Penser à désactiver la "librairie" pour faire les tests )

... ces déclarations servent pour ajouter des rendez-vous dans le calendrier de Outlook ...

Dim objOutlook As New Outlook.Application
Dim objOutlookAppt As Outlook.AppointmentItem

Dim OutlItems As Outlook.Items
Dim objOutlookCalendar As Outlook.Items

Gelinotte

Hello gelinotte,

Merci beaucoup pour ton aide.

Tu veux dire par

Penser à désactiver la "librairie" pour faire les tests

.

Je dois automatiquement désactiver la reference à outlook pour tester?

Parce-que je viens de tester sans la référence outlook j'ai un message d'erreur à ce niveau: Argument ou appel de procédure incorrect

Dim olInbox As Object

Set olInbox = olSpace.GetDefaultFolder(olFolderInbox)

Merci encore

Bonne journée.

Bonjour,

C'est complexe pour moi ... j'espère que ce le sera moins pour toi

Mais si tu réussis à code pour te libérer de la library "Outlook", ton code deviendra transparent d'une version à l'autre de Excel.

Sinon, sur les machines qui ont des versions différentes de Excel, il faudra désélectionner la "library" outlook incompatible et sélectionner celle de la version en cours. Ce qui est désagréable en fonctionnant ainsi, lors de changement où tu leur pousses une nouvelle version de ton chiffrer, le changement de "library" est à refaire.

Gelinotte

Hello,

J'ai posé la question sur d'autres forum et j'ai trouvé ce qu'il fallait ajouter à mon code.

Voila une explication que j'ai eu :

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

Donc il faut déclarer en haut du programme avant la macro sub ()

Const olFolderInbox As Long = 6
Const olMailItem = 0

Et la comme tu dis le code devient transparent d'une version à l'autre.

Voila j'ai pas eu à changer de code en tout cas .

Merci en tout cas et bonne journée.

C'est dommage que vous n'ayez pas placer votre code résolu au complet ... ça aurait aidé à la compréhension de la chose ...

Rechercher des sujets similaires à "vba references and early binding charger outlook"