Ouvrir un explorateur sous VBA pour choisir un fichier

Messages postés
205
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
28 novembre 2005
- - Dernière réponse : cs_FREDO24
Messages postés
2
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
19 septembre 2011
- 28 oct. 2008 à 19:56
Bonjour tous,

Je cherche sur un click boutton à ouvrir un explorateur pour que l'utilisateur puisse choisir un fichier!

J'ai regardé les différente réponse à ce jour sur ce sujet:

- réponse 1 : avec Application.FileDialog mais chez moi ca ne marche pas même en mettant la référence microsoft office xx.x object library

- réponse deux en passant par les API SHBrowseForFolder et SHGetPathFromIDList mais là ca n'ouvre qu'un explorateur permettant de choisir un Répertoire et non un fichier

Je souhaite donc ouvrir un explorateur complet permettant de rechercher un fichier et de le sélectionner !

Merci tous ++

PtitGrumo mal au do
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
22
1
Merci
Bonjour,



Private Sub CommandButton1_Click()

Application.Dialogs(xlDialogOpen).Show

End Sub



jpleroisse

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Messages postés
5
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
15 juin 2005
0
Merci
Il faut bien commencer un jour!
Messages postés
5
Date d'inscription
lundi 20 septembre 2004
Statut
Membre
Dernière intervention
15 juin 2005
0
Merci
Excuses pour le message vide.

Si j'ai bien compris ton message...........

Tu fais Projet ---> composants et tu choisis Microsoft Common Dialog Control 6.0

Tu vois apparaître un contrôle nommé CommonDialog. Tu la place sur ton
formulaire. Tu place un bouton de commande derrière lequel tu mets le
code. controldialog1.showopen pour ouvrir l'explorateur. Les autres
méthodes de ce contrôle sont très intéressantes. Alors contactes moi si
tu as besoin d'aide.
Messages postés
205
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
28 novembre 2005
1
0
Merci
Salut!

Je suis sous access 2000 donc je n'ai pas le menu projet ----> composant
Par contre j'ai le menu référence et n'y trouve pas l'objet Microsoft Common Dialog Control 6.0
snifffff

sinon jpleroisse ton code ne fonctionne pas chez moi!

A++ j'espère
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
2
0
Merci
Essaye ceci (ça marche avec Office XP en cochant la référence Microsoft Office 10.0 Object library):

Dim strChemin As String
Dim Fd As FileDialog






Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.AllowMultiSelect = False
.Title = "Sélectionnez la base contenant les données à importer"
.ButtonName = "Sélectionner"
.InitialFileName = CurrentProject.path
.InitialView = msoFileDialogViewDetails
.Filters.Clear
.Filters.Add "Bases de données Microsoft Access", "*.mdb" If .Show -1 Then strChemin .SelectedItems(1)
End With
Set Fd = Nothing

Tu peux personnaliser le titre, le nom du bouton de sélection, et les filtres sur les types de fichiers, pour + d'infos cherche FileDialog dans l'aide d'Access ou MSDN.

Si ça ne marche pas j'ai aussi la solution avec les API...
Messages postés
22
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
16 juin 2005
2
0
Merci
version API, comporte les fonctions pour ouvrir ou choisir un fichier, enregistre un fichier, choisir un répertoire:

Option Compare Database
Option Explicit





'Déclaration de l'API
Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) _
As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Private Declare Function lstrcat Lib "kernel32" _
Alias "lstrcatA" (ByVal lpString1 As String, _
ByVal lpString2 As String) As Long
Private Declare Function OleInitialize Lib "ole32.dll" _
(lp As Any) As Long
Private Declare Sub OleUninitialize Lib "ole32" ()
'Structure du fichier
Private Type OPENFILENAME
lStructSize As Long
hWndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type





Private Type BROWSEINFO
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type





'Constantes
Private Const OFN_READONLY = &H1
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_NOCHANGEDIR = &H8
Private Const OFN_SHOWHELP = &H10
Private Const OFN_ENABLEHOOK = &H20
Private Const OFN_ENABLETEMPLATE = &H40
Private Const OFN_ENABLETEMPLATEHANDLE = &H80
Private Const OFN_NOVALIDATE = &H100
Private Const OFN_ALLOWMULTISELECT = &H200
Private Const OFN_EXTENSIONDIFFERENT = &H400
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_CREATEPROMPT = &H2000
Private Const OFN_SHAREAWARE = &H4000
Private Const OFN_NOREADONLYRETURN = &H8000
Private Const OFN_NOTESTFILECREATE = &H10000





Private Const OFN_SHAREFALLTHROUGH = 2
Private Const OFN_SHARENOWARN = 1
Private Const OFN_SHAREWARN = 0





'Constants for vFlags
'Only return computers. If the user selects anything
'other than a computer, the OK button is greyed out.
Private Const BIF_BROWSEFORCOMPUTER = &H1000
'Only return printers.'If the user selects anything
'other than a printer, the OK button is greyed out.
Private Const BIF_BROWSEFORPRINTER = &H2000
'Display files as well as folders.
Private Const BIF_BROWSEINCLUDEFILES = &H4000
'Do not include network folders below the domain level.
Private Const BIF_DONTGOBELOWDOMAIN = &H2
'Include an edit control so the user can type the name
'of an item.
Private Const BIF_EDITBOX = &H10
'Only return file system ancestors. If the user selects
'anything other than a file system ancestor, the OK
'button is greyed out.
Private Const BIF_RETURNFSANCESTORS = &H8
'Only return file system directories. If the user
'selects folders that are not part of the file system,
'the OK button is greyed out.
Private Const BIF_RETURNONLYFSDIRS = &H1
'Include a status area in the dialog box. 'The callback
'function can set the status text by sending messages
'to the dialog box.
''Private Const BIF_STATUSTEXT = &H4
'Use the new user-interface. 'Setting this flag provides
'the user with a larger dialog box that can be resized.
'It has several new capabilities including: drag and
'drop capability within the dialog box, reordering,
'context menus, new folders, delete, and other context
'menu commands. To use this flag, you must call
'OleInitialize or CoInitialize before calling
'SHBrowseForFolder.
Private Const BIF_USENEWUI = &H40
'If the user types an invalid name into the edit box,
'the browse dialog will call the application's
'BrowseCallbackProc with the BFFM_VALIDATEFAILED
'message. This flag is ignored if BIF_EDITBOX is not
'specified.
''Private Const BIF_VALIDATE = &H20





