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 :

Débutant en VB - Recherche de fichier avec le nom incomplet


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Chargé de référencement
    Inscrit en
    Mars 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Mars 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Débutant en VB - Recherche de fichier avec le nom incomplet
    Bonjour,

    Je suis débutant en VB. Je veux créér une macro qui affiche le chemin absolu du fichier le plus récent.
    En parcourant tous les sous-dossiers.
    Bref tout ça fonctionne après des heures de recherche ...

    Le problème c'est que je suis obligé de mettre le nom du fichier exact exemple aaaa.txt
    C'est un problème pour moi car j'aimerai mettre partiellement le nom du fichier exemple *aa*.txt

    Je pense que c'est cette méthode qui est en cause :

    Set oFl = p_oFld.Files(p_strFichier & ".txt")

    J'aimerai une solution qui me permette de ne pas réécrire tout le code ...

    Pouvez-vous m'aider à corriger ce soucis ?


    Merci beaucoup

    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
    Dim tableau() As File 
     
    Dim cpt As Integer 
     
     
     
     
     
    Sub rezerze() 
     
     
     
        cpt = 0 
     
        Explorer "aaaaaa", "C:\TestGui" 
     
     
     
        Dim i As Integer 
     
        Dim monFichierSqlPath As String 
     
        Dim monFichierSqlDate As String 
     
     
     
        monFichierSqlDate = tableau(0).DateLastModified 
     
        monFichierSqlPath = tableau(0).Path 
     
     
     
     
     
        For i = 0 To cpt - 1 
     
            If monFichierSqlDate < tableau(i).DateLastModified Then ' => SI condition validée ALORS 
     
                monFichierSqlPath = tableau(i).Path 
     
                monFichierSqlDate = tableau(i).DateLastModified 
     
            Else ' => SINON 
     
               'Instructions si faux 
     
            End If 
     
                    'MsgBox tableau(i).Path 
     
        Next 
     
        MsgBox monFichierSqlPath 
     
     
     
    End Sub 
     
     
     
    Sub Explorer(p_strFichier As String, p_strCheminDepart As String, Optional p_oFld As Scripting.Folder) 
     
    On Error GoTo err 
     
     
     
        Dim oFSO As Scripting.FileSystemObject 
     
        Dim oFld As Scripting.Folder 
     
        Dim oFl As File 
     
        Dim fichierdir As String 
     
     
     
        If p_oFld Is Nothing Then 
     
            'Instanciation du FSO 
     
            Set oFSO = New Scripting.FileSystemObject 
     
            'Accède au répertoire du départ de recherche 
     
            'fichierdir = Dir(p_strCheminDepart & "\" & p_strFichier) 
     
            Set p_oFld = oFSO.GetFolder(p_strCheminDepart) 
     
     
     
        End If 
     
        'fichierdir = Dir(p_strCheminDepart & "\" & p_strFichier) 
     
        Set oFl = p_oFld.Files(p_strFichier & ".txt") 'probleme ici je ne peux pas mettre aa*.txt
     
     
     
        cpt = cpt + 1 
     
        ReDim Preserve tableau(cpt) 
     
        Set tableau(cpt - 1) = oFl 
     
        'MsgBox oFl.Path 
     
        'MsgBox tableau(cpt).Path 
     
     
     
    SubDir: 
     
    'Explore les sous-dossiers 
     
        For Each oFld In p_oFld.SubFolders 
     
            Explorer p_strFichier, p_strCheminDepart, oFld 
     
            DoEvents 
     
        Next oFld 
     
     
     
    fin: 
     
        Exit Sub 
     
    err: 
     
        Select Case err.Number 
     
            Case 53: Resume SubDir 
     
            Case Else: 
     
                MsgBox "Erreur inconnue" 
     
                Resume fin 
     
        End Select 
     
     
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    C'est un exemple VBScript pour utiliser la recherche de Windows. Cela doit être adapté en VBA. Par contre, cela ne fonctionne (vraiment) pas (vraiment) pour les dossiers non indexés. Mais, si le fichier est indexé, c'est la méthode la plus rapide

    Par expérience, en VB6-VBA, toute autre méthode que la recherche de Windows, a beaucoup de difficultés avec les noms de fichiers incomplets. Une autre excellente raison de passer à VB.net. Le Framework .net s'en tire mieux à cet égard. Même si cela risque d'être long longtemps.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à voir et adapter : Liste des fichiers d'un dossier
    Images attachées Images attachées  

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut

    Pour répondre à ta question, quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oFl = p_oFld.Files("Blaba.txt")
    Tu pointes sur une collection de fichier (Files) un fichier unique qui se nomme Blabla.txt

    Si maintenant tu écris (en admettant que l'on puisse utiliser *, ce qui n'est pas le cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oFl = p_oFld.Files("Blaba*.txt")
    Ici plusieurs fichiers pourraient correspondre et Files ne saurait pas lequel te retourner. Tu n'as pas le choix, il faut que tu fasse une boucle sur le contenu de files pour extraire ce dont tu as besoin. Un truc comme ça:

    Dim oneFile As Scripting.File
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For each oneFile in p_oFld.Files
       If oneFile.name like "p_strFichier & ".txt"" then
           'Tu réalises ici ce que tu as besoin de faire
           if onefile.DateLastModified = ... then
    ...
    (Je pense inutile de dire que je n'ai pas testé le code ^^)

    ++
    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
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste avec FSO. Le chemin, le nom et la date de dernière modif du fichier sont inscrit dans les colonnes A, B et C de la feuille active :
    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
     
    Dim Fso As Object
    Dim Dos As Object
    Dim D As Object
    Dim F As Object
    Dim Fichier As String
     
    Sub RecupDonnees()
     
        Dim Tbl() As String
        Dim I As Integer
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        'le chemin du dossier "racine" est le chemin du classeur où se trouve ce code-ci, adapter
        RecupFichiers ThisWorkbook.Path, Tbl
     
        If Not Not Tbl() Then
     
            For I = 1 To UBound(Tbl, 2)
     
                Cells(I, 1).Value = Tbl(1, I)
                Cells(I, 2).Value = Tbl(2, I)
                Cells(I, 3).Value = Tbl(3, I)
     
            Next I
     
        End If
     
    End Sub
     
    Sub RecupFichiers(Dossier As String, Tbl() As String)
     
        If Right(Dossier, 1) <> "\" Then Dossier = Dossier & "\"
     
        If Fso.FolderExists(Dossier) = False Then Exit Sub
     
        Set Dos = Fso.getfolder(Dossier)
     
        'boucle sur les sous-dossiers
        For Each D In Dos.subfolders
     
            Fichier = Dir(D.Path & "\" & "*.txt")
     
            Do While (Len(Fichier) > 0)
     
                On Error Resume Next 'évite l'erreur du tableau non initialisé
                ReDim Preserve Tbl(1 To 3, 1 To UBound(Tbl, 2) + 1)
                If err.Number <> 0 Then ReDim Tbl(1 To 3, 1 To 1)
                On Error GoTo 0
     
                Set F = Fso.GetFile(D.Path & "\" & Fichier)
     
                Tbl(1, UBound(Tbl, 2)) = D.Path & "\"
                Tbl(2, UBound(Tbl, 2)) = Fichier
                Tbl(3, UBound(Tbl, 2)) = F.DateLastModified
     
                Fichier = Dir()
     
            Loop
     
            RecupFichiers D.Path, Tbl()
     
        Next D
     
    End Sub

Discussions similaires

  1. Activation d’un fichier avec le nom incomplet
    Par volubiliss dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/03/2011, 09h32
  2. ouvrir des fichiers avec des noms incomplets
    Par Merel dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/09/2010, 16h01
  3. [AC-2003] Rechercher un fichier avec un nom incomplet
    Par tarnx dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/06/2010, 21h34
  4. Recherche de fichier avec joker
    Par defluc dans le forum Langage
    Réponses: 1
    Dernier message: 15/10/2007, 12h27
  5. Recherche des fichiers avec ksh
    Par mzt.insat dans le forum Linux
    Réponses: 3
    Dernier message: 15/05/2006, 22h51

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