[vbscript] liste des fichiers, d'un répertoire, triés par date de modification (du + récent au + ancien)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 54 187 fois - Téléchargée 29 fois

Contenu du snippet

Ce script (VBS) a pour but d'afficher, dans une MsgBox, la liste des fichiers
d'un répertoire, triée par date de modification (du + récent au + ancien)

Translation de VB6 en VBS du code (réponse) proposé par "michelxld" (forum VBFrance)
http://www.vbfrance.com/infomsg/OUVERTURE-FICHIER-RECENT-2_720974.aspx (le 22/04/2006 06:19:25)
Un grand MERCI à "rvblog" sans lequel ce script (version VBS) ne serait pas fonctionnel !!!"

jean-marc

Source / Exemple :


Option Explicit

Const PathMDB   = "D:\Mes_scripts_VBFrance" 

MsgBox TriRepertoire,,"Enumération " & PathMDB
'---lister les fichiers du répertoire ---
Function TriRepertoire()
Dim fso, fichier, fileItem
Dim i, imax, z, valeur, cible, liste
Set fso = CreateObject("Scripting.FileSystemObject")

imax = 0
'début de l'énumération
For Each fichier In fso.GetFolder(PathMDB).Files
    Set fileItem = fso.GetFile(fichier)
    
    imax = imax + 1
    ReDim Preserve Tableau(2, imax)
    Tableau(1, imax) = Fichier.Name
    Tableau(2, imax) = FileItem.DateLastModified

    '---trier les fichiers par ordre décroissant de création ---
    Do
    Valeur = 0
    For i = 1 To imax - 1
    If CDate(Tableau(2, i)) < CDate(Tableau(2, i + 1)) Then
       For z = 1 To 2
           Cible = Tableau(z, i)
           Tableau(z, i) = Tableau(z, i + 1)
           Tableau(z, i + 1) = Cible
       Next
       Valeur = 1
    End If
    Next 
    Loop While Valeur = 1
    Set fileItem = nothing
Next

'Affichage du résultat classé
For i = 1 To imax
    liste = liste &vbTab& i &vbTab& Tableau(1, i) &Space(2)&vbTab&vbTab& Tableau(2, i) &vbCr
    'MsgBox liste,,i & " / " & imax &Space(3)& "Liste du répertoire"&Space(3)& PathMDB 
    If i = imax Then MsgBox  liste ,,"Liste du répertoire" &Space(3)& PathMDB 
Next
TriRepertoire = liste

Set fso = nothing 
End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
voilà la version corrigée :

dim imax

'....
'....


Function ShowFolderList()


Dim fso, fichier, strListe, r
Dim Valeur, z, Cible, liste
Set fso = CreateObject("Scripting.FileSystemObject")

imax = 0
For Each fichier In fso.GetFolder(strPath).Files
imax = imax + 1
ReDim Preserve Tableau(2, imax)
Tableau(1, imax) = fichier.Name
Tableau(2, imax) = fichier.DateLastModified

Valeur = 0
For i 1 To i (imax - 1)
If CDate(Tableau(2, imax)) < CDate(Tableau(2, imax + 1)) Then
For z = 1 To 2
Cible = Tableau(z, imax)
Tableau(z, imax) = Tableau(z, imax + 1)
Tableau(z, imax + 1) = Cible
Next
Valeur = 1
End If
Next
Next

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Affichage du résultat des fichiers triés par date de modification
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
liste = ""
For r = 1 To imax
liste = liste & vbCrLf & r & " " & Tableau(2, r) & " " & Tableau(1, r)
Next
liste = vbCrLf & "N° Date de modification Nom du fichier" & vbCrLf & liste
ShowFolderList = liste

Set fso = Nothing
End Function
Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
ok _ j'ai trouvé pkoi ça marche pas _ l'algo avait mal été retranscrit

il faut remplacer
For imax = 1 To imax - 1

par
For i 1 To i (imax - 1)

ensuite si vous utilisez path alors ce paramètre d'entrée est à supprimer puisqu'il ne sert jamais : strPath

ensuite si vous voulez lister le contenu du tableau dans un composant queconque ( combo , listbox etc ... ) il vaut mieux déclarer la variable imax en tant que variable globale ( la sortir de la fonction ShowFolderList
Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
tu peus montrer un exemple de projet qui fonctionne avec ce code stp _ car jai un gros doute là ...
Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
j'ai testé _ ça affiche dans le désordre (testé avec 30 images enregistrée sur le disque dur à 5 secondes d'intervalle chacune ) _ conclusion : ya un tres gros bug dans ce code
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
48
Salut JMO,

J'ai vu ce lien sur une page du forum alors je viens voir.
J'ai juste une petite suggestion. Pourquoi utiliser des variables qui n'ont pas forcément lieu d'être,
Je pense par exemple Dossier, à fic et a f.
Je m'explique
On peu très bien mettre
For Each fichiers In fso.GetFolder(Path).Files

je suis d'accord avec toi, c'est peu être moins lisible, et moins simple à comprendre.

En revanche ce dont je suis sur c'est que f ne sert strictement à rien puisque fichiers represente déjà f donc

Set f = fso.GetFile(fichiers) est inutile

Enfin ceci est juste mon avis (personnel qui n'engage que moi) :)

@ller à plus sur le forum.
Julien

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.