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

Fermé
rlabe Messages postés 3 Date d'inscription jeudi 20 février 2014 Statut Membre Dernière intervention 21 février 2014 - 20 févr. 2014 à 16:36
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 21 févr. 2014 à 21:50
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


A voir également:

4 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
20 févr. 2014 à 19:20
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
rlabe Messages postés 3 Date d'inscription jeudi 20 février 2014 Statut Membre Dernière intervention 21 février 2014
21 févr. 2014 à 15:07
Balaise !

J'essaie ça merci :)
0
rlabe Messages postés 3 Date d'inscription jeudi 20 février 2014 Statut Membre Dernière intervention 21 février 2014
21 févr. 2014 à 17:08
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
21 févr. 2014 à 21:50
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