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. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut Publipostage personnalisé par mail
    Bonjour à tous,

    je dois créer un publipostage par mail.

    Le tutoriel de http://heureuxoli.developpez.com/ m'a énormèment aidé. Après l'avoir mis en oeuvre sur ma base, il récupère très bien les données que je veux, ouvre Outlook et toutes la liste des courriels. Ce qui est très bien.

    Mais, (il y a un mais sinon je n'aurais pas posé de questions), Je dois faire un publipostage pour les clients pour les alerter de la fin prochaine de leur abonnement à une publication.

    Le code cité plus haut fonctionne, mais si je comprend bien, il permet d'envoyer un mail identique à toute la liste des courriels.
    Pour mon problème, je dois envoyer un mail qui comprend le titre de la publication qui va prendre fin.
    Je ne vois pas comment je dois créer un mail personnalisé en ayant le moins d'intervention humaine. La liste des courriel ne contiennent pas la même publication.

    Je ne vois pas du tout comment faire pour établir ces mails qui doivent être envoyé à une adresse spécifique. J'ai essayé le publipostage avec Word, mais c'est le même problème, lors de la fusion, il enverra le même fichier Word à tous le monde avec toutes les fusions.

    Je suis totalement à sec de chemin à suivre pour arriver à ce résultat... Je ne demande pas (pour le moment, une syntaxe) mais une idée sur le comment parvenir à ce résultat.

    la demande : Envoyer un mail au client pour leur signifier que leur abonnement arrive bientôt à terme.
    J'ai crée une requête qui me permet de sortir tous les abonnements achetés il y a 1 an. Cette requête récupère le nom, prenom, titre de la publication, le courriel.

    client A = courriel = A@mail.com PUBLICATION = "ELLE"
    client B = courriel = B@mail.com PUBLICATION = "PC Magazine"

    Corps du mail (en HTML) si possible
    "D'après nos dossiers, votre abonnement [PUBLICATION] arrivera à échéance sous peu, etc....."
    Il faut faire un publipostage qui récupère ces infos.

    Il y a environ 5000 envoi par mois.
    Je mets les adresses dans le BCC du mail pour éviter que tous se voit. Si je le met dans le TO, il faudrait surement cliquer sur un bouton qui crée le mail, ce qui impliquerais 5000 clics par mois.

    Existe-t'il un moyen pour faire correspondre la publication avec le mail personnalisé à lui envoyer.
    Il faut faire un Etat ? un publipostage avec Word ? Hors de ACCESS ?

    Merci à vous, je ne sais pas si j'ai été précis.

    Pour info, voici le code que j'ai mis en place, qui fonctionne mais ne convient pas pour créer un mail à un client.
    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
    Sub Envoicourriel()
    '********************************
    '*initialisation de l'accès DAO
    '********************************
     
        Dim ListeComplete As String
        Dim ListeEMail As Recordset
     
        'Requête qui cherche les 50 premiers résultats :
        Set ListeEMail = CurrentDb.OpenRecordset("SELECT TOP 50 Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI FROM Envoimail WHERE (((Envoimail.ENVOI)=No));")
     
        'boucle qui récupère les adresses mail de chaque résultat :
        ListeEMail.MoveFirst
        ListeComplete = " "
     
        'Parcours de la requête :
        While Not ListeEMail.EOF
            ListeComplete = ListeComplete & ListeEMail("COURRIEL") & " ; "
            ListeEMail.MoveNext
        Wend
     
        'ici on retire le dernier point_virgule de la liste
        ListeComplete = Left(ListeComplete, Len(ListeComplete) - 2)
     
        'fermeture de la requête
        ListeEMail.Close
        Set ListeEMail = Nothing
     
     
    '********************************
    '*Envoi de L'email avec Outlook
    '********************************
     
        Dim MonOutlook As Object
        Dim MonMessage As Object
        Dim Corps As String
     
        'on crée une instance d'Outlook :
        Set MonOutlook = CreateObject("Outlook.Application")
     
        'et on crée un élément Outlook, qui sera un message EMail :
        Set MonMessage = MonOutlook.CreateItem(0)
     
        'préparation du message
        MonMessage.To = "info@mail.com"
     
        MonMessage.BCC = ListeComplete
        MonMessage.Subject = "Renouvellement de votre abonnement"
        Corps = "D'après nos dossiers, votre abonnement " & ("PUBLICATION") & " arrivera à échéance sous peu."
        Corps = Corps & Chr(13) & Chr(10)
        Corps = Corps & Chr(13) & Chr(10)
        Corps = Corps & "Afin de ne manquer aucune copie de votre publication préférée et pour continuer de profiter de nos bas prix, nous vous suggérons de visiter dès maintenant notre site web."
        Corps = Corps & Chr(13) & Chr(10)
        Corps = Corps & "Profitez de nos tarifs réduits sur plus de 265 titres de journaux et magazines, tous offerts avec notre garantie que ce sont les plus bas prix sur le marché."
        MonMessage.Body = Corps & "<hr>" & "</div></body></html>"
     
        'on envoi le message
        MonMessage.Send
     
        'on ferme Outlook
        'Set MonOutlook = Nothing
     
    End Sub
    Ca fonctionne à part qu'il ne récupère pas le nom de la publication.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Bonjour,

    Non testé mais dans le code la ligne 49 ne serait pas plutôt celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Corps = "D'après nos dossiers, votre abonnement (" & PUBLICATION & ") arrivera à échéance sous peu."
    Par aillleurs, il existe des codes dans la FAQ qui permettent d'envoyer des mails sans passer par Outlook.

    type CDOSendMail http://access.developpez.com/faq/?pa...ailPieceAttach

    et sans intervention
    c'est peut être une piste..

    Bonne journée..
    fevec

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Merci pour ta réponse, je sais que ça ne focntionne pas, et ce problème sera résolu après avoir trouvé un moyen d'envoyer un mail personnalisé en masse.

    J'ai peut-être une piste mais je ne sais pas le mettre en oeuvre.

    Je pense qu'en faisant une boucle While (ou autre) qui va chercher chaque adresse mail, créer le mail et l'envois et passe a la seconde ligne, envois et ainsi de suite.

    un style du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while.....
    MonMessage.to = "courriel"
    Corps du mail = ..... "publication"
    monMessage.Send
    Wend
    Mais je ne vois pas comment l'écrire.

    Je pense que cette méthode récupèrera chaque ligne de la requête, s'enverra automatiquement jusqu'à la fin de la liste.

    Avantage : aucun intervention humaine, un clic pour lancer le processus
    Inconvénient : 2000 mail à envoyer par semaine et ce bouton risque surement de "geler" le pc durant tous le processus, impossibilité de travailler sur le pc en attendant la fin du processus. Et la durée du traitement...

    Mais, je ne vois pas d'autres moyens pour le faire... Comment je pourrais l'écrire dans mon code pour faire comprendre cette boucle ? Merci à tous.

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Comme je ne reste pas à attendre de susceptible aide, j'ai trouvé un moyen qui ressemble à ce que je veux faire mais celui-ci m'apporte une erreur.

    Voila le nouveau code que j'ai mis sur ACCESS
    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
    Public Sub Commande7_Click()
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim adresse As String
    Dim message As String
    Dim sujet As String
    Dim i As Byte
    Dim ListeEmail As Recordset
     
    'Requête qui cherche les 50 premiers résultats :
        Set ListeEmail = CurrentDb.OpenRecordset("SELECT TOP 50 Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI FROM Envoimail WHERE (((Envoimail.ENVOI)=No));")
     
     
    sujet = "Renouvellement de votre abonnement" 'le sujet est le même pour tous les mails
    For i = 1 To 3 - 1 
    adresse = ("COURRIEL" & i)
    message = ("PUBLICATION" & i)
     
    Set OutlookApp = CreateObject("outlook.application")
    Set OutlookMail = OutlookApp.CreateItem(0)
    With OutlookMail
    .Subject = sujet
    .To = adresse
    .Body = message
    .Send 'on envoie le mail créé
    End With
     
    Next i 'on passe au mail suivant
     
    End Sub
    lorsque je lance ce code, j'ai un message qui apparaît :
    erreur d'exécution '-2147467259 (80004005)'
    impossible de reconnâitre un ou plusieurs noms.

    Il met en surbrillance la ligne .send

    je teste avec des adresses mail que je connais très bien (ici 2 adresses perso dont je suis certain de leur écriture)

    J'ai cherché sur le net, me parle de problème qui viendrait du côté de Outlook, j'ai effacé l'annuaire, je l'ai réinstallé.

    Je suis proche d'un résultat qui pourrait me donner ce que je veux faire !

    EDIT : Je tiens à signaler que ce code fonctionne parfaitement via EXCEL, ce doit être un problème de syntaxe entre EXCEL et ACCESS qui bloque.

    Au pire des cas, si personne ne peut résoudre ce problème, je vais faire un bouton qui exporte la requête sur Excel et un bouton qui envoit les mails personnalisable sur Excel. Il faudra aussi, que ce mail soit écrit en HTML, mais bon j'aimerais éviter cette solution si possible.

    Par contre, j'aurais un problème de sécurité de Outlook, qui met un message d'avertissement et on doit attendre 5 secondes pour que le Oui soit activé et ce message apparait à chaque mail aue contient la liste Excel, ce qui signifie avec mes calculs, que la procédure va prendre au minimum plus de 2h en ayant la personne qui reste derrière son écran et clic sur oui... Et il se peut que ma proposition ne passe pas à cause de ce problème de sécurité...

  5. #5
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 et fevec .
    Ce n'est pas evident de t'apporter des reponse rapides !
    Perso, je manipule un peu Outlook ,mais pas le mailing .
    En vrac :
    - tu as visiblement un problème avec les recordsets .Donc (re)lire les tutos concernés .
    -dans ton dernier message,place un espion sur OutlookMail et regarde ce qu'il y a dans ".To" .C'est surement pas bon vu ma remarque précédente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    adresse = ListeEmail!COURRIEL  'pourqoi rajouter i ?
    message = ListeEmail!PUBLICATION]
    Je pense qu'il faut utiliser ceci dans un bloc with/end with.
    Mais pour t'apporter des reponses correctes ,il faut realiser une petite "maquette" de ce que tu souhaite ,et je ne parle pas courament le vba.
    Pour le message de securité ,je t'indiquerai demain ma méthode avec "Redemption".
    Et pour terminer ,je pense qu'il faut faire un groupe par publication.
    Cdlt

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    merci Thierry,

    Les petits changements que tu m'as apporté m'a débloqué le message ! le bouton exécute le programme, dans Outlook, je vois bien la création du mail, récupération du mail, récupération du titre de la publication en référence à la personne.

    (je n'ai pas de compte mail installé sur Outlook, comme je travaille sur de vrais données et de vrais clients, je ne vais pas envoyer mes mails de test et de toute manière, ils vont bien dans la boite d'envoi, je présume que tout se déroule bien sauf blocage pour la sortie)

    Par contre, et ce doit être tout bête, il ne passe plus à la seconde ligne de la requête, il reprend le premier mail et l'envoi autant de fois que i demande.

    Pour ce qui est du message de sécurité, c'est vrai que c'est énervant et tant de temps perdus pour rien, avec incapacité d'utiliser le pc durant ce temps...

    EDIT : je tiens quand même à signaler que c'est grâce à ce forum que j'ai appris le vba car j'étais vraiement un débutant en programmation. Même si mes choix se sont portés sur une autre voie que celle proposé, les propositions que l'on m'a fait m'a permis de comprendre la syntaxe à suivre. le projet qu'on m'a donné à améliorer m'a grandement fait grandir dans la programmation, et pour ceux qui me suivent, le premier projet que j'ai eu à mettre en oeuvre pour envoyer par mail, la commande des clients, a été mis en place sur tous les ordinateurs de la société et j'ai très très peu de retour de bug

  7. #7
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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
    Ce code-ci est plus correct :
    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
    Public Sub Commande7_Click()
        Dim OutlookApp As Object
        Dim OutlookMail As Object
        Dim adresse As String
        Dim message As String
        Dim sujet As String
        Dim i As Byte
        Dim ListeEmail As Recordset
     
        'Requête qui cherche les 50 premiers résultats :
        Set ListeEmail = CurrentDb.OpenRecordset("SELECT top 50 Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                               " FROM Envoimail" & _
                                               " WHERE (((Envoimail.ENVOI)=""Non""));")
     
     
     
        sujet = "Renouvellement de votre abonnement"    'le sujet est le même pour tous les mails
     
        With ListeEmail
     
            For i = 1 To 3 - 1
                adresse = !COURRIEL
                message = !PUBLICATION
     
                Set OutlookApp = CreateObject("outlook.application")
                Set OutlookMail = OutlookApp.CreateItem(0)
                With OutlookMail
                    .Subject = sujet
                    .To = adresse
                    .Body = message
                    .Send    'on envoie le mail créé
                End With
     
            Next i    'on passe au mail suivant
        End With
        ListeEmail.Close
        Set ListeEmail = Nothing
    End Sub
    D'autre part Access n'aime pas trop quel'on nomme un objet "Date" . C'est un mot réservé.
    A demain .

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Merci beaucoup,

    J'ai encore le problème qu'il ne passe pas sur la seconde ligne de la requête, il envoie le mail à la première adresse mail de la liste et autant de fois que i.

    Et puis autre chose, la requête ne me donne jamais le même nombre de résultat, ici, j'ai mis en test que sur 3, mais il faudra que je mette le code jusqu'à la fin du fichier en fait.

  9. #9
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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
    à rajouter à la ligne 33:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     adresse = ""
                message = ""
                .MoveNext
    ps: Je suis dans le meme cas , debutant+ ,en 25 ans ,ma DSI n'a jamais rien fait pour moi et maintenant ,on veut me supprimer Access !!
    Cdlt

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    pour lire tous les enregistrements, il faut une boucle avec While et Wend en plus du Movenext :
    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
    Public Sub Commande7_Click()
        Dim OutlookApp As Object
        Dim OutlookMail As Object
        Dim adresse As String
        Dim message As String
        Dim sujet As String
    '    Dim i As Byte
        Dim ListeEmail As Recordset
     
        'Requête qui cherche les 50 premiers résultats :
        Set ListeEmail = CurrentDb.OpenRecordset("SELECT top 50 Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                               " FROM Envoimail" & _
                                               " WHERE (((Envoimail.ENVOI)=""Non""));")
     
     
        While Not ListeEmail.EOF
     
            adresse = ListeEmail.Fields("COURRIEL")
            message = ListeEmail.Fields("PUBLICATION")
     
            Set OutlookApp = CreateObject("outlook.application")
            Set OutlookMail = OutlookApp.CreateItem(0)
            With OutlookMail
                .Subject = sujet
                .To = adresse
                .Body = message
                .Send    'on envoie le mail créé
            End With
     
            'on passe au mail suivant
            ListeEmail.MoveNext
     
        Wend
     
        ListeEmail.Close
        Set ListeEmail = Nothing
     
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2007
    Messages : 184
    Points : 188
    Points
    188
    Par défaut
    Bonjour à tous,
    Absent hier, je n'ai pas contribué...

    Ma remarque n'est pas sur le code VBA, mais sur la méthode utlisée pour envoyer les mails

    Si tu as un message de sécurité de Outlook qui te demande de confirmer l'envoi de chaque message...j'espère que tu n'envisage pas de laisser quelqu'un devant l'ordinateur pour cliquer Ok à chaque fois !

    d'où ma suggestion d'utiliser CDOSend Mail... (méthode sans confirmation et sans passage dans Outlook)

    (de mémoire, il y a sur le site une discussion ou une FAQ de comparaison des différentes méthodes d'envoi de mail possible avec leurs avantages et inconvénients.....)

    http://www.developpez.net/forums/d99...yer-mails-cdo/

    Il te faudra de toute façon un recordset, une boucle While
    et du with..with End..
    donc tu as progressé...

    Cordialement,
    Bonne journée
    Fevec

  12. #12
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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
    Voilà la suite mais avec le message de sécurité. Si tu utilise Outlook 2010 ,il me semble avoir lu qu'il y avait une possibilité de désactiver ces message. Sinon ,je te donne un autre code cet après-midi.
    En attendant ce code marche :
    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
    Public Sub Commande7_Click()
        Dim OutlookApp As Object
        Dim OutlookMail As Object
        Dim adresse As String
        Dim message As String
        Dim sujet As String
        Dim MesParution As String
     
        Dim i As Byte, j As Byte
        Dim ListeEmail As dao.Recordset
        Dim ListeParution As dao.Recordset
     
     
        Set ListeParution = CurrentDb.OpenRecordset("SELECT DISTINCT Envoimail.PUBLICATION FROM Envoimail;")
     
        With ListeParution
            For j = 0 To .RecordCount - 1
                MesParution = !Publication
     
     
                'Requête qui cherche les 50 premiers résultats :
                Set ListeEmail = CurrentDb.OpenRecordset("SELECT Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                                       " FROM Envoimail" & _
                                                       " WHERE (((Envoimail.PUBLICATION)=" & Chr(34) & MesParution & Chr(34) & ")) AND ((Envoimail.Envoi)=""Non"");")
     
                sujet = "Renouvellement de votre abonnement  " & MesParution     'le sujet est le même pour tous les mails
     
                With ListeEmail
                    '.MoveFirst
                    For i = 1 To .RecordCount
                        If Not IsEmpty(!COURRIEL) Then
                            adresse = !COURRIEL
                            message = !Publication
     
                            Set OutlookApp = CreateObject("outlook.application")
                            Set OutlookMail = OutlookApp.CreateItem(0)
                            With OutlookMail
                                .Subject = sujet
                                .To = adresse
                                .HTMLBody = " Bonjour , votre abonnement de " & MesParution & "arrive à écheance" & Chr(13) & Chr(10) & _
                                          " veuillez vous réabonner" & Chr(13) & Chr(10)    'CORPS DU MESSAGE
     
                                '                            .Body = message
                                .Send    'on envoie le mail créé
                            End With
                            adresse = ""
                            message = ""
                        End If
                        .MoveNext
                    Next i    'on passe au mail suivant
                End With
     
                .MoveNext
            Next j
        End With
        ListeParution.Close
        Set ListeParution = Nothing
     
        ListeEmail.Close
        Set ListeEmail = Nothing
    End Sub

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous.
    Je n'ai pas trop le temps de regarder le sujet, mais il y a peut être quelque chose à glaner ici:
    http://jdgayot.developpez.com/tutori...ewsletter-cdo/

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Bonjour à tous, et merci pour toutes ces propositions.

    Je suis présentement au Québec, mes horaires sont décalés de 6h par rapport à la France.

    Je vais tester toutes vos propositions et je vous reviens pour vous dire où ¸a en est ! Mais je suis excité de voir quand ça va marcher.

    Fevec, je ne veux surtout pas que l'utilisateur reste sur son poste pour cliquer sur OK (même en installant le logiciel clickYes, il faut quand même attendre les 5 secondes).

    EDIT : vos deux propositions de codes fonctionnent à merveille. Par contre pour le test, je vais utiliser avec le for pour limiter le test à quelques lignes. Ma requête contient en ce moment 2172 lignes, je n'allais pas continuer jusqu'à la fin puisque ca a l'air de bien fonctionner.

    Par contre faut vraiement résoudre ce problème du message, ca bloque tout l'ordinateur. Sur mon pc de test, je n'ai pas outlook2010, je suis sur outlook2003, je ne peux pas voir si on peut désactiver ce message.

    Pour ce qui est du CDOsendmail, ça m'a l'air un peu compliqué s'il faut que je connaissent les spécificités des FAI au Canada.

    Il me reste à intégrer du HTML pour rendre le mail plus attractif, mais dans tous les cas, oui je progresse et fier que ça fonctionne ! Merci vraiment à ce forum.

    Donc oui j'attend pour voir comment désactiver ce message de sécurité.

    RE-EDIT (pour éviter de faire un nouveau message). Je viens de montrer à mon supérieur l'effet du bouton et il en est très satisfait. Par contre, il faut vraiment que je désactive le message de sécurité et que j'habille le corps HTML. C'est vraiment super !

  15. #15
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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
    Normalement, avec "Redemption" ,ça marche nickel ,mais n'ayant jamais fait de publipostage ,et bien là ,le 1°mail part bien ,mais ensuite j'ai une erreur.Voir l'image jointe .Très dommage. Et mon anglais est trop limité pour poser la question au créateur de cette dll. Si Naphta passe dans le coin ,il s'interressait à tout ce qui touche l'envoie de mail .
    je met ici le code que j'ai utiliser:
    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
     Dim OutlookApp As Object    'Outlook.Application
        Dim OutlookMail    'As Object    'As Outlook.MailItem
        Dim SafeMail As Redemption.SafeMailItem
     
        Dim adresse As String
        Dim message As String
        Dim sujet As String
        Dim MesParution As String
     
        Dim i As Byte, j As Byte
        Dim ListeEmail As dao.Recordset
        Dim ListeParution As dao.Recordset
     
        Set OutlookApp = CreateObject("Outlook.Application")
     
        Set SafeMail = CreateObject("Redemption.SafeMailItem")
        Set OutlookMail = OutlookApp.CreateItem(olMailItem)
     
        SafeMail.Item = OutlookMail
     
        Set ListeParution = CurrentDb.OpenRecordset("SELECT DISTINCT Envoimail.PUBLICATION FROM Envoimail;")
        'énumère toutes les publications
        With ListeParution
            For j = 0 To .RecordCount - 1
                MesParution = !Publication
     
                'Requête qui cherche les 50 premiers résultats :
                Set ListeEmail = CurrentDb.OpenRecordset("SELECT Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                                       " FROM Envoimail" & _
                                                       " WHERE (((Envoimail.PUBLICATION)=" & Chr(34) & MesParution & Chr(34) & ")) AND ((Envoimail.Envoi)=""Non"");")
     
                sujet = "Renouvellement de votre abonnement  " & MesParution     'le sujet est le même pour tous les mails
     
                With ListeEmail
                    '.MoveFirst
                    For i = 1 To .RecordCount
                        If Not IsEmpty(!COURRIEL) Then
                            adresse = !COURRIEL
                            message = !Publication
     
                            With OutlookMail
                                .Subject = sujet
                                .To = adresse
                                .HTMLBody = " Bonjour , votre abonnement de " & MesParution & " arrive à écheance" & Chr(13) & Chr(10) & _
                                          " veuillez vous réabonner" & Chr(13) & Chr(10)    'CORPS DU MESSAGE
     
                            End With
                            SafeMail.Send
                            adresse = ""
                            message = ""
                        End If
                        .MoveNext
                    Next i    'on passe au mail suivant
                End With
     
                .MoveNext
            Next j
        End With
     
        Set OutlookApp = Nothing
        Set OutlookMail = Nothing
     
        Set SafeMail = Nothing
        '    MsgBox "ok"
     
        ListeParution.Close
        Set ListeParution = Nothing
     
        ListeEmail.Close
        Set ListeEmail = Nothing
    End Sub
    Et l'image de l'erreur
    Je continue de chercher. A+
    Images attachées Images attachées  

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Merci Thierry de te pencher sur ce problème.

    De mon côté je vous donne le code avec du html intégré.

    J'aimerais simplifier encore, en créant par exemple une table tblmessage avec le texte pour le mail à intégrer dans le message.

    Ca permettrait de modifier le corps du message sans devoir entrer dans le code (je suis dans cette société temporairement, lorsque je serais parti, ils devront faire tout eux-même)

    Et puis je vois arriver gros comme une maison, il faudrait que je gère la langue du client, soit français, soit anglais... (faut que je me lance là-dedans)

    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
    Private Sub envoimail_Click()
        Dim OutlookApp As Object
        Dim OutlookMail As Object
        Dim adresse As String
        Dim message As String
        Dim sujet As String
        Dim MesParution As String
        Dim strHTML As String
        Dim i As Byte, j As Byte
        Dim ListeEmail As dao.Recordset
        Dim ListeParution As dao.Recordset
     
        'requête pour récupérer les publications de la table EnvoiMail
        Set ListeParution = CurrentDb.OpenRecordset("SELECT DISTINCT Envoimail.PUBLICATION FROM Envoimail;")
     
        'boucle pour récupérer les adresses et les publications de la table EnvoiMail
        With ListeParution
            For j = 0 To .RecordCount - 1
                MesParution = !PUBLICATION
     
                Set ListeEmail = CurrentDb.OpenRecordset("SELECT Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                                       " FROM Envoimail" & _
                                                       " WHERE (((Envoimail.PUBLICATION)=" & Chr(34) & MesParution & Chr(34) & ")) AND (((Envoimail.ENVOI)=No));")
     
                sujet = "Renouvellement de votre abonnement " & MesParution     'le sujet est le même pour tous les mails
     
                With ListeEmail
                    '.MoveFirst
                    For i = 1 To .RecordCount
                        If Not IsEmpty(!COURRIEL) Then
                            adresse = !COURRIEL
                            message = !PUBLICATION
     
                            Set OutlookApp = CreateObject("outlook.application")
                            Set OutlookMail = OutlookApp.CreateItem(0)
                            strHTML = "<!DOCTYPE HTML pUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" & _
                                      "<HTML><HEAD>" & _
                                      "<META http-equiv=Content-Type content=""text/html; charset=iso-8859-1"">" & _
                                      "<META content=""MSHTML 6.00.2800.1516"" name=GENERATOR></HEAD>" & _
                                      "<BODY><DIV STYLE=""font-size: 16px; font_face: Tahoma;"">"
                            With OutlookMail
                                .Subject = sujet
                                .To = adresse
                                'Corps du message
                                .HTMLBody = strHTML & "<IMG SRC=""C:\Documents and Settings\P.Ouellet\Bureau\mail\titre.png"">" & _
                                                      "<TABLE>" & _
                                                      "<TBODY>" & _
                                                      "<TR>" & _
                                                      "<TH>" & _
                                                      "<TH width=150>C'est plus de 265 publications à des prix imbattables mais aussi des <B>certificats cadeaux</B> accompagnés d'une carte de souhaits pour un anniversaire, la fête des mères, la fête des pères, Noël ou toute autre occasion." & _
                                                      "<br><br>Pour plus de renseignements, n'hésitez pas à nous contacter.<BR>Nos téléphonistes sont prêts à vous aider du lundi au vendredi de 9h à 17h." & _
                                                      "</TH>" & _
                                                      "<TH widht=426><br><br><B>Bonjour, votre abonnement de " & MesParution & " arrive à écheance sous peu.*</B>" & _
                                                      "<br><br> Afin de ne manquer aucune copie de votre publication préférée et pour continuer de profiter de nos bas prix, nous vous suggérons de visiter dès maintenant notre site web ou de communiquer avec notre service à la clientèle." & _
                                                      "<br><br> <B>Profitez de nos tarifs réduits sur plus de 265 titres de journaux et magazines, tous offerts avec notre garantie que ce sont les plus bas prix sur le marché.</B>" & _
                                                      "</TH>" & _
                                                      "</TR>" & _
                                                      "</TBODY>" & _
                                                      "</TABLE>" & _
                                                      "<BR><BR>" & _
                                                      "<B>* Si vous avez renouvelé vos abonnements dernièrement, veuillez ne pas tenir compte de cet avis.</B>" & _
                                                      "<BR><BR>On prend au sérieux votre vie privée. Vous avez reçu ce message parce que vous êtes abonné par l'entremise de notre service et qu'il se peut qu'un de vos abonnements expire prochainement." & _
                                                      "<BR>Pour ne plus recevoir de message vous avisant de la fin prochaine d'un de vos abonnements, veuillez communiquer avec notre service à la clientèle. Merci !<BR>" & _
                                                      "</DIV>" & _
                                                      "</BODY>" & _
                                                      "</HTML>"
                                .Send    'on envoie le mail créé
                            End With
                            adresse = ""
                            message = ""
                        End If
                        .MoveNext
                    Next i    'on passe au mail suivant
                End With
     
                .MoveNext
            Next j
        End With
        ListeParution.Close
        Set ListeParution = Nothing
     
        ListeEmail.Close
        Set ListeEmail = Nothing
    End Sub

  17. #17
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    un conseil en passant :
    Citation Envoyé par ambact Voir le message
    Ma requête contient en ce moment 2172 lignes, je n'allais pas continuer jusqu'à la fin puisque ca a l'air de bien fonctionner.
    dans ce cas, évite d'utiliser byte (qui a une valeur maxi de 255) pour tes boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim i As Byte, j As Byte
    et l'utilisation de While et Wend évite l'utilisation d'une boucle avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        With ListeParution
            For j = 0 To .RecordCount - 1
    Mais tout ça c'est du détail, j'en conviens, à coté du problème de publipostage.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  18. #18
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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
    ça marche !
    J'ai scindé en 2 partie :une sub pour les recherches et une fonction EnvoieMail avec 3 arguments (adresse,sujet,corps).
    Au besoin tu peux rajouter d'autres arguments.
    La dll "Redemption" est telechargeable http://www.dimastr.com/redemption/home.htm
    Lire les conditions en cas
    d'utilisation commerciale ,mais dans ce cas je pense qu'il parle d'application vendue avec la dll (il y a une version redistribuable)
    J'ai envoyé 6 mail en un éclair et sans message de sécu.
    J'utilise cette dll depuis 4ans sans problèmes.
    voici le code:
    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
    Public Sub Commande7_Click()
     
        Dim adresse As String
        Dim message As String
        Dim sujet As String
        Dim MesParution As String
     
        Dim i As Integer, j As Integer
        Dim ListeEmail As dao.Recordset
        Dim ListeParution As dao.Recordset
     
     
        Set ListeParution = CurrentDb.OpenRecordset("SELECT DISTINCT Envoimail.PUBLICATION FROM Envoimail;")
        'énumère toutes les publications
        With ListeParution
            For j = 0 To .RecordCount - 1
                MesParution = !Publication
     
     
                'Requête qui cherche les 50 premiers résultats :
                Set ListeEmail = CurrentDb.OpenRecordset("SELECT Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                                       " FROM Envoimail" & _
                                                       " WHERE (((Envoimail.PUBLICATION)=" & Chr(34) & MesParution & Chr(34) & ")) AND ((Envoimail.Envoi)=""Non"");")
     
                sujet = "Renouvellement de votre abonnement  " & MesParution     'le sujet est le même pour tous les mails
     
                With ListeEmail
                    '.MoveFirst
                    For i = 1 To .RecordCount
                        If Not IsEmpty(!COURRIEL) Then
                            adresse = !COURRIEL
                            message = !Publication
                            Call EnvoieMail(adresse, sujet, MesParution)
                            adresse = ""
                            message = ""
     
                        End If
                        'DoEvents 'si besoin pour traité d'autre tache
                        .MoveNext
                    Next i    'on passe au mail suivant
                End With
     
                .MoveNext
            Next j
        End With
     
        MsgBox "ok"
     
        ListeParution.Close
        Set ListeParution = Nothing
     
        ListeEmail.Close
        Set ListeEmail = Nothing
    End Sub
     
    Function EnvoieMail(AQui As String, LeSujet As String, LeBouquin As String)
     
     
        Dim olApp As Object    'Outlook.Application
        Dim olMail    'As Outlook.MailItem
        Dim SafeMail As Redemption.SafeMailItem
     
        Set olApp = CreateObject("Outlook.Application")
        Set SafeMail = CreateObject("Redemption.SafeMailItem")
        Set olMail = olApp.CreateItem(olMailItem)
     
        SafeMail.Item = olMail
        With olMail
            .To = AQui
            .Subject = LeSujet
     
            .HTMLBody = " Bonjour , votre abonnement de " & LeBouquin & " arrive à écheance" & Chr(13) & Chr(10) & _
                      " veuillez vous réabonner" & Chr(13) & Chr(10)    'CORPS DU MESSAGE
     
     
        End With
        SafeMail.Send
     
        Set olApp = Nothing
        Set olMail = Nothing
        Set SafeMail = Nothing
    End Function
    Pour le html, je ne connais pas .On pourrait étudier la possibilité de signatures différentes (.dot)suivant l'envoie ,mais c'est un autre épisode.
    A+

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

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Merci, je vais tester tout ça la semaine prochaine, un autre projet est arrivé aujourd'hui.

    Thierry, je te tiendrais au courant de ton programme.

    Sinon Tee, tes commentaires ne sont pas un détail, ce serait bête que 255 premiers clients reçoivent le mail et pas les autres, ce qui n'est pas le but, il faut que je change en conséquence.

    il faut que je déclare i et j en quoi ? et pour la boucle while, que faut-il que je fasse ?

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Citation Envoyé par ambact Voir le message
    il faut que je déclare i et j en quoi ? et pour la boucle while, que faut-il que je fasse ?
    bonsoir,
    il faut déclarer i à minima en Integer, et pour plus de sécurité en Long, si un jour il y avait plus de 32767 destinataires ; j étant le nombre des publications, beaucoup moins nombreuses, peut éventuellement rester en byte.
    Par contre, si tu utilise While, plus besoin de dimensioner i et j. Voici le code du Sub Commande7_Click modifié avec la méthode While/Wend:
    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
    Public Sub Commande7_Click()
     
        Dim adresse As String
        Dim message As String
        Dim sujet As String
        Dim MesParution As String
     
       'Dim i As Integer, j As Integer inutile si on utilise la boucle While/Wend
     
        Dim ListeEmail As DAO.Recordset
        Dim ListeParution As DAO.Recordset
     
        Set ListeParution = CurrentDb.OpenRecordset("SELECT DISTINCT Envoimail.PUBLICATION FROM Envoimail;")
        ' énumère toutes les publications jusqu'à fin de fichier
            While Not ListeParution.EOF
        ' remplace     For j = 0 To .RecordCount - 1
                MesParution = ListeParution.Fields("Publication")
                ' remplace MesParution = !Publication
     
                'Requête qui cherche les destinataires:
                Set ListeEmail = CurrentDb.OpenRecordset("SELECT Envoimail.NOM, Envoimail.PRENOM, Envoimail.PUBLICATION, Envoimail.Date, Envoimail.COURRIEL, Envoimail.ENVOI" & _
                                                       " FROM Envoimail" & _
                                                       " WHERE (((Envoimail.PUBLICATION)=" & Chr(34) & MesParution & Chr(34) & ")) AND ((Envoimail.Envoi)=""Non"");")
     
                sujet = "Renouvellement de votre abonnement  " & MesParution     'le sujet est le même pour tous les mails
     
                While Not ListeEmail.EOF
                    '.MoveFirst
              '      For i = 1 To .RecordCount remplacé par While Not ListeEmail.EOF
                    If Not IsEmpty(ListeEmail.Fields("COURRIEL")) Then
                        adresse = ListeEmail.Fields("COURRIEL")
                        message = ListeEmail.Fields("Publication")
                        Call EnvoieMail(adresse, sujet, MesParution)
                        adresse = ""
                        message = ""
     
                    End If
                        'DoEvents 'si besoin pour traiter d'autres tâches
                    ListeEmail.MoveNext     'remplace Next i
                Wend                        'remplace End With
              '    Next i    'on passe au mail suivant
                'End With
     
                ListeParution.MoveNext
        '    Next j   remplacé par ListeParution.MoveNext
        'End With remplacé par Wend
        Wend
        MsgBox "ok"
     
        ListeParution.Close
        Set ListeParution = Nothing
     
        ListeEmail.Close
        Set ListeEmail = Nothing
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 5 12345 DernièreDernière

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