XL 2016 code Vba mail depuis excel

crurik

XLDnaute Nouveau
bonjour, mon soucie par rapport a mon code c'est que je suis obligé d’ouvrir outlook manuellement pour que le mail s'envoie car il reste bloquée dans la boite d'envoie si je ne le fait pas. Je tient a précisé que j'ai recherché par mais propre moyen mais je ne trouve pas la solution à mon problème. Merci d'avance pour le coup de main que vous pourriez m'apporter.

je vous laisse le code ici:

Option Explicit

Private Sub CommandButton1_Click()

Dim LeMail As Variant
Dim fichier As String

Set LeMail = CreateObject("Outlook.Application")

With LeMail.CreateItem(olMailItem)
.To = "adresse du destinataire"

fichier = "E:\"

.Attachments.Add fichier

.Display

End With


End Sub
 
Solution
Re


Dans ce cas, publie ta solution ici.
Elle pourrait servir à d'autres membres du forum avec une problématique similaire.
;)
la voici:
VB:
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 = 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

On...

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, crurik

=>crurik
Enrichi (BBcode):
Private Sub CommandButton1_Click()
Dim LeMail As Object
Dim fichier As String
Set LeMail = CreateObject("Outlook.Application")
With LeMail.CreateItem(olMailItem)
.To = "adresse du destinataire"
fichier = "E:\nomfichier.zip"
.Attachments.Add fichier
'.Display
.Send
End With
End Sub
Essaies comme ceci
(en mettant le nom d'un vrai fichier qui existe sur ton lecteur E)
NB: Pour le test, c'est mieux qu'Outlook soit ouvert au préalable.
 

Staple1600

XLDnaute Barbatruc
Re

Je ne vois pas où est le problème
J'utilise tous les jours du code VBA pour envoyer des mails.
Et dans un cadre professionnel, Outlook est ouvert en permanence mais réduit dans la barre des tâches
(ce qui me permet de voir les mails arrivés etc...)
Et comme je l'ai dit, normalement Display et Send ne font pas la même chose (comme leur nom l'indique)
 

crurik

XLDnaute Nouveau
si outlook ouvert en tache de fond oui ça fonctionne mais la je cherche comment ouvrir automatiquement outlook si il n'est pas ouvert. j'ai trouver un debut de solution a ce que je veut mais je n'arrive pas a inserer une piece jointe

VB:
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

'+++++++++++++++++++++++++++++++++++++++
 

crurik

XLDnaute Nouveau
si outlook ouvert en tache de fond oui ça fonctionne mais la je cherche comment ouvrir automatiquement outlook si il n'est pas ouvert. j'ai trouver un debut de solution a ce que je veut mais je n'arrive pas a inserer une piece jointe

VB:
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

'+++++++++++++++++++++++++++++++++++++++
Ce code fait le job: vérifie si Outlook et en fonctionnement en arrière-plan, sinon il ouvre l'appliaction automatiquement.
 

Staple1600

XLDnaute Barbatruc
Re

Ca, j'avais compris
(mais il y a plus simple comme code)
Je voulais juste dire que je suis en week-end.
Donc pas sur mon PC de boulot qui dispose d'Outlook
Sur mon PC perso, pas d'Outlook, donc je ne peux faire de test de code VBA sur Outlook avant lundi.

La seule chose que je peux te suggérer, c'est de tester ceci
VB:
Sub test()
MsgBox ThisWorkbook.Path & "\" & ThisWorkbook.Name
End Sub
pour ton histoire de fichier que tu n'arrives pas à joindre.

Qu'affiche la MsgBox?
Le chemin et le fichier existe bien?
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour à tous
bizarre votre truc là

ma fois à utiliser getobject ,autant l'utiliser comme instance de l'object si il existe pour faire le create mailitem ,etc....

enfin je dis ca moi je dis rien ;)
je ne vois vraiment pas l’intérêt d'avoir outlook d'ouvert et faire un createobject
si tu est obligé de faire cela c'est que tu a un soucis avec la librairie (voir les paramètres eux mêmes de l'application)
vraiment bizarre;)
 

patricktoulon

XLDnaute Barbatruc
je sais pas à celui qui a pondu le code
getobject + if (ouverture avec shell 😲)si non existant pour finir avec createobject😵🤔:rolleyes::rolleyes:en ayant une instance absolument ouverte en dehors du create object

ça se soigne hein !!! 🤣 🤣 🤣 🤣 🤣 🤣
qu'il me dise ou a mal celui là 🤣🤣😁
on la bercé trop fort ou quoi 🤣 🤣
createobject
+
.display 'tu vois l'app
ou
.send' tu vois pas l'app
et c'est tout!!
 

patricktoulon

XLDnaute Barbatruc
a ben moi quand je suis mort de rire je l'exprime 🤣
une autre raison du ridicule de la chose

VB:
'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
 c'est ID = Shell(sNomFichier)

ouais!!! moi j'ai office 15 dommage
 

Discussions similaires

Réponses
2
Affichages
203
Réponses
2
Affichages
111
Réponses
4
Affichages
521

Statistiques des forums

Discussions
312 109
Messages
2 085 384
Membres
102 878
dernier inscrit
asmaa