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.
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
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 !