XL 2010 [Résolu] Macro boucle ouvrir tous les fichiers d'un répertoire

Adc

XLDnaute Nouveau
Bonjour à tous,

Je m'excuse déjà de cette demande pour laquelle j'ai fait moult recherches, ai trouvé moult solutions mais pour une raison que j'ignore (mais qui doit avoir un rapport avec ma nullité en VBA), je n'arrive à mettre aucune d'entre elles en application.

Ceci étant dit, voici mon problème.

J'ai un dossier "TEST" sur mon bureau composé d'un fichier "Stock" et de 2 dossiers "A traiter" et "Traité".

Je souhaite depuis le fichier "Stock " ouvrir chacun des fichiers présents dans "A traiter", copier des données vers "Stock ", enregistrer le fichier traité dans le dossier "Traité", le fermer puis supprimer le fichier dans "A traiter".

J'étais parti sur quelque chose du type :

VB:
Sub Demandes_services()

Dim Wb As Workbook
Dim Dossier_a_traiter As String
Dossier_a_traiter = Dir(ThisWorkbook.Path & "\A traiter")

For Each Wb In Dossier_a_traiter
    Workbook.Open
    MsgBox Wb.Sheets("Commande").Range("D2")
    Workbook.Close
Next

End Sub
mais VBA me dit que For Each ne peut itérer que sur un objet Collection ou un tableau.

J'en déduis que ma variable est toute pourrite.

Si une âme charitable pouvait me dépanner, ça m'aiderait beaucoup.

Merci par avance.
 

sousou

XLDnaute Accro
L'utilisation de dir renvoie des nom de fichiers et non une collection
Utilise une boucle while dans ce genre.
Si tu souhaite utiliser une collection tu passes par un objet filsystem qui pourra te renvoyer une collection de fichier
Sub deb()
dossier = Dir(ThisWorkbook.Path & "\")
While dossier <> ""
MsgBox dossier
Workbook.Open( dossier)
dossier = Dir
Wend
End Sub
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Ne manquerait-il pas à un s à WorkBook :
Workbook.Open( dossier)
pour avoir
Workbooks.Open( dossier)

A+ à tous
 

Adc

XLDnaute Nouveau
Bonjour sousou et JCGL,

Merci de vos retours. Ca fonctionne très bien. Au final, ça fait ça :

VB:
Sub Demandes_services()

Dim Chemin As String
Chemin = ThisWorkbook.Path & "\A traiter\"

Dim Fichier_a_traiter As String
Fichier_a_traiter = Dir(Chemin & "*.xlsx")

While Fichier_a_traiter <> ""
Workbooks.Open (Chemin & Fichier_a_traiter)
Fichier_a_traiter = Dir

MsgBox ActiveWorkbook.Sheets("Commande").Range("D2")


Wend
Je m'attaque à la suite maintenant. Merci beaucoup !
 
Haut Bas