Ma macro ne lance pas l'écriture du mail
bonjour a tous je ne comprend pas pourquoi,
Mais ma macro ne lance pas l'écriture du mail et je ne comprend pas pour quoi.
Pourriez vous m'aidez car cela fait 3 semaines que je bloque sur ce code pour envois de mail depuis les rappels.
merci d'avance.
Option Explicit
Public nomfichier As String
Public typefichier As String
Public recherche As String
Public pj As String
Public Sub Application_Reminder(ByVal Item As Object)
Dim objMsg As MailItem
recherche = Item.Subject
Set objMsg = Application.CreateItem(olMailItem)
If Item.MessageClass <> "IPM.Appointment" Then 'Vérifie si il sagit d'un rapel dans le calendrier
Exit Sub
End If
If Item.Categories <> "MAILS AUTOMATIQUES" Then 'Vérifie si le rappel fait partie de la catégorie: MAILS AUTOMATIQUES
Exit Sub
End If
Exit Sub
objMsg.Importance = olImportanceHigh
objMsg.To = Item.Location
objMsg.Subject = Item.Subject
objMsg.Body = Item.Body
'demande AR
objMsg.OriginatorDeliveryReportRequested = True
'demande confirmation de lecture
objMsg.ReadReceiptRequested = True
Call Test
objMsg.Attachments.Add pj
objMsg.Display
MsgBox "Noubliez pas de faire le devis pour ce rappel!", vbOKOnly, vbCritical, "Rappel rédaction devis!"
Set objMsg = Nothing
End Sub
Public Sub Test()
typefichier = ".docx"
nomfichier = recherche
Dim name As String
name = nomfichier + typefichier
Chemin "C:\Users\pourcel\Desktop\cle ub 32 giga\", name
End Sub
Public Sub Chemin(Dossier As String, fichiercherche As String)
Dim Fso As Object
Dim Dos As Object
Dim SousDos As Object
Dim D As Object
Dim Fichier As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
'si le dossier n'existe pas, fin
If Fso.FolderExists(Dossier) = False Then Exit Sub
Set Dos = Fso.GetFolder(Dossier)
'recherche le fichier dans le dossier
For Each Fichier In Dos.Files
'si trouvé, atribu chemin à la varible pj, la variable pj est utilisé dans la macro précédente pour envoi de mail via l'application reminder qui se trouve dans ThisOutlookSession.
If InStr(Fichier, fichiercherche) <> 0 Then
'MsgBox une pièce jointe existe + attribu le chemin du fichier a la variable pj
pj = Fichier.Path
MsgBox "Une pièce jointe correspond a ce rappel !", vbOKOnly + vbInformation, "Une pièce-jointe existe pour ce rappel"
'MsgBox pj
Else
'MsgBox aucune pièce jointe
MsgBox "Aucune pièce jointe ne correspond a ce rappel !", vbOKOnly + vbCritical, "Problème de pièce-jointe"
Exit Sub
End If
Next Fichier
Set SousDos = Dos.SubFolders
'recherche dans les sous dossiers
For Each D In SousDos
For Each Fichier In D.Files
'évite l'erreur des dossiers interdits
On Error Resume Next
'si trouvé, atribu chemin à la varible pj, la variable pj est utilisé dans la macro précédente pour envoi de mail via l'application reminder qui se trouve dans ThisOutlookSession.
If InStr(Fichier, fichiercherche) <> 0 Then
'MsgBox une pièce jointe existe + attribu le chemin du fichier a la variable pj
pj = Fichier.Path
MsgBox "Une pièce jointe correspond a ce rappel !", vbOKOnly + vbInformation, "Une pièce-jointe existe pour ce rappel"
' MsgBox pj
Else
'MsgBox aucune pièce jointe
MsgBox "Aucune pièce jointe ne correspond a ce rappel !", vbOKOnly + vbCritical, "Problème de pièce-jointe"
Exit Sub
End If
Next Fichier
'rappel de la proc pour chercher les
'dossiers enfants
Chemin D.Path, fichiercherche
Next D
End Sub
Bonsoir,
le troisième Exit Sub n'est-il pas de trop ?
@ bientôt
LouReeD
Avec un indentation plus clair du code on voit bien qu'il est en trop !
Public Sub Application_Reminder(ByVal Item As Object)
Dim objMsg As MailItem
recherche = Item.Subject
Set objMsg = Application.CreateItem(olMailItem)
If Item.MessageClass <> "IPM.Appointment" Then 'Vérifie si il sagit d'un rapel dans le calendrier
Exit Sub
End If
If Item.Categories <> "MAILS AUTOMATIQUES" Then 'Vérifie si le rappel fait partie de la catégorie: MAILS AUTOMATIQUES
Exit Sub
End If
Exit Sub
objMsg.Importance = olImportanceHigh
objMsg.To = Item.Location
objMsg.Subject = Item.Subject
objMsg.Body = Item.Body
'demande AR
objMsg.OriginatorDeliveryReportRequested = True
'demande confirmation de lecture
objMsg.ReadReceiptRequested = True
Call Test
objMsg.Attachments.Add pj
objMsg.Display
MsgBox "Noubliez pas de faire le devis pour ce rappel!", vbOKOnly, vbCritical, "Rappel rédaction devis!"
Set objMsg = Nothing
End Sub
@ bientôt
LouReeD
Bonjour Loureed, merci pour votre aide effectivement je n’avais pas vu le end sub en trop . Je rencontre un soucis. Lorsque je lance la macros il me détecte une erreur sur « public sub application reminder » nom ambigu. Je ne comprend pas pour quoi . Merci d’avance bonne journée romain .
Bonjour,
nom ambiguë est souvent le fait d'avoir deux nom identiques pour deux choses différentes : nom d'une variable = nom d'une procédure par exemple.
De plus comment appelez vous votre procédure ? car vous y mettez un paramètre, il faut donc qu'elle soit appelée avec ce paramètre :
Public Sub Application_Reminder(ByVal Item As Object) veut dire que quelque part dans le code vous avez un : Call Application_Reminder(MonObjet).
@ bientôt
LouReeD
Bonjour merci pour votre aide . La macro application reminder se lance seul elle se trouve dans thaïs Outlook session. L’autre macro test est pour trouvé le fichier correspondant au sujet du mail /rappel et renvoie le chemin à la variable pj. Celle ci étant dans la macro application reminder pour que le fichier soit en pièce jointe . Il est fort probable que il y est un conflit au moment du transfert de la variable pj . Merci pour votre aide .
Je n'ai pas fait grand chose, vous savez, mais merci de votre remerciement !
@ bientôt
LouReeD
Un merci ne me coûte rien . Pour le temps que vous avez accordé à mon problème. Comment peut on utilisé une variable présente dans mail item procédure object pour quel soit recherché dans une autre procédure initiée pas sub test . Je pense que je je ne déclare pas correctement mes variables .