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 Outlook Discussion :

Comment envoyer un mail avec VBA ?


Sujet :

VBA Outlook

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut Comment envoyer un mail avec VBA ?
    bonjour,

    je souhaite envoyé un mail depuis le VBA avec 2 PJ.

    je vous joint mon code mais quand je l'excute j'ai une erreur 13incompatilibté de type

    enfin comment faire pour joindre deux Pj ( qui sont strFichier et cheminattestation)



    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
     
     'ENVOYER UN MAIL DEPUIS ACCESS, AVEC PIECES JOINTES
    ' ---
    ' Entrée : strEmail     <- Adresse e-mail du destinataire
    '          strObj       <- Objet du courrier
    '          strMsg       <- Corps du message
    '          blnEdit      <- True pour pouvoir modifier le courrier avant envoi
    '                          False pour expédier le courrier directement.
    '          astrFichiers <- Tableau des pièces jointes
     
    ' Remarques : Le mail est expédié via Microsoft Outlook
    '             plutôt que via SendObject.
     
    Public Sub SendOLMail2( _
      ByVal strEmail As String, _
      ByVal strObj As String, _
      ByVal strMsg As String, _
      ByVal blnEdit As Boolean, _
      Optional ByVal avarFichiers As Variant)
     
    Dim ol As Outlook.Application
    Dim mi As Outlook.MailItem
    Dim varPJ As Variant
     
    ' Créer une instance d'Outlook
    On Error GoTo OLMailErr
    Set ol = New Outlook.Application
     
    ' Créer un objet Email
    Set mi = ol.CreateItem(olMailItem)
     
    ' Paraméter le message
    With mi
      .To = strEmail
      .Subject = strObj
      .body = strMsg
     
      ' Joindre les pièces, s'il y en a
      For Each varPJ In avarFichiers
        .Attachments.Add (varPJ)
      Next
     
      If blnEdit Then
        .Display
      Else
        .Send
      End If
    End With
     
    Set mi = Nothing
    Set ol = Nothing
    Exit Sub
     
    OLMailErr:
        MsgBox "Erreur : " & Err.Number & vbCrLf & Err.DESCRIPTION
        Exit Sub
    End Sub
    et le code qui me pose problème ( je pense que c'est dans le SendOLMail2 mais je ne sais pas ou

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
         Dim strFichier As String
        Dim strFichierPDF As Variant
        Dim strEtat As String
        Dim strFiltre As String
        Dim strMessageType As String
        Dim strTitre As String
        Dim strMsgg As String
        Dim stemail As String
     
        ' Nom de l'état à imprimer
        strEtat = "AF0"
     
      Me.Refresh
     
     
      mail0 = 0
      imprimer0 = 0
     
      cheminattestation = listeattestation.Column(2)
     
    If DateAF <> 0 Then
    RefreshQuery
     
     
       Dim Qdf As QueryDef
    Dim rst As Recordset
     
    Set Qdf = CurrentDb.QueryDefs("recherAF_ETAT")
    Qdf.Parameters("[Forms]![Moteur de recherche AF]![num_appel]").Value = [Forms]![Moteur de recherche AF]![num_appel]
    Qdf.Parameters("[Forms]![Moteur de recherche AF]![cumuldesappel]").Value = [Forms]![Moteur de recherche AF]![cumuldesappel]
    Qdf.Parameters("[Forms]![Moteur de recherche AF]![cmbRechNOMOPERATION]").Value = [Forms]![Moteur de recherche AF]![cmbRechNOMOPERATION]
     
    Set rst = Qdf.OpenRecordset
     
     
     
        ' Parcourir toute la liste
        While Not rst.EOF
     
     
     
       ' crée new dossier
    If Dir(GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE"), vbDirectory) = "" Then
    MkDir GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE")
    Else
    End If
     
     
     
        ' Nom de base du fichier PDF à crée
     strFichier = GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE") & "\" & "Appel de fonds " & rst("NUM_LOGE") & " " & Forms![Moteur de recherche AF]![num_appel] & ".pdf"
     
     
               'Le nom du fichier varie en fonction de la personne
            strFichierPDF = StringFormat(strFichier, _
    rst("NUM_LOGE"), _
    rst("NUM_CLIENT"), _
    rst("mailc"))
     
     
                     ' Construire le filtre
            strFiltre = "[NUM_LOGE] = '" & rst("NUM_LOGE") & "'"
     
     
     
            ' Imprimer l'état en le filtrant sur la personne concernée
           PrintAsPDF strFichierPDF, strEtat, strFiltre, False
     
     
     
     
    If rst("mailc") <> "" Then
     
      mail0 = mail0 + 1
     
     
     
        ' module envoyé mail
     
     
                ' Titre du message
      strTitre = "Appel de fonds résidence "
     
      ' Message type à expédier
      ' Les signes {...} seront remplacés plus loin par
      ' les infos Client
      strMessageType = "Bonjour ," _
        & vbCrLf & vbCrLf _
        & "Veuillez trouver ci-joint votre convocation des examens," _
        & " " _
        & vbCrLf & "Je vous prie d'agréer, Madame/ Monsieur, l'expression de mes cordiales salutations." _
        & vbCrLf & vbCrLf & "AAAAAA."
     
         ' Construire un message personnalisé
        ' (on remplace chaque {...} du message par les champs
        ' équivalents de la requête
        strMsgg = strMessageType
      '  strMsgg = Replace(strMsg, "{Nom Client}", rst("NUM_CLIENT"))
       ' strMsgg = Replace(strMsg, "{Prénom Client}", rst("Titre"))
     
     
     
         ' Expédier le mail
        strmail = rst("mailc")
        SendOLMail2 strmail, strTitre, strMsgg, False, strFichier
     
     
     
     
         End If
     
     
     
            ' Personne suivante
            rst.MoveNext
        Wend
     
        ' Terminé !
        rst.Close
        Set rst = Nothing
     
     
     
     
        MsgBox "Opération terminée !", vbInformation
     
    Else
    MsgBox "Merci de rentre un date pour l'appel de fond"
    End If

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Salut,

    pour faciliter ta recherche de la source de l'erreur, il faut privilégier de coder sans avoir tes On Error.

    La gestion de l'erreur fait que tu ne sais pas pourquoi ni à quelle ligne ca saute.

    Pour que nous puissions être efficaces dans les pistes que l'on te proposera, il nous faut la ligne qui pose problème
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    ok voila fait

    il me dis pareil et il me donne la ligne en erreur

    For Each varPJ In avarFichiers

    voila le fichier joint C:\zmaitenance APPSA\BASE\DOC\284\CLIENT\C03\Appel de fonds C03 4.pdf

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Ta variable avarFichiers étant optionelle, mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not avarFichiers Is Nothing Then
    For Each varPJ In avarFichiers
        .Attachments.Add (varPJ)
      Next
    End If
    évitera un premier écueil.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    sa me dit maintenant erreur excecution 424 objet requis avec cette ligne souligné :

    If Not avarFichiers Is Nothing Then

    c'est bizzare car dans mon test j'ai bien un pj


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strFichier = GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE") & "\" & "Appel de fonds " & rst("NUM_LOGE") & " " & Forms![Moteur de recherche AF]![num_appel] & ".pdf"

    SendOLMail2 strmail, strTitre, strMsgg, False, strFichier

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Ok, mais si tu passes un string alors que tu attends un tableau (for each) ca va pas marcher

    Donc il te faut veiller à passer un array

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichier = Array(GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE") & "\" & "Appel de fonds " & rst("NUM_LOGE") & " " & Forms![Moteur de recherche AF]![num_appel] & ".pdf")
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    j'ai toujours la même erreur mais maintenant sur la ligne que tu viens de me communiqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichier = Array(GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE") & "\" & "Appel de fonds " & rst("NUM_LOGE") & " " & Forms![Moteur de recherche AF]![num_appel] & ".pdf")
    je dois modifer autre chose avant?

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Oui, la definition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim strFichier As String
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim strFichier As Variant
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    ok fait et maintenant erreur ici toujours la même erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            strFichierPDF = StringFormat(strFichier, _
    rst("NUM_LOGE"), _
    rst("NUM_CLIENT"), _
    rst("mailc"))

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    C'est jamais drole de reprendre du code pondu par quelqu'un d'autre

    Si tu changes ton strFichier en Array, il faut remplacer partout où est attendu un string
    en
    comme ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichierPDF = StringFormat(strFichier(0), _
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    oui compliqué de prendre un code que l'on a par fait

    toujours un problème je repose le code complet avec les modification faite ( je pense au suivant qui voudrons pompé sa sera plus simple )

    mais j'ai toujours une erreur

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
       Dim strFichier As Variant
        Dim strFichierPDF As Variant
        Dim strEtat As String
        Dim strFiltre As String
        Dim strMessageType As String
        Dim strTitre As String
        Dim strMsgg As String
        Dim stemail As String
     
        ' Nom de l'état à imprimer
        strEtat = "AF0"
     
      Me.Refresh
     
     
      mail0 = 0
      imprimer0 = 0
     
      cheminattestation = listeattestation.Column(2)
     
    If DateAF <> 0 Then
    RefreshQuery
     
     
       Dim Qdf As QueryDef
    Dim rst As Recordset
     
    Set Qdf = CurrentDb.QueryDefs("recherAF_ETAT")
    Qdf.Parameters("[Forms]![Moteur de recherche AF]![num_appel]").Value = [Forms]![Moteur de recherche AF]![num_appel]
    Qdf.Parameters("[Forms]![Moteur de recherche AF]![cumuldesappel]").Value = [Forms]![Moteur de recherche AF]![cumuldesappel]
    Qdf.Parameters("[Forms]![Moteur de recherche AF]![cmbRechNOMOPERATION]").Value = [Forms]![Moteur de recherche AF]![cmbRechNOMOPERATION]
     
    Set rst = Qdf.OpenRecordset
     
     
     
        ' Parcourir toute la liste
        While Not rst.EOF
     
     
     
       ' crée new dossier
    If Dir(GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE"), vbDirectory) = "" Then
    MkDir GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE")
    Else
    End If
     
     
     
        ' Nom de base du fichier PDF à crée
    strFichier = Array(GetDbPathOfLinkedTable("tblAdmin") & "DOC\" & cmbRechNOMOPERATION & "\CLIENT\" & rst("NUM_LOGE") & "\" & "Appel de fonds " & rst("NUM_LOGE") & " " & Forms![Moteur de recherche AF]![num_appel] & ".pdf")
    Texte66 = strFichier
     
               'Le nom du fichier varie en fonction de la personne
            strFichierPDF = StringFormat(strFichier(0), _
    rst("NUM_LOGE"), _
    rst("NUM_CLIENT"), _
    rst("mailc"))
     
     
                     ' Construire le filtre
            strFiltre = "[NUM_LOGE] = '" & rst("NUM_LOGE") & "'"
     
     
     
            ' Imprimer l'état en le filtrant sur la personne concernée
           PrintAsPDF strFichierPDF, strEtat, strFiltre, False
     
     
     
     
    If rst("mailc") <> "" Then
     
      mail0 = mail0 + 1
     
     
     
        ' module envoyé mail
     
     
                ' Titre du message
      strTitre = "Appel de fonds résidence "
     
      ' Message type à expédier
      ' Les signes {...} seront remplacés plus loin par
      ' les infos Client
      strMessageType = "Bonjour ," _
        & vbCrLf & vbCrLf _
        & "Veuillez trouver ci-joint votre convocation des examens," _
        & " " _
        & vbCrLf & "Je vous prie d'agréer, Madame/ Monsieur, l'expression de mes cordiales salutations." _
        & vbCrLf & vbCrLf & "AAAAAA."
     
         ' Construire un message personnalisé
        ' (on remplace chaque {...} du message par les champs
        ' équivalents de la requête
        strMsgg = strMessageType
      '  strMsgg = Replace(strMsg, "{Nom Client}", rst("NUM_CLIENT"))
       ' strMsgg = Replace(strMsg, "{Prénom Client}", rst("Titre"))
     
     
     
         ' Expédier le mail
        strmail = rst("mailc")
        SendOLMail2 strmail, strTitre, strMsgg, False, strFichier
    ' j'ai testé aussi            
     '    SendOLMail2 strmail, strTitre, strMsgg, False, strFichier(0)
     
     
         End If
     
     
     
            ' Personne suivante
            rst.MoveNext
        Wend
     
        ' Terminé !
        rst.Close
        Set rst = Nothing
     
     
     
     
        MsgBox "Opération terminée !", vbInformation
     
    Else
    MsgBox "Merci de rentre un date pour l'appel de fond"
    End If
    et l'autre code ou j'ai l’erreur

    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
     'ENVOYER UN MAIL DEPUIS ACCESS, AVEC PIECES JOINTES
    ' ---
    ' Entrée : strEmail     <- Adresse e-mail du destinataire
    '          strObj       <- Objet du courrier
    '          strMsg       <- Corps du message
    '          blnEdit      <- True pour pouvoir modifier le courrier avant envoi
    '                          False pour expédier le courrier directement.
    '          astrFichiers <- Tableau des pièces jointes
     
    ' Remarques : Le mail est expédié via Microsoft Outlook
    '             plutôt que via SendObject.
     
    Public Sub SendOLMail2( _
      ByVal strEmail As String, _
      ByVal strObj As String, _
      ByVal strMsg As String, _
      ByVal blnEdit As Boolean, _
      Optional ByVal avarFichiers As Variant)
     
    Dim ol As Outlook.Application
    Dim mi As Outlook.MailItem
    Dim varPJ As Variant
     
    ' Créer une instance d'Outlook
    'On Error GoTo OLMailErr
    Set ol = New Outlook.Application
     
    ' Créer un objet Email
    Set mi = ol.CreateItem(olMailItem)
     
    ' Paraméter le message
    With mi
      .To = strEmail
      .Subject = strObj
      .body = strMsg
     
      ' Joindre les pièces, s'il y en a
      If Not avarFichiers Is Nothing Then
    For Each varPJ In avarFichiers
        .Attachments.Add (varPJ)
      Next
    End If
     
     
     
     
      If blnEdit Then
        .Display
      Else
        .Send
      End If
    End With
     
    Set mi = Nothing
    Set ol = Nothing
    Exit Sub
     
    'OLMailErr:
     '   MsgBox "Erreur : " & Err.Number & vbCrLf & Err.DESCRIPTION
        Exit Sub

    donc ici "If Not avarFichiers Is Nothing Then" erreur 424 objet requis

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    TU peux le virer le test vu qu'il est sensé être non vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not avarFichiers Is Nothing Then
    en l'enlevant ca se dégage un peu ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    super sa fonctionne

    un grand merci a toi.

    sens vouloir trop abusé je souhaite ajoute un 2éme pdf dans mon mail qui est sur cette ligne cheminattestation = listeattestation.Column(2)
    comme je peux faire pour l’inséré dedans?

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 269
    Points
    34 269
    Par défaut
    Pour cela il te suffit d'avoir dans ta variable strFichier les deux chaines de caractères de tes pdf.

    Ca donnerait par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichier = Array("CheminPDF1","CheminPDF2")
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    ok merci sa fonction merci beaucoup encore sujet résolu

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    j'ai encore une question

    je me suis resservi du code sur un autre formulaire nickel

    la je veux l’utilisé sur un autre formulaire sur un autre formulaire et j'ai une erreur "la méthode 'Add' de l'objet attachments a échoué " sur cette ligne .Attachments.Add (varPJ)

    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
     
    Public Sub SendOLMail2( _
      ByVal strEmail As String, _
      ByVal strObj As String, _
      ByVal strMsg As String, _
      ByVal blnEdit As Boolean, _
      Optional ByVal avarFichiers As Variant)
     
    Dim ol As Outlook.Application
    Dim mi As Outlook.MailItem
    Dim varPJ As Variant
     
    ' Créer une instance d'Outlook
    'On Error GoTo OLMailErr
    Set ol = New Outlook.Application
     
    ' Créer un objet Email
    Set mi = ol.CreateItem(olMailItem)
     
    ' Paraméter le message
    With mi
      .To = strEmail
      .Subject = strObj
      .body = strMsg
     
      ' Joindre les pièces, s'il y en a
     
    For Each varPJ In avarFichiers
        .Attachments.Add (varPJ)
      Next
     
     
     
     
     
      If blnEdit Then
        .Display
      Else
        .Send
      End If
    End With
     
    Set mi = Nothing
    Set ol = Nothing
    Exit Sub
     
    'OLMailErr:
    '   MsgBox "Erreur : " & Err.Number & vbCrLf & Err.DESCRIPTION
     '   Exit Sub
    les fichiers a joindre au mail je récupére le chemin des deux fichiers dans ma requete dans les champ CHEMIN_AF, CHEMIN_ATTESTATION, j'ai teste le chemin d’accès au PJ et ils sont bon c'est quoi mon problème?

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    Dim strFichier As Variant
      Dim strFichier2 As String
        Dim strFichierPDF As Variant
        Dim strEtat As String
        Dim strFiltre As String
        Dim strMessageType As String
        Dim strTitre As String
        Dim strMsgg As String
        Dim stemail As String
     
     
     
      Me.Refresh
     
     
      mail0 = 0
     
     
     
     
    RefreshQuery
     
     
        MsgBox "Pense a mettre le mail saint agne par défaut !", vbInformation
     
     
     
     
       Dim Qdf As QueryDef
    Dim rst As Recordset
     
    Set Qdf = CurrentDb.QueryDefs("recheranalysecommercietat")
    Qdf.Parameters("[Forms]![Suivi des Impayés]![chkSoldecompte]").Value = [Forms]![Suivi des Impayés]![chkSoldecompte]
     
     
    Set rst = Qdf.OpenRecordset
     
     
     
        ' Parcourir toute la liste
        While Not rst.EOF
     
           strFichier = Array(CHEMIN_AF, CHEMIN_ATTESTATION)
     
     
     
               'Le nom du fichier varie en fonction de la personne
            strFichierPDF = StringFormat(strFichier(0), _
    rst("NUM_LOGE"), _
    rst("NUM_CLIENT"), _
    rst("mailc"))
     
     
                     ' Construire le filtre
            strFiltre = "[NUM_LOGE] = '" & rst("NUM_LOGE") & "'"
     
     
     
     
     
    If rst("mailc") <> "" Then
     
      mail0 = mail0 + 1
     
     
     
        ' module envoyé mail
     
     
     
                ' Titre du message
      strTitre = "Appel de fonds résidence " & cmbRechNOMOPERATION.Column(1)
     
      ' Message type à expédier
      ' Les signes {...} seront remplacés plus loin par
      ' les infos Client
      strMessageType = "Bonjour ," _
        & vbCrLf & vbCrLf _
        & "Veuillez trouver ci-joint votre appel de fonds pour votre bien dans la résidence " & cmbRechNOMOPERATION.Column(1) _
        & " " _
        & vbCrLf & "" _
        & vbCrLf & "Je vous remerci d'accusé récéption du présent mail." _
        & vbCrLf & "" _
        & vbCrLf & "Je vous prie d'agréer, Madame/ Monsieur, mes salutation distinguées." _
        & vbCrLf & "" _
        & vbCrLf & vbCrLf & "A."
     
         ' Construire un message personnalisé
        ' (on remplace chaque {...} du message par les champs
        ' équivalents de la requête
        strMsgg = strMessageType
      '  strMsgg = Replace(strMsg, "{Nom Client}", rst("NUM_CLIENT"))
       ' strMsgg = Replace(strMsg, "{Prénom Client}", rst("Titre"))
     
     
     
         ' Expédier le mail
        strmail = rst("mailc")
        SendOLMail2 strmail, strTitre, strMsgg, False, strFichier
     
     
    End If
     
     
            ' Personne suivante
            rst.MoveNext
        Wend
     
        ' Terminé !
        rst.Close
        Set rst = Nothing
     
     
     
        MsgBox "Opération terminée !", vbInformation

    au besoin ma requete source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT recheranalysecommerci.NUM_CLIENT, recheranalysecommerci.NUM_OPERATION, recheranalysecommerci.NOM_OPERATION, recheranalysecommerci.NUM_LOGE, recheranalysecommerci.nom, recheranalysecommerci.NOM_PRESC, recheranalysecommerci.DATE_ACTE, recheranalysecommerci.NUM_ETALEMENT, recheranalysecommerci.derniereaf, recheranalysecommerci.Montantaf, recheranalysecommerci.[Num Appel], recheranalysecommerci.[Date EDL], recheranalysecommerci.solde, recheranalysecommerci.mail, recheranalysecommerci.note, recheranalysecommerci.mailc, recheranalysecommerci.CHOIX_PR_AF, recheranalysecommerci.CHEMIN_AF, recheranalysecommerci.CHEMIN_ATTESTATION
    FROM recheranalysecommerci
    WHERE (((recheranalysecommerci.NUM_CLIENT) <> 0))And recheranalysecommerci!NUM_OPERATION like '*277*' And recheranalysecommerci.CHOIX_PR_AF = Yes And recheranalysecommerci!solde <>0;

  17. #17
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    personne j'aurai une idée a mon problème svp?

  18. #18
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    Il faut vérifier la valeur de varPJ
    en utilisant les point d'arrêts, et les espions ou la fenêtre des variables locales.

    --> https://www.developpez.net/forums/bl.../debogage-vba/


    sans doute tu n'as qu'un seul fichier là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       strFichier = Array(CHEMIN_AF, CHEMIN_ATTESTATION)
    du coup sur le vide cela plante

  19. #19
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    bon je viens de teste je pense que j'ai reusie a pose un espion

    je te joint l'impression écran de la requete qui sert de source et l'image du code VBA avec je pense le message erreur de l'espion "vide"

    donc ci je comprend bien mon erreur proviendrai de mon code vba alors

    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
       Dim Qdf As QueryDef
    Dim rst As Recordset
     
    Set Qdf = CurrentDb.QueryDefs("recheranalysecommercietat")
    Qdf.Parameters("[Forms]![Suivi des Impayés]![chkSoldecompte]").Value = [Forms]![Suivi des Impayés]![chkSoldecompte]
     
     
    Set rst = Qdf.OpenRecordset
     
     
     
        ' Parcourir toute la liste
        While Not rst.EOF
     
           strFichier = Array(CHEMIN_AF, CHEMIN_ATTESTATION)
     
     
     
               'Le nom du fichier varie en fonction de la personne
            strFichierPDF = StringFormat(strFichier(0), _
    rst("NUM_LOGE"), _
    rst("NUM_CLIENT"), _
    rst("mailc"))
     
     
                     ' Construire le filtre
            strFiltre = "[NUM_LOGE] = '" & rst("NUM_LOGE") & "'"

    tu peux m'aide? stp
    Images attachées Images attachées   

  20. #20
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    SALUT,

    Est ce que que quelque part dans ton code tu as bien une instruction pour renseigner ces variables

    un truc genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CHEMIN_AF= "c:\...\doc.txt"
     CHEMIN_ATTESTATION= "c:\...."

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/04/2018, 17h44
  2. Comment envoyer un mail avec pièce jointe avec MAPI ?
    Par scara dans le forum Web & réseau
    Réponses: 0
    Dernier message: 30/12/2007, 11h21
  3. Comment envoyer un mail depuis Word avec un fichier attaché
    Par Heureux-oli dans le forum Contribuez
    Réponses: 0
    Dernier message: 25/08/2007, 11h47
  4. Comment envoyer un mail avec pièce jointe (BCB6)
    Par renesouley dans le forum C++Builder
    Réponses: 16
    Dernier message: 30/12/2006, 21h56
  5. Comment envoyer un mail avec la commande mail
    Par pi3141563 dans le forum Réseau
    Réponses: 5
    Dernier message: 21/10/2004, 13h34

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