J'ai sous la main une macro, qui me permets de nommer un répertoire pour lecture:
' Définir le répertoire à lire
pth = "C:\Users\S_ebekonan\Desktop\Dossier EBEN\ETATS 2021\ETATS MOOV MONEY\3-MARS 2021\bouclage du 01" ' Créer le fichier résultat
Set res = Workbooks.Add(xlWBATWorksheet)
Set dst = res.Worksheets(1).Range("A1") ' Lecture du répertoire
Set fso = CreateObject("Scripting.FileSystemObject")
Set rep = fso.GetFolder(pth)
Set cfr = rep.Files ' Contrôler chaque fichier du répertoire For Each fic In cfr ' - Vérifier s'il s'agit d'un fichier Excel... If StrComp(fso.GetExtensionName(fic.Name), "xlsb", vbTextCompare) = 0 Then ' ... dans l'affirmative, ouvrir le fichier et mettre à jour les liaisons Set wbk = Workbooks.Open(Filename:=pth & "\" & fic.Name, UpdateLinks:=xlUpdateLinksAlways) ' Copier la colonne en dessous Set rng = wbk.Worksheets(36).UsedRange
rng.Copy dst
wbk.Worksheets(36).UsedRange: la feuille à traiter est la 36e feuille de chaque classeur du répertoire.
Bref, je dois toujours ouvrir VBA pour changer le chemin d'accès.
Ce que je veux faire, c'est générer une boîte de dialogue qui me demande le dossier à traiter ou bien le chemin d'accès.
Sub Choisir_Dossier()
Dim Dossier$
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Choisir un répertoire, svp"
.InitialFileName = ""
If .Show Then Dossier = .SelectedItems(1) Else Exit Sub
End With
MsgBox Dossier
End Sub
PS: Les mots en majuscule dans un message => crier
Et ce n'est pas forcément de bon aloi, comme aurait dit Jacques Capelovici (plutôt vers 20 heures)
' Définir le répertoire à lire pth = "C:\Users\S_ebekonan\Desktop\Dossier EBEN\ETATS 2021\ETATS MOOV MONEY\3-MARS 2021\bouclage du 01" ' Créer le fichier résultat Set res = Workbooks.Add(xlWBATWorksheet)
Set dst = res.Worksheets(1).Range("A1") ' Lecture du répertoire Set fso = CreateObject("Scripting.FileSystemObject")
Set rep = fso.GetFolder(pth)
Set cfr = rep.Files
Sans oublier que j'ai défini mes arguments comme suit:
Dim fso As Object 'Système de fichiers
Dim rep As Object 'Répertoire
Dim cfr As Object 'Collection de fichiers du répertoire
Dim fic As Object 'Fichier (élément de la collection cfr)
Dim wbk As Workbook 'Classeur
Dim res As Workbook 'Classeur resultat
Dim rng As Range 'Plage de cellules
Dim dst As Range 'Cellule de destination
Dim pth As String 'Chemin du répertoire
Je t'invite à tomber la chemise et à mouiller le maillot
Mixe ton code avec le mien, fais des essais et des tests
Et si tu bloques, reviens dans le fil en postant le code VBA de tes essais, pour voir ce qui pourrait clocher.
Sinon personnellement, je ne passerais par CreateObject
(à cause des Macistes)
Je ferai un truc dans ce genre
VB:
Sub Choisir_Dossier_BIS()
Dim dossier, pth$, fic$
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Choisir un répertoire, svp"
.InitialFileName = ""
If .Show Then dossier = .SelectedItems(1) Else Exit Sub
End With
pth = dossier
fic = Dir(pth & "\*.xlsb")
Do While fic <> ""
MsgBox fic 'pour test
fic = Dir()
Loop
End Sub
Normalement, désormais tu as de quoi faire
(Tu peux choisir un dossier et boucler sur les classeurs *.xlsb qu'il contient)
Il ne te reste plus qu'à remettre en place ton bout de code où tu ouvres les classeurs.
Bons tests et essais.
Sinon personnellement, je ne passerais par CreateObject
(à cause des Macistes)
Je ferai un truc dans ce genre
VB:
Sub Choisir_Dossier_BIS()
Dim dossier, pth$, fic$
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Choisir un répertoire, svp"
.InitialFileName = ""
If .Show Then dossier = .SelectedItems(1) Else Exit Sub
End With
pth = dossier
fic = Dir(pth & "\*.xlsb")
Do While fic <> ""
MsgBox fic 'pour test
fic = Dir()
Loop
End Sub
Normalement, désormais tu as de quoi faire
(Tu peux choisir un dossier et boucler sur les classeurs *.xlsb qu'il contient)
Il ne te reste plus qu'à remettre en place ton bout de code où tu ouvres les classeurs.
Bons tests et essais.