Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 10h12   #1
Membre confirmé
 
Inscription : décembre 2008
Messages : 279
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 279
Points : 282
Points : 282
Par défaut Scripting.FileSystemObject ou FileSearch

Bonjour à tous,

J'utilise depuis plusieurs années la macro suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
Sub totauxFactures()
Dim mois As String, chemin As String, a As String, c As String, D As String
Dim fs, dossier, leFichier, lesFichiers, s(), i
 
Application.ScreenUpdating = False
 
mois = InputBox("Choisir un numéro de mois au format mm", "Choix du mois")
Select Case mois
    Case "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"
    Case Else
        Exit Sub
End Select
 
'feuilleMensuelle (mois)
 
Cells(4, 3).Select
 
chemin = ActiveWorkbook.Path & "\" & mois
 
Set fs = CreateObject("Scripting.FileSystemObject")
Set dossier = fs.GetFolder(chemin)
Set lesFichiers = dossier.Files
 
    For Each leFichier In lesFichiers
        ReDim Preserve s(i)
        s(i) = leFichier.Name
 
        a = s(i)
        c = Left(a, 11)
        D = Right(a, Len(a) - 11)
        Cells(i + 4, 1) = c
        Cells(i + 4, 2) = Left(D, Len(D) - 4)
        a = chemin & "\" & a
        'chercheMontant a
        i = i + 1
    Next
 
Application.ScreenUpdating = True
End Sub
Elle me sert à reporter dans un tableau les noms des différents fichiers d'un répertoire.
Le nom de mes fichiers est de la forme : 2011 11 01 Client1.xls, 2011 11 02 Client2.xls etc.
Année à 4 chiffres espace le mois à 2 chiffres espace un indice qui s'incrémente de 1 à chaque nouveau fichier suivi du nom du client
2011 11 01 Clients1.xls
2011 11 02 Clients1.xls
...
2011 11 99 Clients99.xls

Jusqu'à présent pas de problème. Mon tableau se remplit bien dans le même ordre que le classement dans le répertoire.
Ce mois ci j'ai plus de 100 fichiers, dans le répertoire ils sont classés chronologiquement, par contre la macro précédente ne respecte pas le classement du répertoire. Les fichiers au delà de 99 sont classés sous le fichier 2011 01 10 Client10.xls et j'obtiens

2011 11 01 Clients1.xls
...
2011 11 10 Clients10.xls
2011 11 100 Clients100.xls
2011 11 101 Clients101.xls
2011 11 11 Clients11.xls
...
2011 11 99 Clients99.xls

J'ai essayé aussi avec Application.FileSearch, j'ai le même résultat.

Ma question est donc de savoir s'il est possible de lister les fichiers dans le même que leur classement dans le répertoire

Merci
JPierreM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 10h26   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Je ne pense pas qu'on puisse directement. Il doit falloir récupérer la dernière date de modification dans les propriétés du fichier et ensuite faire un tri sur ce critère...
... ou alors, tu renommes tes fichiers
Citation:
2011 11 001 ...
2011 11 002 ...
...
2011 11 010 ...
2011 11 011 ...
...
2011 11 100 ...
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 06h18   #3
Membre confirmé
 
Inscription : décembre 2008
Messages : 279
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 279
Points : 282
Points : 282
Bonjour,

Comme proposé ça fonctionne, merci.

Cependant quelqu'un a t-il une explication, car après tout le système classe les fichiers, dans le répertoire, chronologiquement sur le numéro. Il semblerait normal que l'on boucle sur les fichiers l'un après l'autre et que l'on obtienne deux classements identiques.
JPierreM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 06h56   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Le problème ne vient de l'ordre dans lequel les fichier sont renommés, ils le sont bien dans le bon ordre (date de création, enfin a mon avis ordre alphabétique, car tes fichier doivent avoir une valeur qui s'incrément).
Mais une fois tout tes fichiers renommé, lorsque windows les remet dans l'ordre alphabétique il ne tient pas compte de la valeur des chiffre mais des caractères qui le compose


Code :
1
2
3
4
5
6
7
8
9
0 ' tous les chiffres commençant par 0
1 ' tous les chiffres commençant par 1
10
11
...
19
2 'tous les chiffres commençant par 2
20
...
Si tu devais trier par ordre alphabétique c'est bien ce que tu ferais aussi, d'abord les chiffre commençant par le caractère 0, puis commençant par 1, 2, 3 ....

C'est pour cela que pour contré ce classement "erroné" le chiffre est formaté sur 2 caractères (dans ton cas)
Code :
1
2
3
4
5
6
7
8
9
01 'tous les chiffres commencant pas 0
02
...
09
10 'tout les chiffres commencant pas 1
11
...
19
...
c'est pour cette raison que passé 99 il faut formater sur 3 caractères.

Si tu as le code qui format le nom des fichiers montre le nous, il est certainement possible de changer le formatage, attention tout de même que la "lecture" du nom du fichier et sa décomposition ne s'en trouve pas affectés.

Tu devrais trouver quelque chose qui ressemble à ça
Code :
NumeroFormate = format(NumeroAFromate, "0#")
a remplacer par
Code :
NumeroFormate = format(NumeroAFromate, "00#")
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 10h58   #5
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Et pour compléter la réponse de Qwazerty, tu auras toujours via le FileSystemObject les fichiers par ordre alphabétique.

A la rigueur, il pourrait y avoir des options de tri, ce qui n'est pas la cas, mais il ne pourra pas savoir la manière dont tu l'as trié dans ton répertoire la dernière fois que tu l'as affiché. (Enfin, il y a surement une solution, avec les API Windows ou autre, mais ça devient vraiment très compliqué).

Par contre si tu veux les trier d'une manière spécifique après les avoir récupérés, tu peux le faire dans ton code ça.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h37.


 
 
 
 
Partenaires

Hébergement Web