Résolu Résolu Ouvrir le fichier dont le nom comporte la date la plus récente

WIsh_

XLDnaute Occasionnel
Bonjour à tous,

Ci-après un extrait de code d'une de mes macros qui ouvre un classeur qui se trouve dans un dossier pour en copier une plage de donnée:

VB:
Set wbData = Workbooks.Open("D:\test rapport\Project_Rapport 2020_Situation -17052020_LONG.xlsm")
Set wsData = wbData.Worksheets("BA RE T.C.")

Union(wsData.Range("BARETC1"), wsData.Range("BARETC2")).Copy

With WsMaster1.Cells(Ligne, 14)
.PasteSpecial xlPasteValues
End With

Application.CutCopyMode = False
A l'emplacement "D:\test rapport\", un nouveau fichier vient s'ajouter chaque semaine. Et c'est ce fichier que je dois aller ouvrir pour en copier les données.
Le nom du fichier est toujours identique, sauf la date qu'il comporte : "Project_Rapport 2020_Situation -17052020_LONG.xlsm".

Ainsi, la semaine prochaine, le fichier à aller chercher s'appellera "Project_Rapport 2020_Situation -18052020_LONG.xlsm", et celui de la semaine d'après, "Project_Rapport 2020_Situation -27052020_LONG.xlsm", etc.

=> Je n'arrive pas à remplacer ma ligne de code pour que la macro ouvre à chaque fois le fichier du dossier qui comporte dans son nom la date la plus récente.

Quelqu'un aurait-il une idée ?

Merci beaucoup d'avance,
Wish
 
Ce fil a été résolu! Aller à la solution…
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Wlsh,
Ne pourriez vous pas vous rattacher à la date d'enregistrement du dit fichier ?
Sinon il va vous falloir lire tous les noms de fichiers, en extraire les dates puis regarder le plus récent pour l'ouvrir. Parce que tel qu'elle est, la date est une chaîne de caractères au sein d'une autre chaîne.
 

WIsh_

XLDnaute Occasionnel
Bonjour Sylvanu,

Je me le suis dit mais le problème est que des fichiers dont la date reprise dans le nom est antérieur peuvent avoir été enregistrés plus récemment que celui à utiliser.
 

Patrice33740

XLDnaute Occasionnel
Bonjour,

Par exemple :
VB:
Option Explicit
Sub Test()
Dim wbData As Workbook
Dim pth As String       'path
Dim prf As String       'préfixe
Dim suf As String       'suffixe
Dim nom As String       'nom
Dim dat As String       'date

  pth = "D:\test rapport\"
  prf = "Project_Rapport 2020_Situation -"
  suf = "_LONG.xlsm"
  nom = Dir(pth & prf & "*" & suf)
  Do While nom > ""
    nom = Right("0" & Replace(Replace(nom, prf, ""), suf, ""), 8)
    If Mid(nom, 5, 4) & Mid(nom, 3, 2) & Mid(nom, 1, 2) > dat Then dat = Mid(nom, 5, 4) & Mid(nom, 3, 2) & Mid(nom, 1, 2)
    nom = Dir
  Loop
  Set wbData = Workbooks.Open(pth & prf & Mid(dat, 7, 2) & Mid(dat, 5, 2) & Mid(dat, 1, 4) & suf)
  '...

End Sub
 
Ce message a été identifié comme étant une solution!
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour à tous
puré" ké galère!!" cette conception

bon je ne peux pas tester n'ayant pas ton arborescence de fichier mais je tente

VB:
Sub test()
    chemin = "D:\test rapport\"    'chemin de base
    MsgBox GetRecentFiche(chemin)
End Sub
''
Function GetRecentFiche(chemin)
    dat = CDate("01/01/1900")    ' ancienne date pour etre sur
    partname = "Project_Rapport 2020_Situation -"    'partie invariable du nom de fichier
    fichiers = Dir(chemin, partname & "*_LONG.xlsm")    'lancement de dir pour lister les fichiersavec partname + inconu+suffixe et extention
    Do While fichiers <> ""    'demarrage de boucle dir
        inconu = Trim(Split(Split(fichiers, partname)(1), "_")(0))    'récup' serie numerique supposée existante
        If IsNumeric(inconu) And Len(inconu) = 8 Then    'teste si numerique et 8 caracteres
            inconu = Format(inconu, "##/##/####")    'conversion en date de l'inconu
            If IsDate(inconu) Then    'si inconu est date valide
                If CDate(inconu) > dat Then dat = inconu    'si date inconu > dat alors dat=inconu date
            End If
        End If
    End If

    fichiers = fir
Loop
x = chemin & partname & dat & "_LONG.xlsm" 'reconstruction du chemin complet avec le "dat" résultant
If Dir(x) <> "" Then GetRecentFiche = x 'si dir dit pas "" alors c'est choppé
End Function
 

patricktoulon

