Je vois.
Il faut trouver d'où vient ton processus outlook.
Outlook est bien fermé !
Je vois.
Il faut trouver d'où vient ton processus outlook.
Outlook est bien fermé !
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA
Mes articles
Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Merci pour ton aide, je pense que je vais valider cette solution, et utiliser cette procédure à la fermeture du formulaire qui a permi l'envoi du mail.
sur un site officiel de microsoft j'ai trouvé ça :
voici la page completeÀ cause du complément, il se peut qu'Outlook reste en mémoire après que l'utilisateur l'aura fermé.
Pour plus de détails et pour savoir comment réparer l'assembly généré par TLBIMP, veuillez vous reporter aux articles suivants dans la Base de connaissances de Microsoft :
BUG: InvalidCastException Is Generated When You Try to Sink Outlook Application Events (Q309336) ( )
HOW TO: Build an Office COM Add-in by Using Visual Basic .NET (Q302896) ( )
Je sais pas si c en rapport avec mon probléme mais ça dépasse de loin mais compétence.
Je vais prendre la solution dégradée de "tuer le process par le code"
Pas la bonne méthode de tuer sans savoir.
Tu aurais un complément installé ??
Sans cela, la solution de GetObject devrait te venir en aide.
En effet un peu plus tôt on t'a proposé le CreateObject qui crée un nouvelle instance même si un instance est déjà ouverte, alors que GetObject utilise l'instance ouverte si elle existe.
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA
Mes articles
Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
non j'ai pas de complément installé, j'utilise juste la library outlook 11.0. mais comme il y avait un lien entre les complément et les library, je pensais qu'il y avait un rapport avec le bug énoncé par microsoft.
pour la fonction get, je veux bien testé, mais comment je vois en VB si il existe une instance d'outlook ouverte?
car get doit bien etre utilisé que s'il l'instance existe?
Correct.
Elle apparaît à quel moment ton instance ?
Avant ton code est-elle présente ?
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA
Mes articles
Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Bonjour,
Alors pour rappel, voici le code que j'utilise :
Ainsi, c'est la fonction Outlook_LOGIN() qui me permet d'instancié outlook. Je passe par une fonction car elle m'évite une erreur sur le createitem(0) du message.
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 Option Compare Database Dim oApp As Outlook.Application Sub UseOutlook(body As String, piecejointe As String) 'On Error GoTo MonErreur Dim Message_Outlook As Object Dim myrecordset As DAO.Recordset Dim Body_mail As String Dim ListeDestinataire As String Outlook_LOGIN Set Message_Outlook = oApp.CreateItem(0) Set myrecordset = CurrentDb.OpenRecordset("SELECT Contact_ONP.mail FROM Contact_ONP WHERE (((Contact_ONP.mail) Is Not Null) AND ((Contact_ONP.listediffusion)=-1));") ListeDestinataire = "" Do If ListeDestinataire = "" Then ListeDestinataire = myrecordset.Fields(0).Value Else ListeDestinataire = ListeDestinataire & "; " & myrecordset.Fields(0).Value End If myrecordset.MoveNext Loop While myrecordset.EOF = False myrecordset.Close Message_Outlook.To = ListeDestinataire Message_Outlook.Cc = " destinataire " Message_Outlook.Bcc = " destinataire " Message_Outlook.Subject = "Dorémi - Ajout de rencontre " Body_mail = "Nous vous informons qu'une nouvelle rencontre à été ajoutée dans la base Dorémi." Body_mail = Body_mail & Chr(13) & Chr(10) Body_mail = Body_mail & "Contenu.." Message_Outlook.body = body Message_Outlook.Display 'oApp.Quit Set oApp = Nothing 'MonErreur: 'oApp.Quit 'Set oApp = Nothing End Sub Function Outlook_LOGIN() As Boolean Dim MAILBOX_STATE, Folder On Error GoTo Outlook_Login_Err Set oApp = GetObject(, "Outlook.Application") If oApp Is Nothing Then recup_err: Set oApp = CreateObject("Outlook.Application") Set MAPI = oApp.GetNamespace("MAPI") MAILBOX_STATE = 200 Set Folder = MAPI.GetDefaultFolder(6) Folder.Display End If Exit Function Outlook_Login_Err: If Err.Number <> 0 Then If Err.Number = 429 Then GoTo recup_err End If Exit Function End If End Function
Cette fonction m'a été suggéré par isa911, et elle fonctionne bien pour la création de la nouvelle instance.
A aucun autre moment de mon code je crée une instance ou appel cette fonction.
Aprés, j'ai pas gérer le cas ou l'utilisateur ait déja lancé outlook...Et je suppose que c'est la que tu interviens avec le get.
Je sais pas où ça coince.
Essaie ceci
Chez moi, Outlook s'ouvre et se ferme immédiatement et il ne reste rien.
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 Sub testOutlook() On Error Resume Next Dim oApp As Outlook.Application Set oApp = GetObject(, "Outlook.Application") If Err.Number = 429 Then CreateObject ("Outlook.application") End If Debug.Print Err.Number Debug.Print Err.Description Set oApp = Nothing End Sub
Si outlook est ouvert, l'application est utilisée et aucune nouvelle instance n'est créée.
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA
Mes articles
Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager