Forcer l'ouverture de Outlook et le laisser ouvert ?
Bonjour à l'équipe,
Sous Excel2007, je désire envoyer un fichier actif (càd celui qui est ouvert et qui comprend la macro) de 10Mo par mail en utilisant la messagerie Outlook2007
Il semble cependant que Outlook doit être ouvert pour que l'envoi soit bien réalisé, même si la fenêtre de message apparait bien grâce à l'instruction .Display 'Montre la fenêtre d'envoi !?
Est-il alors possible de forcer préalablement l'ouverture de Outlook , si celui-ci n'est pas déjà ouvert, envoyer le fichier,et laisser Outlook ouvert , au moins le temps nécessaire à l'envoi d'un tel long fichier ?
(le fichier annexé est malheureusement plus maigre)
Voici le code utilisé mais qui ne laisse pas Outlook ouvert (je ne suis même pas sûr que outlook s'ouvre effectivement car le fichier reste dans la Outbox), même si je supprime la ligne: ObjOutlook.Quit
Merci
'---------------------------------------------------------------
Sub Send1()
Dim ObjOutlook As New Outlook.Application
Dim oBjMail
Dim Nom_Fichier As String
Set ObjOutlook = New Outlook.Application
Set oBjMail = ObjOutlook.CreateItem(olMailItem)
With oBjMail
.To = "Adresse1@yahoo.fr;Adresse2@yahoo.fr" 'Adresses fictives à remplacer pour le test réel !
.Subject = "Titre/Sujet du Mail"
.Body = "Ici le texte du mail " & Chr(10) & "Ligne 2" & Chr(10) & "Ligne 3"
.Attachments.Add ThisWorkbook.Path & "\" & ThisWorkbook.Name
.Display 'Montre la fenêtre d'envoi
.Send
End With
ObjOutlook.Quit
Set oBjMail = Nothing
Set ObjOutlook = Nothing
End Sub
'-------------------------------------------------------------------------------------
Bonjour,
Pour tester l'ouverture d'Outlook:
Sub TestOutlook()
Dim oOutlook As Object
On Error Resume Next
Set oOutlook = GetObject(, "Outlook.Application")
On Error GoTo 0
If oOutlook Is Nothing Then
MsgBox "Attention, Outlook n'est pas ouvert ... "
Else
Call Send1
End If
End Sub
A+
Bonjour et merci pour votre réponse.
Après maintes recherches, j'avais déjà trouvé ce code de vérification d'ouverture de Outlook et je l'ai intégré au début de ma routine globale.
Pour clôturer ce sujet, l'activation de Outlook, (ou de tout autre exécutable, d'ailleurs), l'objet de ma question initiale, se fait par la commande: ID = Shell(sNomFichier)
Ci-dessous, je vous livre volontiers ma routine complète d'envoi de Mail avec contrôle initial de l'activation de Outlook.
Outlook doit évidemment avoir été paramétré une fois pour toute sur votre PC, pour votre messagerie (POP3, smtp, clés d'accès, ...)
N'oubliez pas d'activer "MS outlook Library" dans les Réferences de votre Editeur VBA !
Pour ma part, j'écris toujours une macro de sauvegarde de mon fichier qui s'active à la fermeture du fichier. (Fermeture obligatoire par icône de sortie et impossibilité de fermer Excel sans passer par cette icône !)
Dans le cas où mon fichier doit aussi être envoyé à un destinataire (Webmaster, Responsable...) j'ai donc finalisé ma routine d'envoi de mail:
'++++++++++++++++++++++++++++++++++++++++
Function ExistenceFichier(sFichier As String) As Boolean
ExistenceFichier = Dir(sFichier) <> ""
End Function
'-------------------------------
Sub EnvoiMail()
Dim objMail As Outlook.MailItem
Dim outapp As Outlook.Application
Set outapp = New Outlook.Application
Dim X As Object
Dim sNomFichier As String
'sNomFichier = "C:\Program Files\Microsoft Office\Office12\OUTLOOK.EXE" 'si le programme n'est destiné qu'à votre seul PC vous pouvez écrire ici le chemin exact de votre Outlook.exe, sinon écrivez:
sNomFichier = Sheets("Config").Range("L11").Value
‘Le chemin de Outlook.exe sera alors indiqué en case L11, dans un onglet nommé “Config” car il diffère effectivement en fonction de la version de votre 'Office, ... Chaque utilisateur pourra donc écrire dans cet onglet de configuration le chemin de leur Outlook.exe
' Test activation OUTLOOK
On Error Resume Next
MsgBox "Je vérifie si Outlook est activé ..."
' On vérifie si Outlook est fermé
Set X = GetObject(, "Outlook.application")
If Err.Number <> 0 Then 'Si<>0 alors Outlook est fermé
MsgBox "Microsoft Outlook est fermé !" & Chr(10) & Chr(10) & "Je vais donc lancer Outlook en tâche de fond ..."
'Test de l'adresse chemin de Outlook.exe
If ExistenceFichier(sNomFichier) Then
MsgBox "Je vais rechercher Outlook sur votre PC ..."
ID = Shell(sNomFichier)
Else
MsgBox "Je ne reconnais pas l'adresse de OUTLOOK.exe sur votre PC (A préciser dans l'onglet Config) !" & Chr(10) & Chr(10) & "Le fichier se trouve cependant bien envoyé dans la Outbox de Outlook ..." & Chr(10) & Chr(10) & "Il faudra donc lancer manuellement Outlook pour que le fichier soit envoyé !"
End If
Else
MsgBox "Outlook est déja ouvert ..."
End If
'Création instance Outlook
Set outapp = New Outlook.Application
Dim olExplorer As Outlook.Explorer
' Création objet Mail
Set objMail = outapp.CreateItem(olMailItem)
'Création Object
Dim mpf As Outlook.MAPIFolder
'Format Mail Texte
objMail.BodyFormat = olFormatRichText
'Affiche le mail dans Outlook. Sans cette ligne la fenêtre n’est pas visible
objMail.Display
'Sujet du mail
objMail.Subject = " Votre titre sujet ………………."
'Corps du message
objMail.Body = "---> Ligne1 Blala bla..." & Chr(10) & " " & Chr(10) & " Ligne2 …" & Chr(10) & " " & Chr(10) & "Ligne3 …" & Chr(10) & Chr(10) & " Signature …" & Chr(10) & "Ligne finale …"
'Destinataire(s) principaux du message
objMail.To = "AdressePrincipale1@yahoo.fr;AdressePrincipale2@alpmn.be"
objMail.Attachments.Add ThisWorkbook.Path & "\" & ThisWorkbook.Name
'Destinataires en Copie ou en copie cachée
objMail.CC = "Adresse CCopie1@gmail.com"
objMail.BCC= «Adresse BCCopie2@swing.be»
'Si vous souhaitez forcer l’envoi directement depuis le code VBA, sans laisser le temps à l’utilisateur de relire le mail il vous suffit de faire appel à :
objMail.Send '--->Envoi direct dans la Outbox
Set outapp = Nothing
Set objMail = Nothing
AppActivate (sNomFichier) ' Remise du fichier Excel en avant plan
End Sub
'+++++++++++++++++++++++++++++++++++++++++++++++++