Getdefaultfolder ne fonctionne pas en late binding
Bonsoir
Toujours dans le cadre de mon application commande/réception
Je suis contraint de modifier mon code dans EXCEL pour des routines de OUTLOOK (envoi message, lire message, suppression message)
Compte tenu que nous venons de nous retrouver avec un environnement hétérogène : 2013 et 2016, je découvre un point que je ne connaissais pas.
Au départ, j'étais sans le savoir en early binding avec la bibliothèque Microsoft Outlook 2015 que j'avais coché dans les références
Je me suis donc retrouvé avec un tableau en 2013 qui est passé entre les mains de quelqu'un ayant migré en 2016 et bien entendu quand ce tableau est repassé entre les mains de quelqu'un qui est en 2013 : ça a bogué
Donc après recherche, j'ai compris que je devais passer plutôt en late binding
J'ai décoché la bibliothèque 2015, modifié le code concernant Outlook en conséquence
Tout fonctionne bien dans toutes les routines sauf une ci-dessous
Il me dit incompatibilité de type sur getdefaultfolder de la inbox.
Avec le message 'incompatibilité de type'
Si je coche à nouveau la bibliothèque 2015, pas de problème
J'ai essayé plusieurs solutions sans succès.
Merci d'avance
Sub supprmail()
'
' suppression du mail une fois traité
'
Dim olApp As Object, NS As Object, Dossier As Object, myattachment As Object
Dim OlExp As Object
Dim mymail As Object
Dim nbpj As Integer
Dim nompj As String
Dim myatt As Object
Set olApp = CreateObject("Outlook.Application")
Set OlExp = olApp.ActiveExplorer
Set NS = olApp.GetNamespace("MAPI")
Set Dossier = NS.GetDefaultFolder(olFolderInbox)
Application.DisplayAlerts = False
On Error Resume Next
For Each mymail In Dossier.Items
wtrouve = False
If mymail.Attachments.Count = 1 Then
For Each myatt In mymail.Attachments
If myatt.DisplayName = wpjasup Then
wtrouve = True
Else
End If
Next myatt
Else
End If
If wtrouve = True Then
mymail.Delete
Exit Sub
Else
End If
Next mymail
On Error GoTo 0
Application.DisplayAlerts = True
End Sub
Bonjour Jacques67
Il serait bien que tu édites ton poste et que tu mettes le code entre les balises [ code][ /code] sans espace après le [
Ensuite, effectivement quand tu as un parc logiciel hétérogène, tu dois passer par du "Late Binding"
Par défaut c'est ce que je conseille d'utiliser, même si ce n'est pas le cas
Pour ce qui est de ton problème, la constante "olFolderInbox" n'est utilisable que si tu coches la référence "Microsoft Outlook..."
Il faut donc la remplacer par sa valeur qui est 6 (dans la fenêtre d'éxécution tu tapes : Debug.Print olFolderInbox quand la référence est cochée)
Voici ton code modifié et entre balises
Sub SupprMail()
' suppression du mail une fois traité
'
Dim olApp As Object, NS As Object, Dossier As Object, myattachment As Object
Dim OlExp As Object
Dim mymail As Object
Dim nbpj As Integer
Dim nompj As String
Dim myatt As Object
Set olApp = CreateObject("Outlook.Application")
Set OlExp = olApp.ActiveExplorer
Set NS = olApp.GetNamespace("MAPI")
' olFolderInbox = 6
Set Dossier = NS.GetDefaultFolder(6)
'
Application.DisplayAlerts = False
On Error Resume Next
For Each mymail In Dossier.Items
wtrouve = False
If mymail.Attachments.Count = 1 Then
For Each myatt In mymail.Attachments
If myatt.DisplayName = wpjasup Then
wtrouve = True
Else
End If
Next myatt
Else
End If
If wtrouve = True Then
mymail.Delete
Exit Sub
Else
End If
Next mymail
On Error GoTo 0
Application.DisplayAlerts = True
End Sub
A+
Bonjour
D'abord merci beaucoup.
Je ne suis revenu sur ma demande qu'aujourd'hui.
Usuellement il y a un message dans ma boite mail qui arrive me notifiant une réponse.
Et comme je n'ai rien eu, je ne me suis pas précipité.
Il faudra que je ne fasse pas confiance aux notifications.
Donc, je suis revenu pour mentionner que par hasard j'avais fini par trouver.
Et indiquer la réponse qui est la tienne.
J'ai été mis un peu sur la piste en faisant un essai isolé dans un autre tableau et où le message était différent.
Il disait que la variable olFolderinbox était inconnue.
J'ai découvert récemment le late binding.
Il faut dire que je suis assez nouveau sur le développement VBA (formulaires et VBA débutés en juillet dernier) même en ayant pratiqué par le passé plusieurs langages.
Et à l'occasion de cette application rencontré plusieurs gags techniques liés à des migrations historiques des PC et qui m'ont permis de progresser sur l'usage de variables et de fonction :
- la boite de réception qui s'appelle bien 'boite de réception' et parfois INBOX
- Et surtout, le path visible d'accès à un dossier sur le bureau qui ne correspond pas au path physique réellement utilisé !
J'ai pris bonne note pour le post du code.
Effectivement j'ai une autre application pour laquelle je vais passer également en late binding
Bien cordialement