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

Rechercher des sujets similaires à "getdefaultfolder fonctionne pas late binding"