Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction GetOpenFileName d'Excel

2 réponses
Avatar
Toto
Bonjour,
Dans le cadre d'une macro VBA, j'utilise la fonction "GetOpenFileName" pour
permettre le choix d'un fichier dans un répertoire.
J'arrive bien à filtrer le type de fichier à afficher (extension Txt), mais
je souhaiterais également filtrer sur les fichiers dont le nom commence par
"Mar", et là je n'y arrive pas.
Merci par avance à ceux qui pourraient me mettre sur la voie.

Cordialement
GA

2 réponses

Avatar
michdenis
Bonjour,

Il y a ceci :

'Dans le haut d'un module standard, déclaration API
'---------------------------------------------------
Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

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 Function SelectAFile( _
Path As String, _
Optional Filtre As String = "*.*") As String
Dim OpenFile As OPENFILENAME, lReturn As Long, sFilter As String
OpenFile.lStructSize = Len(OpenFile)
sFilter = "Fichiers Excel (" & Filtre & ")" & Chr(0) & Filtre & Chr(0)
With OpenFile
.lpstrFilter = sFilter
.nFilterIndex = 1
.lpstrFile = String(257, 0)
.nMaxFile = Len(OpenFile.lpstrFile) - 1
.lpstrFileTitle = OpenFile.lpstrFile
.nMaxFileTitle = OpenFile.nMaxFile
.lpstrInitialDir = Path
.lpstrTitle = "Files to Open"
.flags = 0
End With
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
Else
SelectAFile = Trim(Left(OpenFile.lpstrFile, _
InStr(1, OpenFile.lpstrFile, Chr(0)) - 1))
End If
End Function

'---------------------------------------------------
Sub test()
Dim File_to_Open As Variant
Dim Path As String, Filtre As String

'Répertoire où soit se faire la recherche
Path = "c:"

'Pour le filtre, diverses combinaisons sont
'possibles en utilisant les jockers "*" et "?"
'dans le nom du fichier ou de l'extension
'Exemple :
'Tous les fichiers dont le nom débute
par "mar" ayant l'extension "xlsm"
Filtre = "Mar*.xlsm"

'Tous les fichiers dont le nom contient la chaîne
'de caractères "mar" ayant une extention xls, xlsx, xls,xlsb...
Filtre = "*Mar*.xls?"

File_to_Open = SelectAFile(Path, Filtre)
If File_to_Open <> "" Then
MsgBox File_to_Open
End If
End Sub
'--------------------------------------------




"Toto" a écrit dans le message de groupe de discussion :
4b431a27$0$934$
Bonjour,
Dans le cadre d'une macro VBA, j'utilise la fonction "GetOpenFileName" pour
permettre le choix d'un fichier dans un répertoire.
J'arrive bien à filtrer le type de fichier à afficher (extension Txt), mais
je souhaiterais également filtrer sur les fichiers dont le nom commence par
"Mar", et là je n'y arrive pas.
Merci par avance à ceux qui pourraient me mettre sur la voie.

Cordialement
GA
Avatar
Toto
Ok et merci pour la célérité de la réponse. Cela correspond bien à ce que je
recherchais.

Cdlt
GA
---------------------------------------------------------------------------------------------------
"michdenis" a écrit dans le message de news:

Bonjour,

Il y a ceci :

'Dans le haut d'un module standard, déclaration API
'---------------------------------------------------
Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

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 Function SelectAFile( _
Path As String, _
Optional Filtre As String = "*.*") As String
Dim OpenFile As OPENFILENAME, lReturn As Long, sFilter As String
OpenFile.lStructSize = Len(OpenFile)
sFilter = "Fichiers Excel (" & Filtre & ")" & Chr(0) & Filtre & Chr(0)
With OpenFile
.lpstrFilter = sFilter
.nFilterIndex = 1
.lpstrFile = String(257, 0)
.nMaxFile = Len(OpenFile.lpstrFile) - 1
.lpstrFileTitle = OpenFile.lpstrFile
.nMaxFileTitle = OpenFile.nMaxFile
.lpstrInitialDir = Path
.lpstrTitle = "Files to Open"
.flags = 0
End With
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
Else
SelectAFile = Trim(Left(OpenFile.lpstrFile, _
InStr(1, OpenFile.lpstrFile, Chr(0)) - 1))
End If
End Function

'---------------------------------------------------
Sub test()
Dim File_to_Open As Variant
Dim Path As String, Filtre As String

'Répertoire où soit se faire la recherche
Path = "c:"

'Pour le filtre, diverses combinaisons sont
'possibles en utilisant les jockers "*" et "?"
'dans le nom du fichier ou de l'extension
'Exemple :
'Tous les fichiers dont le nom débute
par "mar" ayant l'extension "xlsm"
Filtre = "Mar*.xlsm"

'Tous les fichiers dont le nom contient la chaîne
'de caractères "mar" ayant une extention xls, xlsx, xls,xlsb...
Filtre = "*Mar*.xls?"

File_to_Open = SelectAFile(Path, Filtre)
If File_to_Open <> "" Then
MsgBox File_to_Open
End If
End Sub
'--------------------------------------------




"Toto" a écrit dans le message de groupe de discussion :
4b431a27$0$934$
Bonjour,
Dans le cadre d'une macro VBA, j'utilise la fonction "GetOpenFileName"
pour
permettre le choix d'un fichier dans un répertoire.
J'arrive bien à filtrer le type de fichier à afficher (extension Txt),
mais
je souhaiterais également filtrer sur les fichiers dont le nom commence
par
"Mar", et là je n'y arrive pas.
Merci par avance à ceux qui pourraient me mettre sur la voie.

Cordialement
GA