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 :

Nombre de fichiers avec un certain nombre de caractères [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut Nombre de fichiers avec un certain nombre de caractères
    Bonjour,

    Dans un projet, je dois calculer le nombre de fichiers d'un sous dossier (c'est OK) et le nombre de fichiers dans le même dossier qui ont déjà été traités (ils sont marqués 'SEE') ou qui sont en cours de traitement (ils sont marqués avec un n° à 8 chiffre). Donc j'utilise la fonction suivante qui effectue le travail. Mais ce n'est pas très beau et peut-être que cela peut être réduit en lignes et en temps. Si vous avez des idées.


    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    Function NumberFilesSeeAndUser(ByVal Folder As String) As Long
        Dim NbrFilesSeeAndUser As Long
     
        Dim Chemin As String, Fichier As String
        'Définit le répertoire contenant les fichiers
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "SEE*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
    '1
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00000221*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
    '2
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00061065*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
    '3
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00101663*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '4
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00000413*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '5
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00060935*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '6
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00060777*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '7
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00101142*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '8
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00060106*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
     
     
    '9
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00060119*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '10
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00060908*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '11
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00102653*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
    '12
        Chemin = Folder
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Chemin & "00101827*.Digitsol")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Chemin & Fichier
            NbrFilesSeeAndUser = NbrFilesSeeAndUser + 1
            Fichier = Dir()
        Loop
     
     
    NumberFilesSeeAndUser = NbrFilesSeeAndUser
     
     
    End Function


    Je pourrais aussi calculer ceux qui sont encore à traiter. Je cherche une fonction qui pourrait calculer le nombre de fichiers qui ont 25 caractères hors extension ou 36 caractères avec extension. Mais cela je ne trouve pas.

    Si vous avez une piste, ... Merci.

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Tu parles de longueur de noms de fichiers, mais tu recherches des types de chaînes.

    Une piste : si tu utilises un filesystemobject, tu peux instancier la collection des fichiers du dossier, puis passer en revue les noms de fichiers, les tester avec des LIKE et voilà.

    Cordialement,

    pgz

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function NumberFilesSeeAndUser(ByVal Folder As String) As Long
    Dim Chemin As String, Fichier As String
    Dim N As Long
     
    Chemin = Folder & IIf(Right(Folder, 1) = "\", "", "\")
    Fichier = Dir(Chemin & "*.Digitsol")
    Do While Len(Fichier) > 0
        If Left(Fichier, 3) = "SEE" Or IsNumeric(Left(Fichier, 8)) Then N = N + 1
        Fichier = Dir()
    Loop
    NumberFilesSeeAndUser = N
    End Function

  4. #4
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonsoir,

    Et merci pour la piste. En fait, dans le dossier, les fichiers ont cette forme


    Fichier à traiter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    000198535.20150224.102434.Digitsol
    Fichier en traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00060106000198535.20150224.102434.Digitsol
    Fichiers traités
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SEE000198535.20150224.102434.Digitsol

    Bon évidemment, je ne suis pas assezrapide pour tout voir. Merci pour la piste et merci pour la simplicité du code de Mercatog. Quel talent !

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si tous les fichiers avant traitement ont 34 caractère (y.c l'extension) il faudra ajouter une condition sur la longueur du nom du fichier, sinon tu auras le comptage aussi des fichiers commençant par 8 chiffres

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function NumberFilesSeeAndUser(ByVal Folder As String) As Long
    Dim Chemin As String, Fichier As String
    Dim N As Long
     
    Chemin = Folder & IIf(Right(Folder, 1) = "\", "", "\")
    Fichier = Dir(Chemin & "*.Digitsol")
    Do While Len(Fichier) > 0
        If Left(Fichier, 3) = "SEE" Or IsNumeric(Left(Fichier, 8)) And Len(Fichier) > 34 Then N = N + 1
        Fichier = Dir()
    Loop
    NumberFilesSeeAndUser = N
    End Function
    Reste à savoir le format des noms de tes fichiers

  6. #6
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Merci, mercatog,

    Effectivement il faut ajouter cette donnée (la longueur); c'est pour cela que je faisais un test sur les 8er caractères pour voir si c'était ceux d'un agent. Mais ton système est bien meilleur et certainement plus rapide.


    Reste à savoir le format des noms de tes fichiers
    J'utilise des fichiers texte à qui j'ai donné l'extension ".Digitsol".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Lister les dossiers contenant un certain nombre de fichiers
    Par ni-bi1 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 12/11/2013, 21h33
  2. Calcul nombre enregistrement fichier avec dfsort ?
    Par housni13 dans le forum JCL - SORT
    Réponses: 5
    Dernier message: 17/07/2013, 14h38
  3. export d'une base avec un certain nombre de tables
    Par scazikiss dans le forum Administration
    Réponses: 13
    Dernier message: 30/11/2012, 09h36
  4. Réponses: 2
    Dernier message: 25/03/2009, 09h45
  5. Nombres de nombres premiers avec un certain nombre de chiffres
    Par piotrr dans le forum Mathématiques
    Réponses: 3
    Dernier message: 25/02/2008, 18h03

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