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 :

Créer un mail en récupérant le destinataire (ou l'expéditeur) selon le répertoire en cours d'Outlook [OL-2016]


Sujet :

VBA Outlook

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Créer un mail en récupérant le destinataire (ou l'expéditeur) selon le répertoire en cours d'Outlook
    Bonjour,

    Je suis débutant en VBA d'outlook (et dans les discussions sur des forums ;-) ).
    Voilà mon soucis : mes utilisateurs ont 2 boites mails office 365 : une perso et une partagée.
    Quand on ouvre un nouveau message, si on a 2 boites mails normales (non partagées), l'expéditeur se met bien à celui de la boite en cours. Mais à cause de la boite partagée, il met toujours l'expéditeur perso.

    J'aimerai créer un bouton, comme le bouton "Nouveau message électronique" de l'onglet accueil d'Outlook, qui ouvre un nouveau message, mais avec le nom d'expéditeur de la boite sur laquelle il se trouve.

    En lisant vos discussions, j'ai réussi à créer un bouton avec le code ci-dessous :
    <code>
    Sub nouveau_message()

    Dim Contact As Outlook.ContactItem

    Dim Explorer As Outlook.Explorer
    Dim CurrentItem As Object
    Dim Sender As Outlook.AddressEntry
    Dim myolApp As Outlook.Application
    Dim myItem As Outlook.MailItem

    ' On récupère le mail sélectionné dans Outlook
    Set Explorer = Application.ActiveExplorer
    Set CurrentItem = Explorer.Selection(1)

    ' On crée un mail
    Set myolApp = CreateObject("Outlook.Application")
    Set myItem = myolApp.CreateItem(olMailItem)

    ' Si l'objet sélectionné est un mail
    If CurrentItem.Class = olMail Then
    ' on récupère l'expéditeur de l'objet sélectionné, que l'on met dans l'objet de type adresse
    Set Sender = CurrentItem.Sender

    ' on met dans l'adresse d'expéditeur du mail créé l'objet de type adresse
    myItem.Sender = Sender

    ' on montre l'email créé
    myItem.Display
    End If

    End Sub
    </code>

    Ce code récupère bien l'expéditeur du mail sélectionné dans Outlook.

    Voici mes 2 questions :
    - 1°) Comment faire pour mettre le destinataire du mail sélectionné à la place de l'expéditeur ? Car mes utilisateurs sont la plupart du temps dans leur boite de réception.
    Cela doit être du type
    Set Sender = CurrentItem.To,
    à la place de
    Set Sender = CurrentItem.Sender
    mais cela ne fonctionne pas et j'aimerai comprendre pourquoi.

    - 2°) Comment savoir si on est dans le répertoire des "éléments envoyés", pour récupérer l'expéditeur du mail sélectionné. (comme le code ci-dessus) ?

    En vous remerciant par avance

    Cordialement

  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
    Bonjour,

    Est-ce que le nom de la ou les boites en question , est bien équivalent à une adresse Email valide ? ou à un utilisateur existant ?

    Si oui tu peux récupérer le nom comme cela :

    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
    Function De_boite_encours() As Recipient
        Dim FolderPath As String
        Dim balName As String
        Dim myRecipient As Outlook.Recipient
    Set fd = ActiveExplorer.CurrentFolder
     
    While TypeName(fd.Parent) = "MAPIFolder"
    Set fd = fd.Parent
     
    Wend
     
        FolderPath = fd.FolderPath
        FolderPath = Replace(FolderPath, "\\", "")
        balName = fd.Name
        Set myRecipient = Application.Session.CreateRecipient(balName)
        myRecipient.Resolve
        If myRecipient.Resolved Then
     
            Set De_boite_encours = Application.Session.CreateRecipient(balName)
        Else
            Set De_boite_encours = Session.CurrentUser
        End If
    End Function
     
     
    Sub exemple()
        Dim Item As Outlook.MailItem
        Set Item = CreateItem(olMailItem)
        With Item
            .SentOnBehalfOfName = De_boite_encours
            .Recipients.ResolveAll
            .Display
        End With
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Super, cela fonctionne !
    Bonjour Oliv-,

    Cela fait plusieurs jours que je lis vos interventions et je suis très content que vous m'ayez accordé un peu de votre temps.

    Et le résultat est tout simplement génial !!
    Je vous remercie vraiment pour le code qui fonctionne parfaitement !

    Je ne mets pas encore cette discussion comme RESOLU car demain, je vais me pencher sur votre code pour essayer de le comprendre exactement. Puis-je me permettre de vous poser une ou deux petites questions si je n'ai pas tout compris ?

    En tout cas merci encore pour votre rapidité et votre solution.

    Cordialement

  4. #4
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Demande précision
    Bonjour Oliv-,

    Macro mise en place. Et cela fonctionne très bien.

    Mais j'ai 2 petites questions :
    1°) Les 2 lignes
    FolderPath = fd.FolderPath
    FolderPath = Replace(FolderPath, "\\", "")

    servent-elles seulement si le "Set myRecipient = Application.Session.CreateRecipient(balName)" ne fonctionnait pas pour remplacer le balName par FolderPath ?

    Sinon je ne comprend pas pourquoi il faut remplir le FolderPath ?

    2°) On n'est pas obligé de déclarer fd, du type
    Dim fd As Outlook.????? ?
    Il le défini directement comme un objet du même type que ActiveExplorer.CurrentFolder ?

    Merci encore


    [CODE]
    Pour info, je recopie votre code avec mes annotations pour vous montrer comment j'ai compris votre code et si cela est correct.


    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
     
    Function De_boite_encours() As Recipient
    	' Fonction qui récupère le nom de la personne du répertoire Outlook en cours d'utilisation
     
    	Dim FolderPath As String
    	Dim balName As String
    	Dim myRecipient As Outlook.Recipient
     
    	' Met le dossier en cours dans fd
    	Set fd = ActiveExplorer.CurrentFolder
     
    	' On recherche le dossier racine
    	' Tant que le dossier parent n'est pas "MAPIFolder"
    	While TypeName(fd.Parent) = "MAPIFolder"
    		' fd devient le dossier Parent
    		Set fd = fd.Parent
    	Wend
     
    	' On récupère le chemin du dossier racine
    	FolderPath = fd.FolderPath
    	' On enlève les \ du début 
    	FolderPath = Replace(FolderPath, "\\", "")
    	' On rempli dans balName le nom de la boite aux lettres
    	balName = fd.Name
    	' On crée un expéditeur avec le nom de l'expéditeur en cours
    	Set myRecipient = Application.Session.CreateRecipient(balName)
    	' On vérifie que cet expéditeur est correct
    	myRecipient.Resolve
     
    	If myRecipient.Resolved Then
     		' si l'expéditeur est correct
    		' la fonction est l'expéditeur balName
     		Set De_boite_encours = Application.Session.CreateRecipient(balName)
     	Else
    		' si l'expéditeur n'est pas correct
    		' on garde l'utilisateur courant
            	Set De_boite_encours = Session.CurrentUser
    	End If
     
    End Function
     
     
    Sub Nouveau_Message()
    	' Procédure qui crée un mail avec l'expéditeur du dossier courant
     
    	' Item est un objet de type mail
    	Dim Item As Outlook.MailItem
     
    	' On crée un mail
    	Set Item = CreateItem(olMailItem)
     
    	With Item
    		' on rempli le nom d'expéditeur
            	.SentOnBehalfOfName = De_boite_encours
     
    		' l'expéditeur doit être correct
    		.Recipients.ResolveAll
     
    		' on montre le mail
    	        .Display
    	End With
     
    End Sub

  5. #5
    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
    Effectivement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FolderPath = fd.FolderPath
        FolderPath = Replace(FolderPath, "\\", "")
    ne servent à rien je m'en étais servi pour retrouver la racine d'une autre façon en utilisant split(), puis j'ai changé .


    tu peux mettre
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim fd as outlook.folder
    il y a des cas ou on va mettre dim fd as OBJECT
    sans définir le type d'objet car il peut être différent, par exemple si on parcours des éléments de la boite de réception, on peut bien sûr tomber sur les Emails, ce qui est le plus courant mais aussi sur des demandes de réunion, des ar , etc

    dans ce cas on mettrai


    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
    Sub Classe_Prestations()
     
        Dim Item As Object
        Dim LeMail As Outlook.MailItem
        Dim LesMails As Object
     
        Set LesMails = ActiveExplorer.Selection
           For Each Item In LesMails
            If Item.Class = olMail Then
                Set LeMail = Item
     
                ' ici le traitement avec Lemail
            End If
        Next
    fin:
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Bonjour Oliv-,

    Tes précisions répondent parfaitement à mes interrogations.

    Super boulot et je vais pouvoir mettre cette discussion comme résolue

    Bonne continuation et merci encore

    Cordialement

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

Discussions similaires

  1. comment créer un mail avec Zope / Python ?
    Par malmzi2007 dans le forum Zope
    Réponses: 3
    Dernier message: 12/07/2006, 19h19
  2. [javax.mail] envoi à plusieurs destinataires
    Par michaelbob dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 29/05/2006, 12h41
  3. Créer un mail via une appli
    Par Cedced dans le forum C++
    Réponses: 5
    Dernier message: 11/10/2005, 11h52
  4. Créer un mail dans une application
    Par Cedced dans le forum Windows
    Réponses: 1
    Dernier message: 03/10/2005, 11h35
  5. Créer un mail sans composants
    Par [Silk] dans le forum Composants VCL
    Réponses: 7
    Dernier message: 12/09/2005, 17h07

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