IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

mail automatique en fonction d'une date


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut mail automatique en fonction d'une date
    Bonjour

    je vous explique mon petit problème (déjà savoir si cela est faisable ^^")

    je travaille en agroalimentaire et des fois nous avons besoin de faire un suivi sur nos produits a des dates spécifiques,

    et j'aimerai avoir un mail quand la date de sortie de ce produit est le jour même (ou du jour passé lorsque c'est le week end, histoire que lundi matin on reçoive les mails des produits qui sont sorti samedi dimanche et le lundi en question) pas sur d’être bien clair.

    ce fichier est partagé sur plusieurs postes et ce qui serait génial :
    - C'est que lorsque que quelqu'un ouvre ce fichier les mails partent à un certains nombre de destinataire prédéfini (4 maxi).
    - Que le mail soit envoyé qu'une seul fois dans la journée et ne soit plus renvoyer sur la même chose les jours suivant.


    Je vous joint le fichier en question pour être plus clair. (j'ai office 2016 et on a un PC avec office 2010)

    merci d'avance pour votre aide qui est toujours très précieuse
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2019
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2019
    Messages : 151
    Par défaut
    Bonjour à tous,

    Je ne suis pas un expert en VBA,
    mais oui cela est réalisable,
    il faudra ajouter (pour moi) 2 colonnes pour filtrer les dates,

    il n'y aura pas besoin d'ouvrir Excel, en créant une tâche planifiée sous Windows qui lancera tous les lundis à une heure précise un fichier VBScript (fichier *.vbs)
    qui lui à son tour :
    _ ouvrira Excel
    _ enverra les 4 mails via Outlook
    _ et refermera Excel.

    la tâche planifiée pourra être crée soit manuellement, soit en créant un AutoExecutable (fichier *.bat) via PowerShell (plus facile pour moi).
    cela paraît compliqué, mais j'ai 2 tâches planifiées qui s'exécutent automatiquement,
    une les jours de la semaine et une autre à une date bien précise pour me rappeler de renouveler certains documents (pour cette deuxième tâche, la date est automatiquement modifiée avec le fichier *.bat).

  3. #3
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    Bonjour

    et merci d'avoir pris le temps de lire mon message

    effectivement ce serait un truc comme cela qu'il me faudrait mais avec le scrip qui analyse tous les jours si des produits sortent a cette date (car il arrive souvent qu'il n'y pas de sortie de produit prévu et donc pas besoin d'envoi de mail)

    a voir comment le mettre en place par contre :/

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    aussi autodidacte VBA donc on va commencer par tester le code avec un bouton de commande et puis on va intégrer le code dans workbook_open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub test()
    Dim w1 As Worksheet
    Dim i As Long
    Dim D As Date
    Dim M As Object, OlApp As Object, Destinataire As String
    Application.ScreenUpdating = False
    D = Date
    Set w1 = Worksheets("Feuil1")
    Destinataire = "bennasr******@y****.fr" 'introduire votre mail ici
    For i = 2 To w1.Range("I" & Rows.Count).End(xlUp).Row
     
    On Error Resume Next
    If w1.Cells(i, "I") = D And w1.Cells(i, "I") <> "" Then
     
    w1.Cells(i, "J") = "Email Envoyé"
    Set OlApp = CreateObject("Outlook.application")
    Set M = OlApp.CreateItem(olMailItem)
    With M
    .Subject = "La date d'étalonnage de l'équipement suivant arrive à expiration ce mois-ci"
    .Body = w1.Cells(i, "A")
    .Recipients.Add Destinataire
    .Send
    End With
    End If
    Next i
    Application.ScreenUpdating = True
    End Sub

  5. #5
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    Bonjour merci à toi

    j'ai mis en place le code mais je n'arrive pas à l'associer a un bouton et je ne sais pas si elle fonctionne du coup :/

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    teste ça svp
    Fichiers attachés Fichiers attachés

  7. #7
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    teste ça svp
    merci à toi peux tu m'indiquer la marche a suivre pour l'affecter a un bouton (car depuis mon fichier s'est étoffé) la macro marche quand j'ouvre le fichier je reçois un mail

    et peux tu également me dire comment ajouter 3 autres destinataires stp?

    et que le fichier envoi qu'une seule fois le mail par jour au lieu qu'il l'envoi à chaque ouverture du fichier ^^"

  8. #8
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    pour ajouter un bouton :
    1/ onglet développeur / insérer / bouton de commande
    2/ remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Destinataire = "bennasr******@y****.fr" 'introduire votre mail ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Email = "n.rrrrr@xxxxx.com;" & _
                "g.hhhhhh@xxxxx.com;" & _
                "m.ggggggg@xxxxx.com"
     
    '
    '
    Destinataire =Email

  9. #9
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub test()
    Dim w1 As Worksheet
    Dim i As Long
    Dim D As Date
    Dim M As Object, OlApp As Object, Destinataire As String
    Application.ScreenUpdating = False
    D = Date
    Set w1 = Worksheets("Feuil1")
     
    Email = "aaaa_aaa@yahoo.fr;" & _
                "aaaa_aaa@yahoo.fr;" & _
                "aaaa_aaa@yahoo.fr"
     
    Destinataire = Email
    For i = 2 To w1.Range("I" & Rows.Count).End(xlUp).Row
     
    On Error Resume Next
    If w1.Cells(i, "I") = D And w1.Cells(i, "I") <> "" Then
     
    w1.Cells(i, "J") = "Email Envoyé"
    Set OlApp = CreateObject("Outlook.application")
    Set M = OlApp.CreateItem(olMailItem)
    With M
    .Subject = "La date d'étalonnage de l'équipement suivant arrive à expiration ce mois-ci"
    .Body = w1.Cells(i, "A")
    .Recipients.Add Destinataire
    .Send
    End With
    End If
    Next i
    Application.ScreenUpdating = True
    End Sub

  10. #10
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    pour ajouter un bouton :
    1/ onglet développeur / insérer / bouton de commande
    2/ remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Destinataire = "bennasr******@y****.fr" 'introduire votre mail ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Email = "n.rrrrr@xxxxx.com;" & _
                "g.hhhhhh@xxxxx.com;" & _
                "m.ggggggg@xxxxx.com"
     
    '
    '
    Destinataire =Email
    ca donne ca chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub mail()
    Dim w1 As Worksheet
    Dim i As Long
    Dim D As Date
    Dim M As Object, OlApp As Object, Destinataire As String
    Application.ScreenUpdating = False
    D = Date
    Set w1 = Worksheets("Feuil1")
    Email = "aaaaaa@aaaa.fr;" & _
                "zzzzzzz@zzzzzz.fr;" & _
                "lrrrrrrrrr@rrrrrrrr.fr"
     
    '
    '
    Destinataire = Email
    For i = 2 To w1.Range("I" & Rows.Count).End(xlUp).Row
     
    On Error Resume Next
    If w1.Cells(i, "I") = D And w1.Cells(i, "I") <> "" Then
     
    w1.Cells(i, "N") = "Email Envoyé"
    Set OlApp = CreateObject("Outlook.application")
    Set M = OlApp.CreateItem(olMailItem)
    With M
    .Subject = "sortie de réincubation"
    .Body = w1.Cells(i, "A") & w1.Cells(i, "B")
    .Recipients.Add Destinataire
    .Send
    End With
    End If
    Next i
    Application.ScreenUpdating = True
    End Sub
    mais dès que j'ajoute plusieurs destinataire ça n'envoi plus de mail, si je me met en seule destinataire cela fonctionne impec

  11. #11
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    teste ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub test()
    Dim w1 As Worksheet
    Dim i As Long
    Dim D As Date
    Dim M As Object, OlApp As Object, Destinataire As String
    Application.ScreenUpdating = False
    D = Date
    Set w1 = Worksheets("Feuil1")
     
    'Email = "bbbb_bb@yahoo.fr;" & "aaaa_aaa@yahoo.fr;" & "aaaa_aaa@yahoo.fr"
     
    'Destinataire = Email
    For i = 2 To w1.Range("I" & Rows.Count).End(xlUp).Row
     
    On Error Resume Next
    If w1.Cells(i, "I") = D And w1.Cells(i, "I") <> "" Then
     
    w1.Cells(i, "J") = "Email Envoyé"
    Set OlApp = CreateObject("Outlook.application")
    Set M = OlApp.CreateItem(olMailItem)
    With M
    .Subject = "La date d'étalonnage de l'équipement suivant arrive à expiration ce mois-ci"
    .Body = w1.Cells(i, "A")
    .Recipients.Add "bbbbb_abd@yahoo.fr;" & "hhhhh_abd@yahoo.fr;" & "ccccc_abd@yahoo.fr"
    .Send
    End With
    End If
    Next i
    Application.ScreenUpdating = True
    End Sub

  12. #12
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2019
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2019
    Messages : 151
    Par défaut
    Bonjour à tous,

    pour la tâche planifiée,
    il faudrait par exemple mettre les fichiers dans un répertoire comme :
    D:\TachePlanifiee\SuiviProduits\ (ici les fichiers)
    à confirmer

    concernant l'envoi des mails je pensais que c'était uniquement les lundis, pour cela une analyse avec une condition si OK -->envoi mail, SINON --> Réouverture le prochain lundi avec analyse etc
    mais le programme peut se lancer tous les jours si tu le veux,

    date d'envoi du mail à préciser : tous les jours ou les lundis (si condition OK)

  13. #13
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    j'ai essayé ton code tel quel mais cela ne fonctionne pas :/

    et petite question supplémentaire (un peu chiante sur les bords la fille ^^")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Body = w1.Cells(i, "A") & w1.Cells(i, "B")
    j'ai ajouter une cellule mais le hic c'est qu'il ne me met pas d'espace entre les info des 2 cellules dans le mail:
    ex A=Pomme et B=9200 dans le mail au lieu de me mettre "Pomme 9200" il m’écrit "Pomme9200" comment ajouter un espace?

    Encore merci pour tout

  14. #14
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Body = w1.Cells(i, "A") &"   "& w1.Cells(i, "B")

  15. #15
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Bonjour à tous,

    je suggère un petit changement:
    si la macro n'est pas lancée tous les jours, il faut vérifier si la date dans la cellule est égale ou antérieure à la date d'aujourd'hui et aussi si la colonne J est vide - ne contient pas "Email Envoyé".

    Changer la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If w1.Cells(i, "I") = D And w1.Cells(i, "I") <> "" Then
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If w1.Cells(i, "I") <= D And w1.Cells(i, "I") <> "" And w1.Cells(i, "J") = "" Then

  16. #16
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    Bonjour

    je vais essayer ça lundi (car le fichier est au boulot) mais avec cette forme est ce que si j'ouvre mon fichier plusieurs fois par jour il n'enverra qu'une fois l'alerte par mail ? Car j'aimerais voir si en le mettant en automatique au lieu de cliquer sur le bouton ce serait beaucoup mieux

  17. #17
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Bonjour adel542,
    le code est le même soit si on presse sur le bouton ou que la macro soit lancée automatiquement à l'ouverture du fichier.
    La première fois que le code est exécuté "Email Envoyé" est écrit dans la colonne J. L'alerte est envoyée une seule fois car avec w1.Cells(i, "J") = "" , on vèrifie si la colonne J est vide.
    Pour exécuter automatiquement la macro à l'ouverture du fichier le code doit être écrit dans le module ThisWorkbook (non dans un module standard), en changeant la première ligne
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_Open()
    J'espère que mon explication est claire

  18. #18
    Membre habitué
    Femme Profil pro
    technicienne
    Inscrit en
    Septembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : technicienne

    Informations forums :
    Inscription : Septembre 2019
    Messages : 13
    Par défaut
    hello merci à toi parfaitement clair je test ça lundi et je vous tiens au courant merci à tous

  19. #19
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2019
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2019
    Messages : 151
    Par défaut
    Citation Envoyé par TonyNiort79 Voir le message
    Bonjour à tous,

    Je ne suis pas un expert en VBA,
    mais oui cela est réalisable,
    il faudra ajouter (pour moi) 2 colonnes pour filtrer les dates,

    il n'y aura pas besoin d'ouvrir Excel, en créant une tâche planifiée sous Windows qui lancera tous les lundis à une heure précise un fichier VBScript (fichier *.vbs)
    qui lui à son tour :
    _ ouvrira Excel
    _ enverra les 4 mails via Outlook
    _ et refermera Excel.

    la tâche planifiée pourra être crée soit manuellement, soit en créant un AutoExecutable (fichier *.bat) via PowerShell (plus facile pour moi).
    cela paraît compliqué, mais j'ai 2 tâches planifiées qui s'exécutent automatiquement,
    une les jours de la semaine et une autre à une date bien précise pour me rappeler de renouveler certains documents (pour cette deuxième tâche, la date est automatiquement modifiée avec le fichier *.bat).
    Bonjour les amis,
    je ne vous ai pas oublié, mais 5mn plus tard je partais au travail,
    je n'ai pas beaucoup de temps devant moi car je cuisine aussi,
    et aujourd'hui pizza maison avec un bon gâteau au pommes avec la famille et amis,
    j'ai presque terminé le programme qu'il faudra adapter car je ne connais pas l'unité ni les chemins fichiers,
    j'ai presque résolu le problème des filtres automatiques comme cela il n'y aura pas besoin d'ajouter d'autres colonnes,
    à bientôt car le four me réclame.

  20. #20
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Septembre 2019
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Septembre 2019
    Messages : 151
    Par défaut
    Bonjour à tous,

    Ci-dessous les explications pour l’envoi d’un mail automatique sous Excel, Via le Planificateur des tâches de Windows comprenant diverses étapes avec quelques fichiers et leurs langages informatiques :

    Pour m’y retrouver dans une tâche planifiée, je dois structurer mes fichiers,
    je crée donc un répertoire "TachePlanifiee" sur le lecteur de mon choix
    (ou plutôt du lecteur qui est à ma disposition), mon seul choix (pour moi bien entendu)
    c’est le répertoire " I:\TachePlanifiee\SuiviProduits"

    Ma méthode :
    nommer les fichiers par ordre alphabétiques AB, AC, AD, etc... (pas de numérique, pas d’accents …), comme pour cet exemple :
    ABcreationTacheSuiviProduits.bat
    ACcommandeLancementBatchVBS.bat
    ADbatchLancementVBAExcel.vbs
    Suivi Des réincubations.xlsm

    Ce qui nous donnera cela,
    Nom : GestionnaireFichiers.jpg
Affichages : 1558
Taille : 40,2 Ko

    Le raccourci "Task Scheduler" n'est pas obligatoire, mais il me permet de vérifier immédiatement si la tâche est bien prise en compte dans le Planificateur des tâches, tout comme le fichier Excel qui sera dans son emplacement prévu.

    Les fichiers "*.bat" et "*.vbs" seront créés avec le Bloc-Notes en fichier texte, Puis il faudra changer l'extension "*.txt"

    Dans un premier temps j'ajoute donc l'extension "*.txt ", cela me permet de ne pas lancer le programme en double-cliquant par erreur ou autre.
    Cette extension je la supprimerai une fois le fichier terminé.

    ABcreationTacheSuiviProduits.bat.txt
    Pour plus de facilité je copie directement le code ci-dessous dans un fichier texte avec le Bloc-Notes

    Nom : Exemple Batch AB.jpg
Affichages : 1550
Taille : 44,6 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    echo Importing All Tasks
    echo.
    schtasks.exe /create /TN "ProchaineDate" /F /SC weekly /D MON /SD 11/11/2019 /ST 09:00:00 /TR "'I:\TachePlanifiee\SuiviProduits\ACcommandeLancementBatchVBS.bat'"
    echo.
    Des explications bien entendu (à ma portée d'autodidacte) sur le "Batch file" (fichier batch)
    La ligne "Importing All Task", veut dire que sous echo. Nous pouvons mettre plusieurs tâches planifiées sur plusieurs lignes, je n'ai pas trouvé mieux comme programme pour insérer une tâche planifiée.

    schtasks.exe Programme Planificateur des tâches
    /create création d'une tâche planifiée
    /TN "ProchaineDate" Nom de la tâche planifiée (TaskName)
    /SC weekly tâche Hebdomadaire
    /F Une valeur qui crée avec force la tâche et supprime les avertissements si la tâche spécifiée existe déjà (aide Windows)
    /D MON D pour Date et MON pour le Lundi (MONday)
    /SD date de départ de la tâche planifiée (StartDate)
    /ST heure de départ de la tâche planifiée (StartTime)
    /TR le chemin et le nom du fichier Batch à lancer (les lettres AC servent uniquement pour l'ordre chronologique des événements)

    Pour des adaptations quelques exemples très utiles :
    https://docs.microsoft.com/en-us/pre...ectedfrom=MSDN

    Pour ceux qui veulent créer une tâche manuellement :
    https://jpcheck.developpez.com/tutor...ous-windows-7/

    Pour des explications sur les fichiers Batch :
    https://windows.developpez.com/cours/ligne-commande/


    Une fois que nous avons créé la tâche il faut la vérifier,
    Je double-clic sur le Planificateur des tâches (Le raccourci "Task Scheduler" m'est bien utile)

    Et cela nous donne : (je clique sur la bibliothèque du Planificateur de tâches à gauche)
    Je selectionne ma tâche "ProchaineDate" qui se trouve sur la droite en bas

    Puis plus bas sur l'onglet "Déclencheurs",
    Confirmation, la tâche se déclenchera toutes les semaines à 7h40, tous les lundis à partir du 07/10/2019

    Nom : Détail planificateur Déclencheur.jpg
Affichages : 1585
Taille : 133,4 Ko

    Je clique maintenant sur l'onglet "Actions"
    Là aussi nous voyons que la tâche démarre un programme avec le chemin complet de ce fichier "*.bat"

    Nom : Détail planificateur Actions.jpg
Affichages : 1596
Taille : 113,2 Ko

    La tâche est insérée, nous pouvons refermer le Planificateur de tâches
    Si nous voulons modifier les paramètres nous pouvons le faire :
    Soit manuellement
    Soit en modifiant le fichier sans modifier le nom de la tâche, puis double-clic


    Passons maintenant au prochain fichier : ACcommandeLancementBatchVBS.bat
    Là aussi j'ajoute une extension .txt que je supprimerai après.
    Nous copions le code ci-dessous dans un nouveau fichier du Bloc-Notes


    Explications : il y a 2 commandes, cscript.exe lancera le fichier VBS qui ouvrira à son tour Excel,
    Ne pas oublier d'enlever l'extension "*.txt"

    Nom : Détail AC.jpg
Affichages : 1530
Taille : 25,9 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\windows\system32\cscript.exe I:\TachePlanifiee\SuiviProduits\ADbatchLancementVBAExcel.vbs
    prochain fichier : ADbatchLancementVBAExcel.vbs
    n'oublions pas que Excel et Outlook sont fermés
    dans ce fichier nous écrivons comme du VBA, nous pouvons écrire toute la procédure Excel,
    mais je préfère juste lancer la macro qui se trouvera dans le fichier concerné,
    comme ça, je pourrai l'utiliser dans une autre tâche, ce que je fais actuellement.

    Ne pas oublier l'ajout de l'extension "*.txt" qui sera supprimée après,
    Ajouter le code suivant (à adapter bien sûr suivant vos chemins répertoires et fichiers)

    Nom : Détail fichier VBS.jpg
Affichages : 1592
Taille : 71,3 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    On Error Resume Next
    ExempleMacroExcel
    Sub ExempleMacroExcel()
    Dim ApplicationExcel
    Dim ClasseurExcel
    Set ApplicationExcel = CreateObject("Excel.Application")
    Set ClasseurExcel = ApplicationExcel.Workbooks.Open("I:\TachePlanifiee\SuiviProduits\Suivi Des reincubations.xlsm")
    ApplicationExcel.Visible = False
    ApplicationExcel.Run "EnvoiMails"
    ApplicationExcel.Quit
    Set ClasseurExcel = Nothing
    Set ApplicationExcel = Nothing
    End Sub
    Enfin le fichier Excel : Suivi Des reincubations.xlsm
    Pour cette discussion, si j'ai bien compris :
    Ouverture Excel le lundi
    Lancement d'un mail a 4 destinataires pour prévenir des produits qui sont sorti le samedi, le dimanche et le lundi.
    Pour cela :
    Filtre automatique des dates concernées
    Création PDF des lignes concernées
    Envoi de 4 mails

    Dans le fichier j'ajouterai un onglet "Signature_Mails" qui pourra être masqué pour éviter toutes modifications
    Nous pouvons ajouter plusieurs destinataires sur une même ligne, les adresses devront êtres séparées d'un point-virgule ";" en "A20" "A21" "A22" "A23"

    Nom : SignatureMail.jpg
Affichages : 1598
Taille : 41,1 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub EnvoiMails()
     
    Dim CheminSuiviProduits As String
    CheminSuiviProduits = "I:\TachePlanifiee\SuiviProduits\"
     
    Dim DatePlus1Jour As Date
    Dim DateMoins3Jours As Date
    DatePlus1Jour = Date + 1
    DateMoins3Jours = Date - 3
    Sheets("Feuil1").Select
     
    'Filtre automatique
    ActiveSheet.Range("Zone_d_impression").AutoFilter Field:=9, Criteria1:=">" & Format(DateMoins3Jours, "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<" & Format(DatePlus1Jour, "mm/dd/yyyy")
     
    'Verification des dates a sortir avec Sous.Total
    Dim NbreDate As Integer
    NbreDate = WorksheetFunction.Subtotal(3, Sheets("Feuil1").Columns("I:I"))
    If NbreDate - 1 <= 1 Then GoTo PasDeMail:
     
    'Creation du fichier PDF qui sera envoye par mail
    Dim NomExcel As String
    Dim NomPdf As String
    NomExcel = ThisWorkbook.Path & "\" & ThisWorkbook.Name
    NomPdf = Left(NomExcel, Len(NomExcel) - 4) & "pdf"
    Sheets("Feuil1").Select
    Range("Zone_d_impression").Select
         Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomPdf _
         , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
         :=False, OpenAfterPublish:=False
     
    'Creation de mail Via l'Onglet "Signature-Mail"
        Dim Phrase1 As String
        Dim Phrase2 As String
        Dim Phrase3 As String
        Dim Phrase4 As String
        Dim Phrase5 As String
        Dim Phrase6 As String
        Dim Phrase7 As String
        Dim Phrase8 As String
        Dim Phrase9 As String
        Dim Phrase10 As String
        Sheets("Signature_Mail").Visible = True
        Sheets("Signature_Mail").Select
        Phrase1 = Sheets("Signature_Mail").Range("A1")
        Phrase2 = Sheets("Signature_Mail").Range("A2")
        Phrase3 = Sheets("Signature_Mail").Range("A3")
        Phrase4 = Sheets("Signature_Mail").Range("A4")
        Phrase5 = Sheets("Signature_Mail").Range("A5")
        Phrase6 = Sheets("Signature_Mail").Range("A6")
        Phrase7 = Sheets("Signature_Mail").Range("A7")
        Phrase8 = Sheets("Signature_Mail").Range("A8")
        Phrase9 = Sheets("Signature_Mail").Range("A9")
        Phrase10 = Sheets("Signature_Mail").Range("A10")
     
        Dim OutApp As Object
        Dim OutMail As Object
        Dim strbody As String
        Dim SigString As String
        Dim Signature As String
        Dim SigLogo As String
        Dim NomSujet As String
        NomSujet = "Liste des produits a sortir en date du " & Date
     
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
     
    strbody = "<p>" & Phrase1 & "<p>" & _
                Phrase2 & "<br>" & _
                Phrase3 & "<br>" & _
                Phrase4 & "<br>" & _
                Phrase5 & "<br>" & _
                "<B>" & Phrase6 & "</B><br> " & _
                Phrase7 & "<br> " & _
                Phrase8 & "<br> " & _
                Phrase9 & "<br>" & _
                Phrase10 & "<br>"
     'langage HTML
     '<p> sauter une ligne
     '<br> a la ligne
     '</B> en gras
     
        On Error Resume Next
        With OutMail
            .To = Sheets("Signature_Mail").Range("A20").Value
            .CC = Sheets("Signature_Mail").Range("A21").Value & ";" & Sheets("Signature_Mail").Range("A22").Value & ";" & Sheets("Signature_Mail").Range("A23").Value
            .BCC = ""
            .Subject = NomSujet
            .HTMLBody = strbody ' & "<img src='" & CheminFichier & "\" & "NomImage.png'></img></html>"
     
            'demande un accuse de reception
            '.OriginatorDeliveryReportRequested = True
            'demande un accuse de lecture
            '.ReadReceiptRequested = True
            .Attachments.Add NomPdf
            .Send
            '.Display
        End With
     
        On Error GoTo 0
        Set OutMail = Nothing
        Set OutApp = Nothing
     
    NomExcel = ThisWorkbook.Path & "\" & ThisWorkbook.Name
    NomPdf = Left(NomExcel, Len(NomExcel) - 4) & "pdf"
     
    Kill NomPdf
     
    Sheets("Signature_Mail").Visible = False
    Sheets("Feuil1").Range("A1").Select
     
    PasDeMail:
    ActiveSheet.Range("Zone_d_impression").AutoFilter
    ActiveWorkbook.Close SaveChanges:=False
    End Sub
    Concernant le Powershell, j'ai été un peu vite, cette commande me sert pour modifier la date du fichier ABcreationTache.Bat si des dates ne se suivent pas, ce qui n'est pas le cas ici.

Discussions similaires

  1. [XL-2010] Mail alerte en fonction d'une date
    Par luis18 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/12/2013, 19h44
  2. [AC-2010] Mailing Automatique en fonction de la date
    Par FishAndChips dans le forum VBA Access
    Réponses: 10
    Dernier message: 11/09/2012, 16h44
  3. Envoie mail automatique en fonction d'une date
    Par ju3979 dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 29/06/2009, 14h07
  4. Réponses: 2
    Dernier message: 25/09/2007, 20h03
  5. Réponses: 2
    Dernier message: 03/10/2005, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo