Envoi mail automatique selon critères de colonnes
Bonjour à tous,
Je ne m’y connais pas du tout en fonctions VBA, j’ai effectué des recherches sur internet mais n’ayant aucune base, je suis totalement perdue
J’espère qu’une âme charitable pourra m’éclairer.
J’ai un fichier Excel tout simple pour suivre les péremptions de produits alimentaire.
Mon idée serait d’envoyer un email automatique à plusieurs destinataires pour alerter que tels produits arrivent bientôt à péremption ou est déjà périmés. Et qu’il n’y est pas, bien évidemment, d'envois d'email si la date de consommation est encore bonne.
J’ai déjà réussi à paramétrer l’envoi d’un email lorsque les produits arrivent à péremption à J-7.
Mais j’aimerais enrichir la chose…
Voici mes questions :
- Est-il possible que l’envoi d’email se fasse automatiquement, une fois par jour sans ayant besoin d'ouvrir le fichier excel ? Si non, est-il au moins possible de limiter l’envoi à 1 mail par jour aux destinataires, si je programme une ouverture du fichier dès démarrage de mon PC ? Et de ne pas envoyer l’email dès que quelqu’un d'autre ouvre le fichier (nous sommes en réseau partagé)
- Est-il possible dans le corps de mail d'insérer les ligne concernées ( produits bientôt périmés ou périmés ) ou paramétrer le texte pour indiquer quels produits arrivent à péremption et éventuellement indiquer la date limite ?
Je reste à votre dispo pour répondre à toutes vos questions ou mieux vous expliquer les choses.
J’espère vivement que quelqu’un pourra me venir en aide
A très vite,
Voici le fichier si cela peut aider :
Bonjour,
Pour votre fichier, j'ai converti le tableau en tableau structurer. Il parait que c'est plus pratique et moi ça me permet d'apprendre cette parti en VBA ^^.
Le fichier lance une macro à l'ouverture pour savoir si il doit envoyer le mail ou non. Pour éviter plusieurs envoie le même jour, j'ai rajouter en E2 la date d’envoi du mail de péremption qui s'incrémente lors de l'envoie du mail.
Pour le corp de mail vous trouverez dans mon code un exemple intégrant le nom des produits périmé ou presque. Par contre il est a modifié car le mail ne veux rien dire.
Enfin pour le mail, il est en visualisation car les mails des destinataires sont inconnus donc un .send ne fonctionnerais pas dans ce cas.
Voici le code
Pour la vérification à l'ouverture.
Private Sub Workbook_Open()
If DateDiff("d", Range("E2"), Range("E1")) >= 1 Then alerte_peremption ' si ecart entre date du jour et date du mail >= 1jour alors faire la vérification des produits périmés
End SubPour la gestion du mail
Public der_ligne As Long, a As Long
Public produit_périmé As String, produit_bientôt_périmé As String
Sub alerte_peremption()
der_ligne = 0 'init variable
produit_périmé = "" 'init variable
produit_bientôt_périmé = "" 'init variable
der_ligne = Range("Tableau1[[#Headers],[N°]]").Offset(1).End(xlDown).Row
For a = Range("Tableau1[[#Headers],[N°]]").Offset(1).Row To der_ligne ' longueur prend en compte chaque ligne du tableau1
If Cells(a, Range("Tableau1[Statut]").Column) = "Bientôt périmé" Then 'vérification de l'état du produit
produit_bientôt_périmé = produit_bientôt_périmé & " ; " & Cells(a, Range("Tableau1[Article]").Column)
End If
If Cells(a, Range("Tableau1[Statut]").Column) = "Périmé" Then 'vérification de l'état du produit
produit_périmé = produit_périmé & " ; " & Cells(a, Range("Tableau1[Article]").Column)
End If
Next a
If produit_périmé <> "" Or produit_bientôt_périmé <> "" Then EnvoiMail 'si un des produits est périmés ou bientôt périmé alors envoyer le mail
End Sub
Sub EnvoiMail()
Set OutApp = CreateObject("outlook.application") 'Ouverture application hotmail
Set Outmail = OutApp.CreateItem(0) 'Ouverture nouveau mail
With Outmail
.Subject = "Alerte - Peremption catering"
.Body = "Bonjour, " & vbCrLf & vbCrLf _
& "Les produits suivants " & produit_périmé & " sont périmés merci de ..... " & produit_bientôt_périmé & " " & vbCrLf & vbCrLf _
& "Cordialement " & vbCrLf
' .Attachments.Add 'mettre le chemin de la pièce jointe ici
.Display 'affichage du mail
' .Send 'envoie du mail
End With
Set Outmail = Nothing
Set OutApp = Nothing
Range("E2") = Now 'Pour éviter plusieurs envois le même jour
End SubEt voici le fichier
Ahhh c'est super ca fonctionne ! Merci beaucoup ! Ca m'avance bien
J'ai encore quelques petites questions pour améliorer l'idée et nous faciliter la tâche :
- Est-ce que je suis obligé d'exécuter le macro moi-même pour que l'email parte ou pouvons nous faire quelque chose que l'envoi se fasse automatiquement dès ouverture du fichier ? ( Dans ce cas je paramétrai un ouverture automatique de ce fichier dès démarrage de mon PC )
- Ou y-a t-il un moyen pour que l'email parte sans avoir besoin d'ouvrir Excel ?
Merci merci merci beaucoup de votre aide !! C'est top, c'est déjà génial ce que vous avez fait !
La macro s'execute automatique à l'ouverture du fichier si elle n'a pas été lancé plus tôt ce même jour.
Par contre je ne sais pas faire ceci sans l'ouverture du fichier.
Si c'est bon pour vous penser ) mettre le sujet en résolu