Trie de fichier par nom et croissant par VBA

Bonjour à tous,

Dans l'explorateur de fichier, je cherche à trier les fichiers d'un dossier par "nom" et "croissant" en utilisant VBA.

Cela fait plusieurs jours que je recherche une solution sans succès et je commence un peu à désespérer...

Je vous remercie par avance pour votre aide.

Slt alex,

à tester et à adapter

Option Explicit
Sub Test()
Dim FNames As String
Dim arr()
Dim i As Long, j As Long

ReDim arr(1000) 'définir un nombre de fichiers supérieur au nombre possible
FNames = Dir("C:\temp\*.xls") 'définir le chemin
Do Until FNames = ""
arr(i) = FNames
i = i + 1
FNames = Dir
Loop
ReDim Preserve arr(i)
TriRapid arr(), LBound(arr), UBound(arr)
For j = 0 To i
Cells(j + 1, 2) = arr(j)
Next

End Sub

Private Sub TriRapid(strArray(), intBottom As Integer, intTop As Integer)
Dim strPivot As String, strTemp As String
Dim intBottomTemp As Integer, intTopTemp As Integer
intBottomTemp = intBottom
intTopTemp = intTop
strPivot = strArray((intBottom + intTop) \ 2)
While (intBottomTemp <= intTopTemp)
While (strArray(intBottomTemp) < strPivot And intBottomTemp < intTop)
intBottomTemp = intBottomTemp + 1
Wend
While (strPivot < strArray(intTopTemp) And intTopTemp > intBottom)
intTopTemp = intTopTemp - 1
Wend
If intBottomTemp < intTopTemp Then
strTemp = strArray(intBottomTemp)
strArray(intBottomTemp) = strArray(intTopTemp)
strArray(intTopTemp) = strTemp
End If
If intBottomTemp <= intTopTemp Then
intBottomTemp = intBottomTemp + 1
intTopTemp = intTopTemp - 1
End If
Wend
If (intBottom < intTopTemp) Then TriRapid strArray, intBottom, intTopTemp
If (intBottomTemp < intTop) Then TriRapid strArray, intBottomTemp, intTop
End Sub

Salut,

Tout d'abord merci de ta réponse.

Etant novice en vba, peux tu m'indiquer les parties de ton code à modifier (hormis le chemin bien évidemment ) car en lançant ton code rien ne se passe..

Merci d'avance pour ta réponse.

Re,

si rien ne se passe c'est déjà pas mal

non mais il faut juste indiquer le chemin, j'ai limiter la recherche à des fichier xls et peut être qu'il y a pas de fichier xls dans le chemin indiqué

tu peux faire comme ca pour afficher tout genre de fichier:

FNames = Dir("C:\temp\*") 'définir le chemin 

sinon montre moi ce que t'as mis comme chemin

Il n'y a pas de problème au niveau du lien, j'ai lancé pas à pas le code et il lit bien les fichiers. Cependant rien ne se passe. J'ai trier mes fichiers dans mon dossier par "modifié le", je lance le code et rien n'a bougé...

ah non mais l'à tu veux que le code trie les fichiers directement sur la fenetre de l'explorateur?

Le "trier par" est dans l'onglet affichage de l'explorateur de fichier. Et pour répondre à ta question : je souhaite trier les fichiers directement dans l'explorateur de fichier pour que lorsque je vais dans mon dossier mes fichier soient classés.

Es ce que tu vois ce que je veux dire?

Le "trier par" est dans l'onglet affichage de l'explorateur de fichier. Et pour répondre à ta question : je souhaite trier les fichiers directement dans l'explorateur de fichier pour que lorsque je vais dans mon dossier mes fichier soient classés.

Es ce que tu vois ce que je veux dire?

oui oui je vois bien ce que tu veux dire

Le tri des dossier, mais ca tu peux le faire directement sur windows et tu sauvegrdes ........

bonjour à tous

Il y a des logiciels de macro tout exprès pour piloter Windows

j'utilise AutoHotKey (gratuit)

amitiés

Bonjour à tous les deux,

Je vous remercie pour vos réponses.

Pour être plus précis : j'effectue des opérations sur des fichiers d'un dossier. Pour que ces opérations ce passent correctement les fichiers doivent impérativement être trier par "nom" et en ordre "croissant" dans l'explorateur de fichiers.

Je sais que je peux le faire manuellement dans l'onglet affichage de l'explorateur de fichier. Cependant, une autre personne sera amenée à utiliser mon code et pourrait par erreur trier les fichiers par "modifié le" ou encore "type" ou "Taille".

