FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireFichiers et répertoiresRecherches et Localisation

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 :

 
Sélectionnez
  ' 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 à 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 
    ' 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 défaut
        ' Exemple: C:\windows\system32
        ' Si vous laissez l'argument vide, par défaut 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 :

 
Sélectionnez
MsgBox OuvrirUnFichier(Application.hwndAccessApp, "Parcourir", 1, "Fichier Word", "doc")
Créé le 25 octobre 2004  par shwin

Lien : Comment afficher la boîte de dialogue Enregistrer afin de récupérer le nom et le chemin du fichier sélectionné ?
Lien : Comment utiliser le contrôle Common Dialog pour récupérer le chemin d'un fichier ?
Lien : Comment avec l'API GetOpenFileNameA ouvrir plusieurs fichiers à la fois ?

Note : les arguments de cette fonction sont expliqués dans le code.
Code à placer dans un module :

 
Sélectionnez
  ' 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 à 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 :

 
Sélectionnez
MsgBox EnregistrerUnFichier(Me.hwnd, "Enregistrer sous", "Test.doc", "C:\")
Créé le 25 octobre 2004  par shwin

Lien : Comment afficher la boîte de dialogue Ouvrir afin de récupérer le nom et le chemin du fichier sélectionné ?
Lien : Comment utiliser le contrôle Common Dialog pour récupérer le chemin d'un fichier ?

Cette fonction reçoit le chemin complet d'un fichier en paramètre et renvoie le chemin du répertoire :

 
Sélectionnez
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
Créé le 1er janvier 2005  par Team Access

Lien : FAQ VB

 
Sélectionnez
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
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

En utilisant :

Créé le 25 octobre 2004  par Team Access

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, cliquez sur le dernier bouton More controls / Autres Contrôles. Dans la liste qui s'ouvre choisissez le contrôle Microsoft Common Dialog Control et placez-le sur le formulaire. Nous le nommerons Dlg.

Placez le code suivant dans un module (action clic du bouton Btn_Chercher) :

 
Sélectionnez
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

N.B. 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.

Créé le 25 octobre 2004  par olivier]

Lien : Comment afficher la boîte de dialogue Ouvrir afin de récupérer le nom et le chemin du fichier sélectionné ?
Lien : Comment afficher la boîte de dialogue Enregistrer afin de récupérer le nom et le chemin du fichier sélectionné ?

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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 trois lignes dans une procédure du module d'un formulaire :

 
Sélectionnez
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.

 
Sélectionnez
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.

Créé le 1er janvier 2005  par nightfall

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


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.

 
Sélectionnez

WshShell.SpecialFolders(repertoire)


repertoire, est une chaîne 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 :

 
Sélectionnez

Dim oWsh As New WshShell
    MsgBox oWsh.SpecialFolders("Desktop")
Mis à jour le 29 août 2006  par Team Access

Lien : Comment créer un raccourci ?
Lien : Comment déclarer une référence dans MS Access ?

Voici deux solutions possibles. Tout d'abord, les fonctions de l'API Windows :

 
Sélectionnez
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 trois fonctions de l'API Win32 renvoient respectivement les chemins complets des répertoires Windows, System, et Windows\Temp. Elles s'utilisent toutes les trois de la même manière :

 
Sélectionnez
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 :

 
Sélectionnez
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
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

 
Sélectionnez

MsgBox ParentDir(Application.CurrentDB.Name)

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

Autre possibilité :

 
Sélectionnez

CurrentProject.Path
Créé le 29 décembre 2003  par Tofalu

Lien : Comment isoler le répertoire dans lequel se trouve un fichier lorsque l'on a son chemin complet ?

Pour cela vous devez ajouter ces déclarations au début de votre module :

 
Sélectionnez
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.

 
Sélectionnez
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é :

 
Sélectionnez
MsgBox SelectFolder("Sélectionnez un répertoire :", Me.hWnd)


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

 
Sélectionnez

Private Const BIF_NEWDIALOGSTYLE As Long = &H40


Ensuite remplacer la ligne correspondante par ce code :

 
Sélectionnez

.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_NEWDIALOGSTYLE
Mis à jour le 14 octobre 2007  par nightfall, Arkham46

Lien : FAQ VB

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.

 
Sélectionnez
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 :

 
Sélectionnez
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
Créé le 19 août 2003  par Frank
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.