XL 2013 Macro et script vba : macro s'arrête dès la première condition trouvée

Janu44

XLDnaute Nouveau
Bonjour à tous,

Je suis sur excel 2013.
J'ai crée une macro pour envoyer des mails automatiques lorsqu'une condition de date est remplie (la date du jour) couplé à un script vba et le planificateur de tâche pour que l'envoi soit automatique.

L'envoi automatique se fait bien mais la macro n’envoie qu'un seul mail même s'il y a la condition plusieurs fois (désolé j'ai du mal à expliquer)

Lorsque je lance la macro via l’éditeur visual basic d'excel TOUS les mails sont bien envoyés.

Voici ma macro : J'ai super détaillée car je ne suis pas très douée ^^

VB:
Sub Envoi_mail()

 'définition des variables et du client de messagerie utilisé

    Dim NOM As String

    Dim DM As String

    Dim ENVOI2 As Date

    Dim Email As String

    Dim message As String

    Dim i As Long

    Dim OLApplication As Outlook.Application, OLMail As Outlook.mailItem

 

    Set OLApplication = CreateObject("Outlook.Application")


    With Feuil1.ListObjects(1)

 


 

       For i = 1 To .ListRows.Count

            NOM = .ListColumns("Nom").DataBodyRange(i)

            ENVOI2 = 0 ' pour dire que la colonne n'a pas forcément qu'une date mais ça ne marche pas :'(

            If IsDate(.ListColumns("ENVOI2").DataBodyRange(i)) Then ENVOI2 = .ListColumns("ENVOI2").DataBodyRange(i)

            Email = .ListColumns("Email").DataBodyRange(i)

            DM = .ListColumns("DM").DataBodyRange(i)

           

            If ENVOI2 = Date Then 'condition

           

                    'Envoi du mail

                    Set OLMail = OLApplication.createItem(olMailItem)

                    With OLMail

                   

                        .To = Email ' Destinataire

                        .CC = >Destinataire en Copie '(je n'en ai pas besoin)

                       '.BCC = CopieCarboneInvisible 'Destinataire en Copie Caché '(je n'en ai pas besoin)

                        .Importance = olImportanceNormal 'Niveau importance du mail

                        .Subject = "Fin de période d'essai " ' Sujet du mail

                        .Categories = "Daily"

                        .Display 'insertion signature

                   

                        message = "Salut " & DM & "<br>" & "<br>" & "Le délai de prévenance de fin de période d'essai de " & NOM & " arrive à échéance."

                       .HTMLBody = message & .HTMLBody

                    '   .Attachments.Add CheminDestination ' Pièce jointe '(je n'en ai pas besoin)

                    '   .OriginatorDeliveryReportRequested = True ' Accusé de dépôt '(je n'en ai pas besoin)

                    '   .ReadReceiptRequested = True 'Accusé de lecture '(je n'en ai pas besoin)

                       .Send 'Envoi du mail sans visualisation

                 

                    End With

               

                    Set OLMail = Nothing

               

            End If

   

        Next i

   

    End With


    Set OLApplication = Nothing


End Sub



'Prévoir un envoi automatiquement 1 fois le matin à l'ouverture du classeur (il s'ouvre automatiquement à l'ouverture de windows)

'avec le planificateur de tâches : créer un .vbs avec les instructions : ok ça fonctionne

'le code utilisé :

    'Option Explicit

    'On Error Resume Next

    'TacheExcel


    'Sub TacheExcel()


    'Dim ApplicationExcel

    'Dim ClasseurExcel


    'Set ApplicationExcel = CreateObject("Excel.Application")

    'Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\Users\04250-G2\Documents\Suivi_PE_TEST_moi.xlsm") 'ouvre excel


    'ApplicationExcel.Visible = True 'les actions seront visibles. Pour tout lancer en arrière-plan, remplacer True par False

    'ApplicationExcel.Run "'C:\Users\04250-G2\Documents\Suivi_PE_TEST_moi.xlsm'!Feuil1.Envoi_mail" 'va lancer la macro

    'ApplicationExcel.Quit 'pour quitter excel


    'Set ClasseurExcel = Nothing

    'Set ApplicationExcel = Nothing


    'End Sub

Merci pour votre aide :D
 

Pièces jointes

  • suivi-pe-test-moi.xlsm
    29.9 KB · Affichages: 5
Dernière édition:

Janu44

XLDnaute Nouveau
Bonjour Oneida,

J'ai du aller voir ce qu'était la différence entre un module et la feuille 😅...https://excel-downloads.com/threads/difference-entre-module-et-feuille.16493/

J'ai mis ma macro dans un module.

1695976139428.png


Mais du coup là je n'ai plus rien qui fonctionne. Lorsque j'exécute la macro, il ne se passe rien.

Dois-je modifier des éléments dans la macro ?