C'est pour cela, que je souhaiterai mettre au début de mon code une macro Vba qui me trie mes fichiers d'un dossier donné dans l'explorateur de fichier par le "nom" et en ordre "croissant".

Après plusieurs recherches, je n'arrive toujours pas à écrire le code...

Je vous remercie pour votre aide...

re

question importante : à quoi sert de trier des fichiers ?

vu qu'on n'en lit qu'un à la fois, son nom suffit (utiliser la case de recherche de l'explorateur de fichier de Windows). Valable aussi si on cherche plusieurs fichiers

amitiés

Les fichiers effectivement sont traités un par un par mon code. Mais l'ordre dans lequel est traité le fichier est extrêmement important. Par exemple, si le fichier du nom 'Fichier2' est traité avant 'Fichier1', ça va avoir des conséquences dans mes calcules. C'est pour cela que je souhaite avoir un code pour trier les fichiers d'un dossier par le 'nom" et l'ordre "croissant" dans l'explorateur de fichiers.

Les fichiers effectivement sont traités un par un par mon code. Mais l'ordre dans lequel est traité le fichier est extrêmement important. Par exemple, si le fichier du nom 'Fichier2' est traité avant 'Fichier1', ça va avoir des conséquences dans mes calcules. C'est pour cela que je souhaite avoir un code pour trier les fichiers d'un dossier par le 'nom" et l'ordre "croissant" dans l'explorateur de fichiers.

Slt aleX,

Slt jmd ,

oui mais là tu te casses la tête, le code que je t'ai proposé va pouvoir resoudre ton problème, il faut juste l'intégré dans ton code

c.à.d

1- tu crées la liste des fichiers du dossier que tu vas choisir dans une plage/Onglet X dans ton fichier initial et tu les tries (c'est ce que le code en haut fait) (cette plage/onglet X peut être cachée si souhaité)

2- ensuite tu commences le traitement des fichiers dans l'ordre de cette plage X.

mets ton code initial et je t'adapte cette soultion si tu veux..

@ ++

Bonjour m3ellem1 et je te remercie pour ta réponse

Je vois ce que tu veux dire mais je ne sais pas du tout comment m'y prendre pour insérer ton code... Penses tu qu'il serai possible d'au lieu d'utiliser une plage dans un onglet pour trier les fichiers, d'effectuer le trie et de stocker l'ordre dans une variable de type tableau ?

Mon code est ci dessous :

Sub FichierCopierColler()

Dim FSO As Object

Dim FsoRepertoire As Object

Dim FsoFichier As Object

Dim strLigne As String

Dim LienFichier As String

Dim I As Long

Set FSO = CreateObject("Scripting.FileSystemObject")

Set FsoRepertoire = FSO.getfolder("C:\") 'mettre le lien du dossier ou sont situés les fichiers txt

I = 1

For Each FsoFichier In FsoRepertoire.Files

LienFichier = FsoRepertoire & "\" & FsoFichier.Name

Open test For Input As #1

Do While Not EOF(1)

Line Input #1, strLigne

Feuil1.Cells(I, 1).Value = strLigne

I = I + 1

Loop

I = I + 1

Close #1

Next

End Sub

Bonjour le fil

Je me glisse dans ce fil, parce qu'il y a une information qui me manque pour comprendre le pourquoi du comment ! Autrement pour pouvoir résoudre ce problème qui pour moi n'existe pas !

@alex9869

Tu dis :

Les fichiers effectivement sont traités un par un par mon code. Mais l'ordre dans lequel est traité le fichier est extrêmement important. Par exemple, si le fichier du nom 'Fichier2' est traité avant 'Fichier1', ça va avoir des conséquences dans mes calcules. C'est pour cela que je souhaite avoir un code pour trier les fichiers d'un dossier par le 'nom" et l'ordre "croissant" dans l'explorateur de fichiers.

ET

Je sais que je peux le faire manuellement dans l'onglet affichage de l'explorateur de fichier. Cependant, une autre personne sera amenée à utiliser mon code et pourrait par erreur trier les fichiers par "modifié le" ou encore "type" ou "Taille".

Si tu lis les fichiers directement sur le répertoire, un par un via une procédure tu peux faire le tri dans la procédure elle-même, pourquoi est il important que "une autre personne" décide de trier autrement que ce que tu as décidé ? L'explorateur de fichier reste l'explorateur de fichier ! Chacun peut décider de "voir" les informations comme cela lui est pratique... C'est à ton code de s'adapter pas à l'explorateur et encore moins à l'utilisateur d'être bridé dans sa "vision" de ton outil !

Une fois tes fichiers (tous) lus en vrac tels qu'ils sont organisés dans l'explorateur tu fais une routine de tri sur la donnée dont tu as besoin pour tes calculs...

Ou alors j'ai sauté un passage important, ma capacité de lecture en diagonale aurait-t-elle diminué à ce point ?

Bonjour Gil73 et merci de t'intéresser à mon problème

Oui je comprends ce que tu veux dire. Je suis débutant en VBA et je pensais qu'il y avait un code pour trier les fichiers directement dans l'explorateur de fichiers... Mais effectivement de trier directement mes fichiers dans mon code est une très bonne idée qui va dans le sens de @m3ellem1.

Maintenant je ne sais juste pas comment y intégrer... Et d'autant plus que j'aimerais ne pas passer par une plage dans un onglet pour effectuer le tri mais plutôt par une variable de type tableau pour optimiser mon code (j'ai vu ça sur un site mais pareil je galère un peu..)

Bonjour

Bonjour Gil73 et merci de t'intéresser à mon problème

Oui je comprends ce que tu veux dire. Je suis débutant en VBA et je pensais qu'il y avait un code pour trier les fichiers directement dans l'explorateur de fichiers... Mais effectivement de trier directement mes fichiers dans mon code est une très bonne idée qui va dans le sens de @m3ellem1

Etre débutant n'est pas un défaut, chercher à progresser est une qualité !

Et d'autant plus que j'aimerais ne pas passer par une plage dans un onglet pour effectuer le tri mais plutôt par une variable de type tableau pour optimiser mon code (j'ai vu ça sur un site mais pareil je galère un peu..)

En passant par VBA il serait ridicule de passer par une plage ou juste enregistrer une macro-commande (bête et méchante) pour réaliser un tri ! Si nous passons par VBA autant tout faire "d'un seul coup" et proprement et tant qu'à faire de manière beaucoup plus rapide. Ton idée de passer par un tableau (si tu parles bien de la même chose que moi) est une excellente idée (et pour tes investigations sur internet). Les tableaux sous VBA sont (lorsque l'on a compris le fonctionnement) très pratique et gérés de manière très rapide par l'interpréteur de commandes. Il faut donc les utiliser dès que le volume de données à traiter devient important ou pour remplacer les fonctions Excel (sur les plages justement) qui sont parfois très lentes !

Mais... Venons-en alors au fait !

Les question d'abord

1) Combien (potentiellement) peux tu avoir de fichiers à trier ? Cette question pour savoir quel genre de tri peut être utilisé !

2) Si j'ai bien compris (d'après ton extrait de code actuel) les fichiers à lire sont de fichiers de type texte (CSV ou quelque chose du genre)

