Bonjour,
Je me permets de faire appel aux compétences des spécialistes sur le forum, car je ne trouve pas la solution à une macro. Elle est un peu inhabituelle pour moi, car elle fait appel à Excel, mais aussi à Outlook. Je m'explique: la macro doit ouvrir Outlook (si Outlook n'est pas déjà ouvert), lancer un nouveau message (dont le corps récupère des données dans le fichier Excel et doit l'adresser à un destinataire qui peut varier selon l'utilisateur). Excel fait tout correctement (les données sont correctes, le destinataire aussi), mais il arrive que le message d'Outlook reste "sous" Excel. En clair, l'utilisateur peut avoir l'impression que rien ne s'est passé... et relancer la macro. D'après mes essais, le résultat est variable et aléatoire: parfois Outlook s'affiche bien devant, mais parfois il reste derrière (dans les deux cas, le message est toujours correct). J'ai passé par ChatGPT, qui m'a fourni plusieurs macros. Celle ci-dessous est la plus aboutie, mais elle ne réussit pas toujours à afficher Outlook devant.
Quelqu'un a-t-il une idée d'instruction qu'il faudrait ajouter/corriger pour forcer l'affichage d'Outlook en premier plan?
Merci d'avance pour votre intérêt et vos réponses!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Sub Demande_validation() ' Désactiver les mises à jour de l'interface utilisateur Application.ScreenUpdating = False Application.EnableEvents = False ' Déclarer les variables Dim NomUtilisateur As String Dim OutlookApp As Object Dim OutlookMail As Object Dim MailBody As String Dim Destinataire As String Dim stRech As String Dim c As Range Dim col As Integer ' Récupérer le nom d'utilisateur NomUtilisateur = ' Créer une instance de l'application Outlook On Error Resume Next Set OutlookApp = GetObject(, "Outlook.Application") If OutlookApp Is Nothing Then Set OutlookApp = CreateObject("Outlook.Application") End If On Error GoTo 0 ' Créer un nouvel e-mail Set OutlookMail = OutlookApp.CreateItem(0) ' Contenu du message MailBody = ' Déterminer le destinataire en fonction de l'utilisateur Select Case NomUtilisateur Case Case Else End Select ' Activer la mise à jour de l'écran avant d'afficher le courriel Application.ScreenUpdating = True ' Définir les propriétés du message With OutlookMail .To = Destinataire .Subject = "Demande de validation" .Body = MailBody .Display ' Afficher le message End With ' Laisser à Outlook le temps d'ouvrir la fenêtre DoEvents ' Forcer l'activation d'Outlook pour qu'il passe devant OutlookApp.ActiveWindow.WindowState = 2 ' Mettre Outlook en mode fenêtre normale OutlookApp.ActiveWindow.Activate ' Activer la fenêtre Outlook ' Libérer les objets Outlook Set OutlookMail = Nothing Set OutlookApp = Nothing End Sub
Partager