Enkiel a écrit:
le problème c'Est que ca arrive pas tout le temps.... mais ca arrive....
c'est pour ca j'avais pensé leur idée de dire qu'un dll est utilisé qui fait planté le programme ca un peu d'allure...
c'Est 3 ou 4 applications qui roulent parfois en même temps qui utilise MAPI
Dans ce cas là, si tu ne trouves pas la vrai raison de pourquoi MAPI ne se laisse pas instancier à tout coup, tu peux tenter de l'instancier plus d'une fois
Code :
private const TIMEOUT_INSTANCIER as long = 1000
private const DELAI_INSTANCIER as long = 10
' Declare du sleep, je ne m'en souviens pas par coeur
'...
On error resume next
Dim lngInstancier as Long
Set objMapi = createobject("...")
Do while objMapi is Nothing And lngInstancier < TIMEOUT_INSTANCIER
lngInstancier = lngInstancier + DELAI_INSTANCIER
sleep DELAI_INSTANCIER
Set objMapi = createobject("...")
Loop
on error goto 0 ' ou on error goto ton étiquette de traitement d'erreur
If objMapi is Nothing Then
Err.raise ...
End if
Dans ce code tu pourrais mettre un DoEvents juste avant ou après le sleep. Si tu met un delai_instancier très court, tu devrais penser a encapsuler ton DoEvents comme ceci:
Code :
Private Sub DoEvents2()
Static dblI as double
If Timer > dblI + ? Then ' Personellement je met autour de 10ms
dblI = Timer
DoEvents
End If
End Sub
Le code que je donne n'est pas testé (copier-coller risque de ne pas marcher), mais ça donne une idée comment le faire.