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 :

Macro VB - surveiller le dossier Outlook d'envoi des mails d'un autre compte que celui par défaut


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    perso
    Inscrit en
    Juin 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : perso
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Macro VB - surveiller le dossier Outlook d'envoi des mails d'un autre compte que celui par défaut
    Bonjour,

    J'ai le problème suivant :

    J'utilise Office 2010.
    J'ai plusieurs comptes dans mon Outlook.
    J'ai fait une macro Excel qui envoie des mails en utilisant d'autres comptes que mon compte par défaut dans Outlook.
    Jusque là pas de problème.

    Le nombre de mails étant importants, et leur taille pouvant être importante, je cherche à temporiser l'envoi en vérifiant s'il reste des mails dans les boîtes d'envoi de ces comptes avant d'envoyer le suivant.
    (je précise qu'il ne s'agit pas de pourrir les boites mail d'innocents avec du spam, mais de rediriger des mails de gestion vers les bons services )
    Je n'arrive pas à trouver comment récupérer le dossier d'envoi d'un autre compte que celui par défaut. (un genre d'équivalent de olns.GetDefaultFolder(olFolderOutbox), mais pour un compte donné)

    En observant olapp.GetNamespace("MAPI").folders, je retrouve bien la liste de mes différents comptes.
    Pour chaque compte, en descendant encore d'un niveau .Folders, je retrouve bien tous mes sous-dossiers pour chaque compte.
    Le problème est que mes différents comptes ne sont pas dans la même langue, et que du coup le dossier s'appelle une fois "Boîte d'envoi", une autre fois "Outbox".
    Pour le moment j'ai fait un truc crado qui teste pour le compte choisi l'existence des dossiers les deux noms "Boîte d'envoi" et "Outbox", et je surveille le contenu de celui que j'ai trouvé, mais bon...

    Merci d'avance aux sages qui voudrons bien m'éclairer de leur lumière.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut

    pour lister les BAL dispo (code sous Outlook, a adapter a Excel)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub piou()
    Dim objNS As Outlook.NameSpace
    Dim objFolder As Outlook.MAPIFolder
    Set objNS = GetNamespace("MAPI")
    For Each objFolder In objNS.Folders
        Debug.Print objFolder.Name
    Next
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    perso
    Inscrit en
    Juin 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : perso
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci Jean-Philippe,

    Mon soucis est de retrouver "proprement" la boite d'envoi de chaque compte.

    Avec mon bricolage décrit dans mon premier message ça fonctionne, mais si le dossier d'envoi s'appelle autrement que "Boîte d'envoi" ou "Outbox", c'est la cacatastrophe.
    Je me dis qu'il doit quand même bien y avoir un moyen de faire ça mieux...

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la méthode CreateRecipient() te permet de créer un objet matérialisant ta boite partagée

    ensuite, il suffit de pointer sur le dossier par défaut d'envoi via la méthode GetSharedDefaultFolder() comme cet exemple sauvage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MonDossier = Application.Session.GetSharedDefaultFolder(MaBoitePartagee, olFolderOutbox) ' remplacer olFolderOutbox par le chiffre 4 si Late Binding
    MaBoitePartagee étant l'objet de type Recipient, que je te laisse créer, je ne vais pas tout faire

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    perso
    Inscrit en
    Juin 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : perso
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Joe,

    Merci pour ton aide.

    mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set olns = olapp.GetNamespace("MAPI")
    Set olrecipient = olns.CreateRecipient(compte_messagerie)
    Set MonDossier = Application.Session.GetSharedDefaultFolder(olrecipient, olFolderOutbox)
    mes espions me disent que :
    olrecipient contient bien le compte que je cherche
    olFolderOutbox vaut bien 4

    mais... Erreur d'exécution 438 "Propriété ou méthode non gérée par cet objet"

    et en lisant la doc de getSharedDefaultFolder je trouve :

    expression.GetSharedDefaultFolder(Recipient, FolderType)
    Cette méthode est utilisée dans un scénario de délégation où un utilisateur a délégué à un autre utilisateur l'accès à un ou plusieurs de ses dossiers par défaut (par exemple, son dossier partagé Calendrier).
    FolderType peut être l’une des constantes OlDefaultFolders suivantes : olFolderCalendar, olFolderContacts, olFolderDrafts, olFolderInbox, olFolderJournal, olFolderNotes ou olFolderTasks. Les constantes olFolderDeletedItems, olFolderOutbox, olFolderJunk, olFolderConflicts, olFolderLocalFailures, olFolderServerFailures, olFolderSyncIssues, olPublicFoldersAllPublicFolders, olFolderRssSubscriptions, olFolderToDo, olFolderManagedEmail et olFolderSentMail ne peuvent pas être spécifiées pour cet argument.

    J'ai peut-être raté quelque chose?

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je dois dire que jamais je n'ai eu besoin d'aller dans le dossier d'envoi.

    as-tu essayé avec la valeur de constante 4 directement au lieu de son énumération ?

    sinon, j'ai bien peur qu'il faille tester les deux cas comme tu ne voulais t'y résoudre et qui t'a amené ici ?

    tu peux déporter ce traitement un peu brut dans une fonction, et l'appeler pour éviter de surcharger ta procédure principale
    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 OlNmSpace As Outlook.NameSpace
     
    Sub Lancement()
    Dim Maboite As String
    Dim MonDossier As Outlook.Folder
    Maboite = "NomBoiteMail"
    InitialisationOutlook
       Set MonDossier = ObtientBoiteEnvoi(Maboite)
    If Not MonDossier Is Nothing Then
        ' traitement de la boite
        MsgBox "trouvé : " & MonDossier.FolderPath
    Else
        MsgBox "Erreur de localisation de la boite d'envoi !"
    End If
    End Sub
     
    Sub InitialisationOutlook()
        On Error Resume Next: Set OlApp = GetObject(, "Outlook.Application"): On Error GoTo 0
        If OlApp Is Nothing Then Set OlApp = CreateObject("Outlook.Application")
        Set OlNmSpace = OlApp.GetNamespace("MAPI")
    End Sub
     
    Function ObtientBoiteEnvoi(NomBoite As String) As Object
    Dim LeDossier As Outlook.Folder
        With OlNmSpace.Folders(NomBoite)
            On Error Resume Next
                Set LeDossier = .Folders("Boîte d'nnvoi")
            On Error GoTo 0
     
            If LeDossier Is Nothing Then
                On Error Resume Next
                    Set LeDossier = .Folders("Outbox")
                On Error GoTo 0
            End If
     
            Set ObtientBoiteEnvoi = LeDossier
        End With
    End Function
    Sinon, cherche la propriété qui pourrait te renvoyer la langue appliquée sur les dossiers par défaut, je sais que je peux jouer sur ça manuellement en passant par OWA, peut-être que le modèle objet natif outlook (sans passer par Redemption par exemple) le propose

Discussions similaires

  1. Réponses: 17
    Dernier message: 10/10/2016, 13h30
  2. Réponses: 6
    Dernier message: 05/09/2013, 18h20
  3. [Joomla!] Envoi des mails à une autre adresse que celle du premier utilisateur créé ?
    Par pontus21 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/05/2010, 13h31
  4. API KourdokMail envoie des mails HTML
    Par boumil dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 09/07/2009, 14h23
  5. Trier des lignes sur un autre champ que celui du groupe
    Par tatayoyo dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 28/01/2009, 19h37

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