Developpez.com - Rubrique Access

Le Club des Développeurs et IT Pro

Access : mise en place d'un système d'envoi de documents individuels

Un tutoriel de Denis Hulo

Le 2020-05-02 16:00:26, par User, Rédacteur/Modérateur
Bonjour à tous,

Je vous présente un nouvel article concernant la génération et l'envoi par e-mails de documents individuels en utilisant Outlook :


Objectif : mettre en place un système permettant de générer et d'envoyer des documents individuels par e-mails depuis Access.
J'ai pris comme exemple l'envoi de documents pour des réabonnements dans une maison de la presse.

Chaque fichier pdf est généré dans un dossier, pour ensuite être transmis à son destinataire.

Bonne lecture,
Cordialement,
  Discussion forum
12 commentaires
  • User
    Rédacteur/Modérateur
    Envoyé par tee_grandbois
    bonsoir User,
    bonne initiative ... et
  • tee_grandbois
    Expert éminent sénior
    bonsoir User,
    bonne initiative ... et
  • curt
    Membre émérite
    Bonjour User,

    sujet récurent que de pouvoir envoyer des mails via Access (ou Excel d'ailleurs)
    Merci et bravo pour le tuto (la mise en pdf et le stockage est un plus)

    Curt
  • vodiem
    Expert confirmé
    Salut à tous,

    J'ai survolé l'article, je n'ai même pas testé le code... mais j'ai des critiques : (j'ai lu succinctement le code quand même )
    - Le module M_Replace ne sert pas. Il serait préférable de ne pas le mettre.
    - nomDossier = CurrentProject.Path :
    il serait préférable :
    nomDossier = environ("temp"
    - il serait préférable d'avoir une variable que de mettre en dur "Réabonnements" (si c'est dans le temp ce n'est plus utile)
    - le pdf généré n'est pas détruit alors qu'il ne sera jamais réutilisé. (le temp ferait dans ce cas encore très bien l'affaire surtout lors d'un arrêt intempestif)
    - il n'y a pas de gestion d'erreur pour EnvoiDocuments dans TestReabonnements alors qu'il est bien traité dans CmdEnvoyerDocuments_Click
    - mais ce que je déplore c'est qu'il n'y pas de gestion sur les erreurs d'envoi. Sans entrer dans quelque chose d'élaboré, je pense qu'à minima il serait bon d'avoir une table ou fichier log.
    ... je regarde pas plus en détail, je voudrai pas te rendre dépressif User

    histoire de pas me faire descendre, un peu de flatterie :
    J'ai apprécié la forme, le codage structuré, clair et bien commenté.

    Au passage Je n'ai pas testé la base, je me suis arrêté avant l'envoi. J'ai eu un doute :
    J'espère que les emails sont factices parce que sinon j'en connais qui vont te maudire.

    Merci pour ta (tes) contribution(s).
  • User
    Rédacteur/Modérateur
    Salut Vodiem,

    Je crois en effet qu'il faudrait que je rajoute une gestion d'erreur, j'essaie toujours de garder juste l'essentiel du code pour que ça soit plus clair pour les débutants, mais ça me semble utile dans ce cas.

    Concernant le module M_Replace, je vais aussi le supprimer.

    Pour l'emploi de CurrentProjet, et l'utilisation du dossier "Réabonnements", je préfère garder un dossier à côté de la base Access, je trouve que c'est plus simple à expliquer et à gérer pour les débutants.

    En tout cas merci pour tes remarques

    Cdlt,
  • User
    Rédacteur/Modérateur
    Envoyé par curt
    Bonjour User,

    sujet récurent que de pouvoir envoyer des mails via Access (ou Excel d'ailleurs)
    Merci et bravo pour le tuto (la mise en pdf et le stockage est un plus)

    Curt
    Merci à toi curt
  • CLTTKT34
    Nouveau Candidat au Club
    Bonjour
    Merci pour cet article très intéressant et surtout pour le code bien détaillé
    Je l'ai testé et j'ai un message d'erreur ' La méthode Run de l'objet Inshell3 a echoué'
    Une idée du problème?

    Merci
  • User
    Rédacteur/Modérateur
    Bonjour et merci,

    A première vue, c'est possible qu'il tente d'ouvrir Outlook sans succès.

    Le code est au début de la procédure principale d'envoi :

    Code VBA :
    1
    2
    3
    4
    5
    6
    7
     ' Teste si outlook est ouvert, si pas ouvert le lance : 
                If Not IsOutLookRunning() Then 
                    Dim oShell As Object 
                    Set oShell = CreateObject("WScript.Shell") 
                    oShell.Run "outlook" 
                    Set oShell = Nothing 
                End If

    Il faudrait ôter la gestion d'erreur pour voir la ligne concernée dans EnvoiDocuments.

    Cdlt,
  • LNDIO
    Candidat au Club
    Bonjour,

    Je me permets de vous solliciter.
    J'ai repris votre descriptif et utilisé dans ma base de données.
    Cela fonctionne plutôt bien, mise à part mon filtre qui ne fonctionne pas.

    Il me met "Type de donnée incompatibles dans l'expression du critère".
    Je ne comprends pas, j'ai également mes 2 tables Clients et Planning
    Dans ma table client, un ID Client (Texte) et dans mon Planning (un ID aléatoire, et un champ ID Client (texte également), relié à celui de ma table client. Comme dans votre exemple de table T_abonnement et T_abonné.

    Avez vous une idée ?
    Pour la partie filtre, voici le code noté.
    Code :
    DoCmd.OpenReport "Planning_quotidien", acViewPreview, , "N_Dossier=" & rsReabo!N_Dossier
    Pour info, je débute avec Access!
  • tee_grandbois
    Expert éminent sénior
    bonsoir,
    peut-on voir ton code complet ?
    Merci