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 :

[Access 2007] Remplacement de .Filesearch et .FoundFiles


Sujet :

VBA Access

  1. #1
    Membre confirmé Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut [Access 2007] Remplacement de .Filesearch et .FoundFiles
    Bonjour,

    J'ai dû transférer ce que j'avais déjà mis en place sur Access 2003 (soit 80% du travail) sur un poste avec Access 2007. Je découvre, ô joie, que certains codes ne sont plus reconnus, notamment la commande .FileSearch et .FoundFiles
    J'ai fait quelques recherche sur le forum et découvert que ces fonctions n'existaient plus sous Access 2007, hors je n'arrive pas à modifier le code du module de façon à obtenir la même chose que 2003 sachant que la base sera utilisé sous les deux systèmes (2003 et 2007).
    Dans cette optique, j'ai placé le "code 2007" dans un "On Error GoTo" de façon à ce que l'utilisateur ne soit pas gêné par sa version d'office.

    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
    Public Function FileExistDir(strDir As String, strTable As String, strField As String)
     
    On Error GoTo Err_2007
     
        Dim intFile As Integer
        Dim strFile As String
     
        intFile = 0: strFile = ""
     
        With Application.FileSearch
            .LookIn = strDir: .Filename = "*.jpg"
            If .Execute > 0 Then
                For intFile = 1 To .FoundFiles.Count
                    strFile = .FoundFiles(intFile)
                    strFile = Right(strFile, Len(strFile) - (Len(strDir) + 1))
                    CurrentDb.Execute "INSERT INTO [" & strTable & "] " & "([" & strField & "])" & "SELECT """ & strDir & "\" & strFile & """ ;"
                Next
            End If
        End With
     
    Err_2007:
     
        If DataErr = 2455 Then
            Dir ([Me.SelectFolder] & "*.jpg")
            For intFile = 1 To .FoundFiles.Count
                strFile = .FoundFiles(intFile)
                strFile = Right(strFile, Len(strFile) - (Len(strDir) + 1))
                CurrentDb.Execute "INSERT INTO [" & strTable & "] " & "([" & strField & "])" & "SELECT """ & strDir & "\" & strFile & """ ;"
            Next
        End If
     
        Resume Next
     
    End Function
    Le SelectFolder est défini dans le module précédent, en effet, le dossier source n'est jamais identique.

    Dans l'état actuel, j'obtiens une "Erreur de compilation : Référence incorrecte ou non qualifiée" sur le .FoundFiles

    Quelqu'un a une idée de la façon à modifier le code (ou de la référence à ajouter) pour qu'il fonctionne ?

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

    Je sais que Silkyroad à fait quelque chose sur le sujet pour pallier ce manque sur Excel http://silkyroad.developpez.com/vba/classefilesearch/.

    Tu y trouveras peut-être ton bonheur pour l'adapter à Access.

    Starec

  3. #3
    Membre confirmé Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Justement, j'avais déjà vu le module de Silkroad, mais je ne comprends pas comment le modifier pour l'intégrer à Access

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 246
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 246
    Par défaut
    Salut,

    Tu dois mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.FileSearch.foundfiles
    Car ta boucle With Application.FileSearch est terminée alors que tu en fait encore référence.

    A+

    PS: en espérant que se soit ça

  5. #5
    Membre confirmé Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Merci electrosat03, mais le passage On Error GoTo est un pis-aller pour ceux qui utiliseront cette fonction sous Access 2007 et ce dernier ne connaît ni .Filesearch, ni .FoundFiles.
    À vrai dire, la première partie fonctionne parfaitement sous Access 2003 ^^°

    PS : Mais pourquoi je bosse encore à cette heure-là, moi ?

  6. #6
    Membre confirmé Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Cela fait plusieurs mois que je galère toujours avec ce problème...
    Rien de tout ce que j'ai pu essayer ne fonctionne... Je craaaaaaque !
    S'il vous plaît, pourriez-vous m'aider ?

  7. #7
    Membre expérimenté
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Bonjour,
    cherche dans l'aides access à l'objet FileTypes, des exemples montrent la nouvelle utilisations de cette fonctionnalité

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Je connais très peu Access et le code suivant est certainement grandement perfectible :

    Dans un module standard :

    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
    Option Explicit
    Option Compare Text
     
    Public Type InfosResultFichiers
        strFileName As String
        strPathName As String
        lngSize As Long
        DateCreated As Date
        DateLastModified As Date
        strFileType As String
    End Type
     
     
     
    Sub Test()
    Dim i As Long
    Dim Recherche As ClasseFileSearch
     
    Set Recherche = New ClasseFileSearch
     
    With Recherche
        'Définit le répertoire de recherche
        .FolderPath = "C:\dossierImages"
     
        'Définit la recherche dans les sous dossiers (True / False)
        .SubFolders = False
     
        'Option de tri:
        '(Sort_None, sort_Name, sort_Path, sort_Size,
            'sort_DateCreated, sort_LastModified, sort_Type)
     
        'Pas de tri si le paramètre n'est pas spécifié.
        '.SortBy = sort_DateCreated
     
        'Option pour rechercher un type de fichier
        '(Renvoie tous les fichiers si non spécifié)
        .Extension = "*.JPG"
     
        'Execute la recherche
        .Execute
     
        'Boucle sur le tableau pour ajouter le résultat de la recherche
        'dans le champ "NomComplet" de la table nommé "Table1".
        '(.FoundFilesCount renvoie le nombre de fichiers trouvés)
        For i = 1 To .FoundFilesCount
            CurrentDb.Execute "INSERT INTO [Table1] ([NomComplet]) VALUES ('" & _
                .Files(i).strPathName & "\" & .Files(i).strFileName & "')"
        Next
     
    End With
     
    Set Recherche = Nothing
     
    End Sub


    Dans un module de classe nommé ClasseFileSearch :

    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
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    Option Explicit
    Option Compare Text
    Option Base 1
     
    'La procédure recherche des fichiers en fonction des critères
    'spécifiés et renvoie dans un tableau :
     
        'Le nom des fichiers
        'Le chemin
        'La taille des fichers (en octets)
        'La date de création
        'La date de dernière modification
        'Le type de fichier)
     
     
    '-------------------------------------------------
     
     
    'Enumération pour les options de tri
    Public Enum Sort_By
        Sort_None
        sort_Name
        sort_Path
        sort_Size
        sort_DateCreated
        sort_LastModified
        sort_Type
    End Enum
     
     
    Dim TabFiles() As InfosResultFichiers
    Dim DirectoryPath As String
    Dim lngFoundFilesCount As Long
    Dim boolSousRep As Boolean
    Dim strExtens As String
    Dim optionSortBy As Long
     
     
     
    'Propriété pour le répertoire de recherche
    Public Property Let FolderPath(strFolderPath As String)
        DirectoryPath = strFolderPath
    End Property
     
     
    'Propriété pour rechercher dans les sous dossiers
    Public Property Let SubFolders(boolSubFolders As Boolean)
        boolSousRep = boolSubFolders
    End Property
     
     
    'Propriété pour lister les fichiers correspondants à la requête
    Public Property Get Files(Idx As Long) As InfosResultFichiers
        Files = TabFiles(Idx)
    End Property
     
     
    'Propriété pour l'extension des fichiers à rechercher
    Public Property Let Extension(strExtension As String)
        strExtens = strExtension
    End Property
     
     
    'Propriété pour compte le nombre de fichiers
    Public Property Get FoundFilesCount() As Long
        FoundFilesCount = lngFoundFilesCount
    End Property
     
     
    'Propriété pour l'option de tri
    Public Property Let SortBy(lngSortBy As Sort_By)
        optionSortBy = lngSortBy
    End Property
     
     
    'Fonction d'exécution
    Public Function Execute() As Long
        'Lance la recherche
        ListeFichiers DirectoryPath
     
        'Vérifie que des fichiers ont été trouvés et qu'une option de tri a
        'été spécifié avant de lancer la procédure de tri.
        If lngFoundFilesCount > 1 And optionSortBy <> Sort_By.Sort_None Then _
            FonctionTri optionSortBy
     
        Execute = lngFoundFilesCount
    End Function
     
     
     
    'Procédure pour lister les fichiers
    Private Sub ListeFichiers(strFolderName As String)
        Dim Fso As Object
        Dim NomDossier As Object, SousDossier As Object
        Dim objFichier As Object
     
        On Error GoTo Fin
     
     
        'Vérifie si le dossier spécifié existe
        If Dir(strFolderName, vbDirectory Or vbHidden Or vbSystem) = "" Then Exit Sub
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set NomDossier = Fso.GetFolder(strFolderName)
     
     
        'Boucle sur les fichiers du répertoire
        For Each objFichier In NomDossier.Files
     
            'Vérifie l'extension du fichier
            If objFichier.Name Like strExtens Or strExtens = "" Then
     
                'Redimensionne le tableau pour ajouter un nouvel élément
                lngFoundFilesCount = lngFoundFilesCount + 1
                ReDim Preserve TabFiles(lngFoundFilesCount)
     
                'Nom fichier
                TabFiles(lngFoundFilesCount).strFileName = objFichier.Name
                'Répertoire
                TabFiles(lngFoundFilesCount).strPathName = objFichier.ParentFolder
                'Taille du fichier (en octets)
                TabFiles(lngFoundFilesCount).lngSize = objFichier.Size
                'Date de création
                TabFiles(lngFoundFilesCount).DateCreated = objFichier.DateCreated
                'Date de création ou dernière modification
                TabFiles(lngFoundFilesCount).DateLastModified = objFichier.DateLastModified
                'Type de fichier
                TabFiles(lngFoundFilesCount).strFileType = objFichier.Type
            End If
        Next objFichier
     
     
        'Boucle récursive:
        '(Si l'option de recherche dans les sous répertoires a été spécifiée)
        If boolSousRep Then
            For Each SousDossier In NomDossier.SubFolders
                ListeFichiers SousDossier.Path
            Next SousDossier
        End If
     
     
    Exit Sub:
     
    Fin:
    MsgBox "Erreur '" & Err.Number & "'" & vbCrLf & vbCrLf & _
        Err.Description, vbInformation
    End Sub
     
     
     
    'Procédure de tri (reste à améliorer).
    Private Sub FonctionTri(optionSortBy As Sort_By)
        Dim i As Long, j As Long, k As Long
        Dim ValTemp As Variant
     
        'Vérifie quel champ du tableau doit être trié
        Select Case optionSortBy
     
            Case Sort_By.sort_Name
                For i = LBound(TabFiles) To UBound(TabFiles)
                    j = i
                    For k = j + 1 To UBound(TabFiles)
                        If TabFiles(k).strFileName <= TabFiles(j).strFileName Then j = k
                        If TabFiles(k).strFileName <= TabFiles(j).strFileName Then j = k
                    Next k
     
                    If i <> j Then
                        ValTemp = TabFiles(j).strFileName: TabFiles(j).strFileName = _
                            TabFiles(i).strFileName: TabFiles(i).strFileName = ValTemp
     
                         ValTemp = TabFiles(j).strPathName: TabFiles(j).strPathName = _
                            TabFiles(i).strPathName: TabFiles(i).strPathName = ValTemp
     
                        ValTemp = TabFiles(j).lngSize: TabFiles(j).lngSize = _
                            TabFiles(i).lngSize: TabFiles(i).lngSize = ValTemp
     
                        ValTemp = TabFiles(j).DateCreated: TabFiles(j).DateCreated = _
                            TabFiles(i).DateCreated: TabFiles(i).DateCreated = ValTemp
     
                        ValTemp = TabFiles(j).DateLastModified: TabFiles(j).DateLastModified = _
                            TabFiles(i).DateLastModified: TabFiles(i).DateLastModified = ValTemp
     
                        ValTemp = TabFiles(j).strFileType: TabFiles(j).strFileType = _
                            TabFiles(i).strFileType: TabFiles(i).strFileType = ValTemp
                    End If
                Next i
     
     
             Case Sort_By.sort_Path
                For i = LBound(TabFiles) To UBound(TabFiles)
                    j = i
                    For k = j + 1 To UBound(TabFiles)
                        If TabFiles(k).strPathName <= TabFiles(j).strPathName Then j = k
                        If TabFiles(k).strPathName <= TabFiles(j).strPathName Then j = k
                    Next k
     
                    If i <> j Then
                        ValTemp = TabFiles(j).strFileName: TabFiles(j).strFileName = _
                            TabFiles(i).strFileName: TabFiles(i).strFileName = ValTemp
     
                         ValTemp = TabFiles(j).strPathName: TabFiles(j).strPathName = _
                            TabFiles(i).strPathName: TabFiles(i).strPathName = ValTemp
     
                        ValTemp = TabFiles(j).lngSize: TabFiles(j).lngSize = _
                            TabFiles(i).lngSize: TabFiles(i).lngSize = ValTemp
     
                        ValTemp = TabFiles(j).DateCreated: TabFiles(j).DateCreated = _
                            TabFiles(i).DateCreated: TabFiles(i).DateCreated = ValTemp
     
                        ValTemp = TabFiles(j).DateLastModified: TabFiles(j).DateLastModified = _
                            TabFiles(i).DateLastModified: TabFiles(i).DateLastModified = ValTemp
     
                        ValTemp = TabFiles(j).strFileType: TabFiles(j).strFileType = _
                            TabFiles(i).strFileType: TabFiles(i).strFileType = ValTemp
                    End If
                Next i
     
     
              Case Sort_By.sort_Size
                For i = LBound(TabFiles) To UBound(TabFiles)
                    j = i
                    For k = j + 1 To UBound(TabFiles)
                        If TabFiles(k).lngSize <= TabFiles(j).lngSize Then j = k
                        If TabFiles(k).lngSize <= TabFiles(j).lngSize Then j = k
                    Next k
     
                    If i <> j Then
                        ValTemp = TabFiles(j).strFileName: TabFiles(j).strFileName = _
                            TabFiles(i).strFileName: TabFiles(i).strFileName = ValTemp
     
                         ValTemp = TabFiles(j).strPathName: TabFiles(j).strPathName = _
                            TabFiles(i).strPathName: TabFiles(i).strPathName = ValTemp
     
                        ValTemp = TabFiles(j).lngSize: TabFiles(j).lngSize = _
                            TabFiles(i).lngSize: TabFiles(i).lngSize = ValTemp
     
                         ValTemp = TabFiles(j).DateCreated: TabFiles(j).DateCreated = _
                            TabFiles(i).DateCreated: TabFiles(i).DateCreated = ValTemp
     
                        ValTemp = TabFiles(j).DateLastModified: TabFiles(j).DateLastModified = _
                            TabFiles(i).DateLastModified: TabFiles(i).DateLastModified = ValTemp
     
                        ValTemp = TabFiles(j).strFileType: TabFiles(j).strFileType = _
                            TabFiles(i).strFileType: TabFiles(i).strFileType = ValTemp
                    End If
                Next i
     
     
            Case Sort_By.sort_DateCreated
                For i = LBound(TabFiles) To UBound(TabFiles)
                    j = i
                    For k = j + 1 To UBound(TabFiles)
                        If TabFiles(k).DateCreated <= TabFiles(j).DateCreated Then j = k
                        If TabFiles(k).DateCreated <= TabFiles(j).DateCreated Then j = k
                    Next k
     
                    If i <> j Then
                        ValTemp = TabFiles(j).strFileName: TabFiles(j).strFileName = _
                            TabFiles(i).strFileName: TabFiles(i).strFileName = ValTemp
     
                         ValTemp = TabFiles(j).strPathName: TabFiles(j).strPathName = _
                            TabFiles(i).strPathName: TabFiles(i).strPathName = ValTemp
     
                        ValTemp = TabFiles(j).lngSize: TabFiles(j).lngSize = _
                            TabFiles(i).lngSize: TabFiles(i).lngSize = ValTemp
     
                         ValTemp = TabFiles(j).DateCreated: TabFiles(j).DateCreated = _
                            TabFiles(i).DateCreated: TabFiles(i).DateCreated = ValTemp
     
                        ValTemp = TabFiles(j).DateLastModified: TabFiles(j).DateLastModified = _
                            TabFiles(i).DateLastModified: TabFiles(i).DateLastModified = ValTemp
     
                        ValTemp = TabFiles(j).strFileType: TabFiles(j).strFileType = _
                            TabFiles(i).strFileType: TabFiles(i).strFileType = ValTemp
                    End If
                Next i
     
     
            Case Sort_By.sort_LastModified
                For i = LBound(TabFiles) To UBound(TabFiles)
                    j = i
                    For k = j + 1 To UBound(TabFiles)
                        If TabFiles(k).DateLastModified <= TabFiles(j).DateLastModified Then j = k
                        If TabFiles(k).DateLastModified <= TabFiles(j).DateLastModified Then j = k
                    Next k
     
                    If i <> j Then
                        ValTemp = TabFiles(j).strFileName: TabFiles(j).strFileName = _
                            TabFiles(i).strFileName: TabFiles(i).strFileName = ValTemp
     
                         ValTemp = TabFiles(j).strPathName: TabFiles(j).strPathName = _
                            TabFiles(i).strPathName: TabFiles(i).strPathName = ValTemp
     
                        ValTemp = TabFiles(j).lngSize: TabFiles(j).lngSize = _
                            TabFiles(i).lngSize: TabFiles(i).lngSize = ValTemp
     
                         ValTemp = TabFiles(j).DateCreated: TabFiles(j).DateCreated = _
                            TabFiles(i).DateCreated: TabFiles(i).DateCreated = ValTemp
     
                        ValTemp = TabFiles(j).DateLastModified: TabFiles(j).DateLastModified = _
                            TabFiles(i).DateLastModified: TabFiles(i).DateLastModified = ValTemp
     
                        ValTemp = TabFiles(j).strFileType: TabFiles(j).strFileType = _
                            TabFiles(i).strFileType: TabFiles(i).strFileType = ValTemp
                    End If
                Next i
     
             Case Sort_By.sort_Type
                For i = LBound(TabFiles) To UBound(TabFiles)
                    j = i
                    For k = j + 1 To UBound(TabFiles)
                        If TabFiles(k).strFileType <= TabFiles(j).strFileType Then j = k
                        If TabFiles(k).strFileType <= TabFiles(j).strFileType Then j = k
                    Next k
     
                    If i <> j Then
                        ValTemp = TabFiles(j).strFileName: TabFiles(j).strFileName = _
                            TabFiles(i).strFileName: TabFiles(i).strFileName = ValTemp
     
                         ValTemp = TabFiles(j).strPathName: TabFiles(j).strPathName = _
                            TabFiles(i).strPathName: TabFiles(i).strPathName = ValTemp
     
                        ValTemp = TabFiles(j).lngSize: TabFiles(j).lngSize = _
                            TabFiles(i).lngSize: TabFiles(i).lngSize = ValTemp
     
                          ValTemp = TabFiles(j).DateCreated: TabFiles(j).DateCreated = _
                            TabFiles(i).DateCreated: TabFiles(i).DateCreated = ValTemp
     
                        ValTemp = TabFiles(j).DateLastModified: TabFiles(j).DateLastModified = _
                            TabFiles(i).DateLastModified: TabFiles(i).DateLastModified = ValTemp
     
                        ValTemp = TabFiles(j).strFileType: TabFiles(j).strFileType = _
                            TabFiles(i).strFileType: TabFiles(i).strFileType = ValTemp
                    End If
                Next i
     
        End Select
    End Sub


    bonne soirée
    michel

  9. #9
    Membre confirmé Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    J'ai trouvé !!!

    Pas ce qu'il y a de plus simple mais ça fonctionne !

    En modifiant un code source et en ajoutant quelques lignes en "insert into"

    Je créé une table intermédiaire qui liste le contenu du dossier sélectionné, seulement pour les fichier *.jpg avec 3 champs "chemin" "fichier" et "AdressePhoto"

    Un module :

    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
    Function FindFilesAPI(path As String, searchstr As String, filecount As Long, _
            dircount As Long, sub_dir As Boolean)
     
        Dim filename As String
        Dim DirName As String
        Dim dirNames() As String
        Dim nDir As Integer
        Dim i As Integer
        Dim hSearch As Long
        Dim WFD As WIN32_FIND_DATA
        Dim Cont As Integer
        Dim rs As DAO.Recordset
     
        'On ouvre un curseur sur la table
        Set rs = CurrentDb.OpenRecordset("SELECT * from ListageFichier")
        If Right$(path, 1) <> "\" Then path = path & "\"
     
        hSearch = FindFirstFile(path & searchstr, WFD)
        Cont = True
        If hSearch <> INVALID_HANDLE_VALUE Then
            While Cont
               filename = StripNulls(WFD.cFileName)
                If (filename <> ".") And (filename <> "..") Then
                    FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) _
                          + WFD.nFileSizeLow
                    filecount = filecount + 1
                    'on ajoute le fichier dans la liste
                    rs.AddNew
                    rs![chemin] = path
                    rs![fichier] = filename
                    rs![AdressePhoto] = [path] & [filename]
                    rs.Update
                End If
                Cont = FindNextFile(hSearch, WFD)
            Wend
            Cont = FindClose(hSearch)
        End If
        If nDir > 0 Then
            For i = 0 To nDir - 1
                FindFilesAPI = FindFilesAPI + FindFilesAPI(path & _
                      dirNames(i) & "\", searchstr, filecount, dircount, sub_dir)
            Next i
        End If
    End Function
    Bout de code sur mon formulaire :

    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
    Private Sub btn_AjoutPhoto_Click()
     
     
        Dim path As String
        Dim searchstr As String
        Dim filecount As Long
        Dim dircount As Long
        Dim sub_dir As Boolean
     
        Dim sql As String
     
        Me.txt_SelectFolder.Value = SelectFolder("Sélectionnez un répertoire :", Me.hwnd)
        MsgBox "Attention, vous vous apprêtez à ajouter tous les fichiers images présents " & (Chr(13)) & "dans le dossier " & Me.txt_SelectFolder & (Chr(13)) & (Chr(10)) & (Chr(10)) & "Voulez-vous continuer ?", vbQuestion + vbYesNo, "Ajout de photos"
            If vbNo = True Then
                DoCmd.CancelEvent
            End If
     
    path = Me.txt_SelectFolder.Value
    searchstr = "*.jpg"
    sub_dir = True
     
    'on vide la table
        DoCmd.SetWarnings False
        CurrentDb.Execute ("DELETE * FROM ListageFichier")
        DoCmd.SetWarnings True
     
    Call FindFilesAPI(path, searchstr, filecount, dircount, sub_dir)
     
        sql = "INSERT INTO Photos " & "SELECT AdressePhoto " & "FROM [ListageFichier];"
        DoCmd.RunSQL (sql)
     
        MsgBox "Les photos ont été ajoutées", vbOKOnly, "Ajout terminé"
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
        stDocName = "frm_PhotosSaisie"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    End Sub
    Et j'obtiens le résultat voulu

    Merci à tous pour votre aide et vos conseils !

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

Discussions similaires

  1. [Access 2007 - Nouveauté] Champ Pièces-Jointes
    Par Arkham46 dans le forum Sondages et Débats
    Réponses: 14
    Dernier message: 22/06/2011, 20h30
  2. filesearch access 2007
    Par myriame dans le forum VBA Access
    Réponses: 18
    Dernier message: 22/06/2011, 17h59
  3. Filesearch avec Access 2007
    Par Nabemar dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/07/2007, 17h31
  4. [Access 2007 - Nouveauté] Collecter des données via Outlook
    Par Maxence HUBICHE dans le forum Sondages et Débats
    Réponses: 15
    Dernier message: 04/06/2007, 13h31
  5. access 2007 multivalue?
    Par hocine dans le forum Access
    Réponses: 1
    Dernier message: 06/06/2006, 00h50

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