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 automatique d'un mail a plusieurs contacts avec pièce jointe


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Alternant
    Inscrit en
    Octobre 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 64
    Points : 34
    Points
    34
    Par défaut Envoi automatique d'un mail a plusieurs contacts avec pièce jointe
    Bonjour à tous,

    Je dois envoyer des mails en une seule fois via outlook a partir d'une table ACCESS. Mon petit soucis est que je dois joindre des requetes a mon mails. En effet j'ai plusieurs contacts dans ma table et a chaque contacts correspond une requetes que je dois lui envoyer en pièce jointe sous format excel de préférence

    Voici mon 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
    Sub CreateEmail()
        Dim I As Integer
        Dim oEmail As Outlook.MailItem  'créer un nouveau méssage électronique
        Dim appOutLook As Outlook.Application 'permet d'accéder a l'application outloock
        Dim rst As Recordset
     
        Set appOutLook = New Outlook.Application
        Set oEmail = appOutLook.CreateItem(olMailItem)
     
     
    strSql = "SELECT DISTINCT Contacts FROM [Table1]"
     
     
      Set rst = CurrentDb.OpenRecordset(strSql, dbOpenSnapshot)
     
    While Not rst.EOF
     
    If rst("Contacts").Value <> "" Then
     
        Set oEmail = appOutLook.CreateItem(olMailItem)
        oEmail.To = rst("Contacts")
        oEmail.Subject = "Relance 31.12.2016 -"
        oEmail.Body = "Bonjour," _
        &blblblabalbablbalblbalbalablabalbalablabalbalbalabalbalbalaba
        & vbCrLf & vbCrLf _
     
         oEmail.Send
        rst.MoveNext
        End If
    Wend
     
    MsgBox ("Les mails ont étaient envoyés")
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Autant que je saches on ne peut pas le faire directement.
    Il fut que tu exportes tes requêtes sous forme de fichier Excel (voir DoCmd.TranfertSpreadsheet) puis que tu joignes les fichiers Excel au courriel (voir la FAQ Comment envoyer un mail avec Outlook ? https://access.developpez.com/faq/?page=Outlook#outlook).

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Alternant
    Inscrit en
    Octobre 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Merci pour votre réponse. Concernant le code pour envoyer le mail, dans la partie ci-dessous le Attach de type variant, il renvoit le chemin du fichier excel, je dois donc mettre à la place le chemin du fichier? ou bien c'est à la placce dde la variable I ?

    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
    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

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    C'est au moment du passage de paramètre quand tu appelles la procédure de création.

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call NonTaProcedure(..., IciLeCheminEtLeNom)
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Alternant
    Inscrit en
    Octobre 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    D'accord je vois. Merci

    Autre chose, est ce que c'est possible d'envoyer toutes les pièces jointes en meme temps ? pour éviter de faire plusieurs procédures et plusieurs call

    Pour faire ca j'ai essayé d'insérer un bloc with et une condition aprés le oEmail.Body comme ci-dessous, mais ca ne fonctionne:j'arrive a envoyer le mail mais sans la pièce jointe

    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
    Sub CreateEmail()
        Dim I As Integer
        Dim oEmail As Outlook.MailItem  'créer un nouveau méssage électronique
        Dim appOutLook As Outlook.Application 'permet d'accéder a l'application outloock
        Dim rst As Recordset
     
        Set appOutLook = New Outlook.Application
        Set oEmail = appOutLook.CreateItem(olMailItem)
     
     
    strSql = "SELECT DISTINCT Contacts FROM [Table1]"
     
     
      Set rst = CurrentDb.OpenRecordset(strSql, dbOpenSnapshot)
     
    While Not rst.EOF
     
        If rst("Contacts").Value <> "" Then
     
        Set oEmail = appOutLook.CreateItem(olMailItem)
        oEmail.To = rst("Contacts")
        oEmail.Subject = "Relance 31.12.2016 -"
        oEmail.Body = "Bonjour," _
        &blblblabalbablbalblbalbalablabalbalablabalbalbalabalbalbalaba
        & vbCrLf & vbCrLf _
     
     
      With oEmail
          If rst("Contacts").Value = "blabalb" Then
     
           oEmail.Attachments.Add "C:hohy.xlsx"
           Else
                If rst("Contacts").Value = "hakhalo" Then
     
                 oEmail.Attachments.Add "c:ljkoplm.xlsx"
                End If
     
            End If
     
        End With 
     oEmail.Send
     rst.MoveNext
    Wend
    MsgBox ("Les mails ont étaient envoyés")
    End Sub

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonsoir à tous,

    Vraiment novice sur VBA. je crois avoir le même problème que Hania06.
    J'ai copié un code sur le net et vraiment cela m'aide à envoyer des e-mail à toutes les adresses e-mail de ma base de données. Seulement, j'aimerais inclure les pièce jointes qui sont dans ma base de données Access et non sur le disque dur. Est-ce possible ?

    Voici mon 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
    'ENVOIE DE MAIL GESTIONNAIRE
    Private Sub Commande219_Click()
     
    'Déclaration des variable
      Dim rst As DAO.Recordset
      Dim strSQL As String
      Dim strMessageType As String
      Dim strTitre As String
      Dim strMsg As String
     
     
      ' Titre du message
      strTitre = "{Objet} -- Résolu" _
     
     
      ' Message type à expédier
      ' Les signes {...} seront remplacés plus loin par
      ' les infos Client
      strMessageType = "Bonjour," _
        & vbCrLf & vbCrLf _
        & "En date du {Date}, Nous avons reçu du client {Nom_Client} la réclamation en objet." & vbCrLf & vbCrLf _
        & "Nous vous écrivons pour vous informer que cela a été pris en compte et désormais clôt." & vbCrLf _
        & vbCrLf & "Nous vous souhaitons une bonne réception" _
        & vbCrLf & vbCrLf & "~~ Service de Réclamations - ENT~~"
     
      ' Ouverture de la requête
      ' (seuls les gestionnaire ayant un email sont concernés ici)
      strSQL = " SELECT * FROM [Reclamations] WHERE (((Reclamations.Etat)='Clôturée')) "
     
      Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
     
      ' Parcourir la liste des clients
      While Not rst.EOF
        ' Construire un message personnalisé
        ' (on remplace chaque {...} du message par les champs
        ' équivalents de la requête
        strMsg = Replace(strMessageType, "{Nom_Client}", rst("Nom_Client"))
        strMsg = Replace(strMsg, "{Date}", rst("Date"))
        strTitre = Replace(strTitre, "{Objet}", rst("Objet"))
     
        ' Expédier le mail
        SendMail rst("E-mail_gest"), strTitre, strMsg, False
     
        ' Client suivant
        rst.MoveNext
      Wend
     
      ' On libère les ressources
      rst.Close
      Set rst = Nothing
     
     
      CurrentDb.Execute ("UPDATE Reclamations SET Reclamations.Etat = 'Archivée' WHERE (((Reclamations.Etat) = 'Clôturée')) ")
     
      ' Un petit message de confirmation
      MsgBox "E-mail de clôture envoyé aux gestionnaires!", vbInformation, "ENT -- Service de Réclamations"
    End Sub
    Cela fait des semaines que je traîne sur cela et mon patron attend des résultats car le projet est sérieux.

    Merci beaucoup les amis.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Alternant
    Inscrit en
    Octobre 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Pour mon cas, j'ai du enregistrer mes pieces jointes dans un dossier pour ensuite inclure le chemin du dossier dans le code.

    S'il y a une solution plus directe, ca m'interesse aussi

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J'ai parcouru plusieurs forums et je constate qu'ils en font de même, c'est-à-dire ranger les pièces jointes dans un dossier et de spécifier celui-ci au niveau du code VBA.

    Sauf que dans mon cas, j'ajoute de nouvelles pièces jointes à chaque enregistrements dans ma base, ce qui veux dire qu'il faudra à chaque fois aller modifier le code pour l'ajuster. Or l'application sera utilisée par des profanes de l'informatique, il serait mieux qu'ils n'aient pas à connaitre cette difficulté.

    Dans l'espoir que tu trouves une solution à cela... Fais moi signe.

    Merci

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Citation Envoyé par DylaneJC Voir le message
    Sauf que dans mon cas, j'ajoute de nouvelles pièces jointes à chaque enregistrements dans ma base, ce qui veux dire qu'il faudra à chaque fois aller modifier le code pour l'ajuster. Or l'application sera utilisée par des profanes de l'informatique, il serait mieux qu'ils n'aient pas à connaitre cette difficulté.
    Non, probablement, tu n'as pas a ajuster le code à chaque fois, tu as à modifier le code pour qu'il prenne une liste de pièces jointes au lieu d'une seule.
    De plus compte tenu de la limite de 2 go des BD Access, il faut faire attention avec l'ajout de pièces attachées.
    Généralement, il est recommandé de ne stocker que le chemin d'accès et stoker les pièces sur le disque.

    DylaneJC, tu as quelque chose comme :
    • Un identifiant, une pièce
    • Un identifiant, une autre pièce
    • Un identifiant, encore une pièce


    C'est cela ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Oui c'est cela.

    Merci encore pour l'astuce.

    Je verrai comment modifier cela et mettre le chemin d'accès, afin de prévenir d'éventuels crash.
    Mais au finish, comment faire alors pour les envoyer toutes par mail, à chaque correspondant de la base de données, sachant qu'à chacun des destinataires, une pièce jointe est attachée ?

    Aussi serait-ce possible de récupérer le chemin du fichier présent dans la bd, vu que je vais la modifier et mettre le chemin d'accès?

    Merci

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Je viens de vérifier et le code du forum gère plusieurs pièces attachées. Il suffit de lui passer un tableau.
    On pourrait modifier le code pour remplacer le tableau par une collection mais à part cela rien à faire de ce côté.
    Du côté export des fichiers.

    Ici :
    Field2.SaveToFile Method
    https://msdn.microsoft.com/en-us/lib...ffice.12).aspx

    Il est expliqué comment faire un export de toutes les pièces attachées à un enregistrement.

    La partie délicate viens du fait qu'on ne peut préciser que le chemin et pas le nom du fichier donc on peut :

    • créer un répertoire par utilisateur (sur un serveur, ex : X:\unChemin\CodeUsager)
    • créer un sous-répertoire dans le répertoire des documents de l'utilisateur (sur son poste ex : C:\MesDocument\TempoCouriel)
    • créer un répertoire par destinataire (sur un serveur, ex X:\UnCehmin\CodeClient)


    Je vais supposer qu'on a une liste de destinataires et une liste de pièces jointes pour ce destinataire, cela simplifie la logique de traitement.

    pour chaque destinataire

    Vider le répertoire temporaire (au cas où il y aurai eu un plantage dans le traitement précédent)
    pour chaque pièce attachée de ce destinataire dans la liste des pièces attachées de ce destinataire.

    exporter les pièces dans le répertoire temporaire
    Inventorier les fichiers du répertoire temporaire
    créer un courriel en lui passant l'inventaire des fichiers (chemin complet : disque ou serveur, répertoire, nom et extension)
    Vider le répertoire temporaire

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je te remercie beaucoup @marot_r pour ces explications et ces tuyaux que tu viens de me donner.

    Je vais faire comme t'as dt.

    Au fait, je voulais signaler que j'utilise IBM Notes comme serveur de messagerie.

    A+

Discussions similaires

  1. Envoi mail lotus via excel avec pièce jointe
    Par Mokia34 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/01/2016, 22h02
  2. [AC-2003] Envoi mail à liste de destinataires avec pièce jointe et sans Outlook
    Par philippe.desrues dans le forum VBA Access
    Réponses: 1
    Dernier message: 11/07/2013, 15h35
  3. [MySQL] script formulaire de contact avec pièces jointes gérées en jquery
    Par simone_obje dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/04/2012, 08h59
  4. [PHP 5.3] Envoi de mail en texte, html, avec pièces-jointes et images....
    Par rafmos dans le forum Langage
    Réponses: 1
    Dernier message: 06/08/2010, 15h58

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