[VBA] Choisir un directoire ou un fichier str FiletoOpen
Bonjour à tous,
J'essaye de créer un bout de macro qui permettrait à l'utilisateur de choisir un fichier Excel OU un directoire (la fenêtre pop, et s'il choisit un directoire et met "OK", tous les fichiers à l'intérieur s'ouvrent). Aussi, je voudrais que l'utilisateur puisse choisir plusieurs directoires et/ou plusieurs fichiers.
J'ai trouvé ce code sur internet qui m'a beaucoup aidé, mais que je n'arrive pas à adapter
Sub directory()
Dim FolderName As String
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = True
.Show
On Error Resume Next
FolderName = .SelectedItems(1)
Err.Clear
On Error GoTo 0
End With
My_Folder = Dir("*.*")
While My_Folder <> ""
Workbooks.Open My_Folder
My_Folder = Dir()
Wend
End SubPremièrement, avec ce code, je ne peux pas choisir de fichier (il faudrait pouvoir mettre quelque chose qui permette de faire à la fois "Application.FileDialog(msoFileDialogFolderPicker)" et "Application.FileDialog(msoFileDialogFilePicker)").
Deuxièmement, je ne sais pas pourquoi, mais quand j'entre dans un directoire, il ne prend pas les fichiers Excel qui y sont, mais ceux qui sont autour de lui dans le même directoire. Je sais pas comment manipuler le code pour que ça prennent ceux qui sont dedans.
Troisèmement, quand j'essaie de sélectionner plusieurs directoires, ça ne fonctionne pas, bien que j'aie changé
".AllowMultiSelect = False" pour "".AllowMultiSelect = True".
Quelqu'un peut-il m'aider ?
Merci d'avance à ceux qui prendront le temps de me répondre.
Bonne fin d'après-midi,
cmarchonge
Bonjour,
une proposition
Sub directory()
While UCase(D) <> "R" And UCase(D) <> "F"
D = InputBox("choisissez répertoire(R) ou fichier(F)")
Wend
Select Case UCase(D)
Case "R"
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = True
.Show
For Each FolderName In .SelectedItems
fichier = Dir(FolderName & "\*.xls*")
While fichier <> ""
Workbooks.Open FolderName & "\" & fichier
fichier = Dir()
Wend
Next
End With
Case "F"
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Show
For Each fichier In .SelectedItems
Workbooks.Open fichier
Next
End With
End Select
End SubMerci de votre réponse h2so4.
J'ai testé le code que vous m'avez transmis, mais il bloque sur "inputbox" (surligné, mais pas en jaune).
Le message d'erreur dit "Compile error: Expected variable or procedure, not module".
Quand je clique sur "OK", c'est "Sub directory()" qui apparaît en jaune.
Pourriez-vous me guider pour contourner cette erreur ?
Merci.
cmarchonge
voici un classeur avec la macro qui fonctionne telle que publiée dans mon message précédent.
Tiens c'est étrange
Quoi qu'il en soit, votre macro est parfaite, et j'ai contourné le souci avec un MsgBox vbYesNoCancel.
Voici la macro avec mes modifications :
Sub directory()
Select Case MsgBox("Do you wish to choose only folders ?" & vbNewLine & vbNewLine & "If you clic 'Yes' you will only be able to select folders" & vbNewLine & "If you clic 'No' you will only be able to select files", vbYesNoCancel + vbQuestion + vbDefaultButton2, "Folders or files ?")
Case Is = vbYes
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = True
.Show
For Each FolderName In .SelectedItems
fichier = Dir(FolderName & "\*.xls*")
While fichier <> ""
Workbooks.Open FolderName & "\" & fichier
fichier = Dir()
Wend
Next
End With
Case Is = vbNo
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Show
For Each fichier In .SelectedItems
Workbooks.Open fichier
Next
End With
Case Is = vbCancel
Exit Sub
End SelectMerci beaucoup pour votre précieuse aide h2s04, encore une fois, vous m'avez sauvé !
Excellente fin de journée à vous.
cmarchonge
Ah et aussi, j'ai lu que c'est normal de ne pas pouvoir sélectionner plusieurs directoires, c'est écrit dans l'aide d'Excel. Du coup, dommage, il faudra effectuer plusieurs fois l'action pour ouvrir tous les fichiers de plusieurs directoires...