Outlook en premier plan

Flomen -  
RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   -
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

Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. 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.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      se pourrait-il que ton code VBA fasse repasser Access en avant plan?
      0
  2. flomen
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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.
      0
  3. flomen
     
    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
    0
  4. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. flomen
     
    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
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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?
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      As-tu testé la suggestion de RV71 (via un simple bouton)?
      0
  7. flomen
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Peux-tu partager ton fichier?
      0
  8. flomen
     
    Bonjour,
    Je ne comprends pas ta demande : Peux-tu partager ton fichier?
    De quel fichier s'agit il ?
    0
  9. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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+
    0
  10. flomen
     
    Bonjour,
    Ca ne fonctionne pas " SUB" et "FUNCTION"
    J'ai une mini base 692 K, comment puis-je la partager avec vous ?
    0
  11. flomen
     
    Je viens de partager la base Access, voici le lien https://www.cjoint.com/c/JDup5xiHoxP

    Merci pour votre aide
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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.
      0
  12. flomen
     
    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 !
    0
    1. flomen
       
      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
      0
      1. flomen > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci, ça fonctionne parfaitement, j'ai pu intégrer un logo (jpg) dans la signature avec du code html
        0
  13. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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+
    0
  14. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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
    0
    1. flomen
       
      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
      0
      1. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31 > flomen
         
        Comment cela ?

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

        A+
        0
      2. flomen > RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention  
         
        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 !
        0
  15. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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...
    0
  16. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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+
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      chez moi, Outlook n'est pas défini comme programme par défaut pour email, et tout fonctionne bien avec le fichier de départ de flomen.
      0
    2. flomen
       
      Aurais tu le code pour fermer Outlook , ce qui me permettrai d'utiliser ta méthode : Ouverture Outlook avec le code que tu ma donner, envoi du mail et pour terminer fermer Outlook pour éviter d'avoir des sessions d'empilées
      0
    3. flomen > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Non il n'était pas défini par défaut, je l'ai défini par défaut mais çà ne change rien !
      J'ai fait un essai sur un deuxième ordinateur, même problème ! Outlook se cache toujours !
      0
    4. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31 > flomen
       
      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...
      0
    5. Flomen > RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention  
       
      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
      0
  17. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   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
    0