IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Scripting.FileSystemObject ou FileSearch


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut Scripting.FileSystemObject ou FileSearch
    Bonjour à tous,

    J'utilise depuis plusieurs années la macro suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    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
    2011 11 001 ...
    2011 11 002 ...
    ...
    2011 11 010 ...
    2011 11 011 ...
    ...
    2011 11 100 ...

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    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.

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    NumeroFormate = format(NumeroAFromate, "0#")
    a remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NumeroFormate = format(NumeroAFromate, "00#")
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    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.

Discussions similaires

  1. Impossibilité d'utiliser CreateObject("Scripting.FileSystemObject")
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/08/2008, 11h07
  2. Réponses: 4
    Dernier message: 02/04/2008, 23h10
  3. Scripting.FileSystemObject et affichage contenu fichier texte
    Par Mylene74 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2008, 12h28
  4. Réponses: 8
    Dernier message: 19/09/2006, 10h26
  5. Scripting.FileSystemObject
    Par pmboutteau dans le forum ASP
    Réponses: 2
    Dernier message: 24/03/2005, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo