trier alphabétiquement les fichiers d'un répertoire

test_2be

XLDnaute Nouveau
Bonjour,
Pourriez vous me dire s'il est possible de trier aplhabétiquement les fichiers d'un répertoire donné svp ?
Exemple :
J'ai un répertoire C:\Temp dans lequel j'ai des fichiers sous le format
maison1_30012010
maison1_25012010
maison1_01062009
maison1_01012009
maison1_02012010

Je voudrais pouvoir les trier du plus vieux au plus récent (pas besoin de se baser sur la date de créartion puisque la date se trouve dans le nom. Donc un tri aplha/numérique suffit) et ensuite ouvrir le plus ancien et le plus récent
Donc les fichiers suivants : maison1_01012009 et maison1_30012010
Est-ce que c'est possible avec vba ?
Merci
A+
 

porcinet82

XLDnaute Barbatruc
Re : trier alphabétiquement les fichiers d'un répertoire

Salut,

Il te suffit de décomposer puis d'extraire la date du nom de fichier dans une seconde colonne (avec la fonction split par exemple ou si le début de ton fichier comporte toujours le même nombre de lettre, un simple mid suffit), d'appliquer le tri sur cette date puis de faire ouvrir tes fichiers.
Fais quelques essais et montre nous ce que tu as fait et ou tu bloques (si c'est le cas) pour qu'on te file un coup de main.

@+
 

david84

XLDnaute Barbatruc
Re : trier alphabétiquement les fichiers d'un répertoire

Bonjour,
le plus simple est que tu nous communiques un fichier exemple avec un exemple explicite, le résultat attendu et quelques mots d'explications permettant de comprendre ton raisonnement.
A+
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : trier alphabétiquement les fichiers d'un répertoire

re bonjour,
bonjour porcinet82, david84,

Voici un essai avec une macro. J'ai supposé que les fichiers n'avaient pas d'extension :
VB:
Public Sub Test()
'déclaration des variables
Dim myFso As Object, leDossier As Object, leFichier As Object
Dim pathDossier As String, tabFichiers() As String, iFichier As Long, jFichier As Long
Dim tmp As String, dateFormatee As String, pathFichierVieux As String, pathFichierRecent As String
    
    'initialiser le path du dossier
    pathDossier = "C:\Temp"
    
    'récupérer le dossier
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set leDossier = myFso.GetFolder(pathDossier)
    
    'initialiser le tableau (qui contiendra le chemin des fichiers)
    ReDim tabFichiers(1 To leDossier.Files.Count, 1 To 2)
    
    'boucler sur tous les fichiers
    For Each leFichier In leDossier.Files
        'si le nom du fichier se fini bien par 8 chiffres
        If IsNumeric(Right(leFichier.Name, 8)) Then
            'reformater la date
            tmp = Right(leFichier.Name, 8)
            dateFormatee = Mid(tmp, 5, 4) & Mid(tmp, 3, 2) & Mid(tmp, 1, 2)
            'ajouter le path du fichier dans le tableau
            iFichier = iFichier + 1
            tabFichiers(iFichier, 1) = leFichier.Path
            'ajouter la date reformatée
            tabFichiers(iFichier, 2) = dateFormatee
        End If
    Next leFichier
    
    'trier par ordre alphabétique le tableau
    For iFichier = LBound(tabFichiers, 1) To UBound(tabFichiers, 1) - 1
        For jFichier = iFichier + 1 To UBound(tabFichiers, 1)
            If tabFichiers(iFichier, 2) > tabFichiers(jFichier, 2) Then
                tmp = tabFichiers(jFichier, 2)
                tabFichiers(jFichier, 2) = tabFichiers(iFichier, 2)
                tabFichiers(iFichier, 2) = tmp
                tmp = tabFichiers(jFichier, 1)
                tabFichiers(jFichier, 1) = tabFichiers(iFichier, 1)
                tabFichiers(iFichier, 1) = tmp
            End If
        Next jFichier
    Next iFichier
    
    'récupérer le path du fichier le plus vieux et du fichier le plus récent
    pathFichierVieux = tabFichiers(LBound(tabFichiers, 1), 1)
    pathFichierRecent = tabFichiers(UBound(tabFichiers, 1), 1)
End Sub
a+
 
Dernière édition:

test_2be

XLDnaute Nouveau
Re : trier alphabétiquement les fichiers d'un répertoire

Salut Mromain,

En effet, ta remarque est correcte je n'y avais pas pensé !!! Zut alors.
Est-ce qu'on sait trier sur la date de création ? J'y ai pensé mais ça m'avait l'air plus compliqué

Pour les extensions, ce sont des xls

Merci
 

mromain

XLDnaute Barbatruc
Re : trier alphabétiquement les fichiers d'un répertoire

Re,

voici la macro modifiée (pour prendre en compte le fait que les fichiers ont des extensions) :
VB:
Public Sub Test()
'déclaration des variables
Dim myFso As Object, leDossier As Object, leFichier As Object
Dim pathDossier As String, tabFichiers() As String, iFichier As Long, jFichier As Long
Dim tmp As String, dateFormatee As String, pathFichierVieux As String, pathFichierRecent As String
    
    'initialiser le path du dossier
    pathDossier = "C:\Temp"
    
    'récupérer le dossier
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set leDossier = myFso.GetFolder(pathDossier)
    
    'initialiser le tableau (qui contiendra le chemin des fichiers)
    ReDim tabFichiers(1 To leDossier.Files.Count, 1 To 2)
    
    'boucler sur tous les fichiers
    For Each leFichier In leDossier.Files
        tmp = Left(leFichier.Name, Len(leFichier.Name) - InStr(StrReverse(leFichier.Name), "."))
        tmp = Right(tmp, 8)
        'si le nom du fichier se fini bien par 8 chiffres
        If IsNumeric(tmp) Then
            'reformater la date
            dateFormatee = Mid(tmp, 5, 4) & Mid(tmp, 3, 2) & Mid(tmp, 1, 2)
            'ajouter le path du fichier dans le tableau
            iFichier = iFichier + 1
            tabFichiers(iFichier, 1) = leFichier.Path
            'ajouter la date reformatée "aaaammjj"
            tabFichiers(iFichier, 2) = dateFormatee
        End If
    Next leFichier
    
    'trier par ordre alphabétique le tableau
    For iFichier = LBound(tabFichiers, 1) To UBound(tabFichiers, 1) - 1
        For jFichier = iFichier + 1 To UBound(tabFichiers, 1)
            If tabFichiers(iFichier, 2) > tabFichiers(jFichier, 2) Then
                tmp = tabFichiers(jFichier, 2)
                tabFichiers(jFichier, 2) = tabFichiers(iFichier, 2)
                tabFichiers(iFichier, 2) = tmp
                tmp = tabFichiers(jFichier, 1)
                tabFichiers(jFichier, 1) = tabFichiers(iFichier, 1)
                tabFichiers(iFichier, 1) = tmp
            End If
        Next jFichier
    Next iFichier
    
    'récupérer le path du fichier le plus vieux et du fichier le plus récent
    pathFichierVieux = tabFichiers(LBound(tabFichiers, 1), 1)
    pathFichierRecent = tabFichiers(UBound(tabFichiers, 1), 1)
End Sub
a+
 
Dernière édition:

test_2be

XLDnaute Nouveau
Re : trier alphabétiquement les fichiers d'un répertoire

Salut Mromain,

Je viens de tester ton code et ça fonctionne parfaitement pour ce que je veux faire.
J'aurais eu un peu de mal à le faire moi-même...je débute en vba et les codes que je fais sont assez simpliste pour le moment.
Mais ça va venir :)

En tous cas , un tout grand merci pour ton aide !!

A+
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Excel VBA
Réponses
50
Affichages
2 K
Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 336
Messages
2 087 389
Membres
103 534
dernier inscrit
Kalamymustapha