EXCEL : Envoi de mails automatisés

Résolu
Bonjour à tous,

Pour simplifier, voici tout de suite une version que j'ai rendu anonyme du fichier : http://cjoint.com/?CCpkkUIPc2S
.
Je vous explique mon problème :
.
J'ai une planning d'environ 50 personnes, sur le modèle du fichier.
.
Seulement voilà, j'ai peur d'oublier certains de mes RDV ou que mon contact l'oublie.
.
Du coup j'aimerais savoir s'il est possible par l'intermédiaire de Macros ou autres, d'envoyer automatiquement un mail de rappel (avec un texte automatique du genre "Sujet : Message automatique de rapel. Texte : Bonjour, pour rappel nous avons rendez vous ensemble aujourd'hui le #Date fichier# à #Heure RDV fichier#. Bien à vous, ....") le jour du rendez vous aux 2 personnes concernées à savoir moi et mon contact si la date du RDV correspond à la date en haut à droite
.
Pour infos les adresses mails sont sur la 2nd page, et j'utilise Outlook pour gérer mes mails.
.
Mais je ne sais si c'est possible pour 2 raisons :
.
1. Le document se met-il à jour automatiquement à minuit (donc le mail partirait à minuit) ou ne se met-il à jour que à l'ouverture de celui-ci ? De ce fait il faudrait que j'ouvre le document pour que les mails partent.
.
2. Est-il possible d'extraire des données d'une cellule pour les insérer dans le mail (Par exemple la date et l'heure de RDV)
.
En espérant pouvoir être aider, merci d'avance :)

16 réponses

  1. Bonjour,

    J'ai trouvé ce sujet en faisant une recherche,
    Je suis plus ou moins dans le même cas donc j'aimerais relancer ce sujet plutôt que de créer un doublon.

    Merci, et bonne journée
    0
    1. Salut,

      Avec Excel tout ou presque tout est possible.
      Je te conseille de passer directement en CDO, plus facile à gérer et automatiser l'envoi.
      Dans l'exemple ci joint il suffit de saisir en B3 l'adresse destinataire, en C1 le SMTP de son fournisseur d'accès et éventuellement un texte dans les cellules C3 à C10.
      l'envoi à plusieurs destinataire n'est pas un problème et le corps du message peut être saisi dans le code comme le SMTP, ainsi que le déclenchement de l'envoi peut se faire automatiquement sur un critère.

      A tester et on en reparle

      https://www.cjoint.com/c/CCsk3utDxuP
      0
      1. Bonjour Mike,

        Pour moi ton fichier est d'une grande aide, seulement j'ai un petit soucis au niveau des adresses mails !

        En effet il ne s'agit ni de free, ni de orange ect.. il s'agit d'une boite outlook avec pour extansion le nom de la boite (ex : Nom.Prenom@Nomsociete.com)

        J'ai essayé de rentrer ça dans les cellules, seulement j'ai un message d'erreur : 553 sorry, that domain isn't in my list of allowed rcpthost (#5.7.1)

        Je n'ai pas le moindre idée de ce que je peux y faire... Peux-tu m'aider ?

        Merci.
        0
        1. Re,

          En B2 ton adresse mail d'expéditeur

          et en B3 adresse mail du destinataire, pour tester tu peux mettre la tienne

          Nom.Prenom@Nomsociete.com

          en C1 tu dois avoir un SMTP de l'entreprise qui devrait ressembler à

          SMTP.Nomsociete.com

          pour t'assurer de ton smtp tu peux aller voir sur une adresse de messagerie sur Outlook/propriété/je crois que c'est sur un onglet serveur
          A+
          Mike-31

          Une période d'échec est un moment rêvé pour semer les graines du savoir.
          0
          1. Ok merci j'avance,

            Pour le SMTP j'ai mis SMTP.Outlook.com et ça à l'air de fonctionner.

            Un petit soucis avec l'authentification, mais j'ai vu que tu avais déjà tout préparé dans le VBA, donc j'ai pu résoudre le problème facilement.

            Cependant ce n'ai pas fini, maintenant lorsque je clique sur le bouton j'ai ce message qui apparait : "Compil Error : Variable not defined"
            Et dans le VBA :

            End Sub

            Sub Procédure_Envoi()
            Dim messageHTML As Variant
            Dim objMessage As Variant
            Dim piece_jointe As Variant

            Ce que j'ai mis en gras se surligne en jaune. (Encore désolé mais je suis plus que novice en VBA)

            Que puis-je faire ?

            Merci.
            0
            1. Re,

              Il est normal que Sub Procédure_Envoi() se mette en jaune si une erreur est rencontrée dans le code.
              pour détecter la ligne en erreur aller dans le visual basic et blocage/activer le pas à pas détaillé

              mais ton SMTP "SMTP.Outlook.com " ne peut être bon

              ouvre outlook, puis je crois que c'est dans outils/comptes
              ou tu devrais trouver ton adresse mail, clic dessus/propriété/ensuite clic sur tes onglets, je crois que c'est l'onglet serveur ou tu récupéreras les données de ton courrier sortant (SMTP) que tu rapporteras en C1
              0
              1. Ok, pour l'erreur VBA j'ai ceci (en gras) qui se surligne :

                objMessage.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
                objMessage.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "***"
                objMessage.Configuration.Fields.Item _
                ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "***"

                Huuum, question : dois-je laisser les " " autour de mon nom d'utilisateur et de mon mot de passe ?

                Sinon pour mon SMTP, je ne trouve pas... Car dans l'outlook professionnel mis en place dans mon entreprise je n'ai pas l'onglet "outils" et je ne trouve rien lié aux comptes.
                La seule info que je trouve c'est "Serveur Microsoft exchange : eu-casarray.nomsociété.net"

                Encore désolé pour le dérangement, j'ai l'impression de te demander 150 fois la même chose mais de ne jamais comprendre !

                Merci d'avance.
                0
                1. Bonjour à tous,
                  Je me pose un peu la, mais as-tu pensé à cocher la librairie CDO dans Outils>Références ?
                  Le nom de la librairie : "Microsoft CDO for Windows XXXX Library"
                  0
                2. Effectivement je ne l'avais pas fais, mais j'ai changé de macro à l'heure actuelle.

                  Ce problème est donc résolu, mais il m'en reste d'autre (Cf. Un peu plus bas) peut-être pourras-tu m'aider !
                  0
              2. Re,

                Dans le code, ces lignes sont isolées et ne doivent être libérées et renseignées que dans le cas ou la connexion nécessite une authentification(dans ce cas l'apostrophe en tête de ligne doit être supprimée)

                soit remettre l'apostrophe en tête de ligne ou supprimer ces lignes

                Il est impératif de connaitre le SMTP pour renseigner la cellule C1 ou directement l'insérer dans le code
                0
                1. Bonjour Mike,

                  J'ai du retirer l'apostrophe et renseigner ces lignes justement car j'ai eu un message d'erreur qui me disait que je devais m'authentifier !

                  Je ne trouve rien de plus pour mon SMTP, je vais laisser tomber ça sera plus simple ! J'enverrais mes mails à la main et pis c'est tout.

                  Merci encore pour ton aide, et pour le temps que tu m'as consacré.

                  Bonne journée
                  0
                  1. Ce post est juste à titre informatif pour ceux qui chercheraient à faire la même chose.

                    J'ai finalement réussi à faire ce que je voulais à savoir un bouton qui envoi une page Excel voici le VBA :

                    Sub PDFMAIL()

                    Application.DisplayAlerts = False

                    Dim ObjOutlook As Object
                    Dim oBjMail
                    Dim pj As String
                    Dim Corps As String

                    Sheets("Feuil3").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                    "P:\AAA Test\" & [B2] & ".pdf", Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False _

                    pj = "P:\AAA Test\" & [B2] & ".pdf"

                    Set ObjOutlook = CreateObject("outlook.application")
                    Set oBjMail = ObjOutlook.CreateItem(olMailItem)

                    If pj = "Faux" Then Exit Sub
                    If VarType(pj) = vbBoolean Then Exit Sub

                    Corps = "Bonjour, " & "<br><br>" _
                    & "1000ème TEST DE CETTE MERDEEEEEEEEEEEE " & "<br>" _
                    & "je reste à votre disposition pour tous renseignement complémentaire " & "<br>" _

                    With oBjMail

                    .To = [A2].Value
                    .CC = [A3].Value
                    .Subject = "test 1, 2 .. 3 ? "
                    .Attachments.Add pj
                    .HTMLBody = ""
                    .BodyFormat = 2
                    .GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
                    .HTMLBody = Corps & oBjMail.HTMLBody
                    .Send

                    End With

                    Kill "P:\AAA Test\" & [B2] & ".pdf"
                    Application.DisplayAlerts = True

                    End Sub

                    Voilà, si j'ai réussi alors que je n'avais absolument AUCUNE notion en VBA avant cette semaine, juste grâce à l'aide de Mike (les explications que tu avais dans le premier VBA m'ont beaucoup aidé) et d'un peu de persévérance c'est que tout le monde peut réussir.

                    Bonne journée !
                    0
                    1. Re,

                      essaye de simplifier en remplaçant l'adresse de la pièce jointe "P:\AAA Test\" & [B2] & ".pdf"
                      par la syntaxe ActiveWorkbook.Path & "\" & [B2] & ".pdf" ce qui t'évitera de saisir le chemin du fichier et surtout de te tromper

                      Sub PDFMAIL()
                      Application.DisplayAlerts = False
                      Dim ObjOutlook As Object
                      Dim oBjMail
                      Dim pj,Corps As String
                      Sheets("Feuil3").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                      ActiveWorkbook.Path & "\" & [B2] & ".pdf", Quality:=xlQualityStandard, _
                      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False _

                      pj = ActiveWorkbook.Path & "\" & [B2] & ".pdf"

                      Set ObjOutlook = CreateObject("outlook.application")
                      Set oBjMail = ObjOutlook.CreateItem(olMailItem)

                      If pj = "Faux" Then Exit Sub
                      If VarType(pj) = vbBoolean Then Exit Sub
                      Corps = "Bonjour, " & "<br><br>" _
                      & "1000ème TEST DE CETTE MERDEEEEEEEEEEEE " & "<br>" _
                      & "je reste à votre disposition pour tous renseignement complémentaire " & "<br>" _

                      With oBjMail
                      .To = [A2].Value
                      .CC = [A3].Value
                      .Subject = "test 1, 2 .. 3 ? "
                      .Attachments.Add pj
                      .HTMLBody = ""
                      .BodyFormat = 2
                      .GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
                      .HTMLBody = Corps & oBjMail.HTMLBody
                      .Send
                      End With
                      Kill ActiveWorkbook.Path & "\" & [B2] & ".pdf"
                      Application.DisplayAlerts = True

                      End Sub

                      0
                      1. Salut Mike,

                        Oui tu as raison écrire le chemin peut-être un problème, surtout que j'ai assez souvent l'erreur : Run time error : '-2147024773 (87007b) Document not Saved
                        Et je ne sais absolument pas à quoi elle est du, puisque des fois l'erreur survient, et des fois le mail s'envoie sans soucis. Si tu as une idée, je suis preneur d'ailleurs.

                        Par contre si j'ai choisit cette option, c'est que je pense exporter cette macro à d'autres documents et pour certains je vais devoir garder une copie de la pièce jointe (J'ai juste à supprimer la ligne "Kill ..." dans la macro) et avec ta syntaxe je ne sais pas où va se sauvegarder le fichier, ce qui peut-être problématique !

                        Si tu as des solutions à ces problèmes (toi ou quelqu'un d'autre) je suis preneur !

                        Merci d'avance
                        0
                        1. Re,

                          "Run time error"= "erreur de délai d'exécution"
                          tout dépend de la ligne qui génère l'erreur, il suffit de mettre un temporisateur de sorte à retarder d'une seconde l'application de la ligne afin de laisser le temps à la ligne précédente de terminer l'action

                          cette syntaxe ActiveWorkbook.Path permet d'enregistrer la copie dans le même répertoire que le fichier source
                          0
                          1. Merci pour ces précisions !

                            Je viens d'essayer avec ta syntaxe mais l'erreur reste la même.

                            La ligne qui génère l'erreur est :

                            Sheets("RDV du jour").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                            ActiveWorkbook.Path & "\" & [B2] & ".pdf", Quality:=xlQualityStandard, _
                            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

                            Comment puis-je mettre un délai ?

                            J'aurais une autre question pour toi, comment mettre un message de confirmation avant l'envoi du mail (Ex : une boite de dialogue qui survient au clic et qui demande "Êtes-vous sûr de vouloir envoyer ce mail ?" Oui - Non)

                            Merci.
                            0
                            1. Je me répète mais j'ai vraiment besoin d'aide...

                              Voici mon VBA complet :

                              Sub PDFMAIL()

                              Application.DisplayAlerts = False

                              Dim ObjOutlook
                              Dim oBjMail
                              Dim pj As String
                              Dim Corps As String

                              Sheets("RDV").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                              ActiveWorkbook.Path & "\" & [B2] & ".pdf", Quality:=xlQualityStandard, _
                              IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


                              pj = ActiveWorkbook.Path & "\" & [B2] & ".pdf"

                              Set ObjOutlook = CreateObject("outlook.application")
                              Set oBjMail = ObjOutlook.CreateItem(olMailItem)

                              If pj = "Faux" Then Exit Sub
                              If VarType(pj) = vbBoolean Then Exit Sub

                              Corps = [D13].Value & vbCrLf & "<br>" _
                              & [D14].Value & vbCrLf & "<br>" _
                              & [D15].Value & vbCrLf & "<br>" _
                              & [D16].Value & vbCrLf & "<br>" _
                              & [D17].Value & vbCrLf & "<br>" _
                              & [D18].Value & vbCrLf

                              With oBjMail

                              .To = [D5].Value
                              .CC = [D7].Value
                              .Bcc = [D9].Value
                              .Subject = [D11].Value
                              .Attachments.Add pj
                              .HTMLBody = ""
                              .BodyFormat = 2
                              .GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute
                              .HTMLBody = Corps & oBjMail.HTMLBody
                              .Send

                              End With

                              Kill ActiveWorkbook.Path & "\" & [B2] & ".pdf"
                              Application.DisplayAlerts = True

                              Exit Sub
                              errorHandler:
                              MsgBox Err.Description

                              MsgBox "Le mail a été bien envoyé !"

                              End Sub


                              Ce que j'ai mis en gras, c'est l'endroit où est localisé mon erreur, à savoir :
                              VBA Runtime error : '-2147024773 (8007007b)

                              Et pour infos : https://www.computerperformance.co.uk/

                              D'après ce que j'ai compris, il manquerait quelque chose, un élément, un caractère ou je ne sais quoi dans cette partie de mon VBA.. Mais n'étant qu'un débutant je n'ai pas la moindre idée de ce que cela pourrait être.

                              En espérant que quelqu'un puisse m'aider, merci.
                              0
                              1. Problème réglé.

                                Merci quand même.
                                0