code vba "envoyer recevoir" outlook

andrekn13

XLDnaute Occasionnel
Je cherche à trouver une solution pour , qu'une fois mon mail soit envoyé à partir de mon code excel vba, Outlook se réactive pour faire l'envoi réellement. Car il se loge dans " à envoyer", et Outlook se ferme. je dois donc le réouvrir "manuellement" pour procéder à l' envoi.
j'ai essayé pleins de paramètres dans Outlook, comme "hors connexion" toutes les minutes, mais je pense que lorsqu'il est fermé, rien n'y fait.

Dim X As String
Dim Y As String
Dim Z As String
Dim nomUtilisateur As String
Dim CheminDuFichier As String

X = Range("E45").Value
Y = Range("E11").Value
Z = Range("H17").Value
CheminDuFichier = Z & " - " & Y & " - " & X & " € " & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\" & Environ("username") & "\Desktop\" & CheminDuFichier, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False

Set olApp = CreateObject("Outlook.application")
Set M = olApp.CreateItem(ol_MailItem)
With M
M.To = Range("E19").Value 'le destinataire
M.Subject = " facture"
M.Body = "Bonjour" & vbCr & "Veuillez trouver ci-joint mon offre de prix" & vbCr & " Cordialement " 'texte a rajouter"
M.Attachments.Add "C:\Users\" & Environ("username") & "\Desktop\" & CheminDuFichier
'Set oBjMail = Nothing
.Display
SendKeys "^{ENTER}"
M.send
nomUtilisateur = Application.UserName
Kill "C:\Users\" & nomUtilisateur & "\Desktop\" & CheminDuFichier


Set oBjMail = Nothing
Set olApp = Nothing
'Application.Dialogs(xlDialogSendMail).Show

Normalement, " .Send" doit il l' envoyer même si Outlook se ferme du moment qu'il commence cette tâche et qu'il continue en travail de fond et c'est mon Outlook qui bugg ? ou je doit rajouter une commande pour qu'il l'envoi avant de fermer ?
Si quelqu'un connaît la réponse .... je le remercie par avance.
 

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

pour résumer quelques codes qui pourtant auraient dû "marcher" :
OutlookApp.Visible = 0
OutlookApp.ActiveWindow.WindowState = olMinimized
Call Shell("C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE", vbHide)
With OutlookApp.Visible = False
Application.Wait (Now + TimeValue("0:00:15"))
Shell "OUTLOOK.EXE", vbHide
'vbNormalNoFocus si fermé s'ouvre et à réduire manuellement
'vbMinimizedFocus si outlook déjà ouvert, reste en arrière plan
'vbHide, si outlook déjà ouvert, reste en arrière plan; si fermé s'ouvre et à réduire manuellement
.Display True

La seule voie que Microsoft donne est de créer sur le bureau , un raccourcis, d'aller dans propriété et de choisir l 'ouverture en minimisant. se serait donc de faire appel à ce raccourcis !
ou sinon, serait de faire appel à une macro dans dans Outlook que j'ai essayé et qui fonctionne :

Dim aOutlook As Object
Set aOutlook = GetObject(, "Outlook.Application")
aOutlook.ActiveWindow.WindowState = 1

mais bon, cela me dérange énormément. si faut réinstaller office, ou autre, faut déjà dans Excel faire pas mal de réglages et remettre les références... ça devient une usine à gaz .
incryable cette prise de tête :mad:
 

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

re bonjour à tous
Finalement j'ai une solution qui "marche" avec l'inconvénient, qu'après une dizaine de secondes, j'ai un message d'erreur que la synchro des comptes avec abonnement a échouée. Je ne voit pas le rapport....
La solution consiste à faire " manuellement " la réduction de la fenêtre Outlook , comme Microsoft est très gentil pour le dire, j'ai donc taper pleins de raccourcis jusqu'à trouver mon bonheur...le voici :
Dim X As String
Dim Y As String
Dim Z As String
Dim i
Dim nomUtilisateur As String
Dim CheminDuFichier As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim EMail As String

Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(ol_MailItem)


If OutlookOuvert = False Then i = Shell("Outlook", vbHide) ' de YALOO, suite en bas

Application.SendKeys " ALT + esc " 'raccourcis clavier "réduire"


X = Range("E45").Value
Y = Range("E11").Value
Z = Range("H17").Value
CheminDuFichier = Z & " - " & Y & " - " & X & " € " & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\" & Environ("username") & "\Desktop\" & CheminDuFichier, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False


With OutlookMail
.To = Range("E19").Value 'le destinataire
.Subject = " facture"
.Body = "Bonjour" & vbCr & "Veuillez trouver ci-joint mon offre de prix" & vbCr & " Cordialement " 'texte a rajouter"
.Attachments.Add "C:\Users\" & Environ("username") & "\Desktop\" & CheminDuFichier
.Display
'Application.SendKeys "%S" 'Pour l'instruction SendKeys, % signifie la touche Alt
'% permet donc d'appeler le menu Outlook
'S permet d'éxecuter Send (Envoyer)

Application.SendKeys "F9"
.Send
End With

Set OutlookApp = Nothing
Set OutlookMail = Nothing

