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 :

Récupération de mail (Erreur 438) [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Stagiaire vba
    Inscrit en
    Mai 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire vba

    Informations forums :
    Inscription : Mai 2020
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Récupération de mail (Erreur 438)
    Bonjour,

    Je débute en vba et je travail sur un projet de récupération et de traitement de pièce jointe et j'ai un soucis dans mon code lorsque je veux récupérer le mail.
    J'ai un Objet OLmail qui je suppose se cast en MailItem lors d'un For Each mais j'ai l'impression que le cast ne se fais pas complètement et du coup je me retrouve avec certaines propriétés du MailItem qui ne fonctionne pas tel que .Sender et j'obtiens une erreur 438. C'est qu'une supposition, il est possible que le problème vienne d'autre part mais je ne vois pas où et j'ai passé beaucoup trop de temps dessus :/

    Mon 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
    73
    '-----------------------------------------
    '-- Fonction de recherche récurrente d'un mail
    '-- et récupération d'une pièce jointe pour enregistrement
    '-- Entrée: - Dossier parcouru
    '               - Format de la pièce jointe
    '-----------------------------------------
    Private Sub SearchFolders(ByVal Fld As Outlook.MAPIFolder, Format As String)
     
     
     
        Dim y As Integer
        Dim OLmail As Object 'As Outlook.MailItem
        Dim PJ 'As Outlook.Attachment
        Dim SousDossier As MAPIFolder
        Dim pceJointe As String
        Dim olExchUser
     
        '-- Pour chaque sous-dossier du dossier principal
        For Each SousDossier In Fld.Folders
            If SousDossier.DefaultItemType = 0 Then
     
                '-- Pour chaque email
                For Each OLmail In SousDossier.Items
     
                     If OLmail.SenderEmailType = "EX" Then
     
                        Set olExchUser = OLmail.Sender.GetExchangeUser()
                        If Not (olExchUser Is Nothing) Then
     
     
                            If InStr(olExchUser.PrimarySmtpAddress, "NomClient") > 0 Then
                                For Each PJ In OLmail.Attachments
     
                                    '-- on vérifie que la pièce jointe est du format voulu
                                    If Mid(PJ, InStrRev(PJ, ".") + 1) = "xlsx" Then
     
     
                                        '-- Enregistrement de la pièce jointe en fonction de la date d'arrivé du mail
                                        TriFichierParDate OLmail.ReceivedTime, PJ
     
                                        GoTo Fin
                                    End If
     
                                Next PJ
                            End If
                        End If
                    Else
                        If InStr(OLmail.SenderEmailAddress, "NomClient") > 0 Then
                            For Each PJ In OLmail.Attachments
     
                                '-- on vérifie que la pièce jointe est du format voulu
                                If Mid(PJ, InStrRev(PJ, ".") + 1) = "xlsx" Then
     
     
                                    '-- Enregistrement de la pièce jointe en fonction de la date d'arrivé du mail
                                    TriFichierParDate OLmail.ReceivedTime, PJ
     
                                    GoTo Fin
                                End If
     
                            Next PJ
                        End If
     
                    End If
     
                Next OLmail
            End If
            SearchFolders SousDossier, Exp, Format
        Next SousDossier
     
    Fin:
     
    End Sub
    Merci d'avance

  2. #2
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par Airahn Voir le message
    J'ai un Objet OLmail qui je suppose se cast en MailItem lors d'un For Each
    Bonjour.
    Attention car Outlook, dans ses dossiers, ne gère pas que les mails (messages électroniques). Il gère d'autres éléments qui n'ont pas toujours de propriété Sender, par exemple les rendez-vous.
    Donc si j'ai compris un peu le problème (c'est moins sûr), il faut avant tout t'assurer que l'élément analysé est bien un mail, sans quoi forcement tu as une erreur en voulant récupérer une propriété qui n'existe pas. C'est la propriété .class (de mémoire mais à vérifier) qui contient le type de l'élément (ça doit ressembler à Olmail ou 43 de mémoire mais à vérifier aussi). Ainsi, après vérification que l'élément est bien un message tu peux récupérer l'envoyeur et autres informations sur le message.
    Mais peut-être que je réponds à coté si SousDossier.DefaultItemType = 0 fait ce travail de contrôle.

    Quant à ton code, il serait préférable, à mon avis, de le décomposer en deux fonctions : une qui boucle pour analyser les dossiers et sous dossiers, une qui extrait la pièce jointe des mails du dossier analysé. Ça serait plus lisible.

    Bonne continuation.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Stagiaire vba
    Inscrit en
    Mai 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire vba

    Informations forums :
    Inscription : Mai 2020
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    ReBonjour

    J'irai voir si c'est bien un problème de classe quand j'en prendrai le temps. Et en effet faire deux fonctions ne serait pas une mauvaise idée

    Merci beaucoup

  4. #4
    Membre à l'essai
    Homme Profil pro
    Stagiaire vba
    Inscrit en
    Mai 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire vba

    Informations forums :
    Inscription : Mai 2020
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    ReReBonjour,

    Après avoir testé la classe des mails avec un "If OutlookMail.Class <> olMail Then" Je n'ai plus de message d'erreur donc je pense que mon problème est résolu.
    Notez que j'ai renommé mon ancienne variable OLmail par OutlookMail pour éviter un ambiguïté avec la classe olMail

    Merci beaucoup

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

Discussions similaires

  1. [XL-2013] Creation mail Outlook --> Set OutlookItem = Application.CreateItem(0) Erreur 438
    Par Denis_67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/07/2017, 14h20
  2. Réponses: 1
    Dernier message: 02/05/2006, 10h20
  3. [Mail] Erreur d'envoi
    Par nebil dans le forum Langage
    Réponses: 10
    Dernier message: 02/04/2006, 15h57
  4. [newbie]message erreur 438 object doen't support ...
    Par megapacman dans le forum Access
    Réponses: 6
    Dernier message: 13/03/2006, 14h28
  5. Réponses: 4
    Dernier message: 11/10/2005, 21h08

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