Ajouter liste repertoire et fichier dans une table

Résolu
Fuzcrew Messages postés 4 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 janvier 2010 - 21 janv. 2010 à 14:46
Fuzcrew Messages postés 4 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 janvier 2010 - 21 janv. 2010 à 15:45
Bonjour à tous !!

Je possède un répertoire qui contient plusieurs sous-répertoires qui eux-mêmes contiennent 8 images. Je souhaite enregistrer dans une table la liste complète des photos associées du nom de chaque répertoire. J'ai donc tenté une boucle à l'intérieur d'une boucle avec la commande vb DIR. Voici mon code


DoCmd.SetWarnings False
Dim t As DAO.Recordset, repertoire As String, fichier As String, var As String
 
'répertoire des fichiers à récupérer
repertoire = "C:\...\dossier"
 
'vide la table tbFichiers
DoCmd.RunSQL "DELETE chemin_images.* FROM IMAGES;"
 
Set t = CurrentDb.OpenRecordset("IMAGES")
fichier = Dir(repertoire, vbDirectory)
 
'première boucle
Do While fichier <> ""
      'condition pour les répertoires courants
      If fichier <> "." And fichier <> ".." Then
        'condition pour ne sélectionner que les répertoire
        If (GetAttr(repertoire & fichier) And vbDirectory) = vbDirectory Then
        'variable qui récupère le chemin de chaque sous-répertoire
        var = repertoire & (fichier) & ""
             fichier2 = Dir(var)
             'deuxième boucle qui récupère le nom de chaque image et les  enregistre dans la table
             Do While fichier2 <> ""
                If fichier2 <> "." And fichier2 <> ".." Then
                     t.AddNew
                     t!chemin_images = fichier & "_" & fichier2
                     t.Update
                     fichier2 = Dir
                End If
            Loop
          End If
        End If
    'debug
    fichier = Dir
Loop
t.Close
Set t = Nothing
DoCmd.SetWarnings True


Il réussi a accéder à la deuxième boucle, enregistre bien les images du premier sous-répertoire dans la table mais bug lors du passage au deuxième sous-répertoire et me renvoie sur la ligne :
Code :
fichier = Dir
Si vous avez une petite idée ou une autre technique, merci d'avance.
Dernière modification par jacques_jean ; Aujourd'hui à 14h12. Motif: Ajout de la version. Sélectionner dans la liste déroulante "Intitulé" au-dessus de la fenêtre de rédaction du message.

3 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 14:59
Dim sName As String
Dim xsFolders() As String
Dim nFolders As Long
Dim oRs As DAO.Recordset
Dim sRoot As String
    sRoot = "C:\m"
    sName = Dir$(sRoot, vbDirectory)
    Do While LenB(sName)
        If sName <> "." And sName <> ".." Then
            ReDim Preserve xsFolders(nFolders)
            xsFolders(nFolders) = sRoot & sName & ""
            nFolders = nFolders + 1
        End If
        sName = Dir$()
    Loop
    
    DoCmd.RunSQL "DELETE FROM IMAGES"
    Set oRs = CurrentDb.OpenRecordset("IMAGES")
    For nFolders = 0 To nFolders - 1
        sName = Dir$(xsFolders(nFolders) & "*.jpg")
        Do While LenB(sName)
            oRs.AddNew
            oRs.Fields("chemin_images").Value = xsFolders(nFolders) & sName
            oRs.Update
            sName = Dir$()
        Loop
    Next
    oRs.Close


Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 14:51
pas de récursivité avec Dir.

si ta structure est ainsi figée (n répertoires qui contiennent des images)
tu peux t'en tirer facilement en faisant d'abord un tableau des repertoires.

dans un second temps, tu parcoure chacun d'eux en listant les images contenues.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Fuzcrew Messages postés 4 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 janvier 2010
21 janv. 2010 à 15:45
Merci a toi Renfield, le code fonctionne parfaitement !!
Et je n'étais pas au courant pour la récursivité du Dir.

@ ++ et merci encore de ton aide.
0
Rejoignez-nous