XL 2016 code Vba mail depuis excel

  • Initiateur de la discussion Initiateur de la discussion crurik
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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.
 
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)
 
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

'+++++++++++++++++++++++++++++++++++++++
 
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.
 
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?
 
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😉
 
je sais pas à celui qui a pondu le code
getobject + if (ouverture avec shell 😲)si non existant pour finir avec createobject😵🤔🙄🙄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!!
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
643
Réponses
2
Affichages
721
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
796
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
387
Retour