babacool22
XLDnaute Nouveau
Bonjour le forum !
Après moulte recherche et après avoir passé une bonne partie de ma matinée sur ce problème je m'en remets à vous.
J'ai consulté le forum il y a peu pour mettre au point un planning capable d'envoyer des mails contenant les maintenances à prévoir sur différentes échelles temporelles.
J'ai donc récupérer un code fournis par un membre du forum qui marche à la perfection. Etant débutant dans excel et en VBA, j'ai essayer de "recuisiner" à ma manière le code initial afin de l'adapter à plusieurs cas de figure.
Le code initial prévenait d'une maintenance à aujourd'hui + 14 jours (soit dans 2 semaines). J'ai réussi à le modifier pour faire en sorte qu'il me donne les maintenances du mois suivant entier, des deux prochaines semaines, et de la prochaine semaine.
J'aimerai maintenant ajouté une dernière fonctionnalité qui est de trouver directement quelle sera la prochaine machine en maintenance et uniquement la suivante.
Dans ce code-ci j'arrive à faire apparaître toutes les machines en maintenances en se fixant sur le critère >=MaDate (date du jour), sauf qu'avec le next il continue de me prendre des valeurs et ne s'arrête pas à une seule. De plus il parcourt ma plage de date de haut en bas et même si il s'était arrêter sur la première valeur >=MaDate il y a de forte chance pour que ce ne soit pas celle qui soit le plus proche de la date du jour.
Je ne sais pas si j'ai était clair, je reste à votre disposition pour toutes informations jugées nécessaires.
Ci-joint vous pouvez retrouver le excel en question.
Dans l'attente de vous lire,
Cordialement,
Babacool22
Après moulte recherche et après avoir passé une bonne partie de ma matinée sur ce problème je m'en remets à vous.
J'ai consulté le forum il y a peu pour mettre au point un planning capable d'envoyer des mails contenant les maintenances à prévoir sur différentes échelles temporelles.
J'ai donc récupérer un code fournis par un membre du forum qui marche à la perfection. Etant débutant dans excel et en VBA, j'ai essayer de "recuisiner" à ma manière le code initial afin de l'adapter à plusieurs cas de figure.
Le code initial prévenait d'une maintenance à aujourd'hui + 14 jours (soit dans 2 semaines). J'ai réussi à le modifier pour faire en sorte qu'il me donne les maintenances du mois suivant entier, des deux prochaines semaines, et de la prochaine semaine.
J'aimerai maintenant ajouté une dernière fonctionnalité qui est de trouver directement quelle sera la prochaine machine en maintenance et uniquement la suivante.
VB:
Sub Envoyer_mail2()
Dim oOutlook As Object ' Objet application Outlook
Dim MaDate As Date
Dim c As Range, Plage As Range
Dim Machines As String
Set Plage = ThisWorkbook.Sheets("Planning maintenance préventive").Range("D5:D56")
MaDate = Date
On Error GoTo FIN
' Compter combien de date = limite dans la plage
' pour envoyer l'email ou alerter l'utilisateur
If Application.CountIf(Plage, MaDate) > 0 Then
'
' Parcourir les cellules de la plage
' à la recherche des machines qui corresponde à la date de maintenance prévue
' en construire une liste textuelle pour le corps du message
For Each c In Plage
' le nom de la machine se trouve à 2 colonnes à gauche de la colonne de date
' lf = saut de ligne
If c.Value2 >= MaDate Then Machines = Machines & vbLf & 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 le " & _
" : " & vbLf & 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
Dans ce code-ci j'arrive à faire apparaître toutes les machines en maintenances en se fixant sur le critère >=MaDate (date du jour), sauf qu'avec le next il continue de me prendre des valeurs et ne s'arrête pas à une seule. De plus il parcourt ma plage de date de haut en bas et même si il s'était arrêter sur la première valeur >=MaDate il y a de forte chance pour que ce ne soit pas celle qui soit le plus proche de la date du jour.
Je ne sais pas si j'ai était clair, je reste à votre disposition pour toutes informations jugées nécessaires.
Ci-joint vous pouvez retrouver le excel en question.
Dans l'attente de vous lire,
Cordialement,
Babacool22