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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| Public Function EnvoiDocuments(Optional Automatique As Boolean = False) As Boolean
'Automatique : argument optionnel indiquant si la fonction s'exécute automatiquement ou pas.
On Error GoTo err_EnvoiDocuments
Dim fso As Object ' variable objet FSO
Dim nomDossier As String ' variable pour le nom du dossier de sauvegarde des documents pdf
Dim cheminfichier As String ' variable pour le chemin complet du document pdf
Dim NomAbonne As String ' nom de l'abonné
Dim db As DAO.Database ' variable objet pour faire référence à la base de données
Dim rsMsg As DAO.Recordset ' variable objet pour faire référence au recordset lié au message à envoyer
Dim rsReabo As DAO.Recordset ' variable objet pour faire référence au recordset lié aux réabonnements
Dim objOutLook As Object ' variable objet pour faire référence à l'application Outlook
Set db = CurrentDb ' référence à la base de données courante
' on ouvre le recordset basé sur la table T_Message_Reabonnement
Set rsMsg = db.OpenRecordset("Message_Envoi_Planning", dbOpenSnapshot)
' on vérifie si l'objet et le corps du message ont été saisis
If Nz(rsMsg!ObjetMessage, "") = "" Then
MsgBox ("Saisir un objet pour le message des destinataires !")
Exit Function
End If
If Nz(rsMsg!CorpsMessage, "") = "" Then
MsgBox ("Saisir un message pour les destinataires !")
Exit Function
End If
' on ouvre le recordset contenant la liste des réabonnement en attente n'ayant pas encore fait l'objet d'un envoi
Set rsReabo = db.OpenRecordset("select * from R_EnvoiPlanning where (EnvoiPlanning2022=False) and nz(Clients_mail,"""")<>"""";", dbOpenDynaset)
If Not rsReabo.EOF Then ' s'il y a des documents à envoyer
If MsgBox("Souhaitez-vous envoyer les documents pour les réabonnements ?", vbYesNo + vbQuestion) = vbYes Then ' si on confirme l'envoi
' Teste si outlook est ouvert, si pas ouvert le lance :
If Not IsOutLookRunning() Then
Dim oShell As Object
Set oShell = CreateObject("WScript.Shell")
oShell.Run "outlook"
Set oShell = Nothing
End If
'Assigner l'objet Outlook
Set objOutLook = CreateObject("Outlook.Application") 'New Outlook.Application
' création de l'objet FSO
Set fso = CreateObject("Scripting.FileSystemObject")
' indique le chemin du dossier de destination pour les fichiers générés, si pas de dossier d'enregistré dans la table T_Dossier_Documents,
' alors copie le chemin du dossier situé dans le répertoire de la base de données Access
nomDossier = Nz(DLookup("CheminDossier", "T_Dossier_Documents"), CurrentProject.Path & "\Planning") ' indiquez ici le chemin de votre dossier de destination pour les fichiers pdf
If Dir(nomDossier, vbDirectory) = "" Then '
fso.CreateFolder nomDossier
End If
Do Until rsReabo.EOF ' on parcourt la liste des abonnements à renouveler
NomAbonne = rsReabo!N_Dossier ' on copie le nom complet de l'abonné dans la variable
' on copie le chemin complet dans la variable
cheminfichier = nomDossier & "\Planning 2022- " & NomAbonne & ".pdf"
' ouverture de l'état filtré avec l'identifiant de l'abonné
DoCmd.OpenReport "Planning_quotidien", acViewPreview, , "N_Dossier= " & rsReabo!N_Dossier
' génération du document pdf à partir de l'état filtré avec l'identifiant de l'abonné
DoCmd.OutputTo acOutputReport, "Planning_quotidien", "PDF", cheminfichier
' fermeture de l'état
DoCmd.Close acReport, "Planning_quotidien"
' envoi du message au destinataire
If EnvoiEmail(cheminfichier, rsReabo!Clients_mail, rsMsg!ObjetMessage, rsMsg!CorpsMessage, objOutLook) Then ' si l'envoi du mail s'est bien passé
rsReabo.Edit
rsReabo!DateEnvoiPlanning2022 = Date ' on met à jour le champ DateEnvoiReabo pour indiquer que l'envoi a bien été effectué
rsReabo.Update
End If
' on passe à l'enregistrement suivant
rsReabo.MoveNext
Loop
EnvoiDocuments = True ' on indique que les documents ont été envoyés
MsgBox "Documents envoyés !", vbExclamation ' on affiche un message pour indiquer que les documents ont bien été envoyés
End If
Else ' sinon, si pas de document à envoyer
If Not Automatique Then ' si la fonction ne s'exécute pas à l'ouverture de la base
MsgBox "Pas de document à envoyer pour les réabonnements !", vbExclamation ' on affiche un message pour indiquer qu'il n'y a pas d'abonnement à renouveler
End If
EnvoiDocuments = False ' la fonction renvoie False
End If
err_EnvoiDocuments:
' gestion d'erreur
If Err.Number <> 0 And Not EnvoiDocuments Then ' si une erreur s'est produite et que les documents n'ont pas été envoyés
MsgBox Err.Description, vbExclamation ' on affiche le message d'erreur
MsgBox "Erreur au cours de l'envoi !", vbExclamation
EnvoiDocuments = False
End If
' libère les variables objet
Set fso = Nothing
If Not (rsMsg Is Nothing) Then
rsMsg.Close
End If
If Not (rsReabo Is Nothing) Then
rsReabo.Close
End If
Set rsMsg = Nothing
Set rsReabo = Nothing
Set db = Nothing
Set objOutLook = Nothing
End Function |
Partager