3) Que faut il faire "pendant la lecture" ? Toujours d'après ton extrait de code tu recopies toutes les lignes du fichier à la suite sur un onglet... Est-ce bien ce qu'il faut faire ?

En fonction de tes réponses je pourrais adapter la mienne et répondre j'espère à ton problème !

Bonjour Gli73

je te rassure, on parle bien de la même chose concernant les variables de type tableau

Alors concernant tes questions :

1) C'est entre 15 et 130 fichiers max. Et en moyenne je dirais 50 fichiers.

2) Oui effectivement c'est exactement ça, ce sont des fichiers txt et je recopie ligne par ligne du fichier txt dans un onglet excel

3) Je pense que la réponse au point 2 répond à ta question 3 . Et l'idée c'est d'effectuer cette opération (copier coller mes fichiers txt dans un onglet excel) sur des fichiers trier par "nom" et ordre "croissant" (désolé si je me répète )

En tout les cas, merci pour ton aide

Bonjour le fil

Ok !

Voyons les chose dans l'ordre !

Peux tu reformuler un peu ton besoin :

C'est entre 15 et 130 fichiers max. Et en moyenne je dirais 50 fichiers.

ok pour le nombre ! peu importe d'ailleurs, il s'agit juste de savoir si il y en a UN ou PLUS !

Cependant il faudrait en connaître la forme (nombre de colonne, type des données

Un exemplaire serait le bienvenue !!!

Bonjour Gil

Les fichiers sont des fichiers txt, le nombre de ligne dans le fichier txt est variables dans chaque fichier (c'est pour ça que ça sert pas à grand chose de t'en montrer un..) et les données à l'intérieur c'est des lettres, des chiffres et des signes.

Mais à quoi ça sert de savoir ça si on veut juste trier les fichiers en fonction de leur nom ?

Rechercher des sujets similaires à "trie fichier nom croissant vba"