Problèmes macro VBA envoi mail

Résolu/Fermé
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011 - Modifié par 95Hub le 18/11/2010 à 09:16
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011 - 22 nov. 2010 à 19:16
Bonjour,

J'ai adapté un code pour envoyer un mail en automatique quand je rentre une date dans mon fichier excel.
voici ma macro =

(Dans Worsheet )
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For I = 3 To 2000
If Range("e" & I) <> "" Then
Call EnvoiMail
End If
Next I
End Sub

------
(dans module)

Sub EnvoiMail()
For I = 3 To 2000
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)
MonMessage.to = Range("c" & I)
MonMessage.Cc = "humo@live.fr"
MonMessage.Subject = "Votre demande de travaux"
Corps = "Bonjour,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Vous nous avez contacté pour une demande que nou savons enregistrée comme :"
Corps = Corps & Chr(13) & Range("d" & I).Value
Corps = Corps & Chr(10)
Corps = Corps & "Sont statut est : "
Corps = Corps & Chr(10) & Range("f" & I).Value
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Cordialement,"
MonMessage.body = Corps
MonMessage.Send
Set MonOutlook = Nothing
Next I
End Sub

1 - Je voudrais que ma macro m'envoie le mail ligne par ligne 1 seule fois, pour le moment dès que 'jouvre mon fichier, les mails tournent en boucle et je renvoie chaque ligne indéfiniment !!!
2- je pense que le pb vient de ma macro sous worksheet qui fait appel à mon module mais je ne sais pas où. Comment puis faire en sorte que à chaque ligne enregistrée, le mail ne parte qu'nue seule fois.
3-J'ai trouvé ce code sur le net et je voudrais en fait que le mail ne parte pas tout seul, mais que mon mesage s'affiche et que ce soit l'utilisateur qui appuie sur envoyer.
4- J'ai un code erreure 287 (je n'ai pas compris la rubriquque d'aide ôO)Si quelqu'un peut m'aider.
Je vous remercie d'avance.
Cordailement,
A voir également:

6 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 nov. 2010 à 12:35
Ton classeur en retour
Taper la date dans la colonne E = envoyer le mail de prise en charge.
Taper ENSUITE, la date dans la colonne H = envoi du mail de fin.
NE PAS envoyer par outlook, envoyer par le message d'excel en cliquant sur ENVOYER pour que les cellules s'actualisent.
J'ai pas tester jusqu'a l'envoi, Outlook n'est pas installer sur mon PC.
Le message que tu envoi n'est pas fort... commercial !!
Tu dis.
1
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011
22 nov. 2010 à 14:54
Merci Lermite222
C'est génial.
J'ai eu un message d'erreur au démarrage, j'ai ajouté dans option explicit : Public corps as string (c'est peut être pas la bonne méthode, mais ça fonctionne).
Par contre le UserForm conserve le nom de la première ligne de la colonne D.
Est-ce que je suis obligé de passer par un UF? Le message Outlook s'ouvre automatiquement et je peux appuyer sur le bouton envoyer du message. C'est d'ailleurs ce que je souhaiterai faire, au cas où on voudrait ajouter une personne en copie autre que les personnes prévues.
En tout cas, merci beaucoup.

Tu as raison, mon message n'est pas terrible, je pofinerai plus tard, pour l'instant c'est le fonctionnement que je cherchais, la mise en forme on verra après ;)

Cordialement,
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 nov. 2010 à 16:21
Tu supprime dans EnvoiMail1 et 2
    Mode = 1
    UFenvoyer.Show 0

Mais les cellules ne se rempliront plus avec En Cour et Terminer, il faudra le faire manuellement.
A+
1
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011
22 nov. 2010 à 19:16
Merci lermite222,
J'ai remis une formule pour avoir al mise à jour du statut des demandes et grace à toi, ça marche à merveille, c'est exactement ce que je cherchais à faire (le savoir faire en moins :) )
Je revois le texte finale et la mise en forme et c'est parti.
Encore merci.
A+
0
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011
19 nov. 2010 à 00:41
Est-ce que quelqu'un a une idée pour que cette macro ne tourne pas en rond bettement?
merci d' avance.
Cordialement,
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 nov. 2010 à 22:17
Bonjour,
D'abord tu devrais mettre l'appel dans...
Private Sub Worksheet_Change(ByVal Target As Range)
'Ne sera appelé qu'en cas de changement
'Faudrait aussi tester si c'est bien la cellule avec la date qui change...

