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 pièces jointes ".Attachments.Add" avec liste de fichiers


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut Envoi de pièces jointes ".Attachments.Add" avec liste de fichiers
    Bonjour,

    Je récupère une liste de fichiers à envoyer en pièces jointes d'un mail outlook sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ["C:\Users\pythe\Documents\Classeur2_drees2021.xlsx","C:\Users\pythe\Documents\hostsb.txt","C:\Users\pythe\Documents\fmnuMainMenu.txt"]
    Par le passé, j'avais une zone de texte par fichier et utilisais la méthode ".Attachments.Add" pour chaque zone de texte ce qui était, certes, efficace, mais du tout "sexy" puisque je me retrouvais avec 8 zones de texte ...

    J'ai donc voulu avoir une seule zone de texte avec l'ensemble des fichiers que je souhaite envoyer afin de "faire une boucle" sur cette liste ... mais comment faire ?

    En effet, je pensais qu'il suffisais de "mettre cette liste" dans ".Attachments.Add" (un peu à la barbare ) mais cela ne fonctionne pas ...

    Quelqu'un aurait-il une idée ??

    Merci

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Hello,

    Pourquoi ne fais-tu pas une boucle ?

    Je pars de l'idée que tu as une zone de texte pour lister tous tes fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = lbound(split(txt.value, ";"),1) to ubound(split(txt.value, ";"),1)
    mail.add split(txt.value,";")(i)
    next
    J'ai fait ça à l'arrache mais c'est l'idée.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  3. #3
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    C'était justement ma piste en prenant la "," comme marqueur ou les guillements (chaque chemin de fichier étant entre guillemets) pour faire ma boucle avec ".attachments.add" ...

    Mais je bute sur le codage de cette boucle ...

  4. #4
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    J'arrive à trier ma liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ["C:\Users\pythe\Documents\Classeur2_drees2021.xlsx","C:\Users\pythe\Documents\hostsb.txt","C:\Users\pythe\Documents\fmnuMainMenu.txt"]
    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim liste As String
    Dim listetriee() As String
    liste = Me.Texte17
    listetriee = Split(liste, ",")
    For i = LBound(listetriee) To UBound(listetriee)
    MsgBox ("résultat :" & listetriee(i))
    MsgBox (Replace(Replace(listetriee(i), "[", ""), "]", "")
    Next
    Pour obtenir chaque fichier sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\Users\pythe\Documents\Classeur2_drees2021.xlsx"
    J'ai donc essayé d'intégrer ce code à l'objet "mail" pour envoyer un courriel de la manière suivante :

    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
     
    With Email
     .To = Me.Texte0
     .CC = Me.Texte2
     .BCC = Me.Texte5
     .subject = Me.Texte10
     .body = Me.Texte7
    Dim liste As String
    Dim listetriee() As String
    liste = Me.Texte17
    listetriee = Split(liste, ",")
    For i = LBound(listetriee) To UBound(listetriee)
    .Attachments.Add Replace(Replace(Replace(listetriee(i), "[", ""), "]", ""), "\\", "\")
    Next
     '.Attachments.Add (Texte17)
     '.Attachments.Add (Texte19)
     '.Attachments.Add (Texte20)
     '.Attachments.Add (Texte21)
     '.Attachments.Add (Texte30)
     .Categories = "catégorie violet"
    End With
    Le courriel part (ayant un "resume next au début du code) mais il n'y a AUCUNE PIECE JOINTE, je sèche toujours

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    si le texte se présente comme indiqué:
    ["C:\Users\pythe\Documents\Classeur2_drees2021.xlsx","C:\Users\pythe\Documents\hostsb.txt","C:\Users\pythe\Documents\fmnuMainMenu.txt"]
    il faut aussi enlever les guillemets (chr(34)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Attachments.Add Replace(Replace(Replace(Replace(listetriee(i), "[", ""), "]", ""), "\\", "\"), Chr(34), "")
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Le courriel part (ayant un "resume next au début du code) mais il n'y a AUCUNE PIECE JOINTE, je sèche toujours
    et, du coup, tu ne vois pas les messages d'erreurs qui pourraient te mettre sur la voie, pas très malin quand on sèche
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Merci pour cette piste et j'en ai profité pour ajouter une gestion d'erreur.

    J'ai une erreur 440 (erreur d'automation que je n'avais pas avec mes 5 champs de fichiers joints "pas sexys") avec le code ci-dessous :

    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
    Dim messagerie As Object
    Dim Email As Object
      '  Dim Flds As Variant
     
        Set messagerie = CreateObject("Outlook.Application")
        Set Email = messagerie.CreateItem(0)
     
      Attach = Texte28
    With Email
     .To = Me.Texte0
     .CC = Me.Texte2
     .BCC = Me.Texte5
     .subject = Me.Texte10
     .body = Me.Texte7
    Dim liste As String
    Dim listetriee() As String
    liste = Me.Texte17
    listetriee = Split(liste, ",")
    For i = LBound(listetriee) To UBound(listetriee)
    MsgBox Replace(Replace(Replace(Replace(listetriee(i), "[", ""), "]", ""), "\\", "\"), Chr(34), "")
    'MsgBox ("résultat :" & listetriee(i))
    'MsgBox Replace(Replace(Replace(listetriee(i), "[", ""), "]", ""), "\\", "\")
    .Attachments.Add Replace(Replace(Replace(Replace(listetriee(i), "[", ""), "]", ""), "\\", "\"), Chr(34), "")
    Next
     '.Attachments.Add (Texte17)
     '.Attachments.Add (Texte19)
     '.Attachments.Add (Texte20)
     '.Attachments.Add (Texte21)
     '.Attachments.Add (Texte30)
     .Categories = "catégorie violet"
      'MsgBox Texte50 tout le chemin et le nom du fichier
      'MsgBox Texte45 fichier tout seul
    End With
      If Me.Texte45 <> "" Then
      'Call FilenameInc(Me.Texte50)
      If Forms!consultation_dossier!Texte238 = "intranet" Then
     
     
        Email.SaveAs Me.Texte50
        Email.Send
    Set Email = Nothing
    Set messagerie = Nothing
     
        MsgBox ("Le mail a été envoyé et sauvegardé")
        Me.Étiquette130.Visible = True
        Texte131 = Texte7
    Else
    Dim a As String
    Dim x As Integer
    Dim y As Integer
    x = PosDuXieme(Forms!Menu!Texte101, "\", 3)
    y = Len(Forms!Menu!Texte101) - x + 1
    a = Forms!Menu!Texte85 & "" & Right(Forms!Menu!Texte101, y) & "\" & [Formulaires].[consultation_dossier].[N°dossier_gestion] & " " & [Formulaires].[consultation_dossier].[Pour] & " vs " & [Formulaires].[consultation_dossier].[Contre] & "\" & [Formulaires].[consultation_dossier].[N°dossier_gestion] & " courriers\" & [Texte45] & ".msg"
    Email.SaveAs Me.Texte50
        Email.Send
    Set Email = Nothing
    Set messagerie = Nothing
        MsgBox ("Le mail a été envoyé et sauvegardé")
            Me.Étiquette130.Visible = True
            Texte131 = Texte7
        End If
    Else: MsgBox ("Le mail n'a pas été envoyé car le nom du fichier n'est pas spécifié")
     End If

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    J'ai une erreur 440 (erreur d'automation que je n'avais pas avec mes 5 champs de fichiers joints "pas sexys") avec le code ci-dessous :
    sur quelle ligne de code survient l'erreur ?

    cette ligne ne respecte pas la syntaxe VBA, [Formulaires] doit être remplacé par [Forms]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Forms!Menu!Texte85 & "" & Right(Forms!Menu!Texte101, y) & "\" & [Formulaires].[consultation_dossier].[N°dossier_gestion] & " " & [Formulaires].[consultation_dossier].[Pour] & " vs " & [Formulaires].[consultation_dossier].[Contre] & "\" & [Formulaires].[consultation_dossier].[N°dossier_gestion] & " courriers\" & [Texte45] & ".msg"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    j'ai procédé à la modifications [forms] mais cela ne change rien.

    Quant à la ligne où l'erreur se produit, hormis le msgbox indiquant l'erreur 440, je n'ai aucune autre info.* pour déterminer où se trouve le probléme.

    Néanmoins, mon code a fonction pendant des années et la seule modification apportées sont les suivantes :

    CODE D'ORIGINE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .body = Me.Texte7
    .Attachments.Add (Texte17)
    .Attachments.Add (Texte19)
    .Attachments.Add (Texte20)
    .Attachments.Add (Texte21)
    .Attachments.Add (Texte30)
    NOUVEAU CODE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     .body = Me.Texte7
    Dim liste As String
    Dim listetriee() As String
    liste = Me.Texte17
    listetriee = Split(liste, ",")
    For i = LBound(listetriee) To UBound(listetriee)
    .Attachments.Add Replace(Replace(Replace(Replace(listetriee(i), "[", ""), "]", ""), "\\", "\"), Chr(34), "")
    Next

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Quant à la ligne où l'erreur se produit, hormis le msgbox indiquant l'erreur 440, je n'ai aucune autre info.* pour déterminer où se trouve le probléme.
    pour la connaitre, met temporairement ton instruction On Error Goto ... en commentaire
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 139
    Points
    139
    Par défaut
    Euréka !

    voici le code qui remplace mes anciennes zone de texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim files As Variant, file As Variant
    files = Split(Replace(Replace(Replace(Replace(Me.Texte17, "[", ""), "]", ""), "\\", "\"), Chr(34), ""), ",")
    For Each file In files
     .Attachments.Add file
    Next
    En fait, le séquençage de la fonction SPLIT n'était pas bon.

    Avec la formulation reprise ci-dessus, je "splitte" une chaîne de caractères en prenant comme critère la "," mais en ayant, auparavant, retiré tous les caractères qui ne me servaient à rien et ne garder "que" l'essentiel.

    Ensuite, je gère chaque chemin comme une pièce jointe.

    Cela fonctionne nickel!

    Merci pour votre aide à tous

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

Discussions similaires

  1. [JavaMail] Envoi de pièce jointe
    Par log2n dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 08/11/2013, 09h34
  2. SMTP : Problème avec l'envoi de pièces jointes
    Par Sunsawe dans le forum Développement
    Réponses: 2
    Dernier message: 13/04/2007, 00h05
  3. Réponses: 7
    Dernier message: 30/06/2006, 17h12
  4. [axis - SOAP] Envoi de pièces jointes
    Par getupa dans le forum Services Web
    Réponses: 1
    Dernier message: 17/01/2006, 12h04
  5. problème avec l'envoi de pièces jointes
    Par mouna201 dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 11/01/2006, 13h20

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