Pour info mon script .vbs lance le fichier excel nommé "Suivi_pe_test_moi" et lance la macro "Envoi_mail". Le planificateur de tâche ouvre le script à l'ouverture de ma session windows.
 

Pièces jointes

  • Macro_envoi_mail_fin_PE_test_moi[ne_pas_supprimer].txt
    683 bytes · Affichages: 4
Dernière édition:

Janu44

XLDnaute Nouveau
mais que suis-je bête 😂
ça ne fonctionnait pas car la condition n'était pas remplie...je n'avais pas changé la date pour tester

j'ai aussi changé la direction du fichier dans le script en pointant vers le module1

Merci Oneida 🤛
ça a l'air de fonctionner.

Si je vois que ça beug demain je reviendrais vous voir 😋
 

Janu44

XLDnaute Nouveau
Bonjour à tous,

Je reviens vous voir car j'ai un petit souci sur ma macro.

Lorsque le fichier s'ouvre (à l'ouverture de ma session windows) et qu'il y a plusieurs fois la condition, la macro envoi le 1er mail mais après elle annonce une Erreur d'exécution 462.
Lorsque je fais le débogueur il pointe la ligne "
Code:
.CC = reseau
".

Je dois fermer le tableau et relancer la macro depuis l'éditeur pour que ça fonctionne parfaitement.

Une idée ?

Voici le code final :

VB:
Sub Envoi_mail()
    ' Définition des variables et du client de messagerie utilisé
    Dim NOM As String
    Dim DM As String
    Dim ENVOI2 As Date
    Dim Email As String
    Dim Reseau As String
    Dim message As String
    Dim Entité As String
    Dim CONTRAT As String
    Dim delai_prevenance_employeur As String
    Dim i As Long
    Dim OLApplication As Object, OLMail As Object
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Feuil1") ' Remplacez "Feuil1" par le nom de la feuille

    Set OLApplication = CreateObject("Outlook.Application")

    With ws.ListObjects(1)
        For i = 1 To .ListRows.Count
            NOM = .ListColumns("Nom").DataBodyRange(i)
            ENVOI2 = 0 ' Pour dire que la colonne n'a pas forcément que des dates
            If IsDate(.ListColumns("ENVOI2").DataBodyRange(i)) Then ENVOI2 = .ListColumns("ENVOI2").DataBodyRange(i) 'condition sur la date, si c'est la date du jour alors action
            Email = .ListColumns("Email").DataBodyRange(i).Value ' Pour avoir la valeur de la colonne "Email"
            DM = .ListColumns("DM").DataBodyRange(i)
            Reseau = .ListColumns("Reseau").DataBodyRange(i).Value
            Entité = .ListColumns("Entité").DataBodyRange(i)
            CONTRAT = .ListColumns("Contrat").DataBodyRange(i)
            delai_prevenance_employeur = .ListColumns("delai_prevenance_employeur").DataBodyRange(i)
            

            If ENVOI2 = Date And Email <> "" Then ' Condition : date correspondante et e-mail non vide
                ' Envoi du mail
                Set OLMail = OLApplication.CreateItem(0) ' olMailItem
                With OLMail
                    .To = Email ' Destinataire
                    .CC = Reseau
                    '.BCC = CopieCarboneInvisible ' Destinataire en Copie Caché (je n'en ai pas besoin)
                    '.Importance = olImportanceNormal 'Niveau importance du mail
                    .Subject = "Fin de période d'essai & Entité" ' Sujet du mail
                    '.Categories = "Daily"
                    .Display ' Insertion signature
                    message = "Salut " & DM & "<br>" & "<br>" & "Le délai de prévenance de fin de période d'essai de " & NOM & " qui est en " & CONTRAT & " arrive à échéance le " & delai_prevenance_employeur & "."
                    .HTMLBody = message & .HTMLBody
                    ' .Attachments.Add CheminDestination ' Pièce jointe (je n'en ai pas besoin)
                    ' .OriginatorDeliveryReportRequested = True ' Accusé de dépôt (je n'en ai pas besoin)
                    ' .ReadReceiptRequested = True ' Accusé de lecture (je n'en ai pas besoin)
                    .Send ' Envoi du mail sans visualisation
                End With
                Set OLMail = Nothing
            End If
        Next i
    End With
 

Janu44

XLDnaute Nouveau
Bonjour Oneida.

Ci-joint le fichier.

J'ouvre mon fichier Excel à l'ouverture de windows avec une macro vbs que j'ai jointe.
 

Pièces jointes

  • VBS_ouverture_fichier_ouverture_session.txt
    711 bytes · Affichages: 1
  • Suivi_Periode_Essai_3 - Copie.xlsm
    53.6 KB · Affichages: 2

Discussions similaires

Réponses
7
Affichages
550

Statistiques des forums

Discussions
314 698
Messages
2 112 019
Membres
111 399
dernier inscrit
KDM