Sub Envoyer_maintenance_de_la_semaine()
Dim Lundi As Date, Dimanche As Date, limite As Date
Dim c As Range, Plage As Range
Dim Machines As String
Dim oOutlook As Object ' Objet application Outlook
Set Plage = Range("D5:D56")
limite = Date + 14
' Trouver le lundi de la semaine du jour limite
' Conversion en 'double' pour faciliter les comparaisons
Lundi = CDbl(limite - Weekday(limite, vbMonday) + 1)
Dimanche = CDbl(Lundi + 6)
'
' Utilisation de la fonction NB.SI.ENS pour compter le nombre de machines cette semaine là
If Application.CountIfs(Plage, ">=" & Lundi, Plage, "<=" & Dimanche) Then
'
' Parcourir la plage à la recherche des dates de la semaine future
For Each c In Plage
If c.Value2 >= Lundi And c.Value2 <= Dimanche Then Machines = Machines & lf & c.Offset(, -2)
Next
' Création de l'application Outlook
Set oOutlook = CreateObject("Outlook.Application") 'création d'un objet outlook
' Travailler sur un objet email créée
With oOutlook.CreateItem(olMailItem)
.Subject = "Alerte maintenance préventive"
.To = Range("E3") ' Destinataire
.Body = "Liste des machines dont la maintenance est prévue cette semaine " & " : " & lf & Machines
.Display 'afficher le mail avant de l'envoyer ou send pour envoyer
End With
Else
MsgBox "Opération annulée : Aucune tâche n'a été trouvée!", vbInformation, "Envoi mail de rappel"
End If
FIN:
'
' Si une erreur a été rencontrée, prévenir l'utilisateur
If Err.Number <> 0 Then
MsgBox "Opération échouée en raison de l'erreur suivante :" & vbCrLf & vbCrLf & _
"Numéro de l'erreur: " & Err.Number & vbCrLf & vbCrLf & "Description: " & Err.Description, _
vbExclamation, "Envoi mail de rappel de tache"
End If
'
On Error GoTo 0
'
' Toujours détruire correctement les variables objets pour éviter les fuites de mémoire
Set oOutlook = Nothing
End Sub