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 :

Ajout automatique du nom d'une piece jointe [AC-2007]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Ajout automatique du nom d'une piece jointe
    Bonjour,

    J'ai trouver se code (source) pour éffectuer un import multiple, il fonctionne parfaitement, mais je ne sais pas comment ajouter pour chaque piece jointe son nom dans un champ "nomfichier" une ame charritable pourait t'il m'expliquer les lignes a ajouter ?

    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
    Sub AddAttachmentsFromFolder(ByVal strFolder As String, _ 
    ByVal strTable As String, _ 
    ByVal strField As String, _ 
    Optional ByVal strPattern As String = "*.*", _ 
    Optional ByVal fIncludeSubfolders As Boolean = False) 
     
    Dim strFile As String 
    Dim lngCount As Long 
    Dim rstParent As DAO.Recordset2 
    Dim rstChild As DAO.Recordset 
    Dim fldAttach As DAO.Field2     
    Dim objFso As Object ' Scripting.FileSystemObject
    Dim objFolder As Object ' Scripting.Folder 
    Dim objFile As Object ' Scripting.File 
    Dim objSubFolder As Object ' Scripting.Folder 
     
    On Error GoTo ErrorHandler 
     
    ' Instantiate the FileSystemObject 
    Set objFso = CreateObject("Scripting.FileSystemObject") 
     
    ' fix up the folder 
    If (Right(strFolder, 1) <> "\") Then strFolder = strFolder & "\" 
     
    ' make sure the folder exists 
    If (Dir(strFolder, vbDirectory) = "") Then 
    MsgBox "The specified folder does not exist: " & strFolder, vbExclamation 
    Exit Sub 
    End If 
     
    ' get the folder object 
    Set objFolder = objFso.GetFolder(strFolder) 
     
    ' open the table containing the attachment field 
    Set rstParent = CurrentDb().OpenRecordset(strTable) 
     
    ' get the first file 
    strFile = Dir(strFolder & strPattern) 
     
    ' get each file that meets the pattern 
    While (Len(strFile) > 0) 
    ' add a record to the parent table 
    Debug.Print strFolder & strFile 
    rstParent.AddNew 
     
    ' get the attachment recordset and FileData field to contain the file 
    Set rstChild = rstParent.Fields(strField).Value 
    Set fldAttach = rstChild.Fields("FileData") 
     
    ' add the attachment to the attachment field 
    rstChild.AddNew 
    fldAttach.LoadFromFile strFolder & strFile 
    rstChild.Update 
    rstParent.Update 
     
    ' get the next file 
    strFile = Dir 
    Wend 
     
    ' recurse subfolders? 
    If (fIncludeSubfolders) Then 
    For Each objSubFolder In objFolder.SubFolders 
    AddAttachmentsFromFolder objSubFolder.Path, strTable, strField, _ 
    strPattern, fIncludeSubfolders         
    Next 
    End If 
     
    Cleanup: 
    rstParent.Close 
    Set rstParent = Nothing 
    Exit Sub 
     
    ErrorHandler: 
    Debug.Print "Error " & Err.Number & " - " & Err.Description 
    MsgBox Err.Description & vbCrLf & _ 
    Err.Number & vbCrLf & _ 
    Err.Source, VbMsgBoxStyle.vbCritical, "AddAttachmentsFromFolder Failed" 
    GoTo Cleanup 
    End Sub

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Je dirais, à première vue, avant les updates.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rstChild.AddNew 
    fldAttach.LoadFromFile strFolder & strFile 
     
    rstChild.fields("nomfichier") = strFile
     
    rstChild.Update 
    rstParent.Update
    Bien évidemment il s'agit d'un nom statique. Tu peux utiliser une approche plus sérieuse en plaçant le nom du champ dans les paramètres de la procédure. Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub AddAttachmentsFromFolder(ByVal strFolder As String, _ 
    ByVal strTable As String, _ 
    ByVal strField As String, _
    ByVal strFieldNameFile as String, _ 
    Optional ByVal strPattern As String = "*.*", _ 
    Optional ByVal fIncludeSubfolders As Boolean = False)
    et donc la ligne sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rstChild.fields(strFieldNameFile) = strFile
    Il te faudra alors mettre le nom du champ dans l'appel de la procédure.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour Loufab,

    Merci de ton coup de main,

    J'ai essayer d'ajouter les lignes que tu m'indique mais a l'issu de mes modif la macro s'execute mais n'a plus d'effet

    j'ai ajouter dans la premiere partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ByVal strFieldNameFile as String, _
    et dans le coeur du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fldAttach.LoadFromFile strFolder & strFile
    rstChild.fields(strFieldNameFile) = strFile
    rstChild.Update
    Mais j'ai probablement mal compris ou integrer ("nomfichier")
    dans l'appel de la procedure, pourais tu m'aiclairer ?

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Lorsque tu fais l'appel à la procédure AddAttachmentsFromFolder, tu remplis les paramètres, il te faut mettre le nom du champ qui va recevoir le nom du fichier. Je l'ai nommé "nomfichier" dans mon exemple, mais ce n'est qu'un exemple. A toi de mettre le nom que tu as définie dans la table.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai reesayer dans tous les sens et je ne trouve toujours pas ce qui cloche,
    selon mes modif, soit le module n'a plus d'effet, soirt une erreur 3265, soit
    object not defined

    Probablement que c'est un souci de débutant, chose que je suis
    je te remet le code tel que je pensse que tu m'a conseillé de le modifier

    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
    ' -------------------------------------------------------------------------
    ' Procedure : AddAttachmentsFromFolder
    ' Purpose : Adds one record to an attachment field for each file in the
    ' : specified folder.
    ' Arguments : strFolder - Name of the folder
    ' : strTable - Name of the table containing the attachment field
    ' : strField - Name of the attachment field
    ' : strPattern - Search pattern for the directory. Defaults to
    ' : all files (*.*)
    ' : fIncludeSubfolders - Include subfolders in the specified folder
    ' : Defaults to False
    ' Comments : This routine adds a new record to the table, then one attachment.
    ' : It commits the changes and handles all cleanup
    ' -------------------------------------------------------------------------
    Sub AddAttachmentsFromFolder(ByVal strFolder As String, _
    ByVal strTable As String, _
    ByVal strField As String, _
    ByVal strFieldNameFile As String, _
    Optional ByVal strPattern As String = "*.*", _
    Optional ByVal fIncludeSubfolders As Boolean = False)
     
    Dim strFile As String
    Dim lngCount As Long
    Dim rstParent As DAO.Recordset2
    Dim rstChild As DAO.Recordset
    Dim fldAttach As DAO.Field2
    Dim objFso As Object ' Scripting.FileSystemObject
    Dim objFolder As Object ' Scripting.Folder
    Dim objFile As Object ' Scripting.File
    Dim objSubFolder As Object ' Scripting.Folder
     
    On Error GoTo ErrorHandler
     
    ' Instantiate the FileSystemObject
    Set objFso = CreateObject("Scripting.FileSystemObject")
     
    ' fix up the folder
    If (Right(strFolder, 1) <> "\") Then strFolder = strFolder & "\"
     
    ' make sure the folder exists
    If (Dir(strFolder, vbDirectory) = "") Then
    MsgBox "The specified folder does not exist: " & strFolder, vbExclamation
    Exit Sub
    End If
     
    ' get the folder object
    Set objFolder = objFso.GetFolder(strFolder)
     
    ' open the table containing the attachment field
    Set rstParent = CurrentDb().OpenRecordset(strTable)
     
    ' get the first file
    strFile = Dir(strFolder & strPattern)
     
    ' get each file that meets the pattern
    While (Len(strFile) > 0)
    ' add a record to the parent table
    Debug.Print strFolder & strFile
    rstParent.AddNew
     
    ' get the attachment recordset and FileData field to contain the file
    Set rstChild = rstParent.Fields(strField).Value
    Set fldAttach = rstChild.Fields("FileData")
     
     
     
    ' add the attachment to the attachment field
    rstChild.AddNew
    fldAttach.LoadFromFile strFolder & strFile
     
    rstChild.Fields(strFieldNameFile) = strFile
     
    rstChild.Update
    rstParent.Update
     
    ' get the next file
    strFile = Dir
    Wend
     
    ' recurse subfolders?
    If (fIncludeSubfolders) Then
    For Each objSubFolder In objFolder.SubFolders
    AddAttachmentsFromFolder objSubFolder.Path, strTable, strField, _
    strPattern, fIncludeSubfolders
    Next
    End If
     
    Cleanup:
    rstParent.Close
    Set rstParent = Nothing
    Exit Sub
     
    ErrorHandler:
    Debug.Print "Error " & Err.Number & " - " & Err.Description
    MsgBox Err.Description & vbCrLf & _
    Err.Number & vbCrLf & _
    Err.Source, VbMsgBoxStyle.vbCritical, "AddAttachmentsFromFolder Failed"
    GoTo Cleanup
    End Sub
     
    Sub TestAddAttachmentsFromFolder()
    Const strRootFolder As String = "C:\Documents and Settings\User\My Documents\TEST\"
    AddAttachmentsFromFolder strRootFolder, "Table1", "Attachments", "nomfichier", _
    "*.doc", True
    MsgBox "Done adding files from: " & vbCrLf & strRootFolder, _
    vbInformation, "File Import Process Completed"
    End Sub
    Merci pour ton aide

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,
    Ton champ est dans quelle table ?

    La child ou la parent ? C'est peut-être là qu'est le problème.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour Loufab,

    Tout est dans la Table1 dans laquel j'ai 3 champs :

    - ID (autoNumber)
    - Attachements (pieces jointe)
    - nomfichier(Text)

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    C'est donc dans Parent qu'est le champ "nomfichier" et pas dans child. Ce qui pose le problème des pièces multiples avec un seul nom de fichier.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Chaqun des fichier porte un nom different dans mon dossier, dois-je juste remplacer

    rstChild.fields("nomfichier") = strFile
    par
    rstParent.fields("nomfichier") = strFile
    ou la modif est plus compliquée ?

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    normalement y a pas à faire plus pour pointer sur le bon champ.

    Par contre si tes pièces sont multiples pour un parent tu n'auras qu'un seul nom pour toutes tes pièces...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Hey,

    Super en effet cela fonctionne.

    Merci infiniment pour ton aide precieuse

    Je te souhaite une excellente journée

    Cordialement

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

Discussions similaires

  1. [AC-2010] Ajouter un enregistrement avec une piece jointe
    Par docjo dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/08/2012, 23h27
  2. [XL-2007] Ajouter une piece jointe vba
    Par cedill23 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/03/2011, 16h37
  3. Réponses: 2
    Dernier message: 28/03/2006, 11h45
  4. [Indy] attachement d'une piece jointe ne marche pas
    Par pierrot67 dans le forum Composants VCL
    Réponses: 11
    Dernier message: 08/03/2006, 19h07
  5. [ASP 3] Envoyer un Mail avec une piece jointe générer
    Par soltani.slim dans le forum ASP
    Réponses: 4
    Dernier message: 15/02/2006, 10h16

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