Forcer la fenetre d'envoi outlook en premier plan Access 2013/16

Résolu/Fermé
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 - Modifié le 24 oct. 2017 à 08:34
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 - 28 oct. 2017 à 05:44
Bonjour,

Contexte : Macro qui prépare un mail avec pièce jointe.


Une fois mon mail préparé la fenêtre de la boite d'envoi d'outlook a tendance à rester derrière le formulaire de l'utilisateur de la base de donnée Access. j'ai essayé systemmodal mais je n'ai rien trouvé pour forcer la fenêtre outlook à revenir en premier plan

Mon bout de code final

' Initialisation :
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)


' Préparation du message :
MonMessage.To = "xxxxxx.fr"
MonMessage.CC = "xxxxxx.fr"

' Récupération de la chaîne d'E-Mails Access :
MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de Production Courrier Industriel"
MonMessage.HTMLBody = corps

' Ajout de la signature
MonMessage.HTMLBody = MonMessage.HTMLBody & "<br/>" & "<br>" & Signature("Signature")

' Ajout des pièces jointes
MonMessage.Attachments.Add cheminfichier
MonMessage.Attachments.Add cheminfichier2
MonMessage.Attachments.Add cheminfichier3
MonMessage.display vbSystemModal

' supprimer le fichier pdf après envoi du message
Kill (cheminfichier)
Kill (cheminfichier2)
Kill (cheminfichier3)

Case vbNo

' procédure si click sur Non
End Select
End Sub

3 réponses

Utilisateur anonyme
26 oct. 2017 à 02:47
Bonjour,

testes ceci :
Set OLk_appli = GetObject( "Outlook.Application") 
If OLk_Appli Is Nothing Then 
OLk_OK= Shell("C:\Program Files\Microsoft Office\Office10\OUTLOOK.EXE", 1) 
end if  


a+
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
Modifié le 26 oct. 2017 à 11:33
Bonjour HDU,

Ca fonctionne presque, j'ai un message d'erreur qui s'affiche derrière la fenetre du mail Outlook, je pense que je n'ai pas placé le code au bon endroit,

Je remet mon code au cas ou si tu peux me dire exactement ou le placer, sinon je vais essayer de moi même de le placer différement.

Le code complet :

Public sngDimLab As Single
Public sngTexec As Single
Public i As Long

Sub BILAN_RT_LD()

Dim Rep As Integer

Rep = MsgBox("Vous allez charger et envoyer le bilan de la journée de production du :" & Chr(13) & Chr(13) & " " & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & Chr(13) & Chr(13) & "Merci de patientez jusqu'à la fin du chargement.", vbYesNo + vbQuestion + vbSystemModal, "Aperçu Bilan Lettre Départ")
If Rep = vbNo Then
Else

sngTexec = 0

With UserFormLD
sngDimLab = .Label1.Width * 1 / 3 '<-- 3 = le nombre de procédure
.Label1.Width = 0
.Show 0

End With

'exécution procédure 1
Proc1
USF

'exécution procédure 2
Proc2
USF

'exécution procédure 3
Proc3
USF

Unload UserFormLD
MsgBox "Chargements des données vers Outlook terminé.", vbOKOnly + vbInformation, "Organisation et Process - VLG PIC 92"


End If

End Sub

Private Sub USF()
sngTexec = sngTexec + sngDimLab
UserFormLD.Label1.Width = sngTexec
UserFormLD.Repaint
End Sub

Private Sub Proc1()
For i = 1 To 2000 'pour simuler le temps d'exécution de la procédure
Next
' nom du fichier pdf temporaire
cheminfichier = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\E72_BILAN_LD_Rech.pdf"
' création du fichier pdf
DoCmd.OutputTo acOutputReport, "E72_BILAN_LD_Rech", acFormatPDF, cheminfichier
End Sub
Private Sub Proc2()
For i = 1 To 2000 'pour simuler le temps d'exécution de la procédure
Next
' nom du fichier pdf temporaire
cheminfichier2 = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\B72_RETARD_BILAN_LD_Rech.pdf"
' création du fichier pdf
DoCmd.OutputTo acOutputReport, "B72_RETARD_BILAN_LD_Rech", acFormatPDF, cheminfichier2
End Sub

Private Sub Proc3()
For i = 1 To 2000 'pour simuler le temps d'exécution de la procédure
Next
' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LD")
ListeEMail.MoveFirst
ListeComplete = ""

' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend

' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)

' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)

' nom du fichier pdf temporaire
cheminfichier = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\E72_BILAN_LD_Rech.pdf"
cheminfichier2 = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\B72_RETARD_BILAN_LD_Rech.pdf"

' Préparation du message :
MonMessage.To = "orga.pic-villeneuve@laposte.fr"
MonMessage.CC = "orga.pic-villeneuve@laposte.fr"

' Récupération de la chaîne d'E-Mails Access :
MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de Production Lettre Départ"
MonMessage.HTMLBody = corps

' Ajout de la signature
MonMessage.HTMLBody = MonMessage.HTMLBody & "<br/>" & "<br>" & Signature("Signature")