Public Const MAX_PATH = 260











Public Function OuvrirUnFichier(Handle As Long, _
Titre As String, _
TypeRetour As Byte, _
Optional TitreFiltre As String, _
Optional TypeFichier As String, _
Optional RepParDefaut As String) As String
'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
la boîte de dialogue de sélection d'un fichier.
'Explication des paramètres
'Handle = le handle de la fenêtre (Me.Hwnd)
'Titre = Titre de la boîte de dialogue
'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction)
'1 = Chemin complet + Nom du fichier
'2 = Nom fichier seulement
'TitreFiltre = Titre du filtre
'Exemple: Fichier Access
'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
'TypeFichier = Extention du fichier (Sans le .)
'Exemple: MDB
'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
'RepParDefaut = Répertoire d'ouverture par defaut
'Exemple: C:\windows\system32
'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application





Dim StructFile As OPENFILENAME
Dim sFiltre As String





'Construction du filtre en fonction des arguments spécifiés
If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
End If
sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)





'Configuration de la boîte de dialogue
With StructFile
.lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure
.hWndOwner = Handle 'Identification du handle de la fenêtre
.lpstrFilter = sFiltre 'Application du filtre
.lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254
.nMaxFile = 254 'Taille maximale du fichier
.lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254
.nMaxFileTitle = 254 'Taille maximale du nom du fichier
.lpstrTitle = Titre 'Titre de la boîte de dialogue
.Flags = OFN_HIDEREADONLY 'Option de la boite de dialogue
If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then
RepParDefaut = CurrentDb.name
PathStripPath (RepParDefaut)
.lpstrInitialDir = Left(CurrentDb.name, Len(CurrentDb.name) - Len(Mid$(RepParDefaut, 1, InStr(1, RepParDefaut, vbNullChar) - 1)))
Else: .lpstrInitialDir = RepParDefaut
End If
End With

If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné
Select Case TypeRetour
Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1))
Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1))
End Select
End If





End Function





Function EnregistrerUnFichier(Handle As Long, Titre As String, _
NomFichier As String, Chemin As String) As String





'EnregistrerUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
la boîte de dialogue d'enregistrement d'un fichier.
'Explication des paramètres
'Handle = le handle de la fenêtre (Me.Hwnd)
'Titre = Titre de la boîte de dialogue
'NomFichier = Nom par défaut du fichier à enregistrer
'Chemin = Chemin par défaut du fichier à enregistrer

Dim structSave As OPENFILENAME





With structSave
.lStructSize = Len(structSave)
.hWndOwner = Handle
.nMaxFile = 255
.lpstrFile = NomFichier & String$(255 - Len(NomFichier), 0)
.lpstrInitialDir = Chemin
.lpstrFilter = "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0) 'Définition du filtre (aucun)
.Flags = &H4 'Option de la boite de dialogue
End With





If (GetSaveFileName(structSave)) Then
EnregistrerUnFichier = Mid$(structSave.lpstrFile, 1, InStr(1, structSave.lpstrFile, vbNullChar) - 1)
End If





End Function





Public Function GetFolder(sTitle As String, Optional strDossier As String, Optional vFlags As Variant) As String
On Error GoTo GetFolder_Erreur
Dim lpIDList As Long
Dim sBuffer As String
Dim BInfo As BROWSEINFO

'If IsMissing(vFlags) Then vFlags = BIF_RETURNONLYFSDIRS + _
' BIF_DONTGOBELOWDOMAIN + BIF_EDITBOX + BIF_USENEWUI
vFlags = BIF_EDITBOX + BIF_USENEWUI
'Initialize Drag & Drop capabilities in the dialog.
Call OleInitialize(ByVal 0&)

If IsMissing(sTitle) Then sTitle = "Selectionner un répertoire" ' the dialog title

With BInfo
.hWndOwner = Access.hWndAccessApp
.pIDLRoot = 0&
.lpszTitle = lstrcat(sTitle, "")
.ulFlags = vFlags
End With

lpIDList = SHBrowseForFolder(BInfo)

If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)

If sBuffer "" Then GetFolder = sBuffer
Else
GetFolder = strDossier
End If

GetFolder_Exit:
Call OleUninitialize
Exit Function

GetFolder_Erreur:
JournalErreurs "cal_Config", "GetFolder"
Resume GetFolder_Exit:
End Function





Dans le code MonBouton_Click() tu mets:
- pour sélectionner un répertoire:
Me!mypath = GetFolder("Choisissez un répertoire", Nz(mypath, ""))

- pour ouvrir ou choisir un fichier:
Me!mypath = OuvrirUnFichier(Me.hWnd, "Sélectionnez un fichier", 1)
Messages postés
2
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
19 septembre 2011
0
Merci
fauc24 allo


Nz signifie koi?