Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

code pour savoir si outook express est ouvert

10 réponses
Avatar
pirot
Bonjour,
en vba excel bien s=FBr ...
Mon code envoi des courrriers avec outlook express (avec image dans le
texte), en nombre.
J'envoie des paquets de 20 adresses en copie cach=E9e:
outlook express s'ouvre, int=E8gre les adresses, le message, l'image,
envoie le courrier, puis se ferme.
(si tout se passe bien ....)
squelette du code:
for paquet =3D1 to max
envoimail (avec les param=E8tres)
next i
cela fonctionne tr=E8s bien, sauf si outlook express =E9choue (par exemple
pas de connexion internet)
dans ce cas, outlook reste ouvert sur la fen=EAtre d'erreur d'envoi.
et ensuite, c'est la cata avec vba.
Question:
comment savoir en VBA qu'outlook express est ouvert ?
(cela voudrait dire que la boucle doit s'arr=EAter, et informer
l'utilisateur que l'envoi a =E9chou=E9
=E0 l'envoi du paquet n=B0 i.
merci de vos r=E9ponses
pierreL.

10 réponses

Avatar
FFO
Salut à toi

Mets ces lignes :

Set Appli = CreateObject("Outlook.Application")
If Appli.Explorers.Count > 0 Then

Ainsi :

Set Appli = CreateObject("Outlook.Application")
for paquet =1 to max
If Appli.Explorers.Count > 0 Then
Msgbox("Echec de transmission")
Exit For
End If
envoimail (avec les paramètres)
next i

En espérant que l'application Outlook ait le temps de se refermer avant
l'analyse de son ouverture à la boucle suivante
Si tel n'est pas le cas il faudra rajouter un tempo :

Application.Wait (Now + TimeValue("0:00:01")) pour 1 secondes

ainsi :

Set Appli = CreateObject("Outlook.Application")
for paquet =1 to max
If Appli.Explorers.Count > 0 Then
Msgbox("Echec de transmission")
Exit For
End If
envoimail (avec les paramètres)
Application.Wait (Now + TimeValue("0:00:01"))
next i

Soit scinder en 2 le code

Sub Vérification ()
Set Appli = CreateObject("Outlook.Application")
for paquet =1 to max
If Appli.Explorers.Count > 0 Then
Msgbox("Echec de transmission")
Exit For
End If
Call Envoi
next i
End Sub

Sub Envoi ()
envoimail (avec les paramètres)
End Sub

Celà devrait faire

Dis moi !!!!!
Avatar
pirot
Bonjour,
Merci à FFO pour cette réponse rapide
j'ai testé, malheur !!! cela ne fonctionne pas car :
**************************************************************
la ligne:
Set Appli = CreateObject("Outlook.Application") semble voir
outlook mais pas outlook express
puis:
If Appli.Explorers.Count > 0 Then
**************************************************************
Appli.Explorers.Count retourne 0 si outlook express est ouvert
mais retourne 1 si Outlook2003 est ouvert.
Or, j'utilise outlook express 6 (j'ai essayé de mettre outlook
express, ou msimn, mais erreur 429 à l'éxécution
Question: quelle est le nom à mettre en paramètres pour que outlook
express soit "vu" ? dans createobjet(" ????.application")
sinon, c'est vraiment ce que je cherche (j'ai une tempo de 1 minute en
2 envois, pour laisser à oe le temps de se fermer)
si tu as une solution ...
@+
pierreL.
Avatar
michdenis
Bonjour,

Pas tester, je n'ai plus Outlook Express...

'------------------------------------
Sub test()

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'msimn.exe'")
For Each objProcess In colProcessList
MsgBox "Une erreur est survenue. Publication annulée."
'Si tu désires fermer l'exécutable...
'Enlève l'apostrophe devant la ligne suivante :
'objProcess.Terminate
Next

End Sub
'------------------------------------



"pirot" a écrit dans le message de groupe de discussion :

