Outlook en premier plan [Fermé]

Signaler
-
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
-
Bonjour,

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

Configuration: Android / Chrome 81.0.4044.96

18 réponses

Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
bonjour, tu nous permettras de mieux t'aider en nous montrant ton code.
Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
se pourrait-il que ton code VBA fasse repasser Access en avant plan?
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
Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
comment utilises-tu cette fonction? c'est peut-être après l'avoir appelée que Access fait quelque-chose et revient en avant plan.
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
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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
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
Messages postés
15831
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
12 juillet 2021
1 512
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
Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
Je pense que cela ne sert à rien de mettre Outlook en avant plan, car il l'est déjà au moment du .display. Access revient ensuite en avant plan, peut-être suite à une action faite dans la fonction appelante.
Peux-tu partager ton fichier?
Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
As-tu testé la suggestion de RV71 (via un simple bouton)?
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
Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
Peux-tu partager ton fichier?
Bonjour,
Je ne comprends pas ta demande : Peux-tu partager ton fichier?
De quel fichier s'agit il ?
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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 ?
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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
Messages postés
16417
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 juillet 2021
877
j'ai testé avec ton fichier, et le message s'affiche en avant-plan.
j'ai testé avec Outlook déjà ouvert, ou pas: même comportement.
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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 !
J'ai une autre question, avec cette méthode, je peux créer un mail puis l'envoyer, cependant je souhaiterais l'insertion de la signature telle quelle est définie dans Outlook, je n'ai pas trouvé la solution
Merci
Messages postés
15831
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
12 juillet 2021
1 512 > flomen
>
Messages postés
15831
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
12 juillet 2021

Merci, ça fonctionne parfaitement, j'ai pu intégrer un logo (jpg) dans la signature avec du code html
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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+
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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
Effectivement avec cette méthode ça fonctionne, si l'utilisateur envoi plusieurs mails, avec cette méthode, à chaque fois on ouvre une nouvelle sessions Outlook, donc beaucoup de sessions ouvertes !
Merci pour tout le temps
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31 > flomen
Comment cela ?

S'il ferme outook, la session se ferme, no ?

A+
>
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021

Quand je dis plusieurs sessions, ce sont toutes les session ouverte à chaque envoi de mail, peut être peut on fermer la session Outlook que l'on a ouverte ?, le fait d'envoyer le mail, cela ferme la fenêtre du mail mais pas Outlook !
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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...
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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+
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31 > Flomen
Comment cela "il ouvre Outlook même s'il est déjà ouvert" ??

Au contraire, s'il est déjà ouvert il le ferme, c'est bien ce que tu souhaitais ?

Moi cela fonctionne à tous les coups, avec ce code et déjà avec l'autre. Mais avec ce code, ça doit fonctionner tout le temps.

Je ne vois pas ce que tu peux avoir de mieux : outlook en premier plan, et à tous les coups qu'une seule instance outlook ouverte.

A+
>
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021

Ta solution fonctionne, cependant elle ferme toutes les sessions Outlook en cours, si l'utilisateur avait commencé la rédaction d'n Mail ou la réponse à un mail, l'utilisateur perdra tout !
Voici ce que je disais (en 15) :
Quand je dis plusieurs sessions, ce sont toutes les session ouverte à chaque envoi de mail, peut être peut on fermer la session Outlook que l'on a ouverte ?, le fait d'envoyer le mail, cela ferme la fenêtre du mail mais pas Outlook !
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31 > Flomen
Tu penses sincèrement qu'un utilisateur va commencer un mail outlook, le laisser en cours d'écriture, aller sur la base de données, cliquer pour envoyer le mail, réduire Outlook, retourner sur la base, renvoyer un mail, etc ??????????
>
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021

Je vais utiliser ta proposition, cependant je vais mettre un paramétrage qui permettra à l'utilisateur de choisir :
Mettre en 1er plan Outlook par défaut (Ta solution)
Ce qui m'étonne, tu me dis que ça fonctionne à tous le coups dans ton environnement (Win7 et Access 2013), hier j'ai fait un test dans le même environnement que toi, et j'ai aussi le problème !
Il arrive parfois que cela fonctionne ! mais ça ne dur pas ?
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31 > Flomen
Ca ne dure pas ? Tu peux être plus précis stp ?

Ca fonctionne au premier envoi ? C'est à dire qu'à chaque première ouverture de la base ? Ou ça fonctionne au second ?

Peux-tu essayer de trouver un point commun à chaque fois que cela marche et/ou ne marche pas (prends évidemment en compte les autres programmes ouverts).

Je n'arrive pas à reproduire le souci avec ta base.

Pour info environnement en 32bits.

A+
Messages postés
492
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
2 avril 2021
31
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