vba excel, envoie d'un mail

pepsister

XLDnaute Junior
Bonjour,

voila je souhaite quand ma macro rencontre une anomalie qu'elle m'envoie un mail et s'arrête.
J'ai cherché il y a bcp de choses sur internet plus ou moins compliqué, certains passent directement par SFTP (je ne sais pas trop ce que c'est), enfin j'ai essayé pas mal de choses et ca ne marche pas.
J'ai vu sur ce forum une solution en passant par outlook soit disant plus simple donc pourquoi.
Mais quand je lance ma macro et qu'on arrive sur l'envoie de mail j'ai le message suivant:
Erreur d'exécution '429': Un composant ActiveX ne peut pas créer d'objet.

Peut-être faut il télécharger une librairie supplémentaire? Mais où? Excel ou outlook? Laquelle?
Peut etre est-ce un pb dans ma macro?

Je mets mon code
Code:
 Dim Maille As String
 Dim Sujet As String
 Dim DernLigne as long

DernLigne = Range("A1048576").End(xlUp).Row
For a = 2 To DernLigne
  If Sheets("Feuil3").Cells(a, 4).Value <> "SUCCEED" Then
  'alors on rejette directement
  Sheets("Résultat").Range("A1").Value = "ANOMALIE"
  Maille = "moi@gmail.com"
  Sujet = "Anomalie"

Set OL = CreateObject("Outlook.Application")
Set MyItem = OL.CreateItem(olMailItem)
With MyItem
    .To = Maille
    .Subject = Sujet
    .Categories = "Banking-Info"
    .OriginatorDeliveryReportRequested = False
    .ReadReceiptRequested = False
    .Send
End With
Exit Sub
End If
Next

Merci pour votre aide,
 

letroubadour

XLDnaute Occasionnel
Re : vba excel, envoie d'un mail

Bonjour sur ta fenetre VBA tu vas dans -outils-references - et tu décoche ou coches les "MANQUANTES" tu enregistre tu fermes et tu relance

ça devrait etre bon

sinon il faut chercher la bibliothèque microsoft outlook

LETROUBADOUR
 

pepsister

XLDnaute Junior
Re : vba excel, envoie d'un mail

Bon donc tout est bien cocher, la ligne qui génère l'erreur est

set OL = CreateObject ("Outlook.Application")
ca m'affiche erreur 429.

J'ai testé en remplacant CreateObject par GetObject (j'ai lu que si outlook est ouvert alors ca suffit)
et là voici l'erreur
erreur d'exécution '-2147221020 (800401e4)':
Erreur Automation
Syntaxe incorrect

Je ne sais vraiment pas comment faire merci de m'aider.
 

apnart

XLDnaute Occasionnel
Re : vba excel, envoie d'un mail

Hello,

je viens de regarder mes macros qui génèrent des mails, elles sont faites un peu pareil, sauf que j'ai 1 ligne en plus :

Entre tes 2 lignes :
Set OL = CreateObject("Outlook.Application")
Set MyItem = OL.CreateItem(olMailItem)

je mettrais :
OL.Session.Logon

Essais pour voir ;)

A+
Bruno.
 

fhoest

XLDnaute Accro
Re : vba excel, envoie d'un mail

Bonjour,

? pas de réponse à mon message,essai comme ceci:
A+
Code:
Dim Maille As String
 Dim Sujet As String
 Dim DernLigne as long

Dim OL As Object
Dim MyItem As Object
 DernLigne = Range("A1048576").End(xlUp).Row
For a = 2 To DernLigne
  If Sheets("Feuil3").Cells(a, 4).Value <> "SUCCEED" Then
  'alors on rejette directement
  Sheets("Résultat").Range("A1").Value = "ANOMALIE"
  Maille = "moi@gmail.com"
  Sujet = "Anomalie"

Set OL = CreateObject("Outlook.Application")
Set MyItem = OL.CreateItem(0)
With MyItem
    .To = Maille
    .Subject = Sujet
    .Categories = "Banking-Info"
    .OriginatorDeliveryReportRequested = False
    .ReadReceiptRequested = False
    .Send
End With
Exit Sub
End If
Next
 

pepsister

XLDnaute Junior
Re : vba excel, envoie d'un mail

fhoest,

Ton code n'y change rien. Tu possèdes exactement la même ligne que moi, du coup le blocage se fait au même endroit avec le même message d'erreur:
Set OL = CreateObject("Outlook.Application")

Merci quand même mais malheureusement ca ne m'aide pas vraiment.
 

fhoest

XLDnaute Accro
Re : vba excel, envoie d'un mail

Re,

peux tu indiquer le message d'erreur et as tu instancié les variables comme je l'ai fait dans l'exemple.
est il également possible que tu mettes ton fichier sans données confidentielle.
As tu coché cette référence:
c:/programmes/microsoft office/MSOUTL.OLB
si elle n'est pas disponible ou que c'est une autre cela peut être la cause,
déjà signaler par Troubadour (que je salut au passage)

A+
 
Dernière édition:

pepsister

XLDnaute Junior
Re : vba excel, envoie d'un mail

Bonjour,

Alors en librairie voici celles que je coche:
- Visual Basic For Applications
- Microsoft Excel 12.0 Object Library
- OLE Automation
- Microsoft Office 12.0 Object Librairy
- Microsoft Office Outlook View Control
- Microsoft Outloook 12.0 Object Librairy

Rien ne change, oui mes variables sont déclarées comme toi fhoest.

Je vous joins mon fichier en simplifier pour enlever toutes données confidentielles.

Le message d'erreur exacte est:
Erreur d'exécution '429': Un composant ActiveX ne peut pas créer l'objet

