Voici le code qui permet d'ouvrir la fenêtre de sélection d'un fichier à importer :
' Début du code
Option Compare Database
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Boolean
'
Type MSA_OPENFILENAME
strFilter As String
lngFilterIndex As Long
strInitialDir As String
strInitialFile As String
strDialogTitle As String
strDefaultExtension As String
lngFlags As Long
strFullPathReturned As String
strFileNameReturned As String
intFileOffset As Integer
intFileExtension As Integer
End Type
'
Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As Long
nMaxCustrFilter 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
lCustrData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
'
Const ALLFILES = "All Files"
Private Sub OF_to_MSAOF(of As OPENFILENAME, msaof As MSA_OPENFILENAME)
' This sub converts from the Win32 structure to the Microsoft Access structure.
msaof.strFullPathReturned = Left(of.lpstrFile, InStr(of.lpstrFile, vbNullChar) - 1)
msaof.strFileNameReturned = of.lpstrFileTitle
msaof.intFileOffset = of.nFileOffset
msaof.intFileExtension = of.nFileExtension
'
End Sub
Private Sub MSAOF_to_OF(msaof As MSA_OPENFILENAME, of As OPENFILENAME)
' This sub converts from the Microsoft Access structure to the Win32 structure.
'
Dim strFile As String * 512
'
' Initialize some parts of the structure.
of.hwndOwner = Application.hWndAccessApp
of.hInstance = 0
of.lpstrCustomFilter = 0
of.nMaxCustrFilter = 0
of.lpfnHook = 0
of.lpTemplateName = 0
of.lCustrData = 0
'
of.lpstrFilter = msaof.strFilter
'
of.nFilterIndex = msaof.lngFilterIndex
of.lpstrFile = msaof.strInitialFile _
& String(512 - Len(msaof.strInitialFile), 0)
of.nMaxFile = 511
of.lpstrFileTitle = String(512, 0)
of.nMaxFileTitle = 511
of.lpstrTitle = msaof.strDialogTitle
of.lpstrInitialDir = msaof.strInitialDir
of.lpstrDefExt = msaof.strDefaultExtension
of.Flags = msaof.lngFlags
of.lStructSize = Len(of)
'
End Sub
Function GetFicName(stTypeofFile As String, stTitle As String) As String
' stTypeofFile : "MDB" = Base de données ACCESS, "TXT"... , "*" = Tout
' Renvoie le chemin choisi par l'utilisateur dans la boîte
' de dialogue Ouvrir fichier.
'stTitle : Légende de la fenêtre
Dim msaof As MSA_OPENFILENAME
Dim of As OPENFILENAME, intRet As Integer
Dim stParmFile As String
Dim strSearchPath As Variant
'stParmFile : légende type de fichiers
'strSearchPath : chemin du fichier
stTypeofFile = Left(stTypeofFile, 3)
stTypeofFile = UCase(stTypeofFile)
Select Case stTypeofFile
Case "MDB"
stParmFile = "Base de données (*.mdb)" & vbNullChar & "*.mdb" & vbNullChar
Case "TXT", "DTA"
stParmFile = "Fichiers texte (*." & stTypeofFile & " )" & vbNullChar & "*." & stTypeofFile & vbNullChar
Case "*", ""
stParmFile = ""
Case Else
stParmFile = "Fichiers " & stTypeofFile & " (*." & stTypeofFile & " )" & vbNullChar & "*." & stTypeofFile & vbNullChar
End Select
If stTitle = "" Then
msaof.strDialogTitle = "Sélection d'un fichier"
Else
msaof.strDialogTitle = stTitle
End If
msaof.strInitialDir = strSearchPath
msaof.strFilter = stParmFile & "Tous les fichiers (*.*)" & vbNullChar & "*.*" & vbNullChar
'
MSAOF_to_OF msaof, of
intRet = GetOpenFileName(of)
If intRet Then
OF_to_MSAOF of, msaof
End If
MSA_GetOpenFileName = intRet
' retrouve le fichier et son emplacement
GetFicName = Trim(msaof.strFullPathReturned)
'
End Function
' Fin du code
Ensuite sur le click de ton bouton tu utilises la fonction de cette manière :
Monfichier = getFicname("*.txt","Importer un fichier depuis Twixtel" )
il te renvoie le nom complet du fichier à importer. Il ne te reste plus qu'à importer ton fichier.