Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Afficher la boîte de dialogue ouvrir afin de récupérer le nom et le chemin du fichier sélectionné
auteur : shwin
Cette fonction propose plusieurs arguments utiles pour personnaliser votre boîte de dialogue, ils sont expliqués dans le code.
Code à placer dans un module :
  '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

 '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

 '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


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 
Exemple pour appeler la fonction depuis le code d'un formulaire :
MsgBox OuvrirUnFichier(Me.Hwnd, "Parcourir", 1, "Fichier Word", "doc")
lien : Afficher la boîte de dialogue Enregistrer sous afin de récupérer le nom et le chemin du fichier sélectionné
lien : Utilise le contrôle Common Dialog pour récupérer le chemin d'un fichier
lien : faq Comment avec l'API GetOpenFileNameA ouvrir plusieurs fichiers à la fois ?

Afficher la boîte de dialogue Enregistrer sous afin de récupérer le nom et le chemin du fichier sélectionné
auteur : shwin
Note : Les arguments de cette fonction sont expliqués dans le code.
Code à placer dans un module :
  'Déclaration de l API
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
        Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) _
        As Long

 '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


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
Exemple pour appeler la fonction depuis le code d'un formulaire :
MsgBox EnregistrerUnFichier(Me.hwnd, "Enrégistrer sous", "Test.doc", "C:\")
lien : Afficher la boîte de dialogue ouvrir afin de récupérer le nom et le chemin du fichier sélectionné
lien : Utilise le contrôle Common Dialog pour récupérer le chemin d'un fichier

Comment récupérer le répertoire d'un fichier à partir de son chemin complet ?
auteur : Team Access
Cette fonction reçoit le chemin complet d'un fichier en paramètre et renvoie le chemin du répertoire :
Public Function ExtractFolder(ByVal sFullPath As String) As String

If Right(sFullPath, 1) = "\" Then
    ExtractFolder = sFullPath
Else
    ExtractFolder = Left(sFullPath, InStrRev(sFullPath, "\"))
End If

End Function
lien : FAQ VB

Comment obtenir le contenu d'un répertoire ?
auteur : Romain Puyfoulhoux
Dim rep As String
'obtient le premier fichier ou répertoire qui est dans "c:\"
rep = Dir("c:\*.*", vbDirectory)
'boucle tant que le répertoire n'a pas été entièrement parcouru
Do While (rep <> "")
    'teste si c'est un fichier ou un répertoire
    If (GetAttr("c:\" & rep) And vbDirectory) = vbDirectory Then
        MsgBox "Répertoire " & rep
    Else
        MsgBox "Fichier " & rep
    End If
    'passe à l'élément suivant
    rep = Dir
Loop
lien : FAQ VB

Plusieurs façons de parcourir mon disque dur et de récupérer le chemin du fichier sélectionné
auteur : Team Access
En utilisant :


Utilise le contrôle Common Dialog pour récupérer le chemin d'un fichier
auteur : olivier]
Ouvrir un module (page de code) :
- menu Tools (Outils)
- item References (Références)
- Cochez la référence Microfoft Common Dialog Control

Dans la barre d'outils, click sur le dernier bouton More controls / Autres Contrôles. Dans la liste qui s'ouvre choisissez le control Microsoft Common Dialog Control et placez le sur le formulaire. Nous le nommons Dlg.

Placez le code suivant dans un module (action click du bouton Btn_Chercher) :
Private Sub Btn_Chercher_Click()
    With dlg
        .DialogTitle = "selectionner un fichier" 'titre de la boite
        .FileName="*.txt" 'on recherche un fichier d'extension txt
        .initDir="c:\" 'repertoire par defaut
        .CancelError = false 'pour ne pas partir en erreur si on click sur annuler
        .ShowOpen
    End With
    'txtPath est la zone de texte recevant le chemin du fichier
    txtPath = dlg.FileName 
End Sub
NB : Il se peut que vous n'ayez pas la licence nécessaire à l'utilisation de ce contrôle. Dans ce cas, essayez les autres méthodes proposées dans la FAQ.

lien : Afficher la boîte de dialogue ouvrir afin de récupérer le nom et le chemin du fichier sélectionné
lien : Afficher la boîte de dialogue Enregistrer sous afin de récupérer le nom et le chemin du fichier sélectionné

Comment obtenir les chemins complets des répertoires spéciaux ?
auteur : Romain Puyfoulhoux
Pour récupérer les chemins complets des répertoires du Bureau, de Mes Documents, ou du menu Démarrer, vous pouvez utiliser la fonction SHGetSpecialFolderPath de l'Api Windows :
Private Declare Function SHGetSpecialFolderPath Lib "shell32.dll" Alias "SHGetSpecialFolderPathA" _
                                                (ByVal hwndOwner As Long, ByVal lpszPath As String, _
                                                 ByVal nFolder As Long, ByVal fCreate As Long) As Long
Description des paramètres :
hwndOwner : handle de la fenêtre à utiliser si une boîte de dialogue doit être affichée
lpszPath : chaîne de caractères recevant le chemin complet du répertoire demandé
nFolder : nombre indiquant le répertoire demandé
fCreate : si la valeur passée à ce paramètre n'est pas nulle, le répertoire est créé, s'il n'existe pas déjà

Sous Windows NT 4.0 et Windows 95, cette fonction n'est disponible que si Internet Explorer 4.0 ou supérieur est installé. Voyons comment l'utiliser :
Public Function GetSpecialFolderPath(dossier As Long, hwnd As Long)

Dim buffer As String

buffer = Space(256)
SHGetSpecialFolderPath hwnd, buffer, dossier, 0
GetSpecialFolderPath = Left(buffer, InStr(buffer, Chr(0)) - 1)

End Function
Pour tester cette fonction, placez par exemple ces 3 lignes dans une procédure du module d'une form :
MsgBox GetSpecialFolderPath(0, Me.hwnd)   'répertoire du Bureau
MsgBox GetSpecialFolderPath(5, Me.hwnd)   'répertoire Mes Documents
MsgBox GetSpecialFolderPath(11, Me.hwnd)  'répertoire du menu Démarrer
Les réfractaires aux Api Windows préfèreront utiliser le Windows Script Host Object Model en ajoutant wshom.ocx aux références du projet. Les chemins complets des répertoires spéciaux sont dans la collection SpecialFolders de l'objet WshShell.
Dim Wsh As WshShell

Set Wsh = New WshShell

MsgBox Wsh.SpecialFolders.Item("Desktop")      'répertoire du Bureau
MsgBox Wsh.SpecialFolders.Item("MyDocuments")  'répertoire Mes Documents
MsgBox Wsh.SpecialFolders.Item("StartMenu")    'répertoire du menu Démarrer

Set WshShell = nothing

End Sub
Avec les anciennes versions de Wshom.ocx, la classe WshShell s'appelle IWshShell_Class.

lien : FAQ VB
lien : faq Comment ouvrir un fichier HTML, Word, PDF ou autre en utilisant l'exécutable associé ?
lien : faq Que faire quand l'API ShellExecute ne fonctionne pas ?

Comment connaître le chemin vers les répertoires spéciaux ?
auteur : Team Access

La référence "Windows Script Host Object Model" (wshom.ocx) propose un objet permettant d'accéder aux répertoires spéciaux d'un ordinateur.

WshShell.SpecialFolders(repertoire)

repertoire, est une chaine de caractères définissant quel répertoire atteindre.


Liste des types de répertoires :

  • AllUsersDesktop : D:\Documents and Settings\All Users\Bureau
  • AllUsersStartMenu : D:\Documents and Settings\All Users\Menu Démarrer
  • AllUsersPrograms : D:\Documents and Settings\All Users\Menu Démarrer\Programmes
  • AllUsersStartup : D:\Documents and Settings\All Users\Menu Démarrer\Programmes\Démarrage
  • Desktop : D:\Documents and Settings\Christophe\Bureau
  • AppData : D:\Documents and Settings\Christophe\Application Data
  • PrintHood : D:\Documents and Settings\Christophe\Voisinage d'impression
  • Templates : D:\Documents and Settings\Christophe\Modèles
  • Fonts : D:\WINDOWS\Fonts
  • NetHood : D:\Documents and Settings\Christophe\Voisinage réseau
  • StartMenu : D:\Documents and Settings\Christophe\Menu Démarrer
  • SendTo : D:\Documents and Settings\Christophe\SendTo
  • Recent : D:\Documents and Settings\Christophe\Recent
  • Startup : D:\Documents and Settings\Christophe\Menu Démarrer\Programmes\Démarrage
  • Favorites : D:\Documents and Settings\Christophe\Favoris
  • MyDocuments : E:\
  • Programs : D:\Documents and Settings\Christophe\Menu Démarrer\Programmes

Exemple :

Dim oWsh As New WshShell
    MsgBox oWsh.SpecialFolders("Desktop")
lien : Comment créer un raccourci ?
lien : Comment déclarer une référence dans MS-Access ?

Comment récupérer les chemins complets des répertoires Windows, System, et Windows\Temp
auteur : Romain Puyfoulhoux
Voici deux solutions possibles. Tout d'abord, les fonctions de l'API Windows :
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" _
    (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" _
    (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
    (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Ces 3 fonctions de l'API Win32 renvoient respectivement les chemins complets des répertoires Windows, System, et Windows\Temp. Elles s'utilisent toutes les 3 de la même manière :
Function GetWindowsDir() As String

Dim buffer As String * 256
Dim Length As Long
Length = GetWindowsDirectory(buffer, Len(buffer))
GetWindowsDir = Left(buffer, Length)

End Function

Function GetSystemDir() As String

Dim buffer As String * 256
Dim Length As Long
Length = GetSystemDirectory(buffer, Len(buffer))
GetSystemDir = Left(buffer, Length)

End Function

Function GetTempDir() As String

Dim buffer As String * 256
Dim Length As Long
Length = GetTempPath(Len(buffer), buffer)
GetTempDir = Left(buffer, Length)

End Function
Une autre manière de procèder est de faire appel au FileSystemObject :
Dim fso As FileSystemObject

Set fso = New FileSystemObject

MsgBox fso.GetSpecialFolder(0)   'répertoire windows
MsgBox fso.GetSpecialFolder(1)   'répertoire system
MsgBox fso.GetSpecialFolder(2)   'répertoire temp

Set fso = Nothing

End Sub
lien : FAQ VB

Comment récupérer le répertoire courant (où se trouve la base de données) ?
auteur : Tofalu

MsgBox ParentDir(Application.CurrentDB.Name)
En fait, Application.CurrentDB.Name fournit le chemin complet avec le nom de la base. La fonction ParentDir() sert en fait à soustraire le nom de la base du chemin d'accès.

Autre possibilité :

CurrentProject.Path
lien : Comment isoler le répertoire dans lequel se trouve un fichier lorsqu'on a son chemin complet ?

Comment ouvrir une fenêtre de sélection de répertoire ?
auteurs : Romain Puyfoulhoux, Arkham46
Pour cela vous devez ajouter ces déclarations au début de votre module :
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2

Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
    ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _ 
    ByVal lpString2 As String) As Long

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
La fonction suivante ouvre la fenêtre de sélection de répertoire standard de Windows et renvoie le chemin du répertoire
sélectionné. Les paramètres attendus sont le titre à afficher et l'identifiant de la fenêtre parente.
Public Function SelectFolder(Titre As String, Handle As Long) As String

Dim lpIDList As Long
Dim strBuffer As String
Dim strTitre As String
Dim tBrowseInfo As BrowseInfo

strTitre = Titre
With tBrowseInfo
    .hWndOwner = Handle
    .lpszTitle = lstrcat(strTitre, "")
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)

If (lpIDList) Then
    strBuffer = String(260, vbNullChar)
    SHGetPathFromIDList lpIDList, strBuffer
    SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
End If

End Function
Cette ligne fait appel à la fonction écrite ci-dessus pour ouvrir la fenêtre de sélection de répertoire et afficher
le répertoire sélectionné :
MsgBox SelectFolder("Sélectionnez un répertoire :", Me.hWnd)

Il est posssible d'ajouter dans la boîte de dialogue un bouton permettant la création
d'un nouveau dossier.
il faut ajouter cette constante :

Private Const BIF_NEWDIALOGSTYLE As Long = &H40

Ensuite remplacer la ligne correspondante par ce code :

.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_NEWDIALOGSTYLE
lien : FAQ VB

Comment isoler le répertoire dans lequel se trouve un fichier lorsqu'on a son chemin complet ?
auteur : Frank
On envoie en entrée de cette fonction le nom complet d'un fichier et la fonction renvoie le répertoire dans lequel se trouve le fichier.
Function ParentDir(ByVal str As String) As String 
Dim i as Integer

 ' repère le dernier "\" 
If Right(str, 1) = "\" Then str = Left(str, Len(str) - 1) 

 ' maintenant regarde le précédent 
For i = Len(str) To 1 Step -1 
    If Mid(str, i, 1) = "\" Then 
        Debug.Print "Fichier " & Right(str, Len(str) - i) 
        str = Left(str, i) 
        GoTo fin01 
    End If 
Next i 

fin01: 
    Debug.Print "Répertoire " & str 
    ParentDir = str 
End Function
Solution possible depuis MS-Access 2000 :
Function Path(ByVal sFullPath As String) As String
    If Right(sFullPath,1)="\" then
        Path=sFullPath
    Else
        Path=Left(sFullPath, InStrRev(sFullPath,"\"))
    End If
End Function

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com