Problème tableur automatisation envoi de mail à échéance

Bonjour à vous,

Je me permets de vous solliciter car je rencontre une difficulté pour automatiser l'envoi de mails depuis mon tableur (vous trouverez le détail de mon besoin en fichier joint).

Je me suis inspiré de cette proposition pour créer ma macro :

Sub Alertes()

    Dim C As Range, OL As Object, M As Object, Plage As Range

    Set olApp = CreateObject("Outlook.application")

    With Sheets("Feuil1")

        Set Plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))

    End With

    For Each C In Plage

        If C.Offset(, 1) - Date = 3 Then

            Set M = olApp.CreateItem(olMailItem)

            With M

                .Subject = C.Offset(, 3)

                .Body = C.Offset(, 4)

                .Recipients.Add C.Offset(, 2)

                '.display

                .Send

            End With

        End If

    Next C

End Sub

La macro fonctionne dans un simple tableau avec une

seule colonne de date (j'ai intégré cdo car je préfère ne pas utiliser outlook). La voici :

Sub EnvoiMailCDO()

    Dim C As Range, OL As Object, M As Object, Plage As Range

    Set olApp = CreateObject("CDO.Configuration")

    With Sheets("Feuil2")

        Set Plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))

    End With

    For Each C In Plage

        If C.Offset(, 5) - Date = 3 Then

            Set mConfig = CreateObject("CDO.Configuration")

            mConfig.Load -1

            Set mChps = mConfig.Fields

            With mChps

                .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

                .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"

                .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465

                .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"

                .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "***@gmail.com "

                .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "****"

                .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = "True"

                .Update

            End With

            Set mMessage = CreateObject("CDO.Message")

            With mMessage

                Set .Configuration = mConfig

               .To = C.Offset(, 2)

            .From = "***"

                .Subject = "Echéance projet *** à venir"

                .TextBody = C.Offset(, 4).Text & "Bonjour, je vous informe que d'ici 3 jours il conviendra de **"

                 .Send

            End With

        End If

    Next C

End Sub

Cependant mon besoin porte sur un nombre important de colonnes de dates à cibler pour l'envoi des mails (ainsi que sur plusieurs projets).

Par ailleurs, je souhaite différencier le destinataire selon le projet en question.

Et ajouter un autre destinataire en copie.

Je précise que je débute en VBA, j'ai essayé de trouver des exemples qui correspondraient à mon besoin mais je n'ai pas trouvé de solution adéquate. J'ai essayé de m'inspirer de ce qui existait, mais cette méthode a clairement ses limites.

Donc si quelqu'un aurait un peu de temps à consacrer à ce problème, je lui en serais vraiment reconnaissant. Merci par avance.

26envoi-mail-cdo.xlsm (20.28 Ko)

bonjour,

une proposition

Sub EnvoiMailCDO()
    Dim C As Range, OL As Object, M As Object, Plage As Range
    Set olApp = CreateObject("CDO.Configuration")
    With Sheets("Feuil1")
        Set Plage = .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp))
        ncol = .Cells(2, Columns.Count).End(xlToLeft).Column
    End With
    Set mConfig = CreateObject("CDO.Configuration")
    mConfig.Load -1
    Set mChps = mConfig.Fields
    With mChps
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = "1"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "***@gmail.com "
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "****"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = "True"
        .Update
    End With
    For Each C In Plage
        For i = 5 To ncol
            If C.Offset(, i) - Date = 3 Then
                    Set mMessage = CreateObject("CDO.Message")
                    With mMessage
                        Set .Configuration = mConfig
                        .To = C.Offset(, 2)
                        .From = "***"
                        .Subject = "Echéance projet *** à venir"
                        .TextBody = C.Offset(, 4).Text & "Bonjour, je vous informe que d'ici 3 jours il conviendra de **"
                        .Send
                    End With
                     Exit For
            ElseIf C.Offset(, i) - Date > 3 Then
                Exit For
            End If
        Next i
    Next C
End Sub

Bonjour h2so4 (mon sauveur),

Un grand merci pour ta réponse rapide. Ça marche !!

Je vais essayer de rajouter un destinataire, en colonne d.

Sinon comme le tableur risque d'être ouvert plusieurs fois dans la journée, je vais aussi chercher une solution pour que le tableur indique si le mail a été envoyé (pour éviter les doublons). Si je trouve pas je reviendrai par ici.

Ensuite je mettrai sujet résolu.

Merci encore !

Rechercher des sujets similaires à "probleme tableur automatisation envoi mail echeance"