Ouverture de Outlook par un code VBA envoie l'envoie d'un mail automatique

Bonjour à tous,

Je vous expose rapidement mon problème, j'ai déjà un code VBA qui fonctionne très bien, à savoir que lorsqu'il y a une modification enregistrée sur le document excel, lors de la fermeture de celui-ci un mail est généré pour me prévenir qu'une modification a été apportée. Seulement, ce code marche seulement si outlook est déjà ouvert sur l'ordinateur, si ce n'est pas le cas un message d'erreur s'affiche. Je me demandais donc ce que je devais rajouter à mon code pour qu'il puisse ouvrir outlook si ce n'est pas le cas avant de générer le mail.

En sachant que j'ai déjà activé la référence outlook dans VBA mais rien n'y fait, je vous envoie le code que j'utilise actuellement.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ' Avant de ferme le classeur, on vérifie si modification effectuée
  If FlgModif Then
    Dim OutApp As Object, EMail As Object
      ' Création d'une instance Outlook pour envoyer un mail
  Set OutApp = CreateObject("Outlook.Application")
  Set EMail = OutApp.CreateItem(0)
  With EMail
    .To = "test@test.com"
    .Subject = "Modification apportée"
    .Body = "Modification effectuée" & Environ("suername")
    .Send
  End With
  Set EMail = Nothing: Set OutApp = Nothing
  End If
End Sub

Private Sub Workbook_Open()
  ' On vient d'ouvrir le classeur, le FLAG modification est donc FAUX
  FlgModif = False
End Sub

' Si modification effectuée dans une des feuilles, on passe le FLAG à VRAI
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  FlgModif = True
End Sub

Merci d'avance pour vos réponses,

Bonjour

Essayez avec ces lignes de code avant votre ligne Set OuApp =

On error resume next 'si erreur le code continue sans message excel --> voir si intérêt ou pas de cette instruction
Set OutLk_App = GetObject("Outlook.Application")
If OutLk_App Is Nothing Then
    'mettre le bon chemin outlook
    OutLk_App = Shell("C:\Program Files (x86)\Microsoft Office\Office15\outlook.exe", 1)
    'OutLk_OK = Shell("C:\Program Files (x86)\Microsoft Office\Office15\outlook.exe", 1)
End If

Veillez à vérifier si la référence "Microsoft Outlook Library" est activée avant de lancer cette macro
Pour ce faire allez dans l'éditeur VBA --> Menu / Tools / Reference / Cocher "Microsoft Outlook Library"

Si ok pensez à cloturer le fil

Cordialement

Bonjour,

J'ai bien intégré la ligne de code et j'ai aussi vérifié que la référence "microsoft outlook library" était bien activée, cependant j'ai un message d'erreur qui s'affiche :

60

et j'ai cette ligne qui s'affiche dans mon code suite à l'erreur:

75

Merci de m'aider avec ce code ^^

re,

Vous avez omis de mettre le "on error resume next"

Ajoutez ceci en début de code

Dim Outlk As Object

ensuite, essayez en modifiant la ligne

Set OutLk_App = GetObject(, "Outlook.Application")

Au fait, une petite erreur plus bas remplacez Outlk_ok par Outlk_App
J'ai corrigé dans le code

Re,

J'avais retiré la ligne "on error resume next" pour que je puisse voir le message d'erreur. Ici encore ça coince au même endroit malgré les changements.

89

Hum désolé je me suis trompé dans la déclaration

Dim Outlk_App As Object

NB : je ne vous ai pas dit de mettre cette déclaration avant le code mais en début

Malheureusement j'ai changé la déclaration et la même erreur s'affiche au même endroit dans le code...

Pour le test, vous avez mis le On error resume next ?

Bonjour

c'est une macro qui m’intéresse!!!

j'ai copié et suivie tous a la lettre, mais malheureusement, ca ne fonctionne pas chez moi

- OUTLOOK ne s'ouvre pas

- Et il n'y a pas de message d'erreur

peu être une idée

Oui j'ai remis la ligne mais la encore ça ne fonctionne pas mais je n'ai pas de message d'erreur, excel freeze un long moment avant de se fermer. Il doit y avoir quelque chose que j'ai du mal faire. Voila mon code actuel en sachant que j'ai retiré mon adresse mail pour la confidentialité:

Dim Outlk_App As Object
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ' Avant de ferme le classeur, on vérifie si modification effectuée
  If FlgModif Then
    Dim OutApp As Object, EMail As Object
      ' Création d'une instance Outlook pour envoyer un mail
On Error Resume Next 'si erreur le code continue sans message excel --> voir si intérêt ou pas de cette instruction
Set Outlk_App = GetObject(, "Outlook.Application")
If Outlk_App Is Nothing Then
    'mettre le bon chemin outlook
   Outlk_App = Shell("C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE", 1)
End If
  Set OutApp = CreateObject("Outlook.Application")
  Set EMail = OutApp.CreateItem(0)
  With EMail
    .To = "test@test.com"
    .Subject = "Modification sur le registre des AT bénins"
    .Body = "Modification effectuée" & Environ("suername")
    .Send
  End With
  Set EMail = Nothing: Set OutApp = Nothing
  End If
End Sub

Private Sub Workbook_Open()
  ' On vient d'ouvrir le classeur, le FLAG modification est donc FAUX
  FlgModif = False
End Sub

' Si modification effectuée dans une des feuilles, on passe le FLAG à VRAI
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  FlgModif = True
End Sub

Dans l'éditeur VBA, la référence que vous avez cochée est laquelle ?

J'ai coché celle-ci

25

Je viens de réussir à l'instant ! je n'avais pas coché les bonnes références, le code fonctionne parfaitement si vous cochez l'ensemble des références d'Outlook, je pensais qu'il fallait simplement la première mais ce n'est pas le cas, merci pour avoir compléter le code DAN, c'est niquel :D

Rechercher des sujets similaires à "ouverture outlook code vba envoie mail automatique"