VBA Mail automatique, vraiment

Bonjour !

Avant de commencer je voulais d'abord dire que j'ai un niveau très médiocre avec les VBA malgré plusieurs exercices, je n'y arrive vraiment pas et pourtant j'ai bien essayé de m'attarder sur le sujet,

Je rencontre un petit problème avec mon fichier (étant trop volumineux je ne peux l'associer),

J'aimerai que quand une valeur dans la colonne C1 est ajouté ca envoie un mail directement à deux personnes (disons TestA@x.com et TestB@X.com),

mais voila je n'y arrive pas du tout et cela malgré plusieurs tuto, forum etc...,

à savoir que la plateforme de messagerie est Outlook,

Y aurait-il une âme charitable pour m'aider a résoudre ce problème? J'en serai vraiment très reconnaissant...

Par avance, merci beaucoup,

Cordialement,

ma macro :

Je m'excuse par avance de mon niveau médiocre

image

petite rectification, je voulais dire dans la colonne C

cordialement,

bonjour Dylan,

le problème se situe où ? Si vous remplacer ".Send" par ".display", est-ce que vous achevez le mail sur votre écran ? Si non, ça bloque où ?

bonjour,

J'ai changé .send par .Display mais rien ne se passe et je ne reçois aucun mail je pense donc que ma macro est erroné cependant je ne trouve pas de solution, lorsque je met une valeur dans la colonne C rien ne se passe

re,

schermafbeelding 2022 06 09 113511

ces 2 lignes ".to et .CC" doivent remplacer ces 2 lignes après "With Outlook"

Puis placer le souris au début de cette macro et utilitez F8 pour avancer pas à pas et regardez ou ça bloque.

Si excel donne un message, c'était quoi ?

la liste des erreurs ;

capture d ecran 2022 06 09 115847

le message d'erreur

capture d ecran 2022 06 09 115925

Je suis perdu pour cette Macro je ne comprend pas comment rectifier cette dernière...

Re,

tu es sûr que c'est "Feuill1", n'est-ce pas "Feuil1" ?

5dylan.xlsb (209.08 Ko)

Effectivement petite faute de frappe de ma part... en tout cas ça fonctionne super bien c'est parfait merci beaucoup je voulais juste savoir, est ce que c'est possible que le mail s'envoie automatiquement dès lors qu'une valeurs est inscrite dans une colonne spécifique ? Si oui comment je pourrai faire svp,

par avance merci

bonjour,

ce que vous demandez, c'est un petit peu sursauter Microsoft. Ils ne veulent pas envoyer en automate des messages. C'est pourquoi vous obtenez un "popup".

Il y a un détour possible. Au moment ou le message est sur l'ecran, vous faites (vous même en manuel) un "CTRL+Enter" et le message est envoyé. Essayez !

Maintenant, on peut evoquer cela avec "SendKeys", mais savez que ce n'est pas une solution à 100% (mais presque). Il faut donner le système un peu de temps pour preparer tout, c'est tirer à l'aveugle et esperer que tout est prêt. Avec ce 5 et 2 secondes, cela suffit pour 99.99% des cas, on peut même diminuer cela mais alors le risque, que Outlook ne sera pas prêt, augmente.

Donc, quand vous lancez cette macro, Outlook prepare le message sur écran (presque instantanément), on attend 5 secondes, le sytème fait un CTRL+Enter (aveugle) et attend de nouveau 2 secondes. Si c'etait un echec, le message reste ouvert sur l'ecran.

4dylan.xlsb (209.95 Ko)
Sub Mail_Outlook_intermédiaire()
     Dim OutApp As Object
     Dim OutMail As Object
     Set OutApp = CreateObject("outlook.application")
     With OutApp.createitem(0)
          .to = Worksheets("Feuil1").Range("B1").Value    'C'EST FEUILL1 OU FEUIL1 ?????
          .CC = Worksheets("Feuil1").Range("B2").Value
          .BCC = Worksheets("Feuil1").Range("B3").Value
          .Subject = "suject dfqdfqf " & Worksheets("Feuil1").Range("B4").Value
          .Body = "fqdfqsfqsf dfssdfdfq qf qdsfq  " & vbLf & Worksheets("Feuil1").Range("B5").Value
          .Display

          DoEvents
          Application.Wait (Now + TimeSerial(0, 0, 5))     'donnez assez de temps à Outlook de préparer l'email
          DoEvents
          CreateObject("WScript.Shell").SendKeys ("^{Enter}"), True     'evoquer un CTRL+Enter (esperant que outlook le comprend)
     'CreateObject("WScript.Shell").SendKeys ("%S"), True     'evoquer un ALT+S (esperant que outlook le comprend)
          Application.Wait (Now + TimeSerial(0, 0, 2))     'donnez assez de temps à Outlook pour reagir
          DoEvents

     End With
End Sub

d'accord merci beaucoup pour votre réponse, et pour que quand une valeur est ajoutée en colonne C, un mail s'envoie avec cette dîtes valeurs. Est-ce possible vous pensez?

re,

regardez dans la module de la feuille "Feuil1"

J'ai ajouté quelque messages sur le "statusbar", de manière que vous voyez le progrès de la macro et j'ai diminuer ces 5 secondes à 3 ...

Private Sub Worksheet_Change(ByVal Target As Range)
     With Target
          If .Count > 1 Then Exit Sub     'on ne peut changer qu'une cellule à la fois, autrement fini
          If Target.Column <> 3 Then Exit Sub     'on n'a pas changé quelque chose dans la colonne C = fini
          If Range("C" & Rows.Count).End(xlUp).Row <> .Row Then Exit Sub     'c n'est pas la derniere cellule en colonne C qui est modifiée
          Mail_Outlook_intermédiaire
     End With
End Sub
7dylan.xlsb (211.73 Ko)

Ca fonctionne super bien merci énormément je vais essayer de trouver le moyen pour que la dernière données entrées en colonne C soit dans le corps du mail, Mais en tout cas je vous remercie grandement !

re,
je ne l'ai pas testé, quelque chose comme ca, on peut même agrandir le format si on veut ...
.Body = "les dernières données ...... " & vbLf & Worksheets("Feuil1").Range("C" & rows.count).end(xlup).Value

a condition que cette cellule C est numérique !

Sub Mail_Outlook_intermédiaire()
     Dim OutApp As Object
     Dim OutMail As Object
     Application.StatusBar = "Debut macro": DoEvents
     Set OutApp = CreateObject("outlook.application")

     tekst0 = "Ici le dernier changement dans colonne C" & vbLf & "Son valeur est <début>" & Format(Range("C" & Rows.Count).End(xlUp).Value, "€ #,##0.00") & "<fin> pour une semaine "
     tekst1 = Replace(tekst0, Chr(10), "<br>")     'vervang de linefeeds door <br>
     tekst1 = Replace(tekst1, "<début>", "<b><font size=""5"" font face=""calibri"" color=""red"">")     'vervang <begin> door aangepaste font, kleur en grootte
     tekst1 = Replace(tekst1, "<fin>", "</font>")     'vervang <einde> door normale font, kleur en grootte

     With OutApp.createitem(0)
          .to = Worksheets("Feuil1").Range("B1").Value    'C'EST FEUILL1 OU FEUIL1 ?????
          .CC = Worksheets("Feuil1").Range("B2").Value
          .BCC = Worksheets("Feuil1").Range("B3").Value
          .Subject = "suject dfqdfqf " & Worksheets("Feuil1").Range("B4").Value
          .htmlBody = tekst1
          .Display
          Application.StatusBar = "Displayed": DoEvents

          DoEvents
          Application.Wait (Now + TimeSerial(0, 0, 3))     'donnez assez de temps à Outlook de préparer l'email
          DoEvents
          Application.StatusBar = "Sendkeys": DoEvents
          CreateObject("WScript.Shell").SendKeys ("^{Enter}"), True     'evoquer un CTRL+Enter (esperant que outlook le comprend)
     'CreateObject("WScript.Shell").SendKeys ("%S"), True     'evoquer un ALT+S (esperant que outlook le comprend)
          Application.Wait (Now + TimeSerial(0, 0, 1))     'donnez assez de temps à Outlook pour reagir
          Application.StatusBar = "": DoEvents
          DoEvents
     End With
End Sub

Tout fonctionne à merveille merci d'avoir pris de votre temps c'est super gentil !

Bien cordialement !

Rechercher des sujets similaires à "vba mail automatique vraiment"