End Sub


Et tu te demande pourquoi ça tourne en rond ? tu à une boucle de 2000 dans le code de la feuille ET..ET .. ET une boucle de 2000 dans la macro.
supprime celle de la feuille

Quand tu change UNE date tu envoi des mail à tout le monde ??
A+
0
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011
21 nov. 2010 à 22:57
Merci lermite222,
J'ai supprimé mon code dans woksheet et modifié mon module.
Dans worksheet je demande à mes checkbox d'appeler ma macro quand elles sont "true"
mais je suis obligé de faire cette commande sur chaque checkbox (ça risque d'être long)
j'ai mis dans mon module :

Sub EnvoiMail2()
For i = 3 To 10
If Range("e" & i).Value <> "" Then
Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)
MonMessage.To = Range("c" & i)
MonMessage.Cc = "humo@live.fr"
MonMessage.Subject = "Votre demande de travaux"
Corps = "Bonjour,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Vous nous avez contacté le :"
Corps = Corps & Chr(32) & Range("e" & i).Value
Corps = Corps & Chr(32) & "pour une demande que nous avons enregistrée comme :"
Corps = Corps & Chr(32) & Range("d" & i).Value
Corps = Corps & Chr(10)
Corps = Corps & "Sont statut est :"
Corps = Corps & Chr(32) & Range("g" & i).Value
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Nous vous tiendrons informé, de l'avancement de votre demande."
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Cordialement,"
MonMessage.body = Corps
MonMessage.display
Else
End If
Next i
End Sub

J'ai supprimé la boucle dans worksheet, et j'ai surtout réduit la plage pour mes essais :-)
Cependant, mes mails partent toujours même quand mes checkbox ne sont pas cochées
Si ma date n'est pas renseignée j'ai bien un seul mail qui part, mais dès que je renseigne la date sur une seconde ligne je renvoie le mail à tout le monde et évidemment ce n'est pas ce que je veux je pourrais supprimer la date après chaque envoie, mais pour le suivi, ça ne va pas.
Je fouille tous les forum, mais je ne trouve pas (ou ne comprends pas) comment je pourrais faire ma boucle sur les checkbox. J'ai compris que "checkbox" & i ne fonctionnerait pas, mais comment peut on faire cette boucle (si c'est possible ???)

D'abord tu devrais mettre l'appel dans...

Private Sub Worksheet_Change(ByVal Target As Range)
'Ne sera appelé qu'en cas de changement
'Faudrait aussi tester si c'est bien la cellule avec la date qui change...
...
Est ce que ça veut dire que je devrais écrire mon code dans worksheet et non pas dans un module ???

Autre question subsidiaire : dans tous les livres sur Vba, lequel choisir quand on débute :)

Cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 nov. 2010 à 23:11
Explique plus précisément Quand et où tu change la date .
0
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011
21 nov. 2010 à 23:24
En fait, je ne change pas la date.
Mon fichier à pour but de suivre les demandes de travaux qui sont envoyées à mon service.
le tableau sert à enregistrer ces demandes. J'entre la date (colonne E) une fois et j'envoie un mail comme quoi la demande à bien été prise en compte puis quand les travaux sont fait, j'entre une nouvelle date (colonne H) et j'envoie un nouveau mail au demandeur pour lui signaler que sa demande est terminée.
Si j'étais le seul à recevoir les demandes, je le ferai à la main, mais ce n'est pas le cas et je voudrais que chacun des utilisateurs du fichier envoie le même message type.
Je ne sais pas si mon explication est très claire ???

Mon fichier : https://www.cjoint.com/?0lvxxxeFHYI
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 nov. 2010 à 00:34
Ca me semble plus clair, je "cogite" un exemple mais ce sera pas pour tout de suite, maintenant... dodo.
0
95Hub Messages postés 12 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 2 juin 2011
22 nov. 2010 à 09:50
:) Bonne nuit
0