kciope
Messages postés20Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention 7 août 2009
-
6 août 2009 à 10:56
kciope
Messages postés20Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention 7 août 2009
-
7 août 2009 à 08:35
Bonjour,
J'ai fait un code qui scanne des dossiers et leur sous dossier pour les afficher dans une combobox, j'ai fait ca avec fso mais je trouve que c'est un peu long. Avez vous une idée pour faire autrement qu'avec fso (peut etre une api) ou alors mon code est surement optimisable.
Voici mon code
Dim result, i
Dim FSO, flder, ssflder, secondssfolder, dossier As Object
Dim folder() As String, sous_dossier_lot() As String, sous_dossier_lot_met() As String, secondsousfolder() As String, map As String
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 0
'Connection au map
map = Form3.lettrenetuse.Text & ":"
strremotpath = "\" & Form3.serveur.Text & "\dossier1"
strusername = "adope02" & Form3.txtcompte.Text
strpassword = Form3.txtmdp.Text
result = Net_Connect(map, strremotpath, strusername, strpassword)
'Parcours de la liste des dossiers------------------------------------------------------------------------
Set dossier = FSO.GetFolder(map)
For Each flder In dossier.SubFolders
folder = Split(flder, "")
If folder(1) <> "PLAN" Then ' on enleve de la recherche le dossier postes qui contient les vars
For Each ssflder In flder.SubFolders 'On incremente le tabeau
sous_dossier_lot = Split(ssflder, "")
If Right(ssflder, 3) = "aaa" Then
Form3.lst_lot.AddItem (folder(1) & " - " & sous_dossier_lot(2) & " - tra - H")
GoTo harmocom
Else
Form3.lst_lot.AddItem (folder(1) & " - " & sous_dossier_lot(2) & " - tra - C")
End If
Next
End If
harmocom:
Next
result = Net_Disconnect(map, 1, True)
Set flder = Nothing
'Connection au map
map = Form3.lettrenetuse.Text & ":"
strremotpath = "\" & Form3.serveur.Text & "\dossier2"
strusername = "adope02" & Form3.txtcompte.Text
strpassword = Form3.txtmdp.Text
result = Net_Connect(map, strremotpath, strusername, strpassword)
'Parcours de la liste des dossiers------------------------------------------------------------------------
Set dossier = FSO.GetFolder(map)
For Each flder In dossier.SubFolders
folder = Split(flder, "")
If folder(1) <> "PLAN" Then ' on enleve de la recherche le dossier postes qui contient les vars
For Each ssflder In flder.SubFolders 'On incremente le tabeau
sous_dossier_lot_met = Split(ssflder, "")
Select Case sous_dossier_lot_met(2)
Case Is = "ccc"
Form3.lst_lot.AddItem (folder(1) & " - tri- h")
GoTo harmomet
Case Is = "aaa"
Form3.lst_lot.AddItem (folder(1) & " - tri- H")
GoTo harmomet
Case Is = "bbb"
Form3.lst_lot.AddItem (folder(1) & " - tri- H")
GoTo harmomet
Case Else
Form3.lst_lot.AddItem (folder(1) & " - tri - h")
GoTo harmomet
End Select
Next
End If
harmomet:
Next
result = Net_Disconnect(map, 1, True)
MsgBox "c'est fait"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 août 2009 à 11:12
Salut
En effet, FSO est lent.
Sous VB6, il y a les commandes du langage :
[*] ChDrive
[*] ChDir
[*] Dir
avec les boucles Do-Loop classiques :
Dim sTemp As String
sTemp = Dir("C:\mon répertoire\*.*")
Do While sTemp <> ""
Debug.Print sTemp
sTemp = Dir
DoEvents
Loop
Voir le détail de l'instruction Dir dans l'aide et comment lister les fichiers et/ou les répertoires ("C:\mon répertoire\*." sans extension)
Attention : L'instruction Dir n'a qu'un seul buffer.
Il n'est donc pas possible d'imbriquer plusieurs recherches utilisant des Dir.
Pour éviter ce problème, voir cette source : REMPLACER DIR PAR UNE CLASSE DIR2 (AVANTAGES)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)