XLDnaute Barbatruc
re
Patrice33740 bonjour
réflechi 2 seconde
Code:
 If Mid(nom, 5, 4) & Mid(nom, 3, 2) & Mid(nom, 1, 2) > dat Then dat = Mid(nom, 5, 4) & Mid(nom, 3, 2) & Mid(nom, 1, 2)
j'ai dans les noms
05062020 et 03092021 que va donner ta ligne selon toi??????? ;)
A mediter;)
 

patricktoulon

XLDnaute Barbatruc
re
sylvanu
non mille excuse ca n'est pas toi pour la peine un bisous :D
non je ne te flingue pas je met le doigt sur une erreur
 

patricktoulon

XLDnaute Barbatruc
re
oui ben re teste alors!! et pas avec des nom qui t'arrangent
exemple avec

'Project_Rapport 2020_Situation -05062020_LONG.xlsm
'Project_Rapport 2020_Situation -03092021_LONG.xlsm

et dis moi que ton truc marche encore
dis moi qu'avec "Mid(nom, 1, 2) > dat Then dat = Mid(nom, 5, 4)" ca va te sortir le 2d

;)
 

jmfmarques

XLDnaute Accro
Bonjour Patrice33740

regarde et comprends ce que fait ceci :
VB:
ch = "Project_Rapport 2020_Situation -27052020_LONG.xlsm"
ch = Format(Val(Mid(ch, InStrRev(ch, "-") + 1)), "00000000")
dch = DateSerial(Right(ch, 4), Mid(ch, 3, 2), Left(ch, 2))
MsgBox dch
dch étant maintenant une date, tu peux la comparer telle quelle avec les autres valeurs dch

je te laisse faire.
amitiés
 
Dernière édition:

Patrice33740

XLDnaute Occasionnel
Bonjour Patrice33740
regarde et comprends ce que fait ceci :
VB:
ch = "Project_Rapport 2020_Situation -27052020_LONG.xlsm"
ch = Val(Mid(ch, InStrRev(ch, "-") + 1))
dch = DateSerial(Right(ch, 4), Mid(ch, 3, 2), Left(ch, 2))
MsgBox dch
dch étant maintenant une date, tu peux la comparer telle quelle avec les autres valeurs dch
Il n'est nullement obligatoire de convertir la chaine en date pour la comparer avec les autres !
La macro que j'ai proposé fonctionne parfaitement !
Je me contente de la transformer en 20200517 ou 20200527 pour les comparer :: la seconde est supérieure à la première.
Ceci dit, j'ai toujours trouvé aberrant d'écrire la date au format jjmmaaaa dans le nom d'un fichier, j'emploie toujours aaaammjj (ou une variante).
 

patricktoulon

XLDnaute Barbatruc
re
Je me contente de la la transformer en 20200517 ou 20200527 pour les comparer :: la seconde est supérieure à la première.
oui si la série numérique et de format"aaaammjj"
mais la ça n'est pas le cas ;)
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

[aparté mâtiné d'une once d'ironie dominicale indolore]
Réfléchi ou irréfléchi, message ou macro, ma préférence ira toujours à celui qui contient le moins de fautes d'orthographe. ;)
Et là, c'est tout réfléchi, le 33740ième Patricke fait beaucoup mieux que le Patrick de Toulon.
;)
[/aparté]
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour Staple1600
ben tu ferais une erreur ;)
et pour le coup j'ai testé le code de patrick33740 car je l'avais pas testé l'erreur est tellement grosse
et j'avais raison ça me donne pas le bon
donc même sans faute d'orthographe c'est faux quand même
et depuis quand on teste une date par sa valeur textuelle en vba ??
 

patricktoulon

XLDnaute Barbatruc
re
VB:
Option Explicit
Sub test()
    Dim wbData As Workbook
    Dim pth As String       'path
    Dim prf As String       'préfixe
    Dim suf As String       'suffixe
    Dim nom As String       'nom
    Dim dat As Date         'date
    Dim dat2 As Date        'date
    Dim fichier$

    dat = CDate("01/01/1900")
    pth = "C:\Users\polux\DeskTop\33740\"
    prf = "Project_Rapport 2020_Situation -"
    suf = "_LONG.xlsm"
    nom = Dir(pth & prf & "*" & suf)
    Do While nom > ""
        nom = Trim(Replace(Replace(nom, prf, ""), suf, ""))
        If IsNumeric(nom) And Len(nom) = 8 Then
            If IsDate(Format(nom, "##/##/####")) Then
                dat2 = CDate(Format(nom, "##/##/####"))
                If dat2 > dat Then fichier = pth & prf & nom & suf: dat = dat2
            End If
        End If
        nom = Dir
    Loop

    MsgBox fichier

    'Set wbData = Workbooks.Open(pth & prf & Mid(dat, 7, 2) & Mid(dat, 5, 2) & Mid(dat, 1, 4) & suf)
    '...

End Sub
demo4.gif
 
Ce message a été identifié comme étant une solution!

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas