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 :

Déplacer des mails selon le sujet


Sujet :

VBA Outlook

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Déplacer des mails selon le sujet
    Bonjour,

    Je reçois des tickets via notre logiciel de gestion de ticket :

    • Mail 1 = [GLPI #0014561] Attribution du ticket n°0014561 à votre groupe
    • Mail 2 = [GLPI #0014561] Résolution appel 0014561


    Comme les sujet sont différents, Outlook ne sait pas les mettre dans la même conversation. Mon objectif est que lorsque je reçois un mail de type 2 pour la résolution, une macro déplace tout les mails avec ce numéro dans un sous-dossier GLPI\Resolu.

    Voilà ce que j'essaye de faire :

    • Création d'une règle Outlook qui applique la macro à la réception d'un mail contenant "Résolution appel"
    • Première partie de la macro avec l'extraction du numéro de ticket
    • Deuxième partie de la macro pour faire la recherche des mails avec le numéro de ticket dans la boite de réception
    • Troisième partie pour faire un déplacement des éléments trouvés vers le dossier de destination


    Actuellement je bloque sur la deuxième partie pour la recherche. Voilà 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
    Public blnSearchComp As Boolean
     
    Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As search)
        Debug.Print "The AdvancedSearchComplete Event fired"
        If SearchObject.Tag = "Test" Then
            m_SearchComplete = True
        End If
     
    End Sub
     
    Sub GLPI(MyMail As MailItem)
     
        On Error GoTo Proc_Error
     
        Dim strTicket, strSubject As String
     
        'Variable contenant le numéro de ticket, vierge par défaut
        strTicket = "None"
     
        'Récupération du sujet du mail
        strSubject = MyMail.Subject
     
        'Vérification que c'est bien un ticket si # existe dans le sujet
     
        If InStr(1, strSubject, "#") > 0 Then
     
            ' Récupération des 7 chiffres composant le numéro du ticket dasn la variable : strTicket
            strTicket = Mid(strSubject, InStr(1, strSubject, "#"), 8)
     
        End If
     
    '2eme partie pour la recherche
     
        Dim sch As Outlook.search
        Dim rsts As Outlook.Results
        Dim i As Integer
        blnSearchComp = False
        Const strF As String = "urn:schemas:mailheader:subject = strTicket" 'Variable contenant le numéro de ticket
        Const strS As String = "Inbox"
    'La macro crash à la ligne suivante
        Set sch = Application.AdvancedSearch(strS, strF, strTicket)
        While blnSearchComp = False
            DoEvents
        Wend
        Set rsts = sch.Results  'Variable contenant le mail recherché 
     
     
     
    Dim myNameSpace As Outlook.NameSpace
     Dim myInbox As Outlook.folder
     Dim myDestFolder As Outlook.folder
     Dim myItems As Outlook.Items
     Dim myItem As Object
     
     Set myNameSpace = Application.GetNamespace("MAPI")
     Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
     Set myItems = myInbox.Items
     Set myDestFolder = myInbox.folders("GLPI")
     Set myItem = rsts
     While TypeName(myItem) <> "Nothing"
     myItem.Move myDestFolder
     Set myItem = myItems.FindNext
     Wend
     
    Proc_Done:
        Exit Sub
     
    Proc_Error:
        MsgBox "An error has occured in ticket number. Error #" & Err & " - " & Err.Description
        GoTo Proc_Done
    End Sub
    Voici le message d'erreur :

    Nom : Macro.png
Affichages : 431
Taille : 16,1 Ko

    Est-ce que vous avez une idée ?

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2014
    Messages : 35
    Points : 51
    Points
    51
    Par défaut
    Bonjour, pour ta deuxième partie tu pourrais essayer de le faire de cette manière:
    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
     
        Dim myOlApp As Outlook.Application
        Dim myFolder As folder
        Dim myNameSpace As NameSpace
        Dim Mail As Object
        Dim strID As Outlook.MailItem
        Set myOlApp = Outlook.Application
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
        Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
     
        'Boucle sur tous les mail dans la boite de reception
        For Each Mail In myFolder.Items
            'mymail.body si le numéro se trouve dans le corps
            If mymail.subject LIKE strTicket
                 'Ici le traitement ...
            End If
        Next
     
        Set myOlApp = Nothing
        Set myNameSpace = Nothing
        Set myFolder = Nothing

  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
    ton code de recherche est faux regarde celui de l'aide

    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
    Public blnSearchComp As Boolean
    
    Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
    	MsgBox "The AdvancedSearchComplete Event fired."
    	blnSearchComp = True
    End Sub
    
    Sub TestAdvancedSearchComplete()
    	Dim sch As Outlook.Search
    	Dim rsts As Outlook.Results
    	Dim i As Integer
     	blnSearchComp = False
    	Const strF As String = "urn:schemas:mailheader:subject = 'Test'"
    	Const strS As String = "Inbox"   
    	Set sch = Application.AdvancedSearch(strS, strF) 
    	While blnSearchComp = False
    		DoEvents
    	Wend 
    	Set rsts = sch.Results
    	For i = 1 To rsts.Count
    		MsgBox rsts.Item(i).SenderName
    	Next
    End Sub
    de plus ton code suivant est faux aussi ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Const strF As String = "urn:schemas:mailheader:subject = strTicket" 'Variable contenant le numéro de ticket
        Const strS As String = "Inbox"
    'La macro crash à la ligne suivante
        Set sch = Application.AdvancedSearch(strS, strF, strTicket)
    ce serait mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Const strF As String = "urn:schemas:mailheader:subject = '" & strTicket &"'" 'Variable contenant le numéro de ticket
        Const strS As String = "Inbox"
    'La macro crash à la ligne suivante
        Set sch = Application.AdvancedSearch(strS, strF)
    Où peuvent se trouver les mails de type 1 ? uniquement dans inbox , dans un sous dossier ? ailleurs ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Kuchiky, je viens d'essayer avec ton code et j'ai juste changer la ligne de recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Mail.Subject Like ("*" & strTicket & "*") Then
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, Mail.Subject, strTicket) > 0 Then
    Car je n'arrivais pas à trouver la bonne syntaxe ...

    Bref ça marche maintenant, merci.

    Oliv, merci pour la correction mais je vais garder celle de Kuchiky car elle est plus simple à comprendre pour un noob comme moi. D'ailleurs le code que j'avais pris proviens de Microsoft : http://msdn.microsoft.com/fr-fr/libr...ffice.15).aspx

    Je vais mettre cette macro en prod pour vérifier qu'il n'y a pas d'effet de bord.
    Et revenir pour clôturer.

    Merci

  5. #5
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2014
    Messages : 35
    Points : 51
    Points
    51
    Par défaut
    De rien

Discussions similaires

  1. Archivage automatique des mails après modification du sujet
    Par Machine Head dans le forum Thunderbird
    Réponses: 2
    Dernier message: 24/06/2011, 21h13
  2. [Thunderbird] Modification du sujet des mails
    Par podz dans le forum Thunderbird
    Réponses: 7
    Dernier message: 16/03/2010, 17h54
  3. déplacer des fichiers selon leur extension
    Par chicabonux dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 12/10/2009, 16h42
  4. Déplacer automatiquement des mails
    Par oc_alex86 dans le forum VBA Outlook
    Réponses: 13
    Dernier message: 06/11/2007, 11h29
  5. Sujet des mail avec IdPOP31 de indy
    Par Coussati dans le forum Delphi
    Réponses: 8
    Dernier message: 13/07/2006, 15h08

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