Boucle sur les fichiers d'un dossier

Salut,

Un sujet maintes fois traité mais sur lequel je bloque.

J'ai le code :

'Désignation du dossier où sont enregistrées les déclarations
With Application.FileDialog(msoFileDialogFolderPicker)
    .Show
    If .SelectedItems.Count > 0 Then
    Dossier_déclarations = .SelectedItems(1) & "\"
    End If
End With

'Ouverture des déclarations
Liste_déclarations = Dir(Dossier_déclarations & "*.xlsm")

While Liste_déclarations <> ""
    Workbooks.Open Dossier_déclarations & "\" & Liste_déclarations
    Set Déclaration_source = ActiveWorkbook

    [...]

    Liste_déclarations = Dir
Wend

J'ai un plantage sur le " Liste_déclarations = Dir ", et si je ne le mets pas la boucle se fait toujours sur le même fichier.

Qu'est ce qui cloche dans mon code ?

Merci d'avance.

Manu

Bonjour Manu,

Un code à tester :

'Désignation du dossier où sont enregistrées les déclarations
With Application.FileDialog(msoFileDialogFolderPicker)
    .Show
    If .SelectedItems.Count > 0 Then
    Dossier_déclarations = .SelectedItems(1) & "\"
    End If
End With

'Ouverture des déclarations
Nom_Fichier = Dir(Dossier_déclarations & "*.xlsm")

While Nom_Fichier <> ""
    Chemin_Complet_Fichier = Dossier_déclarations & Nom_Fichier
    Workbooks.Open Chemin_Complet_Fichier
    Set Déclaration_source = ActiveWorkbook

    [...]

    Nom_Fichier = Dir
Wend

Même chose : Argument ou appel de procédure incorrect sur le " Nom_fichier = Dir "

La variable Nom_fichier a bien le nom du fichier en question.

Manu

J'ai trouvé une solution.

Le traitement du fichier que j'ouvre se termine par son déplacement dans un dossier d'archivage. J'ai remplacé le

Nom_fichier = Dir

par

Nom_Fichier = Dir(Dossier_déclarations & "*.xlsm")

Le fichier initial ayant disparu ça passe bien au fichier suivant.

Mais je veux bien quand même l'explication du pourquoi du comment le " Nom_fichier = Dir " plante.

Manu

L'utilisation de Dir sans arguments est destinée à récupérer le prochain fichier correspondant au motif de recherche spécifié lors de l'appel précédent à Dir. Toutefois, l'état de la recherche de Dir est partagé à l'échelle globale dans l'application, et il peut être modifié par d'autres opérations de fichier ou de dossier.

En particulier, si vous déplacez ou supprimez un fichier (comme vous l'avez fait dans votre traitement), cela peut interférer avec l'état de la recherche de Dir et provoquer une erreur lors de la tentative de récupération du fichier suivant.

La solution que vous avez trouvée, qui consiste à appeler à nouveau Dir avec le motif de recherche chaque fois que vous avez besoin du prochain fichier, évite ce problème en réinitialisant l'état de la recherche. C'est une solution courante lorsque le code modifie le contenu du dossier pendant qu'il énumère les fichiers.

Rechercher des sujets similaires à "boucle fichiers dossier"