![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: juin 2005
Messages: 435
|
Bonjour à tous,
J'utilise le code suivant pour récupérer le chamin de plsusieurs fichiers CSV. Lorsque je suis en mono selection, pas de problème. Par contre je ne sais pas comment faireen multi selection. Quelqu'un pourrait m'aider ? Merci d'avance. Code :
Option Compare Database 'Function Declarations Public Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Public 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 'Valeur des différent flags Public Const OFN_AllowMultiSelect = &H200 Public Const OFN_CreatePrompt = &H2000 Public Const OFN_EnableHook = &H20 Public Const OFN_EnableTemplate = &H40 Public Const OFN_EnableTemplateHandle = &H80 Public Const OFN_EXPLORER = &H80000 Public Const OFN_ExtensionDifferent = &H400 Public Const OFN_FileMustExist = &H1000 Public Const OFN_HideReadOnly = &H4 Public Const OFN_LongNames = &H200000 Public Const OFN_NoChangeDir = &H8 Public Const OFN_NoDeReferenceLinks = &H100000 Public Const OFN_NoLongNames = &H40000 Public Const OFN_NoNetWorkButton = &H20000 Public Const OFN_NoReadOnlyReturn = &H8000 Public Const OFN_NoTestFileCreate = &H10000 Public Const OFN_NoValiDate = &H100 Public Const OFN_OverWritePrompt = &H2 Public Const OFN_PathMustExist = &H800 Public Const OFN_ReadOnly = &H1 Public Const OFN_ShareAware = &H4000 Public Const OFN_ShareFallThrough = 2 Public Const OFN_ShareNoWarn = 1 Public Const OFN_ShareWarn = 0 Public Const OFN_ShowHelp = &H10 Public Const OFN_MULTI_SELECT As Boolean = True Public Const OFN_UNIQUE_SELECT As Boolean = False Code :
With Dialogue
.lStructSize = Len(Dialogue)
.lpstrFilter = "CSV Files" & Chr(0) & "*.csv" & Chr(0) & Chr(0)
.lpstrFile = Space(254)
.nMaxFile = 255
.lpstrFileTitle = Space(254)
.nMaxFileTitle = 255
'.lpstrInitialDir = prmDirInitial
.lpstrTitle = "Select CSV Files"
.flags = OFN_FileMustExist + _
OFN_HideReadOnly + _
OFN_PathMustExist + _
OFN_AllowMultiSelect + _
OFN_LongNames + _
OFN_EXPLORER
End With
|
|
|
|
|
|
#2 (permalink) |
|
Expert Confirmé Sénior
![]() |
salut,
l'utilisation du UBound du retour est la solution : voir http://excel.developpez.com/faq/inde...etOpenFileName
__________________
Piou-Piou Poussin Developpeur Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute |
|
|
|
|
|
#3 (permalink) | |
|
Membre éprouvé
![]() Date d'inscription: juin 2005
Messages: 435
|
Citation:
C'est pour cela que j'utilise les propriétés de OPENFILE |
|
|
|
|
|
|
#4 (permalink) |
|
Expert Confirmé Sénior
![]() |
tu sais que tu peux spécifier le répertoire initial dans ton GetOpenFileName
voir http://www.developpez.net/forums/d60...on-repertoire/
__________________
Piou-Piou Poussin Developpeur Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute |
|
|
|
|
|
#5 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: juin 2005
Messages: 435
|
J'ai trouvé le code suivant :
Code :
Sub ChoixFichier() 'La variable est de type Variant car elle peut prendre les valeurs: 'Booleenne: (Vrai/Faux) quand l'utilisateur ne sélectionne rien, ou annule l'opération. 'String: pour renvoyer le nom du fichier sélectionné. Dim Fichier As Variant 'Affiche la boîte de dialogue "Ouvrir" Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*") 'On sort si aucun fichier n'a été sélectionné ou si l'utilisateur 'a cliqué sur le bouton "Annuler", ou sur la croix de fermeture. If Fichier = False Then Exit Sub 'Affiche le chemin et le nom du fichier sélectionné. MsgBox Fichier End Sub Code :
Fichier = Application.GetOpenFilename
|
|
|
|
|
|
#7 (permalink) |
|
Expert Confirmé Sénior
![]() |
regarde la solution proposée par ledzepII dans la discussion postée plus haut
__________________
Piou-Piou Poussin Developpeur Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute |
|
|
|
|
|
#8 (permalink) |
![]() Date d'inscription: décembre 2005
Localisation: IdF
Messages: 2 157
|
Bonsoir,
le fonction api GetOpenFileName a deux formats de sortie selon que la boîte de dialogue est en mode "sélection simple" ou "sélection multiple". La sortie est toujours dans lpstrFile.
Code :
Sub TestGetOpenFileName_Multi() Dim Dialogue As OPENFILENAME Dim strFiles As String, p As Long, tblFiles() As String Dim i As Integer Dialogue.lStructSize = Len(Dialogue) Dialogue.hwndOwner = Access.hWndAccessApp Dialogue.lpstrFile = String(513, vbNullChar) ' Crée un buffer de 512 car Dialogue.nMaxFile = 512 Dialogue.lpstrFileTitle = String(513, vbNullChar) Dialogue.nMaxFileTitle = 512 Dialogue.lpstrInitialDir = "C:\Mes Documents" Dialogue.lpstrTitle = "Sélectionner fichier(s)" Dialogue.Flags = OFN_EXPLORER Or OFN_ALLOWMULTISELECT Or OFN_LONGNAMES Dialogue.lpstrFilter = "Access" & vbNullChar & "*.md*" & vbNullChar & _ "Excel" & vbNullChar & "*.xl*" & vbNullChar & _ "Tous" & vbNullChar & "*.*" & vbNullChar & _ vbNullChar OpenFile Dialogue ' Recherche fin de liste (deux vbNullChar successifs car lpstrFile a été ' rempli intialement avec 513 vbNullChar) p = InStr(1, Dialogue.lpstrFile, vbNullChar & vbNullChar) ' Enlève tous les vbNullChar inutiles en fin de chaîne If p > 1 Then strFiles = Left(Dialogue.lpstrFile, p - 1) Else strFiles = "" If Len(strFiles) > 0 Then ' Diviser Chaîne en Tableau tblFiles = Split(strFiles, vbNullChar) ' Si tableau a un seul Elt en mode Selection multiple ' on remplace le dernier \ de "CheminComplet\NomDichier" ' par vbNullChar et on re-éclate la chaîne délimitée en tableau If UBound(tblFiles) = 0 Then p = InStrRev(strFiles, "\") If p > 2 Then strFiles = Left(strFiles, p - 1) & vbNullChar & Mid(strFiles, p + 1, Len(strFiles) - p) tblFiles = Split(strFiles, vbNullChar) End If ' tblFiles(0) est toujours le chemin sans nom de fichier ' tblFiles(1), tblFiles(2), ... sont les noms de fichiers sans chemin For i = LBound(tblFiles) + 1 To UBound(tblFiles) ' Chemin + "\" + Nom de fichier Debug.Print tblFiles(0) & "\" & tblFiles(i) Next End If End Sub |
|
|
|
|
![]() |
![]() |
||
Récupérer le chemin de plusieurs fichiers
|
||
| Outils de la discussion | |
|
|