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

VBA Outlook Discussion :

Boucle sur mail Outlook


Sujet :

VBA Outlook

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Boucle sur mail Outlook
    Bonjour à tous,

    Je reviens vers vous car j'ai de nouveau des soucis avec du vba...

    Je suis en train de réaliser un petit code tout simple pour récupérer des PJ dans des mails outlook, j'ai tout bien suivi la FAQ : https://excel.developpez.com/faq/?pa...ePiecesJointes


    Cependant deux problèmes se posent :

    - il ne boucle pas sur tous les mails, te en pas à pas cela semble fonctionner
    - le olSpace.SendAndReceive ne marche oas, je pense parce qu'outlook s'ouvre en arrière plan...

    Je mets le code que j'utilise ci dessous et suis d'ores et déjà reconnaissant à qui pourra m'aider!

    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
       Dim olApp As Outlook.Application
        Dim olSpace As Outlook.Namespace
        Dim olInbox As Outlook.MAPIFolder
        Dim olFolder As Outlook.MAPIFolder
        Dim olFolder_ok As Outlook.MAPIFolder
        Dim olMail As Outlook.MailItem
        Dim olMailb As Outlook.MailItem
        Dim pceJointe As Outlook.Attachment
     
        Dim pj As Integer
     
        Set olApp = CreateObject("Outlook.Application")             'Nouvel outlook
        Set olSpace = olApp.GetNamespace("MAPI")
        Set olInbox = olSpace.Folders("ZIMBRA")      'Boite mail à adapter
        Set olFolder = olInbox.Folders("Boîte de Réception")        'Dossier Boite de réception
        Set olFolder_ok = olInbox.Folders("PJ_recu")                     'Dossier à remplir
     
    olSpace.SendAndReceive False
    Application.ScreenUpdating = False                              'On désactive la mise à jour de l'écran pour accélérer l'exécution du code
     
    For Each olMail In olFolder.Items                           'pour chaque mail de la boite de réception
     
        If olMail.Subject Like ("Macro auto*") And olMail.Attachments.Count <> 0 Then 
     
            For pj = 1 To olMail.Attachments.Count                           'pour toutes les PJ du mail, on les enregistre dans "Attente import" si le nom correspond
               Set pceJointe = olMail.Attachments(pj)
                If pceJointe.Filename Like ("activite_*.csv") Then pceJointe.SaveAsFile ThisWorkbook.Path & "\Attente import\" & pceJointe
                If pceJointe.Filename Like ("event_#*.xlsx") Then pceJointe.SaveAsFile ThisWorkbook.Path & "\Attente import\" & pceJointe
                If pceJointe.Filename Like ("report_*.xlsx") Then pceJointe.SaveAsFile ThisWorkbook.Path & "\Attente import\" & pceJointe
                If pceJointe.Filename Like ("plan_*.xlsx") Then pceJointe.SaveAsFile ThisWorkbook.Path & "\Attente import\" & pceJointe
               Set pceJointe = Nothing
            Next pj                                                     'piece jointe suivante
     
            'olMail.Subject = "OK_" & olMail.Subject                     'on ajoute OK à l'objet du mail
            olMail.Save                                                 'on enregistre le mail
            olMail.Move olFolder_ok
        End If
     
    Next olMail                                                     'mail suivant
    Merci d'avance,
    Johan

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonsoir,

    Lorsque tu déplaces ou supprimes un Email de la collection que tu parcours, il faut faire une boucle commençant par la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For n = myItems.Count To 1 Step -1
                    Set myItem = myItems.Items(n)
    Myitem.Move myDestFolder
    Next n

    tu ne peux pas utiliser olMail car c'est une constante existante de OUTLOOK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Dim olMail As Outlook.MailItem
    Que souhaites tu faire avec SendAndReceive ? et pourquoi ne fonctionnerait il pas ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour Oliv-, deja merci pour ta réponse

    J'ai testé ta proposition et ça règle le problème donc merci
    La boucle que j'utilise part du plus ancien message et va au plus récent, ce qui me paraissait plus logique ^^

    J'ai changé olMail comme tu me l'a indiqué (par olMsg)

    Enfin pour SendAndReceive, je souhaite envoyer/recevoir tout avant la procédure car les mails ne chargent pas si Outlook est fermé...
    L'idée est que cette macro se lance à 13h, les mails arrivant vers 12h, si je n'ouvre pas outlook avant il ne sont pas chargé...

    En attente de te relire

    Johan

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par jhntms Voir le message
    Enfin pour SendAndReceive, je souhaite envoyer/recevoir tout avant la procédure car les mails ne chargent pas si Outlook est fermé...
    L'idée est que cette macro se lance à 13h, les mails arrivant vers 12h, si je n'ouvre pas outlook avant il ne sont pas chargé...
    ...

    SendAndReceive est asynchrone, il faut utiliser un événement pour savoir s'il a fini


    https://msdn.microsoft.com/en-us/vba...or=-2147217396

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci pour ton aide, la solution ne fonctionne pas correctement je ne sais pas pourquoi...
    Il se passe même que outlook ne reçoit plus de mail du tout par la suite...

    Et j'ai un autre problème, ta boucle tourne à l'envers maintenant (du plus ancien au plus récent)...

    En tout cas je te remercie de ton aide, j'essaie de continuer la dessus mais serais beaucoup moins présents pour un moment ^^

    Bonne soirée

    Johan

Discussions similaires

  1. [AC-2003] boucle sur pièces jointes envoi mail
    Par novice06 dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/07/2010, 14h50
  2. [XL-2003] Problème de copie de cellules sur mail outlook
    Par fxleo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/10/2009, 15h32
  3. [Mail] Boucle sur fonction mail()
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2007, 22h26
  4. Réponses: 6
    Dernier message: 06/05/2007, 09h42
  5. [VBA]Boucle et Pièces Jointes sur mailing list
    Par delcroixf dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/03/2007, 10h11

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