IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ MS-Access

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021 

 
OuvrirSommaireFichiers et répertoiresInformations

En passant soit par les API, soit par le FileSystemObject. En natif, VB ne donne accès qu'à la date de dernière modification, via la fonction FileDateTime(). Si vous choisissez de passer par les API, voici les déclarations nécessaires :

 
Sélectionnez
Private Const MAX_PATH = 260
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Private Const INVALID_HANDLE_VALUE = -1
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
                                       (ByVal lpFileName As String, _
                                       lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Declare Function FileTimeToSystemTime Lib "kernel32" _
                                              (lpFileTime As FILETIME, _
                                               lpSystemTime As SYSTEMTIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _
                                                 (lpFileTime As FILETIME, _
                                                  lpLocalFileTime As FILETIME) As Long

Les dates d'un fichier sont récupérées par la fonction FindFirstFile qui attend en paramètres le nom du fichier et une structure WIN32_FIND_DATA qui reçoit les informations obtenues. Les dates de création, de dernière modification et de dernier accès sont stockées respectivement dans les champs ftCreationTime, ftLastWriteTime et ftLastAccessTime, tous de type FILETIME. Pour avoir des dates sous une forme exploitable, quelques conversions sont nécessaires. Notre fonction FileTimeToDate() convertit une date de type FILETIME en type Date.

 
Sélectionnez
Private Function FileTimeToDate(ft As FILETIME) As Date

Dim datelocale As FILETIME, datesys As SYSTEMTIME

If FileTimeToLocalFileTime(ft, datelocale) = 0 Then Exit Function
If FileTimeToSystemTime(datelocale, datesys) = 0 Then Exit Function
FileTimeToDate = CDate(datesys.wDay & " " & datesys.wMonth & " " & datesys.wYear & " " & _
                       datesys.wHour & ":" & datesys.wMinute & ":" & datesys.wSecond)

End Function

La partie principale du code est assez simple :

 
Sélectionnez
Dim findData As WIN32_FIND_DATA, hFind As Long

hFind = FindFirstFile("c:\autoexec.bat", findData)
If hFind = INVALID_HANDLE_VALUE Then Exit Sub
FindClose hFind

MsgBox "Créé le : " & FileTimeToDate(findData.ftCreationTime)
MsgBox "Modifié le : " & FileTimeToDate(findData.ftLastWriteTime)
MsgBox "Accédé le : " & FileTimeToDate(findData.ftLastAccessTime)

Pour terminer, voici la version avec le FileSystemObject :

 
Sélectionnez
Dim fso As FileSystemObject, f As File

Set fso = New FileSystemObject

On Error GoTo fin
Set f = fso.GetFile("c:\autoexec.bat")
MsgBox "Créé le : " & f.DateCreated
MsgBox "Modifié le : " & f.DateLastModified
MsgBox "Accédé le : " & f.DateLastAccessed
Set f = Nothing

fin:
Set fso = Nothing
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

On peut utiliser la fonction Dir() :

 
Sélectionnez
Dim NomFichier as string
NomFichier=Dir("C:\NomDuRepertoire\*.txt")

Ici, NomFichier reçoit "UnFichier.txt" le premier fichier texte d'extension txt du répertoire.

Vous pouvez rappeler la ligne qui suit pour avoir le nom du fichier suivant :

 
Sélectionnez
NomFichier=Dir("C:\NomDuRepertoire\*.txt")

Lorsqu'il n'y aura plus de fichier d'extension txt, la variable NomFichier sera nulle.

Créé le 1er avril 2004  par Ludolitaliano
 
Sélectionnez
If Dir("c:\temp\Erreurs.tmp", vbHidden) <> "" Then
    ' Le fichier existe (vbHidden permet de le retrouver même s'il est caché)
End If
Créé le 1er janvier 2005  par nightfall

Lien : FAQ VB

Il suffit de référencer la bibliothèque Micosoft Scripting Runtime afin de pouvoir utiliser l'objet FileSystemObject.
Ensuite, on peut utiliser un code comme celui-ci :

 
Sélectionnez
Dim fso as new scripting.filesystemobject
Dim fld as scripting.folder

Set fld = fso.getfolder("c:\Chemin\EtNomDu\Dossier")
Msgbox fld.Size

Set fld = nothing
Set fso = nothing
Créé le 1er janvier 2005  par FRED.G
 
Sélectionnez
Debug.Print FileLen("nomdufichier") 'Affiche en octets la taille du fichier
Créé le 1er janvier 2005  par abelman

Lien : FAQ VB

Voici une méthode simple utilisant le FileSystemObject. Placez ce code dans un module :

 
Sélectionnez
Public Enum UniteMemoire
    octets = 1
    kiloOctets = 2
    megaOctets = 3
End Enum

Public Function TailleRepertoire(f As Folder, Optional unite As UniteMemoire = 1) As Long

Dim s As Long

s = f.Size
Select Case unite
    Case 2:
        TailleRepertoire = Int(s / 1024)
    Case 3:
        TailleRepertoire = Int(s / 1048576)
    Case Else:
        TailleRepertoire = s
End Select

End Function

Un exemple d'utilisation :

 
Sélectionnez
Private Sub Test()

Dim fs As FileSystemObject, f As Folder, strTaille As String

Set fs = New FileSystemObject
Set f = fs.GetFolder("c:\windows")

strTaille = Format(TailleRepertoire(f), "##,##0 octets") & vbCrLf & _
            Format(TailleRepertoire(f, kiloOctets), "##,##0 Ko") & vbCrLf & _
            Format(TailleRepertoire(f, megaOctets), "##,##0 Mo")
MsgBox strTaille

End Sub
Créé le 1er janvier 2005  par Team Access

Lien : FAQ VB

Pour obtenir les propriétés d'un PDF (nom, titre, etc.), il faut lire le fichier en mode binary. L'utilisation des RegExp permettra d'accéder aux informations recherchées. C'est ce que fait la fonction suivante :

 
Sélectionnez
Function GetPDFTitle(ByVal strFic As String, strObj As String) As String

Dim fic As Integer
Dim strExp As String
Dim strBuff As String * 1024
Dim i As Integer

Dim reg As VBScript_RegExp_55.RegExp
Dim Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection

Set reg = New VBScript_RegExp_55.RegExp

reg.Global = True
reg.MultiLine = False
reg.IgnoreCase = True
reg.Pattern = "/" & strObj & "\((.*)\)"
    
Reset

fic = FreeFile

Open strFic For Binary Access Read As #fic

Do While Not EOF(fic)
    Get #fic, , strBuff
    strExp = strExp & strBuff
    
    If reg.Test(strExp) = True Then
        Set Matches = reg.Execute(strExp)
        For Each Match In Matches
            GetPDFTitle = Match.SubMatches(0)
        Next Match
        Exit Function
    Else
        strExp = right(strExp, 1024)
    End If
Loop
Reset

Set Match = Nothing
Set Matches = Nothing
Set reg = Nothing

End Function

Exemple d'utilisation :

 
Sélectionnez
getpdftitle( "d:\temp\20060331164202.pdf", "Title")

Il est possible de remplacer title par un des champs suivants :

  • CreationDate
  • ModDate
  • Title
  • Creator
  • Author
Créé le 29 novembre 2006  par cafeine

Lien : Tutoriel : Le PDF gratuit pour Access
Lien : Les expressions rationnelles / régulières dans Access par la pratique

Au moyen d'une fonction qui tente d'ouvrir un fichier en écriture, en cas d'erreur retournée, cela indique que le fichier est déjà ouvert, dans le cas contraire, on considère qu'il est fermé.

 
Sélectionnez
Function IsFileOpen(ByVal strFic As String) As Boolean
    Dim fic As Integer
    On Error Resume Next
   
    fic = FreeFile()
    Open strFic For Input Access Read Lock Read Write As fic
   
    If Err.Number = 0 Then
        IsFileOpen = False
        Close fic
    Else
        IsFileOpen = True
    End If
End Function
Créé le 14 mai 2006  par cafeine

Voici une fonction à ajouter dans un nouveau module qui vous permettra de compter le nombre de fichiers d'une ou plusieurs extensions voulues dans répertoire donné :

 
Sélectionnez
Function nbfich(chemin As String, ParamArray termin() As Variant) As Long
Dim fichier As String
Dim extension As Variant
Dim compteur As Long
For Each extension In termin
   fichier = dir(chemin & "\*." & extension)
   Do Until fichier = ""
   compteur = compteur + 1
   fichier = dir
   Loop
Next extension
nbfich = compteur
End Function

Voici comment appeler cette fonction :

 
Sélectionnez
nbfich("c:\mesimages","gif","bmp","pcx")

Vous pouvez mettre une ou plusieurs extensions séparées par des virgules.

Créé le 31 mars 2008  par random

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 ni 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.