Récupération données sur un autre fichier, nom variable

rlabe Messages postés 3 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai construit une macro qui récupère chaque semaine des données dans un autre fichier.
Seul problème, cet autre fichier change sensiblement de nom : le nom de base (ex : ccm.csv) est toujours le même. Mais il évolue, selon le nombre de fois que je le récupère/jour ou semaine en ccm (1).csv, puis ccm (2).csv, etc... --> je ne l'enregistre pas, j'ai juste besoin de l'ouvrir pour récupérer mes données.

Comment faire pour automatiser la récupération de données malgré ce nom qui se modifie un peu ?

Merci pour vos réponses

4 réponses

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

    Essaies ce code (pense à activer la référence) :
    Option Explicit
    Option Private Module
    '
    ' Note : il faut activer les références (dans Outils > Références ...) à :
    ' - Microsoft Scripting Runtime

    Public Sub MàJ()
    ' Analyse les fichiers du répertoire et trouve le plus récent
    '
    Const préfixe As String = "ccm (" 'Préfixe des noms de fichier
    Const suffixe As String = ").csv" 'Suffixe des noms de fichier
    '
    Dim objFSO As FileSystemObject 'File System Object
    Dim objRep As Scripting.Folder 'dossier à analyser
    Dim objFiles As Scripting.Files 'collection des fichiers du dossier
    Dim objFile As Scripting.File 'fichier de la collection
    Dim strChemin As String 'chemin du dossier
    Dim nomComplet As String 'Nom complet du fichier (avec le chemin)
    Dim dateModification As Date 'Date de modification du fichier

    'Définir le contexte d'exécution: arrêt interface utilisateur, actualisation écran et calculs
    Application.Interactive = False
    Application.Calculation = xlCalculationManual
    Application.Cursor = xlWait
    Application.ScreenUpdating = False

    'Définir le dossier à analyser par exemple :
    strChemin = ThisWorkbook.Path & "\Mes fichiers"

    'Lister l'arborescence du dossier
    On Error Resume Next
    Set objFSO = New FileSystemObject
    Set objRep = objFSO.GetFolder(strChemin) 'dossier
    Set objFiles = objRep.Files 'fichiers
    On Error GoTo 0
    '- analyser chaque nom de fichier
    For Each objFile In objFiles
    If InStr(1, objFile.Name & préfixe, préfixe) = 1 And _
    InStr(1, StrReverse(objFile.Name) & StrReverse(suffixe), StrReverse(suffixe)) = 1 Then
    '-- si le nom de fichier commence par le préfixe et termine par le suffixe ...
    With objFile
    '... et si le fichier est plus récent ...
    If .DateLastModified > dateModification Then
    '... mémoriser le nom et la date du fichier.
    nomComplet = .Path
    dateModification = .DateLastModified
    End If
    End With
    End If
    Next

    'Exploiter le résultat
    MsgBox "Fichier le plus récent : " & vbCr & _
    nomComplet & vbCr & _
    dateModification

    '- libérer les objets
    Set objFSO = Nothing
    Set objRep = Nothing
    Set objFiles = Nothing
    Set objFile = Nothing

    'Rétablir le contexte initial
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.Cursor = xlDefault
    Application.Interactive = True

    End Sub

    -
    Cordialement
    Patrice
    0
  2. rlabe Messages postés 3 Statut Membre
     
    Balaise !

    J'essaie ça merci :)
    0
  3. rlabe Messages postés 3 Statut Membre
     
    Bon après plusieurs essais (je débute), j'arrive pas à l'incorporer :D

    Si je veux le mettre là dedans :
    Cells.Select
    Windows("ccm (6).csv").Activate --> FICHIER AVEC NOM VARIABLE
    Cells.Select
    Selection.Copy
    Windows("blablabla.xlsm").Activate
    ActiveSheet.Paste
    Range("A1").Select

    Sachant que le chemin d'accès des fichiers temporaires d'outlook (que j'utilise) est celui ci :
    C:\Users\nom_utilisateur\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\

    Merci pour ton aide :)
    0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Il fallait ajouter ce que tu veux dans la partie « exploitation » de la macro (et non pas insérer la macro dans ton code !)

    Voici donc une solution qui ouvre le fichier csv (j'ai supposé qu'il s'agit d'un fichier csv "en français", c'est à dire dans lequel la virgule est le séparateur décimal et le point-virgule sert de séparateur de champs), copie les données dans un nouveau fichier vierge (que tu pourras enregistrer sous blablabla.xlsm) et referme le fichier csv sans le modifier.

    Option Explicit
    Option Private Module
    '
    ' Note : il faut activer les références (dans Outils > Références ...) à :
    ' - Microsoft Scripting Runtime

    Public Sub MàJ()
    ' Analyse les fichiers du répertoire et trouve le plus récent
    '
    Const préfixe As String = "ccm (" 'Préfixe des noms de fichier
    Const suffixe As String = ").csv" 'Suffixe des noms de fichier
    '
    Dim objFSO As FileSystemObject 'File System Object
    Dim objRep As Scripting.Folder 'dossier à analyser
    Dim objFiles As Scripting.Files 'collection des fichiers du dossier
    Dim objFile As Scripting.File 'fichier de la collection
    Dim wbkOrg As Workbook 'Classeur origine
    Dim wbkDst As Workbook 'Classeur destination
    Dim strChemin As String 'chemin du dossier
    Dim nomComplet As String 'Nom complet du fichier (avec le chemin)
    Dim dateModification As Date 'Date de modification du fichier

    'Définir le contexte d'exécution: arrêt interface utilisateur, actualisation écran et calculs
    Application.Interactive = False
    Application.Calculation = xlCalculationManual
    Application.Cursor = xlWait
    Application.ScreenUpdating = False

    'Définir le dossier à analyser par exemple :
    strChemin = "C:\Users\nom_utilisateur\AppData\Local\Microsoft\" & _
    "Windows\Temporary Internet Files\Content.Outlook"
    'Lister l'arborescence du dossier
    On Error Resume Next
    Set objFSO = New FileSystemObject
    Set objRep = objFSO.GetFolder(strChemin) 'dossier
    Set objFiles = objRep.Files 'fichiers
    On Error GoTo 0
    '- analyser chaque nom de fichier
    For Each objFile In objFiles
    If InStr(1, objFile.Name & préfixe, préfixe) = 1 And _
    InStr(1, StrReverse(objFile.Name) & StrReverse(suffixe), StrReverse(suffixe)) = 1 Then
    '-- si le nom de fichier commence par le préfixe et termine par le suffixe ...
    With objFile
    '... et si le fichier est plus récent ...
    If .DateLastModified > dateModification Then
    '... mémoriser le nom et la date du fichier.
    nomComplet = .Path
    dateModification = .DateLastModified
    End If
    End With
    End If
    Next

    'Ouvrir le fichier csv (au format csv français séparé par des points-virgules)
    Set wbkOrg = Workbooks.Open(Filename:=nomComplet, Format:=4, local:=True)
    'Créer le fichier destination (un seule feuille vierge)
    Set wbkDst = Workbooks.Add(xlWBATWorksheet)
    'Copier les données
    wbkOrg.Worksheets(1).UsedRange.Copy wbkDst.Worksheets(1).Range("A1")
    'Fermer le fichier csv sans l'enregistrer
    wbkOrg.Saved = True
    wbkOrg.Close

    '- libérer les objets
    Set objFSO = Nothing
    Set objRep = Nothing
    Set objFiles = Nothing
    Set objFile = Nothing

    'Rétablir le contexte initial
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.Cursor = xlDefault
    Application.Interactive = True

    End Sub
    0