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 :

Envoi de mails à partir d'un formulaire


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Envoi de mails à partir d'un formulaire
    Pour commencer, merci à tous les contributeurs de ce site car j'y ai trouvé une multitude d'informations qui m'ont permis d'avancer rapidement et efficacement dans mes projets.
    Cela dit, je suis beaucoup plus doué pour la conception graphique (ergonomie, importation de BMP créés avec FIreworks pour les transformer en boutons, etc.)

    J'ai donc un problème de programmation concernant l'envoi d'emails depuis un formulaire basé sur une requête.
    J'ai lu les FAQ VBA concernant la fonction "sendobject" et réalisé sans succès de multiples essais.

    Ma base est de conception très simple:
    Une table "Installateurs" qui contient mes techniciens dans toute la France (Nom, prénom, adresse, téléphone, adresse email, départements couverts)
    Une autre "Interventions"contient les interventions (Nom du client, adresse, Code postal, tel, etc)

    J'attribue une ou des missions à un technicien en fonction de sa position géographique (j'ai réussi à extraire le département du code postal "Interventions" et je le compare aux département couverts par les techniciens.
    Cela m'a permis de créer une liste "combo" qui ne contient que les techniciens disponibles pour attribuer l'intervention au bon technicien.
    Pour les "Pros" ce n'est pas un exploit mais pour moi cela a été une victoire !

    En synthèse :

    1. Enregistrement des missions (classeur xls) au travers d'un formulaire en mode feuille de données (ajout)
    2. Attribution de la mission au travers d'un formulaire "attribution" (avec ma combo, yes !)
    3. Affichage des missions attribuées au travers d'un formulaire "missions_attribuee_du_jour" qui contient: réf du client (nom, adresse, tel, etc.) et le nom du technicien

    Je souhaite envoyer l'email au technicien choisi sans avoir a renseigner son adresse (déjà présente dans la table "Installateurs"

    J'ai essayé ceci (ma modification est en rouge) en créant un nouveau module (nommé module1) afin que le code recherche l'adresse email du technicien dans le formulaire:

    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
    Public Sub CreateEmail( _
        Recipient As String, _
        Subject As String, _
        Body As String, _
        Optional Attach As Variant)
     ' --------------------------
        Dim I As Integer
        Dim oEmail As Outlook.MailItem
        Dim appOutLook As Outlook.Application
    
        ' créer un nouvel item mail
    
        Set appOutLook = New Outlook.Application
        Set oEmail = appOutLook.CreateItem(olMailItem)
    
        ' les paramètres
    
        oEmail.To = "SelectForm missions_attribuee_du_jour,Installateurs,email"
        oEmail.Subject = Subject
        oEmail.Body = Body
    
        If Not IsMissing(Attach) Then
    
           If TypeName(Attach) = "String" Then
    
                 ' s'il y a des pièces jointes
                oEmail.Attachments.Add Attach
    
            Else
    
                For I = 0 To UBound(Attach) - 1
                oEmail.Attachments.Add Attach(I)
    
                Next
    
            End If
    
        End If
    
        ' envoie le message
        oEmail.Send
    
        ' détruit les références aux objets
        Set oEmail = Nothing
    
        Set appOutLook = Nothing
    
    End Sub 
    
    J'ai associé ce code à l'ouverture du formulaire (Évènement---Après MAJ--- [procédure évènementielle])
      
    Private Sub Form_AfterUpdate()
    mailauto = "=Module1()"
    End Sub
    
    Pour terminer, j'ai associé à mon bouton (nom: mailauto) ce code :
    
    (Évènement---Sur clic--- [procédure évènementielle])
    
    Private Sub mailauto_Click()
    
    End Sub
    J'imagine avoir fait un tas d'erreurs mais je ne sais pas ou (même après la lecture des FAQ)

    J'ai compris que ce sujet avait déjà été traité (mon exemple trouvé sur ce site inclut même les pièces jointes) mais j'y travaille depuis samedi matin sans trouver la solution.

    Si un connaisseur a le temps et la gentillesse de m'expliquer simplement la méthode ou d'écrire le code (je comprend mieux avec un code concret) je le remercie d'avance.

    Cordialement,

    ZZdriver

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Envoi de mails à partir d'un formulaire
    Merci d'avoir rectifié l'Intitulé et d'avoir placé ma demande dans la bonne section.
    Avec mes excuses.
    Cordialement,

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    ce n'est pas tout à fait correct.

    ta procédure de CreateEmail semble correcte, si ce n'est l'initialisation du destinataire qui est farfelue.

    le principe de cette procédure est qu'elle doit être appelée avec des paramètres, paramêtres qui seront utilisés dans la procédure elle-même.

    les paramêtres sont visible dans la déclaration de la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub CreateEmail( _
        Recipient As String, _
        Subject As String, _
        Body As String, _
        Optional Attach As Variant)
    parm 1 : récipient : le destinataire (ou les destinataires)
    parm 2 : subjet : titre de ton email
    parm 3 : body : le texte proprement dit
    parm 4 : Attach : un éventuel attachement

    Donc,

    1)
    dans ta procédure de CreateEmail, je remplacerais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oEmail.To = "SelectForm missions_attribuee_du_jour,Installateurs,email"
    par ceci
    2) L'appel à cette procédure est à revoir complètement

    Je ne comprend pas l'utilité de ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_AfterUpdate()
    mailauto = "=Module1()"
    End Sub
    Et je changerai le code du bouton de la manière suivante, en supposant que à la fois Recipient, Subject, Body et Attach sont des objets de ton formulaire.

    Appelons les
    - Dest pour recipient
    - Titre pour subject
    - Corps pour body
    - Fichier pour attach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub mailauto_Click()
    CreateEmail( Me![Dest],_
        Me![Titre], _
        Me![Corps], _
        Me![Fichier])
    End Sub
    J'espère que ceci t'aidera un peu.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour Godzestla, et merci pour ta réponse rapide,

    Le point 2 était fait pour "activer" le module au chargement du formulaire (j'ai lu, je ne sais plus où, que c'était nécessaire, à priori, non)

    J'ai modifié le module (Recipient)

    En revanche, en ce qui concerne la procédure "bouton"
    Et je changerai le code du bouton de la manière suivante, en supposant que à la fois Recipient, Subject, Body et Attach sont des objets de ton formulaire.

    Appelons les
    - Dest pour recipient
    - Titre pour subject
    - Corps pour body
    - Fichier pour attach



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub mailauto_Click()
    CreateEmail( Me![Dest],_
        Me![Titre], _
        Me![Corps], _
        Me![Fichier])
    End Sub
    J'ai essayé ceci :

    Private Sub mailauto_Click()
    CreateEmail( Me![Dest],= email) email étant le nom du champ contenant l'adresse email dans le formulaire.
    J'ai la réponse: erreur comilation, attendu =

    Quand j'utilise :
    CreateEmail(Me![Dest],=email)

    J'ai la réponse:erreur comilation, attendu "expression"

    J'ai remplacé "=" par "Comme" et par "as" sans plus de succès.

    Il est évident que VBA ne se trompe pas et que l'âne c'est bien moi mais je commence à avoir de "serious nervous breakdown"......

    Si tu peux m'éclairer de ta lumière...

    Cordialement,

    ZZdriver

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Il est évident que VBA ne se trompe pas et que l'âne c'est bien moi mais je commence à avoir de "serious nervous breakdown"......
    C'est toi qui l'a dit , mais surtout tu n'as pas lu ou compris ce que je t'ai écrit.

    Et puis, il faut utiliser les balises codes pour la lisibilité (voir rêgles du forum).

    je te proposais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub mailauto_Click()
    CreateEmail( Me![Dest],_
    Me![Titre], _
    Me![Corps], _
    Me![Fichier])
    End Sub
    Si ta variable que j'appelle Dest s'appelle Email dans ton formulaire, alors la syntaxe est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub mailauto_Click()
    CreateEmail( Me![Email], Me![Titre], Me![Corps],Me![Fichier])
    End Sub
    Le raisonnement est le même pour les autres parms. (çad à remplacer par TES noms de contrôles de ton formulaire)

    je ne sais pas de quel langage tu t'inspires, mais les = qqchose n'ont pas leur place dans ce contexte.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Effectivement, je n'avais pas compris ....
    Pour avancer "pas à pas" et du fait que l'objet et le corp de l'email ne sont pas dans le formulaire (je vais le faire avec un champ largeur 0 pour le rendre présent mais invisible)

    J'ai essayé ceci (uniquement l'adresse E mail du destinataire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub mailauto_Click()
    CreateEmail (email)
    End Sub
    J'ai eu un message d'erreur avec "CreateEmail surligné en bleu:
    "Erreur de compilation : Argument non facultatif"

    J'ai pensé que le Module attendait les autres informations.
    J'ai indiqué des champs présents dans le formulaire (même s'ils n'ont rien à voir) avec cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub mailauto_Click()
    CreateEmail(Me![email], Me![Raison SOciale], Me![N° de contrat],Me![Ville])
    End Sub
    J'ai eu un message d'erreur "Erreur de compilation, Erreur se syntaxe"

    J'ai ensuite entré uniquement "CreateEmail" et suivi l'aide à la syntaxe qui s'inscrit.
    J'ai utilisé ce code (sans Me!) puisque non proposé dans l'aide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub mailauto_Click()
    CreateEmail [email], [Raison SOciale], [N° de contrat], [Ville]
    End Sub
    A ce stade, lorsque je clique sur mon bouton "mailauto", j'ai un nouveau message d'erreur mais qui est lié au module "Public Sub CreateEmail"

    "Erreur de compilation:Type défini par l'utilisateur non défini"

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub CreateEmail( _
        Recipient As String, _
        Subject As String, _
        Body As String, _
        Optional Attach As Variant)
    Surligné en jaune.

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim appOutLook As Outlook.Application
    Surligné en bleu

    Dans mes références (outils ---références)
    J'ai bien:
    Visual Basic For Applications
    Microsoft Access 12.0 Object Library
    OLE Automation
    Microsoft Access 12.0 Access database Engine Object Library
    Microsoft Visual Basic For Applications Extensibility 5.3

    Je me lance peut être dans une programmation trop compliquée pour moi mais j'ai toujours eu envie d'apprendre.

    Je sais que je pose probablement des questions très basiques et ennuyeuses.
    Cela dit, je suis pret à partager mes connaissances (ce que je fait régulièrement) sur l'animation vectoriel (Flash) ou sur ce que j'ai composé en PHP (Prestashop)

    Dans tous les cas, merci pour tes réponses précédentes et pour la suivante si tu en as le temps.

    PS: c'est vrai que le message est plus "propre" avec les balises...

  7. #7
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Euuuuuuuuuh, on ne va jamais en sortir ainsi, car l'informatique ce n'est pas merlin l'enchanteur ni les comptes de l'alchimiste.

    il y a des rêgles à suivre, une syntaxe à respecter, tout comme une prise électrique danoise ne peut recevoir une fiche de cable életrique aux normes US.

    Alors, je crois qu'il est temps que tu fonce un peu dans la FAQ, dans les tutos et que tu planches un peu sur les bases d'accès car essayer tout et n'importe quoi dans tous les sens, cela ne te mènera nulle-part à part à remplir le forum de tes nombreux essais divers qui ne peuvent qu'aboutir qu'à une conclusion unique : Chaque langage a ses rêgles. ne pas les respecter c'est échouer dans la communication, avec l'interlocuteur où la machine.


    Maintenant, si tu as besoin de faire ce genre de tests, pas de soucis, mais il vaut mieux que tu essuies les plâtres seuls, jusqu'à t'apercevoir qu'en finalité c'est la machine qui dicte ses rêgles et pas le contraire.

    Qu'en dis tu ?
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'en dis que je te remercie pour le temps que tu as m'as accordé.
    Que tes conseils m'ont permis d'avancer même si je n'ai pas encore obtenu le résultat recherché.
    Qu'effectivement, je vais aller sur les FAQ pour m'inspirer des codes inscrits dans les exemples pour comprendre (même si c'est très partiellement) la syntaxe utilisée.
    Malheureusement, je ne dispose pas en ce moment d'assez de temps pour me former plus en profondeur, mais ce sera fait car, même à 50ans, je suis toujours très avide de connaissance, surtout lorsque l'application est directe, c'est toujours pour moi une forme de petite victoire.
    Pour conclure, merci encore pour ton aide.

    Je te souhaite une excellente fin de journée.

    Cordialement,

Discussions similaires

  1. Envoi de mail en javascript avec formulaire
    Par dahu17 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/05/2008, 10h26
  2. [C++/CLI] [.NET 2.0] Envoi de mail à partir d'une application
    Par akrodev dans le forum Framework .NET
    Réponses: 1
    Dernier message: 09/10/2006, 13h42
  3. Envoi de mail à partir de Postgresql
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/09/2006, 20h39
  4. Envoyer un e-mail à partir d'un formulaire?
    Par Nonette dans le forum Access
    Réponses: 2
    Dernier message: 19/07/2006, 21h47

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