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

Macros et VBA Excel Discussion :

Boucle dans un dossier [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut Boucle dans un dossier
    Bonjour à tous,

    voila je souhaite effetuer un traitement sur les fichiers contenu dans un dossier. Mais je n'arrive pas à créer une boucle sur mes fichiers.

    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Chemin = "C:\..."
        Fichier = Dir(Chemin & "*.*")
     
        Do While Len(Fichier) > 0
            Debug.Print Chemin & Fichier
            Fichier = Dir
        Loop
    Cependant, ce code lit 1 fichier sur 5...
    J'ai donc 4 fichiers qui ne sont pas traités à chaque boucles.

    Comment rectifié ceci svp ?

    Merci!

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

    Je ne connais pas la fonction Len, mais (http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx) il semble qu'il s'agisse du nombre de caractère d'une chaîne de caractère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Len(Fichier) > 0
    Cela signifie donc que si le nombre de caractères du nom fichier est supérieur à 0, la boucle s'arrête en principe.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    La fonction Len retourne le nombre de caractère du nom du fichier.
    Donc ici, tant que le nom du fichier est supérieur à 0 (donc qu'il y a un nom de fichier) le programme tourne.
    ça fonctionne mais le problème c'est que ça me saute des fichiers, autrement la boucle fonctionne elle s'arrete au dernier fichier.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Sujet traité des millions de fois. Tu as 36 millions de façons d'approcher. Choisis la tienne. Google t'aidera: "Boucler VBA Fichiers Repertoire"

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Peux-tu donner le nom d'un fichier non traité ? Est-ce qu'il ne s'agit pas de fichiers système ou cachés ?

  6. #6
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    Sujet traité des millions de fois. Tu as 36 millions de façons d'approcher. Choisis la tienne. Google t'aidera: "Boucler VBA Fichiers Repertoire"
    J'ai déjà cherché, j'ai même trouvé la boucle (que je cite plus haut) mais le problème c'est que ça ne traite pas tous les fichiers (seulement 1/5).
    Merci quand même de la réponse.

    Citation Envoyé par Daniel.C Voir le message
    Bonjour,

    Peux-tu donner le nom d'un fichier non traité ? Est-ce qu'il ne s'agit pas de fichiers système ou cachés ?
    Tous mes fichiers sont composés de la même manière (xxxxx - yyy.pdf), donc je ne comprends pas du tout d'ou ça peut venir J'ai quand même vérifié, ils ne sont pas cachés.

    PS: J'ai ajouté des fichiers, mais la boucle va quand même de 5 en 5... (et ne prend donc pas forcèment les même fichiers à chaque test suivant que j'ajoute ou enlève des fichier).

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sasafca Voir le message
    Donc ici, tant que le nom du fichier est supérieur à 0 (donc qu'il y a un nom de fichier) le programme tourne.
    Oui, c'est ça plutôt .

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    "Dir" va lire les fichiers dans l'ordre de la date de création, pas forcément l'ordre qui est affiché dans l'explorer. Tu es bien sûr qu'en tout la boucle n'est passée que sur 1/5 des fichiers du dossier ?

  9. #9
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Incoryable, j'ai relancer Excel et la boucle marche.
    J'ai cependant une erreur maintenant que j'ai ajouté mon traitement à la boucle sur le ça me met "Erreur d'execution 5" argument ou appel de procèdure incorrect...
    alors que tout à l'heure la boucle fonctionnait...

    Est-ce que vous pourriez jetter un coup d'oeil à mon fichier excel si je le post ?

    encore merci de votre aide

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Fichier = Dir() ?
    Faudrait penser à lui filer les arguments

  11. #11
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Fichier = Dir, ça permettait à ma boucle d'avancer jusqu'à maintenant... enfin je dois rater quelque chose...
    Si quelqu'un peut jeter un coup d'oeil j'en ai marre de bloquer sur cette boucle.
    Fichiers attachés Fichiers attachés

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Ca fonctionne ici. Ton ordi s'est levé du pied gauche. Redémarre-le.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    extrait de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Boucle sur tous les fichiers du répertoire.
        Fichier = Dir(Chemin & "*.*")
     
        'Do While Len(Fichier) > 0
        While Fichier <> ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Nouvel emplacement du fichier
            Chemin_dest = "G:\TRANSPORT\VEHICULES\Dossiers_Vehicules\"
            If Dir(Chemin_dest & immat & "-" & num_point, vbDirectory) = "" Then
                MkDir Chemin_dest & immat & "-" & num_point
                Chemin_dest = Chemin_dest & immat & "-" & num_point & "\"
            Else:
                Chemin_dest = Chemin_dest & immat & "-" & num_point & "\"
            End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Debug.Print Chemin & Fichier
            Fichier = Dir
    Wend
    tu utilise la commande dir à plusieurs endroits de ton code hors en faisant comme ça tu efface la recherche précédente et la fonction Fichier = Dir ne connais que le répertoire précédemment affecté: Dir(Chemin_dest & immat & "-" & num_point, vbDirectory) .
    Fichiers attachés Fichiers attachés

  14. #14
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    ça ne fonctionnait toujours pas chez moi même en redémarrant le pc...
    J'ai donc pris la méthode de rdurupt ! J'étais sur que le problème venait du fait que j'utilisais fois dir, mais honnêtement je ne voyais vraiment pas comment y remédier.
    Tu m'as fait un truc super en tout cas rdurupt !
    Il manquait juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chemin_dest = Chemin_dest & immat & "-" & num_point & "\"
    car ça créer les dossier mais ça coller les fichiers à côté.
    Mais le reste est nikel !
    Encore merci !

    Bonjour,
    j'ai une nouvelle question, grâce à ce code, la fonction retourne vrai si le dossier "repertoire" existe faux sinon.
    Mais comment faire pour savoir si le dossier "repertoire" ou "repertoire..." existe ?
    Rajouter comme une sorte de like "repertoire*" à la fonction est-il possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function Repertoires_Existe(Repertoires As String) As Boolean
    Dim Fso As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Repertoires_Existe = Fso.FolderExists(Repertoires)
    Set Fso = Nothing
    End Function
    Merci !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    dans le fichier que je t'es envoyé, tu as un vrai explorateur Windows.
    toutes les questions et même celle que tu ne te pose pas ont les réponses de dans.il faut utiliser la variable ExpWin tu dispose de la saisie instinctive:
    ExpWin si tu ajoute le [.] vb te propose le reste.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ExpWin.Repertoires_Existe(Chemin) = True Then
    dessolé je pense que j'ai pas compris ta question!
    tu cherche c:\rep1\rep2\rep?
    je regarde

  16. #16
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Oui mais par exemple j'ai mon fichier xxx.pdf, je souhaite vérifier si le dossier xxx existe, mais il peut aussi bien s'appeler xxx - yyy.
    J'aimerai donc un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ExpWin.Repertoires_Existe(Chemin & "*") = True Then
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ExpWin.Repertoires_Existe like(Chemin"*") = True Then
    or la fonction dans le fichier vérifie seulement si le fichier xxx existe mais retourne false si il est nommé xxx - y par exemple.

  17. #17
    Invité
    Invité(e)
    Par défaut
    il faut que tu rajoute cette fonction dans la classe clsWindowsExporer.
    elle te retourne un tableau des répertoires à toi de choisir en suite le bon.
    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
    Public Function Repertoires_Like(Repertoires)
    Dim Fso As Object
    Dim t
    Dim rep
    Dim Reps()
    Dim r
    r = 0
    Dim I
    ReDim Reps(0)
    If Right(Trim("" & Repertoires), 1) = "*" Then
        t = Split(Repertoires & "\", "\")
        For I = 0 To UBound(t)
           If Right(Trim("" & t(I)), 1) = "*" Then Exit For
            rep = rep & Trim("" & t(I)) & "\"
        Next
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        If Fso.FolderExists(rep) = True Then
            Set FSfolder = Fso.GetFolder(rep)
     
            For Each subfolder In FSfolder.SubFolders
               If InStr(1, UCase(Trim("" & subfolder.Name)), Left(UCase(Trim("" & t(I))), Len(UCase(Trim("" & t(I)))) - 1)) <> 0 Then
                ReDim Preserve Reps(r)
                Reps(r) = subfolder.Path
                r = r + 1
               End If
            Next subfolder
        End If
    End If
    Repertoires_Like = Reps
    Set Fso = Nothing
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
    Dim ExpWin As New clsWindowsExporer
     
    rep = ExpWin.Repertoires_Like("c:\rd\rd\r*")
     
    For I = 0 To UBound(rep)
    Debug.Print rep(I)
    Next
    End Sub

  18. #18
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Excellent !!
    Mille merci !

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

Discussions similaires

  1. Zipper en boucle dans un dossier
    Par Mysen dans le forum ANT
    Réponses: 1
    Dernier message: 10/12/2012, 17h46
  2. [TOS4.2.3] Boucle dans un dossier tant que
    Par Albat_r dans le forum Développement de jobs
    Réponses: 11
    Dernier message: 24/02/2012, 16h42
  3. [AC-2002] Boucle pour importer et traiter des fichiers excel dans un dossier
    Par Tinien dans le forum VBA Access
    Réponses: 9
    Dernier message: 02/06/2010, 11h59
  4. Réponses: 1
    Dernier message: 04/02/2010, 20h41
  5. Notion de boucles dans Business Object
    Par lionelEIGIP dans le forum Deski
    Réponses: 1
    Dernier message: 08/04/2004, 11h26

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