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 par mail de certaines colonnes du formulaire courant sous format Excel [AC-2003]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 36
    Points
    36
    Par défaut Envoi par mail de certaines colonnes du formulaire courant sous format Excel
    Bonjour,

    Je souhaite envoyer un mail avec une pièce jointe contenant une table Excel avec les enregistrements affichés dans mon formulaire.

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DoCmd.SendObject acSendForm, mon
    Form, acFormatXLS, , , , "Objet", "Message",
    Malheuresement, ça recopie trop des colonnes de mon formulaire, il faut que je me tourne vers autre chose.
    Ca fait juste trois semaines que je me suis mis à Access et au VBA, là j'avoue être un peu perdu et je ne sais pas trop ou piocher de l'information pour faire ce que j'ai envie de faire.

    Auriez-vous quelques pistes ?
    Merci

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Finalement j'ai trouvé une solution plus ou moins élégante (à vous de juger)
    Je créer une table temporaire avec les colonnes que je souhaite.

    Ca donne ça :

    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
     
    Dim oRst As DAO.Recordset
        Dim oDb As DAO.Database
        Set oDb = CurrentDb
        Set tableTemp = oDb.OpenRecordset("tableTemp", dbOpenTable)
        'Vide la table
        While Not tableTemp.EOF
            tableTemp.Delete
            tableTemp.MoveNext
        Wend
     
        Set oRst = Me.Recordset
        While Not oRst.EOF
            tableTemp.AddNew
            tableTemp.Fields("nom") = oRst.Fields("nom").Value
            tableTemp.Fields("decision") = oRst.Fields("avisComite").Value
            tableTemp.Fields("motifDecision") = oRst.Fields("commentaireComite").Value
            tableTemp.Update
             oRst.MoveNext
        Wend
     
        tableTemp.Close
        oDb.Close
        Set oRst = Nothing
        Set tableTemp = Nothing
        Set oDb = Nothing
    Je ne fait pas de "oRst.close" volontairement, sinon ça vide le formulaire de ses enregistrements, ça pourais inquieter mes utilisateurs.

    Ensuite je balance tableTemp dans un mail comme précedemment.

    A votre avis, cette solution est adaptée ? Lourde ?
    Merci

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Bonjour

    Pour vider la table, une simple requête DELETE suffit et est plus recommandée que ta boucle.

    Il te faut aussi faire un movefirst sur orst avant de le parcourir sinon, la boucle démarre à la position de l'enregistrement courant dans le formulaire.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Merci pour cette réponse.
    J'ai corrigé comme suit.

    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
     
        Dim oRst As DAO.Recordset
        Dim oDb As DAO.Database
        Set oDb = CurrentDb
        Set tableTemp = oDb.OpenRecordset("tableTemp", dbOpenTable)
     
        DoCmd.SetWarnings False
        DoCmd.RunSQL "DELETE * FROM tableTemp"
        DoCmd.SetWarnings True
     
        Set oRst = Me.Recordset
        oRst.MoveFirst
        While Not oRst.EOF
            tableTemp.AddNew
            tableTemp.Fields("nom") = oRst.Fields("nom").Value
            tableTemp.Fields("decision") = oRst.Fields("avisComite").Value
            tableTemp.Fields("motifDecision") = oRst.Fields("commentaireComite").Value
            tableTemp.Update
             oRst.MoveNext
        Wend
     
        tableTemp.Close
        oDb.Close
        Set oRst = Nothing
        Set tableTemp = Nothing
        Set oDb = Nothing
    J'ai un autre problème maintenant, l'une de mes colonnes est liée à une liste déroulante avec une clée étrangère. A l'affichage Access remplace automatiquement la clée étrangère par une valeur texte que j'ai choisie.
    Mais lors du remplissage en VBA de ma table temporaire je me retrouve avec les chiffres de clée étrangère.
    Comment retrouver ma valeur texte ?

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il faut faire une jointure sur les tables avec une requête, et c'est cette requête que tu exporteras.

    Autre possibilité, charger le champ lié dans la source du formulaire et comme ça tu pourras y acceder avec oRst.Fields("Lechamptexte")

    Donc soit tu modifies en aval, soit en amont

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Ok, j'ai trouvé par moi-même pour mon dernier soucis, c'est tout con.
    Dans ma table temporaire, je renseigne ma colonne de la même façon que dans la table affichée dans mon formulaire, c'est à dire en numérique et clée étrangère vers mon autre table (celle avec le texte).

    Ca se fait tout seul avec "l'assistant liste de choix" dans le mode "création" de la table temporaire.

    edit : On a répondu en même temps, c'est donc en amont pour moi

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Un dernier détail, dans la mail le nom de la pièce jointe est "tableTemp.xls" ce qui n'est pas terrible, y'a t'il un moyen de modifier le nom sans modifier le nom de la table ?

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je ne pense pas

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

Discussions similaires

  1. [XL-2003] Transfert d'une ligne vers formulaire excel + envoi par mail
    Par coolman53 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2012, 13h05
  2. [HTML 4.0] Formulaire données envoi par mail
    Par Marc31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 12/09/2011, 01h00
  3. Réponses: 3
    Dernier message: 12/02/2007, 19h39
  4. Récupérer adresse erronnée + envoi par mail
    Par Cid67 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2006, 12h17
  5. [Mail] envoi par mail : pb de point d'exclamation
    Par Faure dans le forum Langage
    Réponses: 12
    Dernier message: 20/03/2006, 13h02

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