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 d'un mail à partir d'access


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 81
    Points : 58
    Points
    58
    Par défaut Envoi d'un mail à partir d'access
    Bonjour,

    J'ai créé un formulaire qui fait appel à la fonction CreateMail trouvée sur ce site

    http://access.developpez.com/faq/?page=Outlook#outlook

    Tout se passe bien sauf pour les pièces jointes, ça BUG et cela quoi que je fasse.

    Mon projet est d'envoyer ce mail en allant chercher tous les fichiers d'un dossier bien précis et le mettre en pièces jointes.

    Quelqu'un peut il m'aider

    Merci

    Eric

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,

    Comment fais tu pour joindre les fichiers ?

    Parce que là, il va te falloir récupérer le chemin du répertoire, parcourir ce répertoire et remplir un tableau avec le chemin complet des fichiers que tu passeras en paramètre à la fonction.


  3. #3
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 81
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    C'est bien là mon problème.
    J'ai mis le chemin d'un seul fichier et même ainsi cela ne fonctionne pas alors pour tous les fichiers c'est la galère
    Je suis débutant en vba et je ne connais pas les tableau dont tu me parles.
    Peux tu m'en dire plus
    Pas forcément la solution complète mais un chemin pour la trouver.

    Merci

    Eric

  4. #4
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Vraiment bizarre que tu ne puisses pas attacher un fichier

    Pour le tableau : je te laisse découvrir ce petit code que je viens d'écrire.
    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
    Sub test(nb As Long)
     
    Dim i As Integer
    ReDim montab(nb) As String
     
    For i = 0 To UBound(montab)
        montab(i) = Chr(i + 40)
    Next i
     
    For i = 0 To UBound(montab)
        Debug.Print montab(i)
    Next i
     
    End Sub
     
    Sub tableau()
     
        test (19)
     
    End Sub
    Tu pourras t'en inspirer pour écrire ton code. ReDim va te permettre de dimensionner ton tableau en fonction du nombre de fichiers contenus dans le répertoire.

    Pour plus de détails : sur ReDim, tableaux etc...


  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut un truc comme ç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
    Sub SendMail(email As String)
    Dim O As Object
    Dim i As Outlook.MailItem
    Dim A As Outlook.Attachments
     
    'Création des objets
    Set O = CreateObject("OutLook.Application")
    Set i = O.CreateItem(olMailItem)
    Set A = i.Attachments
    A.Add "C:\PDF\Devis.pdf", olByValue, 1, "DEVIS.PDF"
    i.Recipients.Add email
    i.Subject = "DEVIS"
    i.Importance = olImportanceHigh
     
    'Affichage du mail pour controle avant de l'envoyer manuellement
    'ou envoi direct
     
    'i.Display
    'ou
    'i.send
     
    'Destruction des objets"
    Set A = Nothing
    Set i = Nothing
    Set O = Nothing
    End Sub
    la contrainte c'est que dans tes références VBA il faut cocher
    Microsoft Outlook xxx Object Library

    soit le fichier MSOUTL.OLB dans ProgramFiles\MicrosoftOffice\Officexxx

    bon courage

  6. #6
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 81
    Points : 58
    Points
    58
    Par défaut Pour Lou Pitchoun
    Je crois que la fonction CreateMail() fait appel à un tableau puisqu' elle reprend:
    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
    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 = Recipient
        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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For I = 0 To UBound(Attach) - 1
                oEmail.Attachments.Add Attach(I)
    Et c'est là que ça plante. A quoi doit correspondre Attach??
    Chemin du dossier, du fichier ou??????
    Attach doit il être déclaré comme string, variant ??

    Je ne comprends rien au code que tu m'as envoyé
    Désolé mais les tableaux, c'est la première fois que j'y suis confronté

    Merci pour ton aide

    Eric

  7. #7
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,
    Citation Envoyé par grommerch Voir le message
    Je crois que la fonction CreateMail() fait appel à un tableau puisqu' elle reprend:
    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)
    Attach correspond au tableau contenant les chemins (répertoire + nom) des fichiers à attacher au message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    For I = 0 To UBound(Attach) - 1
                oEmail.Attachments.Add Attach(I)
    Et c'est là que ça plante. A quoi doit correspondre Attach??
    Chemin du dossier, du fichier ou??????
    Attach doit il être déclaré comme string, variant ??

    Je ne comprends rien au code que tu m'as envoyé
    Désolé mais les tableaux, c'est la première fois que j'y suis confronté

    Merci pour ton aide

    Eric
    Quel est le message d'erreur ?

    Pour mon message précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub tableau()
     
        test (19)
     
    End Sub
    J'appelle la procédure Test en passant en paramètre 19.

    Ce paramètre va me permettre de dimensionner mon tableau (à l'aide de ReDim) à la taille voulue (pour toi ce sera le nombre de fichiers contenu dans le répertoire).

    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
    Sub test(nb As Long)
     
    Dim i As Integer
    ' déclaration et dimensionnement du tableau en fonction de nb
    ReDim montab(nb) As String
     
    ' remplissage du tableau avec des caractères bidon
    For i = 0 To UBound(montab) - 1
        montab(i) = Chr(i + 40)
    Next i
     
    ' lecture du tableau
    For i = 0 To UBound(montab) - 1
        Debug.Print montab(i)
    Next i
     
    End Sub

  8. #8
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 81
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Merci pour ton aide, je commence à comprendre les tableaux.
    Cependant, par la suite j'aurai besoin de trier les fichiers attachés en fonction de leur extension ( jpg ou pdf) et pour ce faire j'ai trouvé un code qui fonctionne super et crée un mail avec pièces attachées et tout et tout.

    Le seul problème, je n'arrive pas à spécifier le format du mail que je crée et les pièces jointes se mettent n'importe où dans le texte. j'aimerais le avoir en bas ( style texte brut).
    J'utilise Outlook 2000 et la propriété format de Mailitem n'existe pas.
    As tu une solution.
    Ci dessous le code , donnes moi ton avis
    Merci

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Public Sub EnvoiMail2(unDestinataire As String, _
                         unSujet As String, _
                        unBody As String, unRepertoireAttach As String, _
                        unMaskAttach As String, peutModifier As Boolean)
     
     
     
     
    On Error GoTo ErrorEnvoiMail2
     
    ' Déclare la variable contenant la référence à l'application OLE (Outlook ici).
    Dim olApp As Object
    ' Déclare un item (un mail en l'occurence, mais peut être un contact, ...)
    Dim mailItem As Object
     
    ' Déclare une liste de attachments
    Dim listeAttachments As Object
    ' Déclare un attachment
    Dim unAttachment As Object
    ' Déclare les trucs pour les fichiers
    Dim unFichier    ' Un fichier
    Dim numFichier   ' Numéro du fichier dans le dossier
     
     
    ' Crée l'objet Outlook.application
    Set olApp = CreateObject("Outlook.Application")
    ' Crée un objet mail
    Set mailItem = olApp.CreateItem(olMailItem)
    ' Attribue le sujet du mail
    mailItem.Subject = unSujet
    'attribue format texte brut au mail
     
    ' Attribue le corps du mail
    'mailItem.HTMLBody = unBody
    mailItem.Body = unBody
    ' Crée un destinataires
    mailItem.To = unDestinataire
     
    ' Crée une liste d'attachments
    Set listeAttachments = mailItem.Attachments
     
    ' Ajoute en attachment tous les fichiers portant le nom unMaskAttach (fichier, *.jp*,...)
    ' se trouvant dans tbx_attach_repertoire
    ' Extrait la première entrée.
    unFichier = Dir(unRepertoireAttach & unMaskAttach, vbDirectory)
    numFichier = 0
    ' Boucle tant qu'il y a des fichiers
    Do While unFichier <> ""
        ' Ignore le dossier courant et le dossier contenant le dossier courant (. et ..)
        If unFichier <> "." And unFichier <> ".." Then
            ' Ne récupère que les fichiers (des fois qu'un répertoire aurait le meme nom
            If (GetAttr(unRepertoireAttach & unFichier) And vbDirectory) <> vbDirectory Then
                numFichier = numFichier + 1
     
                Set unAttachment = listeAttachments.Add(unRepertoireAttach & unFichier, 1) ', 3 , "Photo " + Str(numFichier))
     
            End If
        End If
        ' Extrait l'entrée suivante
        unFichier = Dir
    Loop
    ' Si on passe True au paramètre peutModifier, le mail s'affiche et on a
    ' la possibilité de le modifier
     
    If peutModifier = True Then
        ' Affiche le mail
        mailItem.Display
        If MsgBox("Le mail généré est à présent terminé." + vbCrLf + _
                  "Vous pouvez dès à présent le modifier avant de l'envoyer, l'envoyer tout de suite" + vbCrLf + _
                  "en cliquant sur OK ou le supprimer en cliquant sur Annuler", _
                  vbOKCancel + vbQuestion + vbDefaultButton1, "Le mail est prêt") = vbOK Then
                  'message en premier plan + vbSystemModal apres Button1 mais alors plus de Display du mail'
            ' Envoie le mail
            mailItem.Send
        Else
            ' Supprime le mail
            mailItem.Delete
        End If
    Else
        ' Envoie le mail
        mailItem.Send
    End If
     
    ' Fin de traitement
    Exit_EnvoiMail2:
        ' Une fois terminé, utilise la méthode Quit pour fermer
        'olApp.Quit
        ' puis libère la référence.
        Set olApp = Nothing
        ' Quitte la procedure
        Exit Sub
     
    ' Si une erreur se produit, on atterit ici
    ErrorEnvoiMail2:
        ' Affiche le message d'erreur
        MsgBox Err.Description
        ' Continue au label Exit_EnvoiMail
        Resume Exit_EnvoiMail2
     
    End Sub

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Procédure ListRoot
    Attach(I) contient le chemin complet des fichiers que tu souhaites attacher à ton Mail.

    il faut que tu aies une procédure qui te remplit le tableau Attach()

    c'est quelque chose comme ç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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub ListRoot()
     
    'definition d'un tableau non dimensionné
    'car tu ne connais pas, à priori, le nombre de fichiers contenus dans c:\
     
    Dim Attach() As String
    Dim i As Integer
     
     
    'on redimensionne le tableau avec une seule case
    'pour y mettre le chemin du 1er fichier trouvé
    'dans c:\
    'ex: c:\boot.ini
    'la case N°1 du tableau est Attach(0)
    'le N°2 est Attach(1)   etc...
     
    ReDim Attach(0)
    Attach(0) = Dir("c:\*.*")
    i = 0
     
    Do
        i = i + 1
     
        'on redimensionne le tableau Attach()
        'du nombre de cases correspondant
        'à l'index courant (qui vient d'etre incrémenté de 1)
        'tout en conservant le contenu des "cases' d'avant,
        'puis on y affecte le chemin du fichier suivant...
        ReDim Preserve Attach(i)
        Attach(i) = Dir()
     
    ' on boucle tant qu'il y a des fichiers ds C:\
    Loop Until Attach(i) = ""
     
    'on affiche le contenu de Attach ds la fenetre de débogage
    For i = 0 To UBound(Attach()) - 1
        Debug.Print i, Attach(i)
    Next
    End Sub

  10. #10
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 81
    Points : 58
    Points
    58
    Par défaut
    Merci pour l'explication du tableau.

    J'essaie et te tiens informé des suites

    Eric

  11. #11
    Membre du Club
    Homme Profil pro
    debutant intéressé
    Inscrit en
    Mars 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : debutant intéressé

    Informations forums :
    Inscription : Mars 2005
    Messages : 81
    Points : 58
    Points
    58
    Par défaut
    Merci à tous

    Cela fonctionne parfaitement

    Salutations

    Eric

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

Discussions similaires

  1. Envoi fichier par mail à partir d'Access
    Par Adrien972 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/03/2009, 23h01
  2. Envoyer un e-mail à partir d'access
    Par Mmmuzik dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/03/2008, 14h21
  3. mailing à partir d'access
    Par AlexFred dans le forum Thunderbird
    Réponses: 2
    Dernier message: 22/08/2007, 14h32
  4. Réponses: 1
    Dernier message: 02/01/2007, 18h48
  5. envoi automatisé de mails à partir d'une base postgresql
    Par youn608 dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 15/02/2005, 09h06

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