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