Bonjour,
en vba excel bien sûr ...
Mon code envoi des courrriers avec outlook express (avec image dans le
texte), en nombre.
J'envoie des paquets de 20 adresses en copie cachée:
outlook express s'ouvre, intègre les adresses, le message, l'image,
envoie le courrier, puis se ferme.
(si tout se passe bien ....)
squelette du code:
for paquet =1 to max
envoimail (avec les paramètres)
next i
cela fonctionne très bien, sauf si outlook express échoue (par exemple
pas de connexion internet)
dans ce cas, outlook reste ouvert sur la fenêtre d'erreur d'envoi.
et ensuite, c'est la cata avec vba.
Question:
comment savoir en VBA qu'outlook express est ouvert ?
(cela voudrait dire que la boucle doit s'arrêter, et informer
l'utilisateur que l'envoi a échoué
à l'envoi du paquet n° i.
merci de vos réponses
pierreL.
Avatar
FFO
Rebonjour à toi

Remplaces la ligne

Set Appli = CreateObject("Outlook.Application")

par

Set Appli = New Outlook.Application

et coches la référence Microsoft Outlook 11.0 Object Library

Refais des essais et dis moi !!!!!
Avatar
pirot
Bonjour et ......Merci à Michdenis !!!

tout fonctionne parfaitement:
- message affiché si outlook express est ouvert
- et oe fermé avec la ligne
objProcess.Terminate
-------------------------------------------------------------------------
D'autant plus intéressant que cela permet de tester et/ou fermer
n'importe quel service à condition d'en connaître le nom.
(j'ai testé avec plein d'applications !)
je le dis tout haut: MERCI !!!
@+
pierreL
Avatar
pirot
Rebonjour à FFO,

j'ai essayé ta proposition,
en mettant
Set Appli = New Outlook.Application
mais
Appli.Explorers.Count
reste à 0 avec outlook express
et a pour valeur 1 si outlook 2003 est ouvert.
il y sans doute le nom dans setAppl qui n'est pas bon.

Mais Michdenis a donné une solution plus générale, que je vais
utiliser
(et garder au frigo pour utilisation ultérieure)
Merci beaucoup pour vos réponses !
toujours aussi génial ce groupe !
cela me réchauffe un peu (10 cm de neige fraîche en 2 heures ce
matin )
Pierre L.
Avatar
Hervé
Bonjour Pierre,

Et si tu commençais d'abords par un test de connexion à internet ? ensuite,
tu recherche si Outlook Express est ouvert. A mettre dans un module standard
et lancer la proc "Test". 1 boîte de message te diras si tu es connecté et
une autre te diras si Outlook Express est ouvert. Adapte ces 2 tests dans ta
proc :

'Api
Public Declare Function RecupTitre _
Lib "user32" _
Alias "GetWindowTextA" ( _
ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long

Public Declare Function EnumFenetres _
Lib "user32" _
Alias "EnumWindows" ( _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long

Public Declare Function InternetGetConnectedState _
Lib "wininet.dll" ( _
ByRef lpdwFlags As Long, _
ByVal dwReserved As Long) As Long

Dim Ouvert As String

'teste si connexion à internet
Function TestDeConnexion() As Boolean

TestDeConnexion = InternetGetConnectedState(0&, 0&)

End Function

'cherche dans le titre des fenêtres si "Outlook Express"
Public Function Outlook_Express(ByVal hWnd As Long, _
ByVal lgParam As Long) As Long
Dim Buffer As String
Dim Result As Long

Buffer = Space(255)
Result = RecupTitre(hWnd, Buffer, 255)

If Left(Buffer, 1) <> Chr(0) Then
If InStr(Trim(Buffer), "Outlook Express") <> 0 Then
Ouvert = "Outlook est ouvert !"
Exit Function
End If
End If

Outlook_Express = 1

End Function

'proc de test, à adapter les lignes dans ton code
Sub Test()

Dim lResult As Long

If TestDeConnexion Then
MsgBox "Vous êtes connecté à Internet", vbInformation
Else
MsgBox "Vous n'êtes pas connecté à Internet", vbInformation
End If

lResult = EnumFenetres(AddressOf Outlook_Express, 0&)

MsgBox Ouvert

End Sub


Hervé.


"pirot" a écrit dans le message de
news:
Bonjour,
en vba excel bien sûr ...
Mon code envoi des courrriers avec outlook express (avec image dans le
texte), en nombre.
J'envoie des paquets de 20 adresses en copie cachée:
outlook express s'ouvre, intègre les adresses, le message, l'image,
envoie le courrier, puis se ferme.
(si tout se passe bien ....)
squelette du code:
for paquet =1 to max
envoimail (avec les paramètres)
next i
cela fonctionne très bien, sauf si outlook express échoue (par exemple
pas de connexion internet)
dans ce cas, outlook reste ouvert sur la fenêtre d'erreur d'envoi.
et ensuite, c'est la cata avec vba.
Question:
comment savoir en VBA qu'outlook express est ouvert ?
(cela voudrait dire que la boucle doit s'arrêter, et informer
l'utilisateur que l'envoi a échoué
à l'envoi du paquet n° i.
merci de vos réponses
pierreL.
Avatar
michdenis
Bonjour,

J'ai essayé ta proposition. Je n'utilise pas Outlook Express,
mais "Windows Live Mail".

Sans rien modifier à ta procédure, on me dit qu'Outlook
Outlook Ext ouvert.

Dans la fonction "Outlook_Express", le buffer indique
une application au nom de "Outlook Express NewStores...."
Tu sais à quoi il fait référence ? Je n'ai.ien qui porte ce
nom dans les processus ouverts dans le gestionnaire de tâches.

Salutations.




"Hervé" a écrit dans le message de groupe de discussion :

Bonjour Pierre,

Et si tu commençais d'abords par un test de connexion à internet ? ensuite,
tu recherche si Outlook Express est ouvert. A mettre dans un module standard
et lancer la proc "Test". 1 boîte de message te diras si tu es connecté et
une autre te diras si Outlook Express est ouvert. Adapte ces 2 tests dans ta
proc :

'Api
Public Declare Function RecupTitre _
Lib "user32" _
Alias "GetWindowTextA" ( _
ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long

Public Declare Function EnumFenetres _
Lib "user32" _
Alias "EnumWindows" ( _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long

Public Declare Function InternetGetConnectedState _
Lib "wininet.dll" ( _
ByRef lpdwFlags As Long, _
ByVal dwReserved As Long) As Long

Dim Ouvert As String

'teste si connexion à internet
Function TestDeConnexion() As Boolean

TestDeConnexion = InternetGetConnectedState(0&, 0&)

End Function

'cherche dans le titre des fenêtres si "Outlook Express"
Public Function Outlook_Express(ByVal hWnd As Long, _
ByVal lgParam As Long) As Long
Dim Buffer As String
Dim Result As Long

Buffer = Space(255)
Result = RecupTitre(hWnd, Buffer, 255)

If Left(Buffer, 1) <> Chr(0) Then
If InStr(Trim(Buffer), "Outlook Express") <> 0 Then
Ouvert = "Outlook est ouvert !"
Exit Function
End If
End If

Outlook_Express = 1

End Function

'proc de test, à adapter les lignes dans ton code
Sub Test()

Dim lResult As Long

If TestDeConnexion Then
MsgBox "Vous êtes connecté à Internet", vbInformation
Else
MsgBox "Vous n'êtes pas connecté à Internet", vbInformation
End If

lResult = EnumFenetres(AddressOf Outlook_Express, 0&)

MsgBox Ouvert

End Sub


Hervé.


"pirot" a écrit dans le message de
news:
Bonjour,
en vba excel bien sûr ...
Mon code envoi des courrriers avec outlook express (avec image dans le
texte), en nombre.
J'envoie des paquets de 20 adresses en copie cachée:
outlook express s'ouvre, intègre les adresses, le message, l'image,
envoie le courrier, puis se ferme.
(si tout se passe bien ....)
squelette du code:
for paquet =1 to max
envoimail (avec les paramètres)
next i
cela fonctionne très bien, sauf si outlook express échoue (par exemple
pas de connexion internet)
dans ce cas, outlook reste ouvert sur la fenêtre d'erreur d'envoi.
et ensuite, c'est la cata avec vba.
Question:
comment savoir en VBA qu'outlook express est ouvert ?
(cela voudrait dire que la boucle doit s'arrêter, et informer
l'utilisateur que l'envoi a échoué
à l'envoi du paquet n° i.
merci de vos réponses
pierreL.
Avatar
Hervé
Bonjour Denis,

J'utilise seulement Windows Mail (qui est Outlook Express) avec Windows 7
(installé par la suite car pas disponible dans W. 7) c'est pour cela que
j'ai proposé cette proc à Pierre (puisqu'il utilise OE) car après plusieurs
tests (fermetures et ouvertures d'Outlook Express) cela fonctionne bien chez
moi, il me retourne bien si OE est ouvert ou non.
A priori, il y à un lien avec Windows Live Mail et Outlook Express (Windows
Mail depuis Vista) mais je ne peux pas t'en dire plus car je ne sais pas, le
coeur du logiciel réutilisé peut être ? Chez moi il me retourne ces trois
références à OE en plus de Windows Mail :
Outlook Express FolderSync Window Class
Outlook Express NewsStore
Outlook Express Community Manager

Hervé.



"michdenis" a écrit dans le message de
news:
Bonjour,

J'ai essayé ta proposition. Je n'utilise pas Outlook Express,
mais "Windows Live Mail".

Sans rien modifier à ta procédure, on me dit qu'Outlook
Outlook Ext ouvert.

Dans la fonction "Outlook_Express", le buffer indique
une application au nom de "Outlook Express NewStores...."
Tu sais à quoi il fait référence ? Je n'ai.ien qui porte ce
nom dans les processus ouverts dans le gestionnaire de tâches.

Salutations.




"Hervé" a écrit dans le message de groupe de
discussion :

Bonjour Pierre,

Et si tu commençais d'abords par un test de connexion à internet ?
ensuite,
tu recherche si Outlook Express est ouvert. A mettre dans un module
standard
et lancer la proc "Test". 1 boîte de message te diras si tu es connecté et
une autre te diras si Outlook Express est ouvert. Adapte ces 2 tests dans
ta
proc :

'Api
Public Declare Function RecupTitre _
Lib "user32" _
Alias "GetWindowTextA" ( _
ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long

Public Declare Function EnumFenetres _
Lib "user32" _
Alias "EnumWindows" ( _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long

Public Declare Function InternetGetConnectedState _
Lib "wininet.dll" ( _
ByRef lpdwFlags As Long, _
ByVal dwReserved As Long) As Long

Dim Ouvert As String

'teste si connexion à internet
Function TestDeConnexion() As Boolean

TestDeConnexion = InternetGetConnectedState(0&, 0&)

End Function

'cherche dans le titre des fenêtres si "Outlook Express"
Public Function Outlook_Express(ByVal hWnd As Long, _
ByVal lgParam As Long) As Long
Dim Buffer As String
Dim Result As Long

Buffer = Space(255)
Result = RecupTitre(hWnd, Buffer, 255)

If Left(Buffer, 1) <> Chr(0) Then
If InStr(Trim(Buffer), "Outlook Express") <> 0 Then
Ouvert = "Outlook est ouvert !"
Exit Function
End If
End If

Outlook_Express = 1

End Function

'proc de test, à adapter les lignes dans ton code
Sub Test()

Dim lResult As Long

If TestDeConnexion Then
MsgBox "Vous êtes connecté à Internet", vbInformation
Else
MsgBox "Vous n'êtes pas connecté à Internet", vbInformation
End If

lResult = EnumFenetres(AddressOf Outlook_Express, 0&)

MsgBox Ouvert

End Sub


Hervé.


"pirot" a écrit dans le message de
news:
Bonjour,
en vba excel bien sûr ...
Mon code envoi des courrriers avec outlook express (avec image dans le
texte), en nombre.
J'envoie des paquets de 20 adresses en copie cachée:
outlook express s'ouvre, intègre les adresses, le message, l'image,
envoie le courrier, puis se ferme.
(si tout se passe bien ....)
squelette du code:
for paquet =1 to max
envoimail (avec les paramètres)
next i
cela fonctionne très bien, sauf si outlook express échoue (par exemple
pas de connexion internet)
dans ce cas, outlook reste ouvert sur la fenêtre d'erreur d'envoi.
et ensuite, c'est la cata avec vba.
Question:
comment savoir en VBA qu'outlook express est ouvert ?
(cela voudrait dire que la boucle doit s'arrêter, et informer
l'utilisateur que l'envoi a échoué
à l'envoi du paquet n° i.
merci de vos réponses
pierreL.



Avatar
michdenis
Merci pour ton commentaire.


"Hervé" a écrit dans le message de groupe de discussion :

Bonjour Denis,

J'utilise seulement Windows Mail (qui est Outlook Express) avec Windows 7
(installé par la suite car pas disponible dans W. 7) c'est pour cela que
j'ai proposé cette proc à Pierre (puisqu'il utilise OE) car après plusieurs
tests (fermetures et ouvertures d'Outlook Express) cela fonctionne bien chez
moi, il me retourne bien si OE est ouvert ou non.
A priori, il y à un lien avec Windows Live Mail et Outlook Express (Windows
Mail depuis Vista) mais je ne peux pas t'en dire plus car je ne sais pas, le
coeur du logiciel réutilisé peut être ? Chez moi il me retourne ces trois
références à OE en plus de Windows Mail :
Outlook Express FolderSync Window Class
Outlook Express NewsStore
Outlook Express Community Manager

Hervé.



"michdenis" a écrit dans le message de
news:
Bonjour,

J'ai essayé ta proposition. Je n'utilise pas Outlook Express,
mais "Windows Live Mail".

Sans rien modifier à ta procédure, on me dit qu'Outlook
Outlook Ext ouvert.

Dans la fonction "Outlook_Express", le buffer indique
une application au nom de "Outlook Express NewStores...."
Tu sais à quoi il fait référence ? Je n'ai.ien qui porte ce
nom dans les processus ouverts dans le gestionnaire de tâches.

Salutations.




"Hervé" a écrit dans le message de groupe de
discussion :

Bonjour Pierre,

Et si tu commençais d'abords par un test de connexion à internet ?
ensuite,
tu recherche si Outlook Express est ouvert. A mettre dans un module
standard
et lancer la proc "Test". 1 boîte de message te diras si tu es connecté et
une autre te diras si Outlook Express est ouvert. Adapte ces 2 tests dans
ta
proc :

'Api
Public Declare Function RecupTitre _
Lib "user32" _
Alias "GetWindowTextA" ( _
ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long

Public Declare Function EnumFenetres _
Lib "user32" _
Alias "EnumWindows" ( _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long

Public Declare Function InternetGetConnectedState _
Lib "wininet.dll" ( _
ByRef lpdwFlags As Long, _
ByVal dwReserved As Long) As Long

Dim Ouvert As String

'teste si connexion à internet
Function TestDeConnexion() As Boolean

TestDeConnexion = InternetGetConnectedState(0&, 0&)

End Function

'cherche dans le titre des fenêtres si "Outlook Express"
Public Function Outlook_Express(ByVal hWnd As Long, _
ByVal lgParam As Long) As Long
Dim Buffer As String
Dim Result As Long

Buffer = Space(255)
Result = RecupTitre(hWnd, Buffer, 255)

If Left(Buffer, 1) <> Chr(0) Then
If InStr(Trim(Buffer), "Outlook Express") <> 0 Then
Ouvert = "Outlook est ouvert !"
Exit Function
End If
End If

Outlook_Express = 1

End Function

'proc de test, à adapter les lignes dans ton code
Sub Test()

Dim lResult As Long

If TestDeConnexion Then
MsgBox "Vous êtes connecté à Internet", vbInformation
Else
MsgBox "Vous n'êtes pas connecté à Internet", vbInformation
End If

lResult = EnumFenetres(AddressOf Outlook_Express, 0&)

MsgBox Ouvert

End Sub


Hervé.


"pirot" a écrit dans le message de
news:
Bonjour,
en vba excel bien sûr ...
Mon code envoi des courrriers avec outlook express (avec image dans le
texte), en nombre.
J'envoie des paquets de 20 adresses en copie cachée:
outlook express s'ouvre, intègre les adresses, le message, l'image,
envoie le courrier, puis se ferme.
(si tout se passe bien ....)
squelette du code:
for paquet =1 to max
envoimail (avec les paramètres)
next i
cela fonctionne très bien, sauf si outlook express échoue (par exemple
pas de connexion internet)
dans ce cas, outlook reste ouvert sur la fenêtre d'erreur d'envoi.
et ensuite, c'est la cata avec vba.
Question:
comment savoir en VBA qu'outlook express est ouvert ?
(cela voudrait dire que la boucle doit s'arrêter, et informer
l'utilisateur que l'envoi a échoué
à l'envoi du paquet n° i.
merci de vos réponses
pierreL.