Bonjour,

J'essaie de créer une macro sur Outlook qui va m'afficher une page web à chaque email reçu. Je souhaite en fait envoyer les informations d'un email reçu (sujet , expéditeur , destinataire) vers une application serveur qui ne reçoit des paramètres qu'avec une ligne url. Après le serveur transmettra ces ces données dans le dossier client concerné. C'est une application propriétaire , je ne reviens pas dessus car la n'est pas le problème. Je suis donc arrivé depuis Outlook à créer ma ligne url et à l'envoyer sur l'explorateur intégré en utilisant la barre WEB d'Outlook. Voici le programme:

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
Private Sub Application_NewMail()
Dim mesBarres As CommandBars
Dim mabarre As CommandBar
Dim MaBarre2 As CommandBar
Dim lebouton As CommandBarButton
 
Dim oNS         As NameSpace
Dim oFolder     As MAPIFolder
Dim oItem       As Object
Dim oNewMail    As MailItem
Dim ph As String
 
Set oNS = GetNamespace("MAPI")
Set oFolder = oNS.GetDefaultFolder(olFolderInbox)
'Set oNewMail = oFolder.Items.GetLast
 
Set mesBarres = ActiveExplorer.CommandBars
RC = Chr(13) & Chr(10)
 
For Each mabarre In mesBarres ' recherche de la barre WEB
 
If mabarre.NameLocal = "Web" Then
Set MaBarre2 = mabarre
'Barre WEB trouvée !!
End If
Next
 
If MaBarre2 Is Nothing Then
    MsgBox ("Barre WEB non trouvée !")
    Exit Sub
End If
 
X = MaBarre2.Controls.Count
 
        For n = 1 To oFolder.Items.Count
            Set oNewMail = oFolder.Items(n)
            If oNewMail.UnRead = True Then 'Si le message est non lu alors on l'envoi au serveur
 
            With oNewMail
            destinataire = .ReceivedByName
 
            ph = "xxx&xxx&reload=0&objet=instruction&msg=" & "Un email pour " & destinataire & " est arrivé : " & RC & "Sujet = " & .Subject & RC & "Expéditeur = " & .SenderName & RC
            ph = URLEncode(ph, False)
 
            'MsgBox .Subject & " " & .SenderName
            MaBarre2.Controls(X).Text = "http://192.168.1.2/clients?" & ph
            End With
            oNewMail.UnRead = False ' On passe le message en lu           
            For intWait = 1 To 1000000
                DoEvents
            Next
 
            End If
        Next
End Sub
Mon problème est que si il y a plus d'un email non lu je suis obligé d'attendre la fin de chaque envoi de l'url et de son execution par le serveur pour envoyer l'url suivant. La seule solution que j'ai trouvée pour le moment c'est la boucle d'attente avec DoEvents mais le problème c'est que si le serveur est "mou du genou" et met plus de temps que ma boucle le prévoit je risque de zapper un message. Donc l'idéal serait de tester l'objet qui affiche la page pour savoir si elle est arrivée à son terme. Il y a en effet une page d'accusé de réception qui s'affiche à la fin du traitement par le serveur. J'ai cherché mais je n'ai pas trouvé. Si quelqu'un sait comment faire. Merci d'avance.