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 :

Importation des chemins relatif des fichiers contenus dans un dossier sélectionné [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Importation des chemins relatif des fichiers contenus dans un dossier sélectionné
    Bonjour à tous, je recherche savoir comment je peux importer tous les chemins relatif des fichiers contenus dans un dossier sélectionné sur mon disque réseaux local pour par la suite les enregistrer dans une table de Microsoft Access.

    J'aimerais avoir vos suggestions.

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourrais-tu être plus explicite sur ces fichiers, de quels types sont-ils ? Les liens sont présentés de quel manière ?

    Philippe

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Je peux avoir n'importe quel type de fichier mais le dossier que j'ai à traiter présentement contient des extensions de fichiers .lvd / .prv / .lbl / .ole

    Le but de ma demande est d'enregistrer dans une table les chemins relatif de tous les fichiers contenus dans un dossier sélectionné peu importe le type ou l'extension de fichiers.

    Une fois importé dans une table je pourrai analyser l'ensemble des fichiers pour ensuite les normaliser.

    Merci de votre aide.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    J'ai fait des recherches et j'ai trouvé un script près de ce que je recherche mais celui-ci liste seulement les noms de dossiers et non le chemin relatif complet incluant le nom du fichier et son extension.

    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
    Private Sub Commande1_Click()
    Dim DirectoryName
    Dim sql
    Dim Folder As String
     
    Folder = "C:\"
     
    DirectoryName = Dir(Folder, vbDirectory)
    Do Until DirectoryName = ""
    If DirectoryName <> "." And DirectoryName <> ".." Then
    If (GetAttr(Folder & DirectoryName) And vbDirectory) = vbDirectory Then
     
    sql = "INSERT INTO Tablename ( Field ) " & _
    "SELECT '" & DirectoryName & "' AS Directory"
     
    CurrentProject.Connection.Execute sql
     
    End If
    End If
    DirectoryName = Dir
    Loop
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 80
    Points
    80

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci à tous pour votre aide mais j'ai trouvé exactement ce que je cherchais en faisant ma recherche en anglais sur google voici le résultat pour ceux qui peuvent être intéressé ci-dessous:

    Liste des fichiers à une table

    L'article, Liste des fichiers de manière récursive, a expliqué comment parcourir en boucle les fichiers dans un dossier et sous-dossiers, afficher les résultats dans une zone de liste. Cette alternative écrit les fichiers sur une table au lieu d'une zone de liste. Voir l'article original pour une explication du code.

    Pour utiliser cela dans votre base de données:

    1. Créez une nouvelle table, avec les champs suivants:

    ◦FileID AutoNumber (primary key)
    ◦FName Text (50 characters)
    ◦FPath Text (255 characters)
    ◦DateCreated Date/Time. Set Default value to: =Now()
    Enregistrez la table avec les fichiers de noms.

    2. Créez un nouveau module.
    Dans Access 2007 et plus tard, cliquez sur Module (plus à droite l'icône) sur le ruban Créer.
    Dans Access 2000 - 2003, cliquez sur l'onglet Modules de la fenêtre base de données, puis cliquez sur Nouveau.
    Access ouvre la fenêtre de code.

    3. Copy le code ci-dessous, et coller dans votre nouveau module.

    4. Choisissez de compilation dans le menu Debug, pour vérifier l'accès comprend le code.

    5. Enregistre le module avec un nom tel que ajbFileList.

    En utilisant le code

    Dans la fenêtre Exécution

    Pour lister les fichiers dans C:\Data, ouvrir la fenêtre Exécution (Ctrl+G), et entrez:
    Call ListFilesToTable("C:\Data")

    Pour limiter les résultats aux fichiers zip:
    Call ListFilesToTable("C:\Data", "*.zip")

    Pour inclure des fichiers dans des sous répertoires ainsi:
    Call ListFilesToTable("C:\Data", , True)


    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    The Code
    Option Compare Database
    Option Explicit
     
    'list files to tables
    'http://allenbrowne.com/ser-59alt.html
     
    Dim gCount As Long ' added by Crystal
     
    Sub runListFiles()
    'Usage example.
    Dim strPath As String _
    , strFileSpec As String _
    , booIncludeSubfolders As Boolean
     
    strPath = "E:\"
    strFileSpec = "*.*"
    booIncludeSubfolders = True
     
    ListFilesToTable strPath, strFileSpec, booIncludeSubfolders
    End Sub
     
    'crystal modified parameter specification for strFileSpec by adding default value
    Public Function ListFilesToTable(strPath As String _
    , Optional strFileSpec As String = "*.*" _
    , Optional bIncludeSubfolders As Boolean _
    )
    On Error GoTo Err_Handler
    'Purpose: List the files in the path.
    'Arguments: strPath = the path to search.
    ' strFileSpec = "*.*" unless you specify differently.
    ' bIncludeSubfolders: If True, returns results from subdirectories of strPath as well.
    'Method: FilDir() adds items to a collection, calling itself recursively for subfolders.
     
    Dim colDirList As New Collection
    Dim varitem As Variant
    Dim rst As DAO.Recordset
     
    Dim mStartTime As Date _
    , mSeconds As Long _
    , mMin As Long _
    , mMsg As String
     
    mStartTime = Now()
    '--------
     
    Call FillDirToTable(colDirList, strPath, strFileSpec, bIncludeSubfolders)
     
    mSeconds = DateDiff("s", mStartTime, Now())
     
    mMin = mSeconds \ 60
    If mMin > 0 Then
    mMsg = mMin & " min "
    mSeconds = mSeconds - (mMin * 60)
    Else
    mMsg = ""
    End If
     
    mMsg = mMsg & mSeconds & " seconds"
     
    MsgBox "Done adding " & format(gCount, "#,##0") & " files from " & strPath _
    & IIf(Len(Trim(strFileSpec)) > 0, " for file specification --> " & strFileSpec, "") _
    & vbCrLf & vbCrLf & mMsg, , "Done"
     
    Exit_Handler:
    SysCmd acSysCmdClearStatus
    '--------
     
    Exit Function
     
    Err_Handler:
    MsgBox "Error " & Err.Number & ": " & Err.Description, , "ERROR"
     
    'remove next line after debugged -- added by Crystal
    Stop: Resume 'added by Crystal
     
    Resume Exit_Handler
    End Function
     
    Private Function FillDirToTable(colDirList As Collection _
    , ByVal strFolder As String _
    , strFileSpec As String _
    , bIncludeSubfolders As Boolean)
     
    'Build up a list of files, and then add add to this list, any additional folders
    On Error GoTo Err_Handler
     
    Dim strTemp As String
    Dim colFolders As New Collection
    Dim vFolderName As Variant
    Dim strSQL As String
     
    'Add the files to the folder.
    strFolder = TrailingSlash(strFolder)
    strTemp = Dir(strFolder & strFileSpec)
    Do While strTemp <> vbNullString
    gCount = gCount + 1
    SysCmd acSysCmdSetStatus, gCount
    strSQL = "INSERT INTO Files " _
    & " (FName, FPath) " _
    & " SELECT """ & strTemp & """" _
    & ", """ & strFolder & """;"
    CurrentDb.Execute strSQL
    colDirList.Add strFolder & strTemp
    strTemp = Dir
    Loop
     
    If bIncludeSubfolders Then
    'Build collection of additional subfolders.
    strTemp = Dir(strFolder, vbDirectory)
    Do While strTemp <> vbNullString
    If (strTemp <> ".") And (strTemp <> "..") Then
    If (GetAttr(strFolder & strTemp) And vbDirectory) <> 0& Then
    colFolders.Add strTemp
    End If
    End If
    strTemp = Dir
    Loop
    'Call function recursively for each subfolder.
    For Each vFolderName In colFolders
    Call FillDirToTable(colDirList, strFolder & TrailingSlash(vFolderName), strFileSpec, True)
    Next vFolderName
    End If
     
    Exit_Handler:
     
    Exit Function
     
    Err_Handler:
    strSQL = "INSERT INTO Files " _
    & " (FName, FPath) " _
    & " SELECT "" ~~~ ERROR ~~~""" _
    & ", """ & strFolder & """;"
    CurrentDb.Execute strSQL
     
    Resume Exit_Handler
    End Function
     
    Public Function TrailingSlash(varIn As Variant) As String
    If Len(varIn) > 0& Then
    If Right(varIn, 1&) = "\" Then
    TrailingSlash = varIn
    Else
    TrailingSlash = varIn & "\"
    End If
    End If
    End Function

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Bonjour à tous!

    Niveau Débutant

    Merci pour ces informations plus que précieuses et qui m'ont pas mal aidées.
    Cela dit quelqu'un pourrait-il me dire comment faire en sorte que dans le champs FPath ressorte le lien complet du fichier (en gros FPath&FName mais sans passer par une requete "CONCATANER") et non juste son emplacement ? (celui-ci s'arrête après le dernier "\")

    Ca doit venir de ce bout de code mais mes connaissances en VBA ne me permette pas encore de bien comprendre tout ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function TrailingSlash(varIn As Variant) As String
    If Len(varIn) > 0& Then
    If Right(varIn, 1&) = "\" Then
    TrailingSlash = varIn
    Else
    TrailingSlash = varIn & "\"
    End If
    End If
    End Function
    D'avance merci à vous!

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 05/05/2014, 00h11
  2. Réponses: 21
    Dernier message: 27/04/2013, 17h27
  3. Importer directement des instructions MySQL en fichier texte dans MySQL
    Par lightstring4 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/05/2007, 16h39
  4. Réponses: 9
    Dernier message: 27/10/2005, 22h38
  5. Réponses: 3
    Dernier message: 13/12/2004, 13h54

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