[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 Sub

Premiè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 Sub

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

12test-directory.xlsm (17.86 Ko)

Tiens c'est étrange , dans votre fichier ça fonctionne parfaitement, mais dès que je transfère la macro dans le mien, ça bloque sur "inputbox"...

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 Select

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

Rechercher des sujets similaires à "vba choisir directoire fichier str filetoopen"