moony01
Messages postés
21
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
27 mars 2007
18 janv. 2005 à 14:24
En consultant l'explorateur d'objet, j'ai trouvé la classe "FileDialog" dans la bibliothèque "Office".
J'apprécie beaucoup ton aide ainsi que ta patience, mais moi je suis pas patiente et je baisse rapidement les bras, et je laisse tomber.
C'est pourquoi j'ai pensé à autre chose, pourquoi ne pas utiliser un simple formulaire d'access où je place un controle treeview et un autre listview et je fais le lien entre les deux (je l'ai vu sur ce site : une source), le problème c'est que l'exemple que j'ai vu n'affiche que les lecteurs locaux et moi je veux afficher les lecteurs réseau.
J'ai essayé de réctifier me code mais ca plante.
Code Original:
Formulaire :
Option Compare Database
Dim LV1Path, 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"
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
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
Dim rep As String
Dim RetVal
'Construit le nom du répertoire
'GetRep Item 'donne rep, fic et LV1Path
fic = Item.Text
rep = LV1Path
If Right(rep, 1) <> "" Then rep = rep & ""
LV1Path = rep 'Stockage du nom du répertoire uniquement
rep = rep & fic
If Item.Icon <> "Dossier" Then
'MsgBox rep
'Shell (rep), vbMaximizedFocus
RetVal = ShellExecuteA(0, "Open", rep, "", "", 10)
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))
'Efface l'ancien ListView
Me.LV1.ListItems.Clear
'construit rep
'MsgBox rep
LV1Path = rep 'Stockage du nom du nouveau répertoire
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"
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
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
Module :
Option Compare Database
Public Declare Function ShellExecuteA Lib "shell32" (ByVal hwnd As Long, ByVal LPFile As String, ByVal PathFile As String, ByVal Other As String, ByVal Other2 As String, ByVal Param As Long) As Long
P.S :
TV1 : Treeview
LV1 : Listview