Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access

VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.

Réponse
 
Outils de la discussion
Vieux 02/09/2008, 12h07   #1 (permalink)
Membre éprouvé
 
Avatar de marsupilami34
 
Date d'inscription: juin 2005
Messages: 435
Par défaut Récupérer le chemin de plusieurs fichiers

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
marsupilami34 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 12h13   #2 (permalink)
Expert Confirmé Sénior
 
Avatar de jpcheck
 
Date d'inscription: juillet 2007
Localisation: RP
Âge: 24
Messages: 2 944
Envoyer un message via MSN à jpcheck
Par défaut

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
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 12h20   #3 (permalink)
Membre éprouvé
 
Avatar de marsupilami34
 
Date d'inscription: juin 2005
Messages: 435
Par défaut

Citation:
Envoyé par jpcheck Voir le message
salut,
l'utilisation du UBound du retour est la solution :
voir
http://excel.developpez.com/faq/inde...etOpenFileName
Ceci, c'est avec un getopenfile issu d'excel, si je me trompe. Ce qui ne convient pas trop car lorsque j'ouvre la fenêtre, je me retrouve tjs dans mes documents.

C'est pour cela que j'utilise les propriétés de OPENFILE
marsupilami34 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 12h28   #4 (permalink)
Expert Confirmé Sénior
 
Avatar de jpcheck
 
Date d'inscription: juillet 2007
Localisation: RP
Âge: 24
Messages: 2 944
Envoyer un message via MSN à jpcheck
Par défaut

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
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 13h51   #5 (permalink)
Membre éprouvé
 
Avatar de marsupilami34
 
Date d'inscription: juin 2005
Messages: 435
Par défaut

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
 
Mais il ne reconnait pas
Code :
 
    Fichier = Application.GetOpenFilename
marsupilami34 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 13h55   #6 (permalink)
Membre éprouvé
 
Avatar de marsupilami34
 
Date d'inscription: juin 2005
Messages: 435
Par défaut

C'est bon, il suffisait tout simplement de créer un objet excel.
Mais comment peut on définir un répertoire par défaut ?
marsupilami34 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 13h59   #7 (permalink)
Expert Confirmé Sénior
 
Avatar de jpcheck
 
Date d'inscription: juillet 2007
Localisation: RP
Âge: 24
Messages: 2 944
Envoyer un message via MSN à jpcheck
Par défaut

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
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/09/2008, 00h31   #8 (permalink)
Rédacteur
 
Avatar de LedZeppII
 
Date d'inscription: décembre 2005
Localisation: IdF
Messages: 2 157
Par défaut Réponse sur GetOpenFileName de l'api

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.
  • Sélection simple :
    C'est dans la faq
  • Selection multiple :
    lpstrFile contient une liste délimitée par le caractère null (vbNullChar).
    • Si un seul fichier sélectionné
      • 1er et seul élément = Chemin complet + Nom de fichier
        (Comme en sélection simple)
    • Si plus d'un fichier sélectionné
      • 1er élément = Chemin complet sans \ à la fin (Chemin seulement)
      • 2éme élement : 1er fichier (Nom seulement)
      • 3ème élément : 2ème fichier (nom seulement)
      • etc...
    La fonction Split permet de récupérer les divers éléments dans un tableau.
Voici un exemple de code pour illustrer ceci
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
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation
NEWS ACCESSF.A.Q AccessF.A.Q VBATutorielsSourcesOutilsLivresAccess TVAccess 2007

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide