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
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.
? 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
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.
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)
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
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
Merci merci merci ca marche nickel. Je ne comprends pas trop pourquoi ca marche comme ca mais bon je ne vais pas chercher a comprendre je crois. Parfois c'est mieux comme ca!!
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?