' Ajout des pièces jointes
MonMessage.Attachments.Add cheminfichier
MonMessage.Attachments.Add cheminfichier2
MonMessage.display vbSystemModal = False

Set OLk_appli = GetObject( "Outlook.Application")
If OLk_Appli Is Nothing Then
OLk_OK= Shell("C:\Program Files\Microsoft Office\Office10\OUTLOOK.EXE", 1)
end if


' supprimer le fichier pdf après envoi du message
Kill (cheminfichier)
Kill (cheminfichier2)

End Sub
Private Function Signature(nom_signature As String) As String
Dim FSO As Object, TextStream As Object
Dim nom_fichier As String

Signature = Empty
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
nom_fichier = Environ("APPDATA") & "\Microsoft\Signatures\" & nom_signature & ".htm"
Set TextStream = FSO.OpenTextFile(nom_fichier)
If Err.Num = 0 Then
Signature = TextStream.ReadAll
'remplacement adresse relative images par adresse absolue
Signature = Replace(Signature, nom_signature & "_files/", Environ("APPDATA") & "\Microsoft\Signatures\" & nom_signature & "_files/")
Signature = Replace(Signature, nom_signature & "_fichiers/", Environ("APPDATA") & "\Microsoft\Signatures\" & nom_signature & "_fichiers/")
End If
End Function
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 > AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
26 oct. 2017 à 17:22
J'ai placé le code comme ceci par contre j'ai une erreur d'execution, j'ai changé GetObject par CreateObject et ajouté la ligne Dim OLk_Appli As Object et je n'ai plus de message d'erreur.



' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


 ' Initialisation :
Dim MonOutlook As Object
Dim MonMessage As Object
Dim OLk_Appli As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)
Set OLk_Appli = CreateObject("Outlook.Application")

' nom du fichier pdf temporaire
cheminfichier = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\E72_BILAN_LD_Rech.pdf"
cheminfichier2 = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\B72_RETARD_BILAN_LD_Rech.pdf"

' Préparation du message :
MonMessage.To = "orga.pic-villeneuve@laposte.fr"
MonMessage.CC = "orga.pic-villeneuve@laposte.fr"

' Récupération de la chaîne d'E-Mails Access :
MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de Production Lettre Départ"
MonMessage.HTMLBody = corps

' Ajout de la signature
MonMessage.HTMLBody = MonMessage.HTMLBody & "<br/>" & "<br>" & Signature("Signature")

' Ajout des pièces jointes
MonMessage.Attachments.Add cheminfichier
MonMessage.Attachments.Add cheminfichier2
MonMessage.display vbSystemModal = False

If OLk_Appli Is Nothing Then
OLk_OK = Shell("C:\Program Files\Microsoft Office\Office10\OUTLOOK.EXE", 1)
End If



' supprimer le fichier pdf après envoi du message
Kill (cheminfichier)
Kill (cheminfichier2)

End Sub
0
Utilisateur anonyme > AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
26 oct. 2017 à 23:09
et du coup, cela fonctionne ou pas ???
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 > Utilisateur anonyme
27 oct. 2017 à 08:16
J'ai réalisé un test en cliquant sur la barre des taches pendant le traitement du code de préparation du mail et non, la fenêtre Outlook clignote dans la barre des taches et donc n'apparait pas en premier plan à la fin de la procédure.
0
Utilisateur anonyme > AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
27 oct. 2017 à 17:14
si elle clignote, c'est qu'il doit il y avoir un message qui attend une réponse de ta part...
0
Utilisateur anonyme
27 oct. 2017 à 19:50
C'est bizarre qu'elle clignote, généralement, c'est que l'appli attend une réponse de l'utilisateur....

La question est : dans les 10%, il y a un point commun ???
0
Utilisateur anonyme
27 oct. 2017 à 19:55
Je remplacerait aussi
MonMessage.display vbSystemModal = False


par
MonMessage.display

0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
Modifié le 28 oct. 2017 à 04:39
Un exemple qui rentre dans les 10% des cas,

Je travail sur 2 écrans, sur l’ecran de gauche, qui est mon écran principal, je lance la procédure depuis la base access et pendant le traitement je clique sur l’ecran de droite, par exemple pour ouvrir un fichier Excel, forcément la fenêtre Outlook du mail s’ouvre dans la barre des tâches et non en premier plan sur l’ecran de gauche.

La plus part des utilisateurs, a mon travail, utilisent qu’un seul écran donc je ne pense pas que le problème ce présente, j’ai juste remarqué cela sur mon poste à moi car j’ai 2 écrans.

Je vais tester en enlevant systemmodal, je voulais juste que l’uitilisateur ne puisse pas retourner sur la base de donnée tant qu’il n’a pas fermer son mail, soit il l’envoi soit il l’enregistre et retour sur le formulaire.
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 > AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
28 oct. 2017 à 05:44
J'ai enlevé vbsystemModal et refait un test en cliquant dans la barre des taches pendant l'execution du code et c'est bon Outlook s'ouvre au premier plan quand meme.

Ca semble bon, merci.
0