Comme le titre l'indique, c'est un explorateur de fichiers sous access gérer par un treeview, un listview et une imageList. Ce programme permet de visualiser l'arborescence des fichiers de vos disques ainsi que de les lancer grâce à la lib ShellExecuteA.
Je n'ai pas intégré les lecteurs réseaux car si vous n'avez pas accès à certains répertoires, il y a une erreur qui se produit. Si vous êtes administrateur du réseau, vous n'avez qu'à enlever le "if (d.DriteType <> 3)" ... pour pouvoir les voir.
Source / Exemple :
Option Compare Database
Dim LV1Path, rep, fic, FicOld As String
Dim Same As Boolean
Dim Ind As Integer
Private Sub Form_Load()
Dim fs As Object
Dim dc, d
Dim str, n, img As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
For Each d In dc
If (d.IsReady) Then
str = fs.GetDrive(d.Driveletter).RootFolder
Else:
GoTo suite2
End If
Select Case d.DriveType
Case 0: n = "Inconnu"
Case 1: n = "Amovible"
Case 2:
n = d.VolumeName
img = "HDD"
Case 3:
n = d.ShareName
img = "DR"
Case 4:
n = "CD-ROM"
img = "CD"
Case 5: n = "Disque RAM"
End Select
n = n & " (" & d.Driveletter & ":)"
'Création des noeuds racines des disques)
If (d.DriveType <> 3) Then
Me.TV1.Nodes.Add , , str, n, img
AjouteRep str
End If
suite2:
Next
End Sub
Private Sub AjouteRep(ByVal str As String, Optional ByRef Node As Object = Nothing)
Dim fs, f, fld, fld1, sf
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(str)
Set sf = f.SubFolders
For Each fld In sf
'Évite les répertoire qui font planter la fonction
If fld.Name = "RECYCLER" Then GoTo suite
If fld.Name = "System Volume Information" Then GoTo suite
If fld.Name = "DO_NOT_REMOVE_NtFrs_PreInstall_Directory" Then GoTo suite
'ajoute les dossier
If f.IsRootFolder = True Then
Me.TV1.Nodes.Add str, tvwChild, fld.Path, fld.Name, "Dossier"
'Ajoute les sous dossiers
AjouteRep fld.Path
Else:
Me.TV1.Nodes.Add str, tvwChild, fld.Path, fld.Name, "Dossier"
AjouteRep fld.Path
End If
suite:
Next
End Sub
'Gestion des clics dans le TreeView
Private Sub TV1_NodeClick(ByVal Node As Object)
Dim li As ListItem
Dim li2 As ListItem
Dim fld
Dim fic, rep, img As String
Dim f
Dim fldl
Dim message As Boolean 'sera utile pour filtrer des dossiers à ne pas afficher
Dim fs As Object
Dim a As Integer
a = 2
Ind = Node.Index
Me.LV1.ListItems.Clear
'construit le nom du répertoire
While (Mid(Node.FullPath, a, 1) <> ":")
a = a + 1
Wend
rep = Mid(Node.FullPath, a - 1, 2) & Mid(Node.FullPath, a + 2)
'MsgBox rep
If Right(rep, 1) <> "\" Then rep = rep & "\"
LV1Path = rep
Set fs = CreateObject("Scripting.FileSystemObject")
Set fld = fs.GetFolder(rep)
message = False
'ajoute les éléments dossier a LV1 sans prendre en compte la poubelle et l'information de volume systeme.
For Each fldl In fld.SubFolders
If fldl.Name = "RECYCLER" Then message = True
If fldl.Name = "System Volume Information" Then message = True
'MsgBox fldl.Name
If message = False Then
Me.LV1.ListItems.Add , , fldl.Name, "Dossier", "Dossier"
'li.ListSubItems.Add Key:="size", Text:=fldl.Size
'li.ListSubItems.Add Key:="date", Text:=fldl.DateLastModified
End If
Next
'ajouter les élément fichier a LV1
For Each f In fld.Files
'On affecte l'image en fonction du type du fichier
img = FindImg(f.Name)
Me.LV1.ListItems.Add , , f.Name, img, img
'Me.LV1.ListSubItems.Add Key:="size", Text:=f.Size
'li2.ListSubItems.Add Key:="date", Text:=f.DateLastModified
Next
End Sub
'Gestion des clics dans la listeView
Private Sub LV1_ItemClick(ByVal Item As Object)
Dim fs As Object
Dim f, fldl, fld
Dim message As Boolean
'Construit le nom du répertoire
GetRep Item 'donne rep, fic et LV1Path
If Item.Icon <> "Dossier" Then
MsgBox "Vous ne pouvez pas lancer les fichiers! :'("
'If (Right(fic, 3) = "exe") Then
' Shell (rep), vbMaximizedFocus
'End If
Exit Sub 's'il ne sagit pas d'un dossier on sort de la sub
End If
'Récupération de l'index du node correspondant dans le treeview
Ind = Me.TV1.Nodes(Ind).Child.FirstSibling.Index
While Me.TV1.Nodes(Ind).Text <> Item.Text
Ind = Me.TV1.Nodes(Ind).Next.Index
Wend
TV1_Expand (Me.TV1.Nodes(Ind))
Me.LV1.ListItems.Clear
'construit rep
MsgBox rep
Set fs = CreateObject("Scripting.FileSystemObject")
Set fld = fs.GetFolder(rep)
message = False
'Ajoute les éléments dossier à LV1 sans prendre en compte la poubelle et l'information du volume systeme.
For Each fldl In fld.SubFolders
If fldl.Name = "RECYCLER" Then message = True
If fldl.Name = "System Volume Information" Then message = True
If message = False Then
Me.LV1.ListItems.Add , , fldl.Name, "Dossier", "Dossier"
'li.ListSubItems.Add Key:="size", Text:=fldl.Size
'li.ListSubItems.Add Key:="date", Text:=fldl.DateLastModified
End If
Next
'Ajouter les élément fichier à LV1
For Each f In fld.Files
img = FindImg(f.Name)
Me.LV1.ListItems.Add , , f.Name, img, img
'li2.ListSubItems.Add Key:="size", Text:=f.Size
'li2.ListSubItems.Add Key:="date", Text:=f.DateLastModified
Next
End Sub
Public Sub TV1_Expand(ByVal Node As Object)
If (Node.Parent Is Nothing = False) Then 'S'il s'agit des lecteurs on ne change pas l'image
Node.Image = "DossierOpen"
End If
End Sub
Public Sub TV1_Collapse(ByVal Node As Object)
If (Node.Parent Is Nothing = False) Then
Node.Image = "Dossier"
End If
End Sub
Private Function FindImg(str As String) As String
Select Case Right(str, 3)
Case Is = "txt": FindImg = "Txt"
Case Is = "doc": FindImg = "Doc"
Case Is = "zip": FindImg = "Zip"
Case Is = "rar": FindImg = "Zip"
Case Is = "exe": FindImg = "Exe"
Case Is = "mdb": FindImg = "Mdb"
Case Is = "xls": FindImg = "Xls"
Case Is = "ppt": FindImg = "Ppt"
Case Is = "tml": FindImg = "IE"
Case Is = "htm": FindImg = "IE"
Case Is = "wav": FindImg = "Mp3"
Case Is = "mp3": FindImg = "Mp3"
Case Is = "dll": FindImg = "Dll"
Case Is = "ini": FindImg = "Ini"
Case Is = "bmp": FindImg = "Img"
Case Is = "jpg": FindImg = "Img"
Case Is = "gif": FindImg = "Img"
Case Else: FindImg = "Unk"
End Select
End Function
Public Function GetRep(ByVal Item As Object) As String
'Construction le nom du répertoire
fic = Item.Text 'Nom du fichier cliqué
rep = LV1Path
If Right(rep, 1) <> "\" Then rep = rep & "\"
rep = rep & fic
LV1Path = rep
End Function
Conclusion :
Pas mal si on veut voir comment marche les TV et LV, mais il est plus simple de faire un activeX en VB à partir des DirListBox & cie et de les appliquer sous access...
De plus, ça ira plus vite qu'un Treeview...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.