IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Publipostage personnalisé par mail [AC-2010]


Sujet :

VBA Access

  1. #61
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut top 3
    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,.....

  2. #62
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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.
    Images attachées Images attachées  

  3. #63
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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.

  4. #64
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    bonjour ambact.
    Toujours en fonction de mon dernier zip ,voici le code modifié du module5 ,ligne 57 à 108:
    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>C’est 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 d’utilisation, nous croyons que vous saurez l’appré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 n’avez qu’à cliquer sur l’image 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
    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.
    A+

  5. #65
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Bonjour Thierry,

    J'ai modifié les lignes mais il y a un message d'erreur à ce niveau :

    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
    la surbrillance est sur "Call EnvoieMail2".

    Le message d'erreur est :

    Erreur de compilation : Argument non facultatif

  6. #66
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call EnvoieMail2(![COURRIEL_Element], !Id_Client, "proposition", !NomFamille, !Categorie)
    A+

  7. #67
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Ca ne marche pas plus. Je regarde dans la définition des variables mais je ne vois rien qui empêche.

  8. #68
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    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.
    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
    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, Optional Categorie As String, Optional Nom As String) As Integer
    A+

  9. #69
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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.

    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
    Je sais, je suis stupide, je ne trouve pas la réponse, mais j'ai tout testé en modifiant le type de variable.

    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
    Images attachées Images attachées  

  10. #70
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    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+

  11. #71
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    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.
    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));
    Pour chaque client, on commande Outlook en lui envoyant les paramètres minimum tel que "le client","son mail" ,"le sujet","SaPublication".
    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:
    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));
    Tous ces paramètres doivent obligatoirement être renseignés ,sauf ceux déclarés Optional ,qui peuvent rester vide.
    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é.
    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) &"));
    Ainsi on obtient un seul enregistrement (ligne).
    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:
    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
    On pourrait sans doute integrer directement les champs de la requete (!lienweb_alt1) dans la chaine html ,mais avec ces 6 variables
    c'est plus lisible ,plus facile à comprendre et à debugger.
    Code complet ,testé ce matin:
    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>C’est 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 d’utilisation, nous croyons que vous saurez l’appré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 n’avez qu’à cliquer sur l’image 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
    Cdlt

  12. #72
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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.

  13. #73
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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 !

  14. #74
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    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:
    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));
    Dans la function Outlook ,on ajoute l'argument "Langue"
    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 dans l'appel à la fonction Outlook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call EnvoieMail2(!Nom, !COURRIEL, "proposition", !PUBLICATION, !langue)
    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
    1
    2
    3
    4
    5
    6
    If langue = "F" Then
    SafeMail.SendUsingAccount = "abonnement@...com="
    Else
    SafeMail.SendUsingAccount = "subscription@...com"
    End If
        SafeMail.Send
    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).
    A+

  15. #75
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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 !

  16. #76
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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.

    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
    Je pense que le souci vient de la variable MesParution...

    Ca fait une semaine que je cherche le bout de code qui fait planter.
    Merci à vous

  17. #77
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonsoir Ambact.
    Remplace les lignes 31 à 42 par celles-ci:
    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
    Cdlt
    ps: pense à voter si la réponse te convient

  18. #78
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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...

  19. #79
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Yoh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message = message & vbCrLf & MesParution
    A+

  20. #80
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    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 :

    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>"
    Le résultat va dans & LeBouquin &

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Publipostage et document word à envoyer par mail selon critères
    Par AudREN dans le forum VBA Access
    Réponses: 21
    Dernier message: 25/06/2015, 19h26
  2. Envoi publipostage par mail
    Par Mathsdeb dans le forum Excel
    Réponses: 2
    Dernier message: 22/04/2015, 08h17
  3. [Toutes versions] Publipostage par mail
    Par VYVAB dans le forum Word
    Réponses: 1
    Dernier message: 16/07/2013, 22h09
  4. [OL-2003] publipostage par mail avec pj
    Par fabienne69 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 16/05/2013, 12h07
  5. Publipostage par mail Word-Excel pas d'envoi du mail
    Par Didpa dans le forum VBA Word
    Réponses: 0
    Dernier message: 26/05/2010, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo