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 :

Listing de Fichier dans sous Dossier (Problem de Loop) [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Points : 76
    Points
    76
    Par défaut Listing de Fichier dans sous Dossier (Problem de Loop)
    Bonjour à tous

    J'essaye d'écrire un code pour pouvoir récuper le nom de fichier word dans des sous-dossier. Quand je teste mon code je sais que dans le dossier il y a 3 sous-dossier et dans chacun d'eux il y a des fichiers word.
    le probleme c'est que mon code s'arrete après avoir traiter le premier sous-dossier.

    Quelqu'un peut il voir pourquoi le "Loop" de "rep" s'arrête?

    Voici le code

    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
    Private Sub Extration_click()
    Dim Rs As Recordset
     
    Dim strFile As String
    Dim rep As String
     
     If IsNull(Me.CHEMIN_FICHIER) Then
        MsgBox "Veuillez choisir un dossier"
        Else
        CurrentDb.Execute "Delete * From DOCUMENT", dbFailOnError
     
    rep = Dir(Me.CHEMIN_FICHIER, vbDirectory) ' récupére les noms des sous-dossiers
     
     
    Do While (rep <> "")
     
        If (GetAttr(Me.CHEMIN_FICHIER & "\" & rep) And vbDirectory) = vbDirectory Then
            If (rep) <> "." And (rep) <> ".." Then
     
       Set Rs = CurrentDb.OpenRecordset("DOCUMENT", dbOpenDynaset)
       strFile = Dir(Me.CHEMIN_FICHIER & "\" & rep & "\*.doc", vbNormal) 'chercher les fichiers dans les dossiers
     
       Do
     
          If strFile = "" Then
            GoTo ExitHere
          End If
     
          Rs.AddNew
          Rs!chemin = strFile
          Rs.Update
     
          strFile = Dir()
       Loop
     
     
            End If
        End If
     
       rep = Dir()
     
    Loop
     
     
    ExitHere:
       Set Rs = Nothing
       MsgBox ("La mise à jour a été faite")
     
     End If
    End Sub
    Merci d'avance



    EDit: Le problème vient de cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If strFile = "" Then
            GoTo ExitHere
          End If
    Mais je sais pas comment faire

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    C'est un problème avec Dir() qui n'est pas récursive. Quand tu demandes un nouveau dir(critere) cela efface l'ancien.

    Tu peux faire cela de deux façons, soit en gérant à la main la récusivité en gardant une liste des sous répertoires trouvés par Dir() (ex : dans une collection) et en demandant un dir() sur ces sous-répertoires spécifiquement après en avoir fini avec le répertoire courant,

    Soit en utilisant un objet FileSystemObject qui permet la récursivité.

    Désolé je ne m'en suis jamais vraiment servi donc je n'ai pas plus de détail mais une recherche sur Google devrait te permettre de trouver.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2012
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 103
    Points : 76
    Points
    76
    Par défaut
    MErci pour ton aide.
    J'ai résolue le problème en les séparents en deux , j'enregistre les noms des dossiers dans une table dans un premier temps et après je vais les chercher pour la deuxième loop.

    Voici le code:
    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
    Private Sub Extration_click()
    Dim Rs As Recordset
    Dim Rs1 As Recordset
    Dim Rs2 As DAO.Recordset
    Dim strFile As String
    Dim rep As String
    Dim fo As DAO.Field
     
     If IsNull(Me.CHEMIN_FICHIER) Then
        MsgBox "Veuillez choisir un dossier"
        Else
        CurrentDb.Execute "Delete * From Dossier", dbFailOnError
     
    rep = Dir(Me.CHEMIN_FICHIER, vbDirectory)
     
    Do
        If (GetAttr(Me.CHEMIN_FICHIER & "\" & rep) And vbDirectory) = vbDirectory Then
            If (rep) <> "." And (rep) <> ".." Then
                Set Rs1 = CurrentDb.OpenRecordset("dossier", dbOpenDynaset)
     
     
                Rs1.AddNew
                Rs1!nonfichier = rep
                Rs1.Update
     
            End If
        End If
    rep = Dir()
     
     
    Loop Until (rep) = ""
    Set Rs1 = Nothing
     
     
    CurrentDb.Execute "Delete * From DOCUMENT", dbFailOnError
     
    Set Rs = CurrentDb.OpenRecordset("DOCUMENT", dbOpenDynaset)
     
    Set Rs2 = CurrentDb.OpenRecordset("SELECT nonfichier from dossier")
        If Rs2.RecordCount > 0 Then
        Rs2.MoveFirst
    Do Until Rs2.EOF
        For Each f0 In Rs2.Fields
        strFile = Dir(Me.CHEMIN_FICHIER & f0 & "\*.doc", vbNormal)
     
        Do While (strFile <> "")
     
     
          Rs.AddNew
          Rs!chemin = strFile
          Rs.Update
     
     
     
          strFile = Dir()
        Loop
    Next
    Rs2.MoveNext
    Loop
    Set Rs = Nothing
    Set Rs2 = Nothing
    MsgBox ("La mise à jour a été faite")
     
    Else
    MsgBox "Auccun Dossier n'a été trouvé"
    Set Rs = Nothing
    Set Rs2 = Nothing
     
     End If
    Me.DOCS.Requery
    Me.DOCS.Form.Filter = ""
    Me.DOCS.Form.FilterOn = True
     End If
    End Sub

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

Discussions similaires

  1. [Débutant] Liste de fichiers dans un dossier
    Par Gueuz dans le forum C#
    Réponses: 8
    Dernier message: 06/06/2013, 13h10
  2. Réponses: 12
    Dernier message: 11/05/2012, 11h17
  3. Gawk et traitement de fichiers dans sous-dossiers
    Par thisistheend dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 18/07/2011, 09h40
  4. [XL-2007] recherche fichiers dans sous-dossier
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/03/2010, 09h19
  5. liste de fichier dans un dossier
    Par matt16matt dans le forum Langage
    Réponses: 6
    Dernier message: 21/05/2008, 12h36

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