Private Function ChoisirDossier() As String
Dim objShell As Object, objFolder As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Sélectionnez un Dossier", &H1&)
On Error Resume Next
ChoisirDossier = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
If Err.Number <> 0 Then ChoisirDossier = ""
On Error GoTo 0
End Function
Sub GrouperDataFichiers()
Dim FSO 'As Scripting.FileSystemObject
Dim SourceFolder As Object 'As Scripting.Folder
Dim FileItem As Object 'As Scripting.File
Dim chemin$
Dim T()
Dim cpt&, g&, i&, j&, Lig&
Dim Z As Range
Dim W
Dim Vari As Variant
Dim WB As Workbook
Dim S As Worksheet, DEST As Worksheet
Dim Info(1 To 1, 1 To 26) As Variant
'------------
chemin$ = ChoisirDossier
If chemin$ = "" Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.GetFolder(chemin$)
If SourceFolder.Files.Count = 0 Then Exit Sub
For Each FileItem In SourceFolder.Files
If LCase(Right(FileItem.Name, 4)) = ".xls" Then
cpt& = cpt& + 1
ReDim Preserve T(1 To cpt&)
T(cpt&) = chemin$ & "\" & FileItem.Name
End If
Next FileItem
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
'------------
Application.ScreenUpdating = False
Set DEST = ActiveSheet
Lig& = 1
For g& = 1 To UBound(T)
Set WB = GetObject(T(g&))
Set S = WB.Sheets("Montage")
Set Z = S.Cells.Find("CLIENT")
If Z Is Nothing Then
MsgBox "Pas de réf client"
Else
Info(1, 1) = Z.Offset(1, 0)
End If
WB.Close (False)
Set S = Nothing
Set Z = Nothing
Set WB = Nothing
Lig& = Lig& + 1
DEST.Range(DEST.Cells(Lig&, 1), DEST.Cells(Lig&, UBound(Info, 2))) = Info
Erase Info
Next g&
Vari = Array("client", "ref", "moule", "designation", "Nb empreinte", "machine", "diametre")
With DEST
.Range(.Cells(1, 1), .Cells(1, UBound(Vari) + 1)) = Vari
End With
Set DEST = Nothing
Application.ScreenUpdating = True
End Sub