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 :

Améliorer déplacer un message


Sujet :

VBA Outlook

  1. #1
    Membre régulier

    Inscrit en
    Janvier 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 28
    Points : 75
    Points
    75
    Par défaut Améliorer déplacer un message
    Bonjour,

    Je découvre actuellement Outlook 2010 et ses capacités accrues par rapport à Outlook 2003.

    Il est possible dans OL2010 de chercher un mail dans la boite aux lettres et dans tous les PST ouverts. Vous pouvez dans le résultat de cette recherche, regrouper les mails par dossier. Mais pour les déplacer, il n'y a que l'ancienne méthode : liste de 10 dossiers et la recherche d'un dossier. Ce serait tellement plus simple si on pouvait déplacer un mail dans un autre dossier en le faisant glisser sur un autre mail contenu dans le dossier de destination.

    Malheureusement, je ne maîtrise pas le modèle objet d'Outlook, donc je ne sais si c'est faisable en VBA d'où mes questions. Les réponses souhaitées sont "Non ou "Oui" et l'instruction qu'il faut utiliser (je m'occupe des problèmes de programmation) :
    • Existe-t-il un évènement signalant que l'ont fait glisser (avec la souris) un message ? (si c'est non, difficile de savoir qu'il y a déplacement)
    • Peut-on savoir l'item au-dessus duquel se trouve la souris ? (si c'est non, difficile de déterminer la destination)
    • Peut-on savoir si l'explorateur actif est en mode "recherche" (c'est seulement dans ce cas que le déplacement a un intérêt) ?
    • Peut-on savoir dans combien de dossier ont été trouvé les messages ?
    • Peut-on (en VBA) déplier/replier les groupes de dossiers ?


    Par avance, je vous remercie de vos réponses, en espérant que vous m'apportiez de bonnes nouvelles.

    A bientôt
    Guy
    A bientôt
    Guy

  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,
    Intéressant sujet,
    Il n'y a pas à ma connaissance sous ol2010 d'événement qui signale le glissé/déplacé. peut être avec des api windows...

    Si on veut agir avec un évenement, il faut utiliser
    Folder.BeforeItemMove, événement
    Se produit lorsqu'un élément est sur le point d'être déplacé ou supprimé d'un dossier, à la suite de l'action d'un utilisateur ou de l'exécution du code d'un programme.
    .BeforeItemMove(Item, MoveTo, Cancel)

    en créant une variable WithEvents sur le Folder d'origine.

    On peut prendre un Email et le déposer à gauche par glissé/déposé, dans les dossiers.


    Donc l'idée, que je dois faire depuis des mois c'est de déplacer l'ensemble de la conversation lors du déplacement d'un des Emails.

    pour cela il faut utiliser
    MailItem.GetConversation, méthode
    Conversation.GetTable, méthode


    voici l'exemple de l'aide sur cette dernière méthode

    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
    Sub DemoConversationTable()
        Dim oConv As Outlook.Conversation
        Dim oTable As Outlook.Table
        Dim oRow As Outlook.Row
        Dim oMail As Outlook.MailItem
        Dim oItem As Outlook.MailItem
        Const PR_STORE_ENTRYID As String = _
           "http://schemas.microsoft.com/mapi/proptag/0x0FFB0102"
     
        On Error Resume Next
        ' Obtain the current item for the active inspector.
        Set oMail = Application.ActiveInspector.CurrentItem
     
        If Not (oMail Is Nothing) Then
            ' Obtain the Conversation object.
            Set oConv = oMail.GetConversation
            If Not (oConv Is Nothing) Then
                Set oTable = oConv.GetTable
                oTable.Columns.Add (PR_STORE_ENTRYID)
                Do Until oTable.EndOfTable
                    Set oRow = oTable.GetNextRow
                    ' Use EntryID and StoreID to open the item.
                    Set oItem = Application.session.GetItemFromID( _
                        oRow("EntryID"), _
                        oRow.BinaryToString(PR_STORE_ENTRYID))
                    Debug.Print oItem.Subject, _
                    "Attachments.Count=" & oItem.Attachments.count
                Loop
            End If
        End If
    End Sub

  3. #3
    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 Guy_M Voir le message
    Bonjour,

    ...[*]Peut-on (en VBA) déplier/replier les groupes de dossiers ?
    ...
    Guy
    comme cela , mais cela dépend du classement !
    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
    Function CollapseAllGroups()
    '---------------------------------------------------------------------------------------
    ' Procedure : CollapseAllGroups
    ' Author    : OCTU
    ' Date      : 05/11/2015
    ' Purpose   :
    '---------------------------------------------------------------------------------------
    '
        Dim objExp
        Dim colCB
        Dim objCBB
       ' On Error Resume Next
        Set objExp = ActiveExplorer
        Set colCB = objExp.CommandBars
        Set objCBB = colCB.FindControl(, 1917)    'CollapseAllGroups
        'Set objCBB = colCB.FindControl(, 1916)    'ExpandAllGroups
        If Not objCBB Is Nothing Then
                objCBB.Execute
        End If
     
        On Error GoTo 0
    End Function

  4. #4
    Membre régulier

    Inscrit en
    Janvier 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 28
    Points : 75
    Points
    75
    Par défaut
    Merci Oliv- pour ces éléments,

    Pas mal l'idée de déplacer la conversation quand on déplace un élément.

    Est-ce que avec l'évènement "BeforeItemMove" peut être associé au niveau application et pas uniquement à un dossier ?

    Une autre idée serait que l'utilisateur sélectionne 2 mails (de 2 dossiers différents) dans le résultat de la recherche, il exécute la macro qui lui propose de choisir le mouvement.

    A bientôt
    Guy
    A bientôt
    Guy

Discussions similaires

  1. Déplacer des messages dans un autre dossier
    Par ouadie99 dans le forum Outlook
    Réponses: 5
    Dernier message: 26/02/2008, 17h10
  2. Déplacer des messages via raccourci clavier ou bouton
    Par le chat 78 dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 21/11/2007, 17h32
  3. Comment déplacer un message posté ?
    Par rabine dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 30/04/2006, 20h07

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