Macro recherche fichiers

Résolu
happy4u Messages postés 39 Statut Membre -  
happy4u Messages postés 39 Statut Membre -
Bonjour,

Etant novice en vba je sollicite votre aide.

j'ai fait une macro qui permest à aprtir de deux workbooks ("Stress_CA_06012017.xls" ; "Global_Stress_CACIB_REG_06012017") les deux workbooks se trouvent dans le même dossier) et copier certains éléments vers un autre workbook. J'ai réussi à faire un code sauf que à chaque fois je reçois des nouveaux fichiers, cependant Le nom des fichiers évolue chaque jour (il comporte la date...forme NOM_DATE.XLS) .

J'aimerai bien savoir s'il y a une méthode pour ajuster mon code pour que à chaque fois il cherche les deux récents fichiers . (J'ai essayé de faire un petit code en commentaire mais ça a pas marché)

https://www.cjoint.com/c/GAtop6mwMvH

Fichiers sources:
http://www.cjoint.com/c/GAto6DfXPdH
http://www.cjoint.com/c/GAto7bROUgH

Merci de votre aide

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Pour trouver le fichier le plus récent :
    Option Explicit
    Sub FichierLePlusRécent()
    Dim rep As String                 'Répertoire
    Dim fic As String                 'Fichier
    Dim daR As Date                   'Date fichier récent
    Dim nom As String                 'Nom fichier récent
      rep = "N:\Projets02\RFC2\B- Groupe CA\DEV\" & _
            "Historical_Hypothetical_Stress\"
      fic = "Global_Stress_CACIB_REG_*.xls"
      daR = 0
      nom = ""
      fic = Dir(rep & fic)
      Do While fic <> ""
        If daR < FileDateTime(rep & fic) Then
          'mémoriser le nom du fichier le plus récent
          daR = FileDateTime(rep & fic)
          nom = fic
        End If
        fic = Dir
      Loop
      If nom <> "" Then
        MsgBox nom
      End If
    End Sub
    1
    1. happy4u Messages postés 39 Statut Membre
       
      Merci Patrice
      0
  2. DSBix Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonjour,

    Une solution serait de stocker le nom des fichiers déjà reçus dans une autre feuille. Et avec une fonction comme celle ci-dessous, tu saurais quels sont les fichiers déjà importés.

    Bon courage.

    Private Sub ImporterFichiers()
    
    strNomFichier = Dir(strRepertoireFichiers & "*.xlsx", vbNormal)
    
    'Pour chaque fichier xlsm
    While strNomFichier <> ""
            'On vérifie si on ne l'a pas déjà importé
            If VerifierSiDejaImporte(strNomFichier) = False Then
      'On traite le fichier et on enregistre qu'on la traité
      Call AjouterFichierAListeDesFichiersDejaImportes(strNomFichier)
     End If
    WEnd
    
    End Sub
    
    Private Function VerifierSiDejaImporte(ByVal pin_strNomFichierAVerifier As String)
    
    Dim i As Integer
        Dim blnTrouve As Boolean
        Dim strNomFichierTraite As String
    
    'Cette fonction recherche dans la feuille 2 de classeur Excel, si le fichier est déjà présent
    
    blnTrouve = False
    
    i = 2 'On commence à 2 car la 1ère ligne contient le titre de colonne
        Do
     'Dans la Worksheet n°2, colonne A, il y a les noms des fichiers
            strNomFichierTraite = ThisWorkbook.Worksheets(2).Range("A" & CInt(i)).Value
    
    'Si le nom de fichier correspond, on l'a trouvé !
            If strNomFichierTraite = pin_strNomFichierAVerifier Then
                        blnTrouve = True
            End If
    
    i = i + 1
        Loop While strNomFichierTraite <> "" And blnTrouve = False
    
    
    VerifierSiDejaImporte = blnTrouve
    
    End Function
    
    
    Private Sub AjouterFichierAListeDesFichiersDejaImportes(pin_strNomFichier As String)
    
    Dim i As Integer
        Dim strNomFichierTraite As String
    
    'Ici on va chercher la prochaine cellule vide dans la liste des fichiers traités
        i = 2
        Do
            strNomFichierTraite = ThisWorkbook.Worksheets(2).Range("A" & CInt(i)).Value
    
    If strNomFichierTraite <> "" Then
                i = i + 1
            End If
        Loop While strNomFichierTraite <> "" And strNomFichierTraite <> pin_strNomFichier
    
    
    'i contient le numéro de la prochaine ligne libre, on ajoute le nom du fichier
        ThisWorkbook.Worksheets(2).Range("A" & CInt(i)).Value = pin_strNomFichier
    
    
    End Sub
    0
    1. happy4u Messages postés 39 Statut Membre
       
      Merci
      0