nomUtilisateur = Application.UserName
Kill "C:\Users\" & nomUtilisateur & "\Desktop\" & CheminDuFichier
'pour fermer outlook :
'For Each Process In GetObject("winmgmts:").InstancesOf("Win32_process")
'If Process.Name = "OUTLOOK.EXE" Then Process.Terminate
'Next

End Sub
et à la suite de cette macro, évidemment la solution de YALOO donnée plus haut, qui , comme dab, me sauve des situations critiques

Function OutlookOuvert() As Boolean
Dim oOL As Object
On Error Resume Next
Set oOL = GetObject(, "Outlook.Application") 'si (, "Outlook.Application", vbhide ) pb active x, incompatible

On Error GoTo 0
OutlookOuvert = Not (oOL Is Nothing)
Set oOL = Nothing
End Function
 
Dernière édition:

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

Donc si quelqu'un à juste une idée pour parfaire le code, pour ne pas avoir ce message d'erreur, se serait génial.
Si je referme Outlook, et le ré-ouvre, Outlook charge correctement, et tout se passe bien. S'il est déjà ouvert, idem.
J'ai fait SCAN PST et aucun changement.
j'ai pensé, par exemple, que pour ce type d'envoi, il ne faut pas faire de synchro des comptes d'abonnement, au contraire, ça prend beucoup de temps.
J'aurais bien aimé avoir 2 icones dans Outlook," envoyer-recevoir" pour synchroniser indépendamment les 2 comptes (dont un gmail avec synch à faire QUE manuellement)
 

Roland_M

XLDnaute Barbatruc
Re : code vba "envoyer recevoir" outlook

bonjour,

franchement je trouve ce procédé beaucoup trop lourd et trop complexe !
ce qui fait qu'il n'est pas fiable !

pourquoi ne pourrais tu pas tout envoyer dans Outlook et ensuite l'ouvrir pour tout vérifier et envoyer tout !?
ou alors simplement ce que je t'ai proposé qui fonctionne correctement !?

je crois que tu te compliques la vie !
 

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

Bonjour Roland
Question très pertinente
Je me sert d'Outlook depuis très longtemps, en milieu professionnel, ça m'a sauvé plein de fois car j'ai tout sur mon fichier PSt, avec les pièces jointes. je peux même retrouver des docs techniques et devis fournisseurs des clients, c'est incontournable.
Gérer déjà Outlook est déjà lourd, je préfère n'avoir un qu'un seul compte à me concentrer.
mon but, n'est pas seulement pour moi. et je me dis que si les logiciels de compta standard le propose, c'est que c'est faisable
Je garde CDO pour une autre utilisation
 

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

autre réponse :
Quand on a une carte de visite pro, on ne peut se permettre de changer au gré des années les coordonnées, les opérateurs.
J'ai donc choisi de garder mon mail et mes tel quoiqu'il arrive, pourtant gmail est nettement mieux adapté, mais le client aime retrouver son "plombier" même 5 ans après !
 

Yaloo

XLDnaute Barbatruc
Re : code vba "envoyer recevoir" outlook

Bonjour André, Roland_M,

C'est bizarre que .visible = 0 ne fonctionne pas, j'ai essayé avec Word et ça fonctionne très bien :mad:
A André, c'est difficile de s'y retrouver dans tes codes, car avec toutes les lignes que tu laisses, on s'y perd.

A+

Martial
 

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

Bonjour YALOO
voici le fichier épuré de tout et codes bien expliqués
j'ai essayé ton code mais , où je l'ai mal positionné ou je vois pas !
 

Pièces jointes

  • Pour YALOO.xlsm
    39.2 KB · Affichages: 60

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

peut être une piste , j'ai vu souvent la déclaration :
Dim MonOutlook As outlook.Application
'Dim MonMessage As outlook.MailItem
pourtant chez moi erreur "type défini par l'utilisateur non défini"

En fait la question revient à dire, si c'est le code qui bug ou si c'est Outlook
 

Staple1600

XLDnaute Barbatruc
Re : code vba "envoyer recevoir" outlook

Bonsoir à tous

andrekn13
Code:
Dim MonOutlook As outlook.Application
La référence idoine est-elle cochée dans VBE ?
("Microsoft Outlook 15.0 Object Library" )
Selon les version d'Excel, le nombre changera
 
Dernière édition:

andrekn13

XLDnaute Occasionnel
Re : code vba "envoyer recevoir" outlook

Yaloo .....
j'ai essayé ton code mais erreur ...j'ai oublié entre temps
mais stable avec Application.SendKeys "{%}" & "{ESC}"
et j'ai séparer mes 2 comptes pour la synchro, un en manuel (IMAP GMAIL)et l'autre auto ( POP3), et c'est stable
pour ceux qui veulent , voici le fichier
décidément ça a été un long chemin , avec encore des ??? sur certains points, comme celui de Staple avec librairy...
par contre j'avais coché "office 14" , peut être que ça englobe tout ?
 

Pièces jointes

  • mail ok.xlsm
    41.8 KB · Affichages: 61

Discussions similaires

Réponses
2
Affichages
242
Réponses
2
Affichages
118

Statistiques des forums

Discussions
312 240
Messages
2 086 517
Membres
103 239
dernier inscrit
wari