Outlook en premier plan
RV71 Messages postés 620 Date d'inscription Statut Membre Dernière intervention -
Mon problème:
Via un bouton sous Access, je prépare un mail que j'envoie . display ou par .send en VBA.
Tout fonctionne correctement.
Cependant, Outlook s'ouvre en second plan, l'application Access reste en premier plan !. Je souhaiterais que Outlook passe en premier plan après l'envoi de la commande . display ou .send
Avez vous la solution ?
Merci
18 réponses
Enjeux techniques : l'envoi d'un mail via un bouton Access qui prépare un message avec Outlook en VBA (display ou send), Outlook restant en arrière-plan par rapport à Access.
Plusieurs réponses indiquent d'ajouter un paramètre utilisateur pour mettre Outlook en premier plan par défaut, mais des cas montrent que cela fonctionne parfois et pas durablement.
D'autres évoquent qu'Outlook peut déjà être ouvert et se ferme ou que le focus dépend fortement de l'environnement (Win7, Access 2013), tandis que certains recommandent d'utiliser un bouton séparé ou de partager le fichier.
En cas de besoin, certains indiquent qu'un exemple de code ou un lien de référence peut aider à viser une solution fiable sans modifier l'état du fil.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, tu nous permettras de mieux t'aider en nous montrant ton code. -
Bonjour,
Voici mon code qui fonctionne très bien, cependant je n'arrive pas a mettre Outlook en premier plan !
Merci pour votre aide
Mon Code :
Function EnvViaOutlook(DestMail As String, CCMail As String, SujetMail As String, TxtMail As String, Signature As String, Optional PJ1 As String) As String
Dim OL As Outlook.Application, mi As Outlook.MailItem
On Error GoTo OLMailErr
Set OL = New Outlook.Application
Set mi = OL.CreateItem(olMailItem)
With mi
.To = DestMail
.CC = CCMail
.Subject = SujetMail
.Body = TxtMail
.HTMLBody = "Test <b>Signature<\b>" & "<br>" & .HTMLBody
.Display
End With
Set mi = Nothing: Set OL = Nothing
Exit Function
OLMailErr:
MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description
Exit Function
End Function -
Bonjour,
Dans une fonction, j'appelle cette fonction pour créer un mail puis l'afficher (.Display) afin que l'utilisateur puisse l'adapté.
Tu peux essayer avec le code que j'ai joint
Merci -
Bonjour,
tu peux tester ce code directement dans une sub d'un bouton, pour voir...
Private Sub boutonTest_Click() Dim OL As Outlook.Application, mi As Outlook.MailItem On Error GoTo OLMailErr Set OL = New Outlook.Application Set mi = OL.CreateItem(olMailItem) With mi .To = DestMail .CC = CCMail .Subject = SujetMail .Body = TxtMail .HTMLBody = "Test <b>Signature<\b>" & "<br>" & .HTMLBody .Display End With Set mi = Nothing: Set OL = Nothing Exit Sub OLMailErr: MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description Exit Sub End Sub
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Ta solution ne change rien, c'est exactement le même code avec Function remplacé par SUB
Si tu as Access, tu peux t'en rendre compte en testant ce code, il manque juste la commande pour mettre Outlook en premier plan
Merci-
Bonjour a vous tous,
Je suis cette demande depuis le debut et comme d'autre s'en occupaient, j'ai passe la main momentanement.
flomen:
J'ai teste votre code sur Access et pas de probleme Outlook et bien en premier plan avec .display. Ce qui est normal. Je fait ca couramment, principalement avec Excel pour tester le contenu des @Mail a envoyer, mais ca ne change rien a la chose -
-
-
-
Bonjour,
Que veux tu dire par Un simple bouton ?
Je test avec un bouton dans lequel j'ai mis l'exécution du code sur l’événement clic
Regardes le code est dis-moi ce qu'il faut modifier ou as tu un autre code pour afficher un mail avant de l'envoyer
Merci -
Bonjour,
Je ne comprends pas ta demande : Peux-tu partager ton fichier?
De quel fichier s'agit il ? -
As-tu essayé de mettre le code sur un bouton ?
Car je l'ai fait (sans passer par une fonction) et cela fontionne.
Comme dit yg_be, partage ta base de données (en enlevant les données strictement confidentielles), en utilisant par exemple https://fr.fromsmash.com/
A+ -
Bonjour,
Ca ne fonctionne pas " SUB" et "FUNCTION"
J'ai une mini base 692 K, comment puis-je la partager avec vous ? -
Comme mentionné juste au-dessus (lis) : https://fr.fromsmash.com/ ou vu la petite taille https://www.cjoint.com/
A+ -
Je viens de partager la base Access, voici le lien https://www.cjoint.com/c/JDup5xiHoxP
Merci pour votre aide -
Il y avait plein de références cochées, je les ai enlevées, et ça a l'air d'être OK.
https://www.cjoint.com/c/JDuqHu51InU
A+ -
Merci pour ton aide,
Je viens d'essayer avec la base que tu as corrigée (3 références) malheureusement ça ne fonctionne toujours pas !
Pour information, j'utilise office 2013 et Windows 10
Encore merci, peut être auras tu une autre solution ! -
Bonjour,
sincèrement je sèche, puisque cela fonctionne chez moi (win7 + office 2013 32bits).
Tu peux essayer la base sur une autre machine ??
A+ -
J'ai testé en ouvrant Outlook avant, ça fonctionne aussi, peut-être que du coup cela va fonctionner chez toi.
Par contre, c'est crado, car en cas de changement de version outlook, faudra modifier le vba...
Vois le fichier modifié ici --> https://www.cjoint.com/c/JDvmTYg3xgU -
Vu que la fenêtre Outlook est devant celle de Access, l'utilisateur devra la fermer pour revenir sur Access, à moins qu'il ne la réduise volontairement, mais ce n'est pas le comportement habituel.
Sinon, oui, on peut killer le processus Outlook (s'il existe) avant de déclencher la création du mail... -
Mais cela n'explique pas pourquoi cela ne fonctionne pas sans le shell...
As-tu outlook de défini comme programme par défaut ?
A+-
-
-
-
On ne peut pas savoir dans Access ce que l'utilisateur a fait dans Outlook, donc à quel moment le fermer.
Accèss n'a plus la main quand l'utilisateur écris son message dans Outlook.
Il faut :
1/ vérifier si outlook est ouvert
2/ si ouvert, le fermer
3/ Relancer Outlook avec le code
Mais je reste persuadé que 99% des utilisateurs font fermer Outlook pour revenir à Access... -
Bonjour,
Je suis toujours à la recherche d'une solution,
je ne suis pas le seul à avoir le problème voir :
https://www.commentcamarche.net/forum/affich-34949745-forcer-la-fenetre-d-envoi-outlook-en-premier-plan-access-2013-16
J'ai l'essai sur un autre ordinateur après avoir tout réinstallé Windows 10 et Office 2013, toujours le problème !
La ou j'ai un doute, c'est sur Windows 10 car toi tu me dis que çà fonctionne, la différence c'est toi tu est en Windows 7.
Je vais voir si je peux réinstaller un Windows 7.
Merci
-
-
Bon,
voici le code à mettre sur le bouton :
Private Sub Go_Click() '--- On ferme le Processus Outlook --- Dim ovc As Object Dim sQuery As String Dim oproc Set ovc = GetObject("winmgmts:root\cimv2") sQuery = "select * from win32_process where name='" & "Outlook.EXE" & "'" For Each oproc In ovc.execquery(sQuery) oproc.Terminate Next Set ovc = Nothing ' on relance outlook Dim SessionOutlook Const Chemin As String = "C:\Program Files\Microsoft Office\office15\OUTLOOK.exe" ' ---> tu adaptes ce chemin si c'est nécessaire SessionOutlook = Shell(Chemin, 1) Dim MonOutlook As Outlook.Application Dim MonMessage As Outlook.MailItem On Error GoTo Err_envoyerMail ' ===== Initialisation ===== Set MonOutlook = CreateObject("Outlook.Application") Set MonMessage = MonOutlook.CreateItem(0) ' ===== Création de l'email ===== With MonMessage .To = "menon.florent@gmail.com" .Subject = "Sujet de ce mail" .Body = "Ici le contenu du mail à envoyer" ' Affiche le mail (commenter la ligne pour envoi du mail en tâche de fond) .Display ' Envoie le mail automatiquement (décommenter la ligne pour envoi du mail en tâche de fond) '.Send End With Exit_envoyerMail: Set MonOutlook = Nothing Exit Sub Err_envoyerMail: Select Case Err.Number Case Else MsgBox "Erreur n°" & Err.Number & vbCrLf & "Description : " & Err.Description & vbCrLf & "Source : " & Err.Source, vbCritical, "Erreur" End Select Resume Exit_envoyerMail End Sub