Merci encore de votre aide.
 

Pièces jointes

  • supervision.xlsm
    19.2 KB · Affichages: 65

fhoest

XLDnaute Accro
Re : vba excel, envoie d'un mail

Bonjour,
à première vu je n'ai aucun problème avec ton code il fonctionne très bien cela doit venir de ta référence:
MSOUTL.OLB
Tu peux essayer comme ça:
Code:
Sub Comparaison()


'******************************************************************************************************
'COMPARAISON
'******************************************************************************************************

Dim Maille As String
Dim Sujet As String
Dim DernLigne As Long
Dim ol As New Outlook.Application
Dim MyItem As Object

'Vérification du statut des imports
DernLigne = Sheets("Feuil3").Range("A1048576").End(xlUp).Row
For a = 3 To DernLigne
  If Sheets("Feuil3").Cells(a, 8).Value <> "SUCCEED" Then
  'alors envoie d'un mail
  Maille = "toto@gmail.com"
  Sujet = "Anomalie"
  
  Set ol = Outlook.Application
  
  Set MyItem = ol.CreateItem(0)
  With MyItem
    .To = Maille
    .Subject = Sujet
    .Categories = "Banking-Info"
    .OriginatorDeliveryReportRequested = False
    .ReadReceiptRequested = False
  .Send

  End With
  Exit Sub
  End If
Next

End Sub
A+
 
Dernière édition:

pepsister

XLDnaute Junior
Re : vba excel, envoie d'un mail

Bon maintenant j'ai une autre question sur le même sujet de mon coté mais c'est un autre pb alors peut etre il faudrait que je créais une nouvelle discussion. A vous de me dire?

Je voudrais extraire une pièce jointe d'un mail sur outlook
Pour cela j'ai créer une règle auquel j'ai associé une macro (macro prise sur la faq outlook)
je mets le bout de code:
Code:
Sub macro1(strID As Outlook.MailItem)
Dim olNS As Outlook.NameSpace
Dim MyMail As Outlook.MailItem
Dim Repertoire As String

Set olNS = Application.GetNamespace("MAPI")
Set MyMail = olNS.GetItemFromID(strID.EntryID)


If MyMail.Attachments.Count > 0 Then
   'on crée le répertoire où mettre les fichiers joints, qui doit déjà exister
  Repertoire = "C:\projets"
  'on traite les pj
   Dim PJ, typeatt
   For Each PJ In MyMail.Attachments
   'vérification si c'est une PJ Embedded
    typeatt = Isembedded(strID, PJ.Index)
    If typeatt = "" Then
      If "" <> Dir(Repertoire & PJ.FileName, vbNormal) Then
        MsgBox Repertoire & PJ.FileName & " existe !!"
      End If
      PJ.SaveAsFile Repertoire & PJ.FileName
    End If
   Next PJ

'drapeau vert
 MyMail.FlagIcon = olGreenFlagIcon
'Marque lu
 MyMail.UnRead = False
 MyMail.Save
'on déplace le mail vers un sous dossier outlook
 Dim myDestFolder As Outlook.MAPIFolder
 Set myDestFolder = MyMail.Parent.Folders("reporting")
 MyMail.Move myDestFolder
End If
Set MyMail = Nothing
Set olNS = Nothing
Fin:
End Sub

Function Isembedded(ByVal strEntryID As String, attindex As Integer) As Variant

Dim oSession As MAPI.Session
' CDO objects
Dim oMsg As MAPI.Message
Dim oAttachs As MAPI.Attachments
Dim oAttach As MAPI.Attachment

' initialize CDO session
On Error Resume Next
Set oSession = CreateObject("MAPI.Session")
oSession.Logon "", "", False, False
' get the message created earlier
Set oMsg = oSession.GetMessage(strEntryID)
' set properties of the attached graphic that make
' it embedded and give it an ID for use in an image tag
Set oAttachs = oMsg.Attachments
Set oAttach = oAttachs.Item(attindex)
Dim strCID As String
strCID = oAttach.Fields(&H3712001E)
Isembedded = strCID
Set oMsg = Nothing
oSession.Logoff
Set oSession = Nothing

End Function


Voila mon problème est la ligne suivante:
Function Isembedded(ByVal strEntryID As String, attindex As Integer) As Variant
Dim oSession As MAPI.Session

j'ai le message d'erreur suivant:
erreur de compilation:
Type défini par l'utilisateur non défini

J'ai pu voir dans la faq outlook que c'est généralement un pb de librairie, qu'il faut activer la librairie Microsoft CDO 1.21 Library dans VBE.
Le problème c'est que dans mon registre voici les deux librairies proposées:
- Microsoft CDO for windows 2000 Librairy
- Microsoft CDO for NTS 1.2 librairy
A priori les deux sont basés sur une offre de messagerie basée sur le protocole SMTP (Simple Mail Transfer Protocol) qui fait partie de la bibliothèque CDO (1.1, 1.2) générale, mais qui ne dépend pas de MAPI.

Il faut vraiment la librairie 1.21 que j'ai essayé de télécharger via ce lien:
Download Collaboration Data Objects, version 1.2.1 from Official Microsoft Download Center
A priori pour l'installer il faut outlook 2007 et c'est la seule librairie compatible avec.
Mais quand j'essaye de l'installer il me met que je dois d'abord avoir outlook 2007 pourtant je l'ai.

Mais peut être est-ce complètement un autre problème, Peut etre une idée?

Merci de votre aide,
 

Discussions similaires

Réponses
2
Affichages
235
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
312 203
Messages
2 086 193
Membres
103 153
dernier inscrit
SamirN