pour 3 alternatives corrige ligne 57 pour Outlook et ligne 170 pour CDO:
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT TOP 3 COMMANDE.Id_Client,.....
pour 3 alternatives corrige ligne 57 pour Outlook et ligne 170 pour CDO:
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT TOP 3 COMMANDE.Id_Client,.....
Bonjour Thierry,
Je vois que tu as fais un gros boulot, mais il faut que je te montre la structure de la base. En pi`ce jointe, la base d'origine.
J'ai crée une nouvelle base de donnée où je récupère la table PA-PC... (oui, je sais, le nom de la table est mal écrite, mais si je change cela, il y a des répercussions dans d'autres bases de données, dans la prog, etc..., donc j'attend)
Cette table récupère entre autre le titre de la publication et le courriel du client.
De plus, cette table a :
PA-PC-Abonnés-courant
Associnstit = 99,* etudiant, tout le reste des propositions sont des associations (2 prix différents)
Date = date de la commande (requête qui récupère les commandes de la semaine dernière)
Refus : case à cocher pour savoir si la personne accepte ou non de recevoir un courriel promotionel
Langue : qui contient 2 choix F ou A
TblPublications
le titre de la publication
descriptionfr qui est récupéré pour le courriel, pour une description du magazine. idem pour descriptionAn pour la version anglaise (ces 2 colonnes sont récupérés pour le site web)
idem pour le titrewebfr
Categorie generales et sous categories = classe le magazine (pour le site web)
NorefPublication qui correspond au numéro unique de publication et qui sert pour la table alternative et qui sert de numéro de page web de la publication
Table TblTarifPublication :
StatutClientTarif = 2 Choix possible = CAMPUS ou ASSOCIATION
Donc dans la table des commande, c'est un chiffre et dans la tblTarifpub, c'est noté CAMPUS ou ASSOC...
La table ALTERNATIVE (pas mis ici) qui contient donc que des noRefPublication dans num_mag, alt1, alt2, alt3.
Chaque début de semaine, je récupère les commandes de la semaine dernière, je lance la requête qui supprime les commandes où le courriel est vide et où Refus est décoché.
je pense créer une requête qui sépare ensuite les différents types de client
français et étudiant (langue = F et associnstit = 99,*)
francais et association (Langue = F et associntit <> 99,*)
anglais et etudiant (langue = A et associnstit = 99,9*)
anglais et association (langue = A et associnstit <> 99,*)
Et c'est là que je pêche...
Chaque type de clientèle a une page web a lui.
La page web entière s'écrit ainsi :
//www.nomdomaine.com/rc/index.php?type=2&lang=F&page=detail_view&id=17
Type = 2 pour etudiant
type = 1 pour association
lang = F pour français
lang = E pour anglais
Chaque publication a son numéro unique
//www.nomdomaine/rc/index.php?type=2&lang=F&page=detail_view&id=17
et son image porte le même numéro id que la publication
//www.nomdomaine.com/images/small/17.jpg
Bien entendu, la base qui crée ces courriels peut être écrite comme je le veux. Faut que je récupère les infos dont j'ai besoin de l'existant, de créer les courriels avec Outlook.
Il faudrait donc (dans ma façon de faire que je crée 4 tables qui contient les adresses web entière de chaque publication, de récupérer ces données pour créer le courriel, mais je suis perdu dans la façon de récupérer et de coller les données entre eux, ainsi que par rapport à la table alternative.
Ton idée de générer automatiquement la table alternative est plus que parfaite, c'est une excellente idée d'où du moins s'il propose bien les magazine de la même catégorie et ensuite de la même sous-catégorie.
Je ne sais pas comment te remercier pour ta grande aide. Pour qu'on se comprend mieux, j'ai préféré te montrer l'existant mais en t'assurant que la base des courriels, je peux faire ce que je veux.
Merci de ton aide.
Bonjour,
Je viens de sortir de la réunion mensuelle et le supérieur préfererait utilisé la table alternative au lieu d'un choix au hasard.
La raison, si le mari prend un magazine sur le sport et pour sa femme, un magazine de mode, il trouvera dans ses suggestions, des magazines féminins et inversement. Il faut donc rester dans le goût de ce que a pris le client.
bonjour ambact.
Toujours en fonction de mon dernier zip ,voici le code modifié du module5 ,ligne 57 à 108:
Cette fois ,je pars du principe que tes 2 adresse web sont toujours identique ,sauf le numéro de publication,la langue et le statut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 MonString2 = "SELECT DISTINCT COMMANDE.Id_Client, TBLPUBLICATION.categorie, TBLPUBLICATION.num_mag AS alternative, TBLPUBLICATION.sous_categorie, TBLPUBLICATION.PUBLICATION, Commande_Detail.langue, CLIENTS.statut, Commande_Detail.langue" & _ " FROM TBLPUBLICATION, Categories, CLIENTS INNER JOIN (Formules INNER JOIN (COMMANDE INNER JOIN Commande_Detail ON COMMANDE.Id_Commd = Commande_Detail.Id_Commd) ON Formules.Id_Formule = Commande_Detail.Id_Formule) ON CLIENTS.Id_Client = COMMANDE.Id_Client" & _ " WHERE (((COMMANDE.Id_Client)=" & IdClient & ") AND ((TBLPUBLICATION.num_mag)<>[Formules]![num_mag]));" Debug.Print MonString2 Set MonRst2 = CurrentDb.OpenRecordset(MonString2) With MonRst2 strHtml = strHtml & "<Font face=calibri color=#F79729><b><h2>Bonjour,</h2></b></font>" & _ "<b><Font Face=calibri>Cest avec plaisir que nous vous annonçons le lancement de notre nouveau site web, notre cinquième depuis 1996.</b><br><br></font>" & _ "<Font Face=calibri>Plus convivial, coloré et plus facile dutilisation, nous croyons que vous saurez lapprécier.<br><br></font>" & _ "<Font face=calibri color=#F79729><b><h3>Pourquoi payer plus cher pour vos abonnements ? </h3></b></font>" & _ "<Font Face=calibri><b>Avec Nous, vous obtenez :</b><br><br></font>" & _ "<Font Face=calibri><dd>- Un vaste choix parmi <b>265 journaux et magazines</b> québécois, canadiens, américains et européens ;<br></font>" & _ "<Font Face=calibri><dd>- <b>34 nouveaux titres</b> cette année ;<br></font>" & _ "<Font Face=calibri><dd>- <b>51 titres à 15$</b> ou moins ;<br></font>" & _ "<Font Face=calibri><dd>- <b>Toujours les plus bas prix garantis !</b><br><br></font>" & _ "<Font face=calibri color=#F79729><b>Afin de visiter notre nouveau site, vous navez quà cliquer sur limage suivante :</b><br><br></font>" 'j'attribue des variables sinon celà génère des erreur dans strhtml Dim NomMag As String, LeLien As String, Imag As String .MoveLast .MoveFirst While Not MonRst2.EOF Imag = "//www.nomdomaine.com/images/small/" & !num_mag & ".jpg" 'crée le lien web en fonction de num_mag et de la langue et du statut LeLien = "//www.nomdomaine/rc/index.php?type=" & !statut & "&lang=" & "!langue" & "&page=detail_view&id=" & !num_mag ' NomMag = MonRst2!PUBLICATION 'nom de la publication si besoin ' strHtml = strHtml & "<Font Face=calibri><A href=" & LeLien & " target=_new><IMG SRC=" & Imag & " alt=" & VarMag & "></A><br><br></font>" strHtml = strHtml & "<Font Face=calibri><A href=" & LeLien & " target=_new><IMG SRC=" & Imag & " ></A><br><br></font>" MonRst2.MoveNext Wend strHtml = strHtml & "<Font face=calibri color=#F79729><h2>Merci pour votre clientèle et bonne visite de notre nouveau site !</h2></font>" & _ "</BODY></HTML>" olMail.HTMLBody = strHtml 'End With End With ' Debug.Print MonString MonRst2.Close Set MonRst2 = Nothing End With
A+
Bonjour Thierry,
J'ai modifié les lignes mais il y a un message d'erreur à ce niveau :
la surbrillance est sur "Call EnvoieMail2".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 With MonRst .MoveLast .MoveFirst For i = 1 To MonRst.RecordCount ' MonLien = "https://www.nomdomaine.com/rc/index.php?page=detail_view&id=" & !Alt1 ' MonImage = "https://www.nomdomaine.com/images/large/" & !Alt1 & ".jpg" Call EnvoieMail2(![COURRIEL_Element], !Id_Client, "proposition", !pays, !NomFamille) 'Call SendByCdo(![COURRIEL_Element], !Id_Client, "proposition", !NomFamille, !Categorie) .MoveNext Next i End With
Le message d'erreur est :
Erreur de compilation : Argument non facultatif
Tu as la réponse à la ligne en dessous.
Chez moi, je fait les essais avec CDO, et j'ai oublié de modifier l'appel avec Outlook
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part Call EnvoieMail2(![COURRIEL_Element], !Id_Client, "proposition", !NomFamille, !Categorie)
Ca ne marche pas plus. Je regarde dans la définition des variables mais je ne vois rien qui empêche.
Bonjour ambact.
La fonction EnvoieMail2 possède des arguments qui sont entre parenthèses.Ces arguments sont des variables qui sont utilisés dans cette fonction. Certains necessitent d'être obligatoirement renseignés ,tel que l'adresse mail du destinataire, l'identifiant du client, le sujet du mail, la catégorie (des publications). D'autres peuvent etre vide si elles sont déclarées Optional ,tel le nom du client.
Si tu as modifié le recordset dans la procédure appelant cette fonction ,et que tu n'a pas le champ "Categorie" par exemple ,alors rajoute "Optional" devant "Categorie"
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function EnvoieMail2(AQui As String, IdClient As Integer, LeSujet As String, Categorie As String, Optional Nom As String) As Integer
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function EnvoieMail2(AQui As String, IdClient As Integer, LeSujet As String, Optional Categorie As String, Optional Nom As String) As Integer
Bonjour,
J'ai un autre problème maintenant,
erreur d'execution '13', incompatibilité de type... Je pense que ca provient dans les variables, mais j'ai tout testé et rien ne fait évoluer cette erreur.
Je sais, je suis stupide, je ne trouve pas la réponse, mais j'ai tout testé en modifiant le type de variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function EnvoieMail2(AQui As String, IdClient As Integer, LeSujet As String, Commande As Integer, SousCategorie As Integer, Optional Categorie As Integer, Optional Langue As String, Optional Nom As String, Optional NomFamille As String) As Integer
Enfin bref, je ne comprend toujours pas comment fonctionne alternative en vba. Je ne vois pas où se trouve le code qui récupère un magazine avec le même catégorie et le même souscategorie.
Il faut que j'écrive tout le code pour qu'il colle à l'existant, car là, pour le moment, c'est inexploitable pour moi, je ne peux le mettre en place alors que l'ultimatum est fin juin...
J'ai créer une table suggerer qui contient le courriel, titre de publication, num de publication, ainsi que les adresses web de chaque publication, ainsi que les images et j'ai ajouté les code de la table alternative avec leur lien et les images.
Tout tiens dans une table et je pense que pour le moment, je veux exploiter cette idée. Je créerais des boutons qui crée cette table, qui classe les clients sur leur langue et leur statut. Je veux que ce soit le plus transparent possible et avec très peu de manipulation humaine.
Cette table suggerer contient vraiment les informations dont j'ai surement besoin. (en pièce jointe)
Ton code est très intéressante Thierry, mais il y a des choses que je n'arrive pas à encore à comprendre et je préférerais créer la page web comme tu l'as fait, mais j'en suis incapable pour le moment de penser comme toi.
Merci Thierry
Bjr.
"erreur d'execution '13', incompatibilité de type... Je pense que ca provient dans les variables, mais j'ai tout testé et rien ne fait évoluer cette erreur."
Pas assez d'info pour répondre. Regarde dans Affichage_Fenetre variables locales. Peux tu mettre une image ou ton code qui appelle la fonction "EnvoieMail2"
a& mon avis dans ton image ,il manque le numéro de commande et/ou le num mag .
A+
On reprend tout à zero.
Tu as une appli que tu n'as pas créée et que tu ne peux pas modifier.
Tu en tires la table "PA-PC-abonnés-courant" ,une fois par semaine.
Tu souhaite envoyer un mail à chaque client de la table "Pa-Pc...." afin de leur proposer d'autre publications du meme type, sous forme
d'image cliquable ouvrant une page web specifique.Le tout dans le corps de message (pas de pj).
-1)Il faut une requete sur la table "Pa-Pc..." pour selectionner leclient, son mail, sa publication (à defaut de l'Id_Publication) et si la personne accepte les mails.
Pour chaque client, on commande Outlook en lui envoyant les paramètres minimum tel que "le client","son mail" ,"le sujet","SaPublication".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT [].NOM, [PA-PC-abonnés-courant].PUBLICATION, [PA-PC-abonnés-courant].COURRIEL, [PA-PC-abonnés-courant].REFUS FROM [PA-PC-abonnés-courant] WHERE ((([PA-PC-abonnés-courant].REFUS)=False));
Le dernier paramètre (SaPublication) servira de paramètre dans une autre requete afin de déterminer les publications équivalentes à la sienne dans ta table "suggerer"
ex:
Tous ces paramètres doivent obligatoirement être renseignés ,sauf ceux déclarés Optional ,qui peuvent rester vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function EnvoieMail2(Nom As String, AQui As String, LeSujet As String,Publication as String, Optional Categorie As String) As Integer));
J'ai utilisé une fonction mais celà peut aussi bien être une Sub (sans As integer à la fin).
-2)On manipule Outlook grace aux paramètres que l'on a définit.
On va faire une requete faisant ressortir les 3 alternatives en fonction du titre de la publication et du nom de l'abonné.
Ainsi on obtient un seul enregistrement (ligne).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT DISTINCT suggerer.NOM, suggerer.PRENOM, suggerer.COMPAGNIE, suggerer.TitrePublication, suggerer.DescriptionFr, suggerer.alt1, suggerer.alt2, suggerer.alt3, suggerer.lienweb_alt1, suggerer.imageweb_alt1, suggerer.lienweb_alt2, suggerer.imageweb_alt2, suggerer.lienweb_alt3, suggerer.imageweb_alt3 FROM suggerer WHERE (((suggerer.NOM)=" & chr(34) & Nom & Chr(34) & ") AND ((suggerer.TitrePublication)="& chr(34) & SaPublication & Chr(34) &"));
Dans une chaine Sql, les variables de type texte doivent etre entourer de guillemet double ,perso je suis plus à l'aise avec le caractère Chr(34),parce q'au bout d'un moment ,çà fait un paquet de guillemets ,et ma vue baisse.
Autre avantage (lié à ma vue !),on repère tout de suite que c'est un string .
A partir de cette requete ,on va crée les images cliquables en inserant les variables dans la chaine html:
On pourrait sans doute integrer directement les champs de la requete (!lienweb_alt1) dans la chaine html ,mais avec ces 6 variables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 With MonRst2 Dim leLien1 As String, Imag1 As String, leLien2 As String, Imag2 As String, leLien3 As String, Imag3 As String leLien1 = !lienweb_alt1 leLien2 = !lienweb_alt2 leLien3 = !lienweb_alt3 Imag1 = !imageweb_alt1 Imag2 = !imageweb_alt2 Imag3 = !imageweb_alt3 ' 'première image strHtml = strHtml & "<Font Face=calibri><A href=" & Chr(34) & leLien1 & Chr(34) & " target=_new><IMG SRC=" & Chr(34) & Imag1 & Chr(34) & " ></A><br><br></font>" 'deuxième image strHtml = strHtml & "<Font Face=calibri><A href=" & Chr(34) & leLien2 & Chr(34) & " target=_new><IMG SRC=" & Chr(34) & Imag2 & Chr(34) & " ></A><br><br></font>" 'troisième image strHtml = strHtml & "<Font Face=calibri><A href=" & Chr(34) & leLien3 & Chr(34) & " target=_new><IMG SRC=" & Chr(34) & Imag3 & Chr(34) & " ></A><br><br></font>" End With
c'est plus lisible ,plus facile à comprendre et à debugger.
Code complet ,testé ce matin:
Cdlt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 Option Compare Database Option Explicit Sub LeBouton_Click() Dim MonSql As String Dim MonRst As dao.Recordset MonSql = "SELECT [PA-PC-abonnés-courant].NOM, [PA-PC-abonnés-courant].PUBLICATION, [PA-PC-abonnés-courant].COURRIEL, [PA-PC-abonnés-courant].REFUS" & _ " From [PA-PC-abonnés-courant]" & _ " WHERE ((([PA-PC-abonnés-courant].REFUS)=False));" ' Debug.Print MonSql Set MonRst = CurrentDb.OpenRecordset(MonSql) With MonRst .MoveLast .MoveFirst While Not MonRst.EOF ' Call SendByCdo(!Nom, !COURRIEL, "proposition", !PUBLICATION) Call EnvoieMail2(!Nom, !COURRIEL, "proposition", !PUBLICATION) .MoveNext Wend End With End Sub Function EnvoieMail2(Nom As String, AQui As String, LeSujet As String, PUBLICATION As String, Optional Categorie As String) As Integer Dim olApp As Object 'Outlook.Application Dim olMail 'As Outlook.MailItem Dim SafeMail As Redemption.SafeMailItem Dim strHtml As String Dim MonString2 As String Dim MonRst2 As dao.Recordset On Error GoTo EnvoieMail2_Error Set olApp = CreateObject("Outlook.Application") Set SafeMail = CreateObject("Redemption.SafeMailItem") Set olMail = olApp.CreateItem(olMailItem) SafeMail.Item = olMail With olMail .To = AQui .Subject = LeSujet strHtml = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" & _ "<HTML><HEAD>" & _ "<META http-equiv=Content-Type content=""text/html; charset=us-ascii"">" & _ "<META content=""MSHTML 8.00.6001.19298"" name=GENERATOR></HEAD>" & _ "<BODY>" MonString2 = "SELECT DISTINCT suggerer.NOM, suggerer.PRENOM, suggerer.COMPAGNIE, suggerer.TitrePublication, suggerer.DescriptionFr, suggerer.alt1, suggerer.alt2, suggerer.alt3, suggerer.lienweb_alt1, suggerer.imageweb_alt1, suggerer.lienweb_alt2, suggerer.imageweb_alt2, suggerer.lienweb_alt3, suggerer.imageweb_alt3" & _ " FROM suggerer " & _ " WHERE (((suggerer.NOM)=" & Chr(34) & Nom & Chr(34) & ") AND ((suggerer.TitrePublication)=" & Chr(34) & PUBLICATION & Chr(34) & "));" ' Debug.Print MonString2 Set MonRst2 = CurrentDb.OpenRecordset(MonString2) With MonRst2 strHtml = strHtml & "<Font face=calibri color=#F79729><b><h2>Bonjour,</h2></b></font>" & _ "<b><Font Face=calibri>Cest avec plaisir que nous vous annonçons le lancement de notre nouveau site web, notre cinquième depuis 1996.</b><br><br></font>" & _ "<Font Face=calibri>Plus convivial, coloré et plus facile dutilisation, nous croyons que vous saurez lapprécier.<br><br></font>" & _ "<Font face=calibri color=#F79729><b><h3>Pourquoi payer plus cher pour vos abonnements ? </h3></b></font>" & _ "<Font Face=calibri><b>Avec Nous, vous obtenez :</b><br><br></font>" & _ "<Font Face=calibri><dd>- Un vaste choix parmi <b>265 journaux et magazines</b> québécois, canadiens, américains et européens ;<br></font>" & _ "<Font Face=calibri><dd>- <b>34 nouveaux titres</b> cette année ;<br></font>" & _ "<Font Face=calibri><dd>- <b>51 titres à 15$</b> ou moins ;<br></font>" & _ "<Font Face=calibri><dd>- <b>Toujours les plus bas prix garantis !</b><br><br></font>" & _ "<Font face=calibri color=#F79729><b>Afin de visiter notre nouveau site, vous navez quà cliquer sur limage suivante :</b><br><br></font>" 'j'attribue des variables sinon celà génère des erreur dans strhtml Dim NomMag As String, leLien1 As String, Imag1 As String, leLien2 As String, Imag2 As String, leLien3 As String, Imag3 As String 'crée le lien web leLien1 = !lienweb_alt1 leLien2 = !lienweb_alt2 leLien3 = !lienweb_alt3 Imag1 = !imageweb_alt1 Imag2 = !imageweb_alt2 Imag3 = !imageweb_alt3 ' NomMag = !TitrePublication 'nom de la publication 'première image strHtml = strHtml & "<Font Face=calibri><A href=" & Chr(34) & leLien1 & Chr(34) & " target=_new><IMG SRC=" & Chr(34) & Imag1 & Chr(34) & " ></A><br><br></font>" 'deuxième image strHtml = strHtml & "<Font Face=calibri><A href=" & Chr(34) & leLien2 & Chr(34) & " target=_new><IMG SRC=" & Chr(34) & Imag2 & Chr(34) & " ></A><br><br></font>" 'troisième image strHtml = strHtml & "<Font Face=calibri><A href=" & Chr(34) & leLien3 & Chr(34) & " target=_new><IMG SRC=""" & Imag3 & """ ></A><br><br></font>" strHtml = strHtml & "<Font face=calibri color=#F79729><h2>Merci pour votre clientèle et bonne visite de notre nouveau site !</h2></font>" & _ "</BODY></HTML>" olMail.HTMLBody = strHtml End With ' Debug.Print MonString MonRst2.Close Set MonRst2 = Nothing End With SafeMail.Send Set olApp = Nothing Set olMail = Nothing Set SafeMail = Nothing On Error GoTo 0 Exit Function EnvoieMail_Error: 'pour eviter le message "IMAPITable.QueryRows: 0 rows returned" If Err.Number = -2147418113 Then Resume Next Err.Clear End If EnvoieMail2_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure EnvoieMail2 of Module Module2" End Function
Bonjour Thierry,
L'explication est très claire ! J'ai fais les tests et ça fonctionne très bien !!!
Il crée bien le courriel, récupère les images et les liens cliquables !
Tout ce dont j'avais besoin !
Je reviens un peu plus tard pour pousser le test un peu plus loin.
Bonjour Thierry,
Pour dire que le programme fonctionne à merveille et je l'ai totalement automatisé, que n'importe quel utilisateur peut le faire soi-même !!
La base est l'une des plus aboutie.
Une question pour encore simplifier la chose !
Comment peut-on dire à partir de quel courriel on envoie les fichiers ?
Dans Outlook, j'ai 3 adresses courriels :
un perso
un abonnement@...com pour les clients français
un subscription@...com pour les clients anglais
Les courriels français doivent être envoyé à partir de l'adresse abonnement@...com, idem pour les anglais avec subscription@...com
Comment dans le code, le faire partir sur la bonne adresse ? car pour le moment, pour faire fonctionner la fin du programme, je vais dans Outlook, modifier l'adresse par défaut pour chaque langue.
Merci vraiment de ta grande aide Thierry !
Bonjour ambact.
Si tu es content ,je suis content aussi.
Pour cette dernière question ,il existe la propriété SendUsingAccount qui est apparue dans Outook 2007 et + . Comme je n'ai que 2003. je ne peux pas tester ce qui suit:
Dans la première requete ,on va chercher aussi la langue du client:
Dans la function Outlook ,on ajoute l'argument "Langue"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT [PA-PC-abonnés-courant].NOM, [PA-PC-abonnés-courant].PUBLICATION, [PA-PC-abonnés-courant].COURRIEL, [PA-PC-abonnés-courant].REFUS, [PA-PC-abonnés-courant].LANGUE FROM [PA-PC-abonnés-courant] WHERE ((([PA-PC-abonnés-courant].REFUS)=False));
et dans l'appel à la fonction Outlook
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function EnvoieMail2(Nom As String, AQui As String, LeSujet As String,Publication as String,Langue as String, Optional Categorie As String) As Integer))
Et enfin ,juste avant d'envoyer le mail ,on définit à partir de quel compte en fonction de la langue
Code : Sélectionner tout - Visualiser dans une fenêtre à part Call EnvoieMail2(!Nom, !COURRIEL, "proposition", !PUBLICATION, !langue)
Si cela ne marche pas ,met un point d'arrêt sur la ligne "If Langue = "F"" ,regarde dans la fenêtre variables locales ce que donne SafeMail ,et trouve la valeur de SendUsingAccount (son type et sa valeur).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 If langue = "F" Then SafeMail.SendUsingAccount = "abonnement@...com=" Else SafeMail.SendUsingAccount = "subscription@...com" End If SafeMail.Send
A+
Bonjour Thierry,
Je te reviens après quelques semaines de test et d'approbation du résultat.
Je peux dire que ça fonctionne à merveille !!!
Pour choisir l'adresse d'envoi dans Outlook, ca ne veut pas fonctionner mais ce n'est pas grave du tout, faudra juste en pas oublier de changer l'adresse par défaut avant de faire les envois.
C'est certain que mon code est peut-être pas aussi poussé que toi en programmation, car j'ai simplifié le travail via des requêtes. J'ai crée des tables par rapport au statut et à la langue des client, ce qui fait 4 tables différentes et chaque requête met à jour ses 4 tables qui va piocher ces infos dans les différentes tables. Le code ne fonctionne plus que sur une seule table. C'est surement lourd et il y a plus simple, mais je suis plus à l'aise dans les requêtes que la programmation. Ton code est très intéressant pour moi, pour comprendre et apprendre.
Je peux donc mettre en résolu cette discussion (si jamais je ne dois pas le réouvrir par la suite si un autre problème surgit.
Merci Thierry !
Bonjour,
Je reviens sur ce sujet car je dois changer la façon de faire pour envoyer un courriel. Auparavant, je récupérais le titre d'une publication et je remplissais l'adresse courriel pour toutes les personnes qui ont pris la même publication. La nouvelle demande est de créer un courriel, mais le corps du courriel récupère la liste de toutes les publications prises par cette personne.
Le système cherche les adresses identiques et récupère sa liste de publication.
En-dessous mon code, le problème est que si la personne a pris 3 publications, le code voit bien qu'il y a 3 abonnements, mais lorsqu'il passe à la suivante, il remet le 1er titre qui apparaît, et idem pour le 3e titre, c'est 3 fois le même titre qui apparait dans le corps du courriel.
Je pense que le souci vient de la variable MesParution...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 Private Sub MAIL_Biblio_FR_Click() Dim ADRESSE As String Dim message As String Dim sujet As String Dim MesParution As String Dim MesCourriel As String Dim i As Integer, j As Integer Dim ListeEmail As DAO.Recordset Dim ListeParution As DAO.Recordset Set ListeEmail = CurrentDb.OpenRecordset("SELECT DISTINCT TEST_COURRIEL_FR.COURRIEL FROM TEST_COURRIEL_FR;") 'énumère toutes les publications With ListeEmail For j = 0 To .RecordCount - 1 MesCourriel = !COURRIEL 'Requête qui cherche les résultats : Set ListeParution = CurrentDb.OpenRecordset("SELECT TEST_COURRIEL_FR.TITRE_OFFICIEL, TEST_COURRIEL_FR.COURRIEL" & _ " FROM TEST_COURRIEL_FR" & _ " WHERE (((TEST_COURRIEL_FR.COURRIEL)=" & Chr(34) & MesCourriel & Chr(34) & "));") sujet = "Renouvellement de votre ou vos abonnement(s) " 'le sujet est le même pour tous les mails With ListeParution .MoveLast .MoveFirst For i = 1 To .RecordCount MesParution = !TITRE_OFFICIEL If Not IsEmpty(!TITRE_OFFICIEL) Then If i = 1 Then ADRESSE = !COURRIEL message = !TITRE_OFFICIEL Else message = message & ", " & MesParution End If End If Next i 'on passe au titre suivant End With Call EnvoieMailbiblio(ADRESSE, sujet, message) ADRESSE = "" message = "" .MoveNext Next j End With MsgBox "La création des courriels est finie" ListeParution.Close Set ListeParution = Nothing ListeEmail.Close Set ListeEmail = Nothing End Sub
Ca fait une semaine que je cherche le bout de code qui fait planter.
Merci à vous
Bonsoir Ambact.
Remplace les lignes 31 à 42 par celles-ci:
Cdlt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 While Not ListeParution.EOF ' La fonction IsEmpty ne renvoie des informations pertinentes que pour les variables de type Variant. If Not IsNull(!TITRE_OFFICIEL) Then MesParution = !TITRE_OFFICIEL ADRESSE = !COURRIEL message = message & ", " & MesParution End If ListeParution.MoveNext 'on passe au titre suivant Wend End With
ps: pense à voter si la réponse te convient
Bonjour et merci Thierry,
Ca marche très bien ! et ça commence à rendre bien.
Il me reste une chose à faire qui est de mettre à la ligne chaque publication, car en ligne, celui qui a pris 10 abonnements, ça fera une liste indigeste à lire et qui dépasse largement les images du courriel...
J'ai essayé avec le Chr(13) et Chr(10) mais rien n'y fait... Je ne dois pas les placer au bon endroit...
Yoh
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part message = message & vbCrLf & MesParution
Oui, c'est ce que j'ai tenté mais tout se met sur une même ligne dans le corps du courriel... et avec ça, il n'y a pas de ponctuation qui indique la fin d'un titre de publication...
J'ai tout tenté, chr(10) & chr(13), vbNewLine...
Le code qui récupère les données :
Le résultat va dans & LeBouquin &
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 .HTMLBody = strHTML & "<a href=""http://www.aaa.com""><IMG SRC=""https://www.aaa.com/aaa/aaa_HAUT.jpg""></A>" & _ "<table><tr><td width=750><br><Font face=Calibri size=5 color=#FF4000><B>" & LeBouquin & "</B></FONT></td></tr>" & _ "<td width=750><br><Font Face=Calibri>Afin de ne manquer aucune copie de votre ou vos publication(s) préférée(s) et pour continuer de profiter de nos bas prix, nous vous suggérons de visiter dès maintenant notre site web <A href=""http://www.aaa.com"">www.aaa.com</A> ou de communiquer avec notre service à la clientèle.</font><br><br></td></table>" & _ "<IMG SRC=""https://www.aaa.com/aaa/aaa.jpg"">" & _ "</DIV></BODY></HTML>"
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager