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

Access Discussion :

Comment envoyer une notification par email après chaque enregistrement enregistré


Sujet :

Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut Comment envoyer une notification par email après chaque enregistrement enregistré
    Bonjour,
    Un client demande qu'après chaque facture Enregistrée, une notification par Email lui soit envoyée. Mes Factures sont des etats en forme de ticket de caisse de 8 mm et j'aimerais qu'apres le caissier ait fini d'imprimer la facture, qu'un cette meme facture soit envoyée par email en piece JOINTE PDF. L'utilisateur n'a pas besoin d'effectuer aucune operation pour que cela se fasse. MERCI

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 601
    Par défaut
    Hello,

    Votre description "apres le caissier ait fini d'imprimer" est ambiguë du point de vue programmatique. VBA (le langage d'Access) peut lancer une impression, mais il ne sait pas quand l'imprimante physique a terminé.

    Quel est le véritable déclencheur ? L'action "fini d'imprimer" est-elle initiée par un clic sur un bouton (ex: "Enregistrer et Imprimer") dans un formulaire de saisie ?

    Comment l'état (le ticket) sait-il quelle facture imprimer ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    J'ai un bouton imprimer et j'ai un bouton enregistrer et fermer. Moi j'aimerais que l'etat soit transferé à l'adresse mail UNE FOIS AFFICHÉ

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 601
    Par défaut
    Votre "bouton imprimer" a donc deux rôles :

    1. Afficher l'état Etat_Ticket en mode Aperçu (pour que le caissier le voie).
    2. Envoyer ce même état par email en PDF (en arrière-plan).


    L'affichage (Aperçu) et l'envoi doivent-ils être simultanés ? C'est-à-dire : le caissier clique sur "Imprimer", l'aperçu s'ouvre et au même moment, l'email tente de partir ?
    Que se passe-t-il si le caissier regarde l'aperçu, mais ne l'imprime pas physiquement (il ferme juste l'aperçu) ? L'email doit-il quand même partir (puisqu'il a été "affiché") ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    Le bouton IMPRIMER ouvre la boite de dialoge pour que l'utilisateur choisit l'imprimante et imprimer. Moi j'aimerais QUAND L'UTISATEUR A FINI D'IMPRIMER AU MOMENT DE CLIQUER SUR L'AUTRE BOUTON EREGISTRER ET FERMER en arriere plan ,cet etat soit transferé à l'adresse mail

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 601
    Par défaut
    On ne comprend pas bien l'objectif de votre demande à part envoyer un mail (mais ça se trouve facilement via google, j'ai du mal à croire que se soit cela), mais voici quelques étapes de résolution,

    1. Mettre en place un gestionnaire d'erreurs pour s'assurer que le formulaire se ferme même si l'envoi de l'email échoue.
    2. Sauvegarder l'enregistrement actuel du formulaire (If Me.Dirty Then Me.Dirty = False).
    3. Vérifier que les champs requis pour l'email (ID_Facture, ID_Client) sont bien présents. Si non, sauter l'envoi et passer directement à la fermeture.
    4. Rechercher l'email du client (DLookup).
    5. Si aucun email n'est trouvé, informer l'utilisateur (optionnel) et sauter l'envoi, puis passer à la fermeture.
    6. Si un email est trouvé :
      • Préparer le sujet et le corps du message.
      • Tenter l'envoi automatique (DoCmd.SendObject avec EditMessage = False).
      • Intercepter l'échec (sécurité Outlook) et, si échec, retenter en mode manuel (EditMessage = True).

    7. Quelle que soit l'issue de l'envoi (réussi, échec, ou sauté), exécuter la commande finale : DoCmd.Close pour fermer le formulaire.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    Ok je vais elaborer pour que vous saisissiez mieux

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    J'ai mis en piece jointe l'etat que je voudrais qui soit envoye à mon ADRESSE MAIS, ce recu de transaction, j'aimerais le recevoir sur mon adresse mail personnele sans aucune intervention de l'utilisateur et j'aimerais que l'envoie se fasse en arriere plan. donc quand l'utilisateur CLIQUE sur FERMER ET ENREGISTRER j'aimerais recevoir en PDF ce recu de transaction
    Images attachées Images attachées  

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 601
    Par défaut
    Ok, maintenant on comprend bien le problème, mais vous bloquez où ? Dans les étapes de résolution, dans le code VBA, ... ?

    Un autre point qui pose question : Pour que l'envoi se fasse "sans intervention", le mot de passe du compte email d'envoi doit être écrit en clair dans le code VBA. Quiconque a accès au code (Alt+F11) peut voir ce mot de passe. C'est le compromis obligatoire pour l'envoi en arrière-plan.

    Ensuite, il y a le mail, si le serveur est gmail ou microsoft, c'est plus compliqué : Ils n'acceptent plus les mots de passe simples. Vous devrez probablement générer un "Mot de passe d'application" depuis les paramètres de sécurité de votre compte Google ou Microsoft pour que le code VBA puisse s'authentifier. De plus, les pare-feu de l'entreprise peuvent bloquer les ports SMTP (465, 587).

    Est-ce que vous vous êtes posés toutes ces questions ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    Mes codes visual basic sont protejés par un mot de passe. EFFECTIVEMENT je voudrais recevoir les notification SUR UN COMPTE GMAIIL. JE PEUX ME PLIER AU FAIT QUE LE MOT DE PASSE SOIT INSERE É VISIBLEMENT DANS LE CODE VBA.
    JE SUIS BLOQUÉ ENTIEREMENT SUR LE CODE

  11. #11
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 601
    Par défaut
    Si vous souhaitez recevoir le PDF sur votre compte Gmail, il va falloir créer un mot de passe d'applications Google -> https://www.go-soft.ch/index.php/faq...ion-sur-google

    Voici un exemple de code, qui faudra adapter en fonction des noms de vos états, champs, etc...

    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
    Private Sub btnEnregistrerEtFermer_Click()
        ' Déclaration des variables pour le PDF et l'email
        Dim idFacture As Long
        Dim cheminPDF As String
        Dim nomEtat As String
     
        ' Déclaration des objets CDO (Liaison tardive pour la portabilité)
        Dim objMessage As Object
        Dim objConfig As Object
        Dim fields As Object
     
        ' --- Noms à adapter à votre application ---
        nomEtat = "rpt_TicketCaisse" ' Mettez ici le nom exact de votre état
     
        ' Gestionnaire d'erreurs pour garantir la fermeture du formulaire
        On Error GoTo GestionErreurs
     
        ' 1. Sauvegarde de l'enregistrement si des modifications ont été faites
        If Me.Dirty Then
            Me.Dirty = False
        End If
     
        ' 2. Identification de l'enregistrement courant
        ' Adaptez "ID_Facture" au nom du contrôle contenant l'ID sur votre formulaire
        idFacture = Me.ID_Facture 
     
        ' 3. Définition du chemin temporaire pour le fichier PDF
        cheminPDF = "C:\Temp\recu_" & idFacture & ".pdf"
     
        ' 4. Génération du PDF filtré
        ' Assurez-vous que le dossier C:\Temp existe ou choisissez un autre dossier
        ' Adaptez "" au nom du champ ID dans la source de l'état
        DoCmd.OpenReport nomEtat, acViewPreview, , " = " & idFacture, acHidden
        DoCmd.OutputTo acOutputReport, nomEtat, acFormatPDF, cheminPDF
        DoCmd.Close acReport, nomEtat, acSaveNo
     
        ' 5. Envoi de l'email avec le PDF en pièce jointe via CDO
        Set objMessage = CreateObject("CDO.Message")
        Set objConfig = CreateObject("CDO.Configuration")
     
        ' Chargement de la configuration
        Set fields = objConfig.Fields
     
        ' Configuration des paramètres SMTP pour Gmail
        With fields
           .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
            ' --- Renseignez vos informations ci-dessous ---
           .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "votre.adresse@gmail.com"
           .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "votremotdepassedapplication16caracteres"
           .Update
        End With
     
        ' Composition du message
        With objMessage
            Set.Configuration = objConfig
           .To = "votre.adresse.personnelle@gmail.com" ' Destinataire
           .From = "votre.adresse@gmail.com" ' Expéditeur
           .Subject = "Nouveau reçu généré : " & idFacture
           .TextBody = "Veuillez trouver ci-joint le reçu pour la transaction ID " & idFacture & "."
           .AddAttachment cheminPDF
           .Send
        End With
     
    NettoyageEtFermeture:
        ' 6. Nettoyage et fermeture
        On Error Resume Next ' Ignore les erreurs si le fichier n'existe pas
        Kill cheminPDF ' Suppression du fichier PDF temporaire
        Set objMessage = Nothing
        Set objConfig = Nothing
        Set fields = Nothing
        On Error GoTo 0
     
        DoCmd.Close acForm, Me.Name
        Exit Sub
     
    GestionErreurs:
        ' 7. Gestion des erreurs
        MsgBox "Une erreur est survenue : " & Err.Description & vbCrLf & vbCrLf & _
               "L'email n'a pas pu être envoyé. L'enregistrement a cependant été sauvegardé.", _
               vbExclamation, "Échec de l'envoi"
        ' Le code saute ensuite à la section de nettoyage pour fermer proprement
        Resume NettoyageEtFermeture
     
    End Sub
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    JE CROIS QUE J'AI UNE ERREUR DANS CETTE LIGNE DE CODE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.Close acForm, Me.Name
    POUR LE MESSAGE # 11

  13. #13
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 72
    Par défaut
    Au cas où il aurait une coupure d'internet, est il possible que l'email soil envoyé quand la connexion est reprise?

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 601
    Par défaut
    Quel est le message d'erreur exact (numéro et description) que vous recevez ? (Vous pouvez forcer l'erreur facilement, par exemple en mettant un faux mot de passe dans sendpassword ou en coupant votre connexion internet).
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. envoyer une plage par email
    Par soubichat dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/09/2010, 19h50
  2. Comment envoyer une adresse par le port série
    Par christophe_s46 dans le forum WinDev
    Réponses: 3
    Dernier message: 10/09/2007, 02h52
  3. comment envoyer un pdf par email
    Par nouha_79 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2007, 12h09
  4. Comment envoyer un état par email en Delphi ?
    Par Borisam dans le forum Web & réseau
    Réponses: 10
    Dernier message: 28/11/2005, 11h19

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