[VBA] - Toujours importer le document plus récent

Bonjour,

A travers des macro j'alimente une base de données dont une copie est réalisée à chaque fois que des données sont ajoutées.

J'opère de cette manière afin de conserver des copies (lesquelles il faudra que supprime à la main, ou via une macro si je trouve).

Lors des enregistrement, le nom de la BDD est complété de l'année, du mois, du jour et de la minute d'enregistrement (pour avoir des document uniques ; je vais peut-être rajouter l'heure). Mais actuellement, je ne sais pas comment importer la base de données la plus récente.

Nom de la BDD : "BDD_SAISIE_FLORE_xxxx_xx_xx_xx)"

Voici la macro pour l'import :

Public Sub import_data3() 'Merci Patrice33740 ; Excel-Pratique https://forum.excel-pratique.com/excel/vba-importer-un-document-csv-dans-une-variable-tableau-sans-l-ouvrir-146945
Dim myfile$, csv As Variant, a&, e As Byte
If ActiveSheet.Name <> "BDD_SAISIE_FLORE" Then
sepV$ = ","
    chk2 = 0: LLtL = 0: chk44 = 0: e = 0: myfile = ChoisirFichier(".csv")
End If
If ActiveSheet.Name = "BDD_SAISIE_FLORE" Then
sepV$ = ";"
    chk2 = 0: LLtL = 0: chk44 = 0: e = 0: myfile = ThisWorkbook.Path & "\Bases de données\" & "BDD_SAISIE_FLORE_" & ".csv"
End If
    If myfile = "" Then chk2 = chk2 + 1: Exit Sub
        csv = Tableau_csv_UTF8(myfile)
            If chk44 = 1 Then Exit Sub
  For a = 1 To 1000 'rechercher la dernière colonne
    On Error GoTo 1
    If IsError(tL(1, a)) Then Exit For Else e = e + 1: LLtL = e
        If tL(1, a) = "" Then Exit For
  Next a
1  Exit Sub
End Sub

Je n'ai pas mis les fonction, car le plus important ici est cette ligne je pense :

myfile = ThisWorkbook.Path & "\Bases de données\" & "BDD_SAISIE_FLORE_" & ".csv"

Un document sera nécessaire ? Avec plusieurs BDD avec des dates différentes peut-être ?

Je dois sortir, mais je peux envoyer ça un peu plus tard !

Bonne journée !

Re bonjour,

il me semble que james007 avait postait une "Function" pour la recherche du fichier le plus récent.

https://forum.excel-pratique.com/excel/retrouver-le-fichier-le-plus-recent-t63321.html

Bonjour,

sans t'embêter, tu as un petit utilitaire (la version gratuite suffit) qui fait ça tout seul.
A chaque enregistrement une copie horodatée est crée. Tu peux limiter le nombre de copies, ou bien gérer de façon 'intelligente' : toutes sur 72h, puis 1 par jour sur 1 mois, 1 par mois, 1 par an
C'est https://www.filehamster.com/

J'ai même pris la version payante (en promo actuellement), plus parce que je suis satisfait et que je m'en sers depuis des années, que pour de nouvelles fonctionnalités.
eric

Bonjour,

Je ne sais pas vraiment utiliser les fonctions.

La fonction de James007 :

Function PlusRecent(ByVal Folder As String, ByVal Identi As String) As String
' Variable Identi sert à identifier les fichiers analysés
Dim FSO As Object
Dim f As Object
Dim DerDate As Date
  Set FSO = CreateObject("Scripting.FileSystemObject")
  On Error GoTo ExitPoint
  For Each f In FSO.GetFolder(Folder).Files
    If InStr(1, f.Name, Identi, 1) Then
      If f.DateCreated > DerDate Then
        DerDate = f.DateCreated
        PlusRecent = f.Name
      End If
    End If
  Next
ExitPoint:
End Function

(?) Pour l'appeler, il faut que je précise ce que sont les deux variables :

folder :

ThisWorkbook.Path & "\Bases de données\"

et Identi :

pour laquelle je ne sais pas quoi indiquer.

Concernant l'utilitaire, ce peut être utile, mais l'utilisation que je vais en faire, sur plusieurs machines, avec plusieurs utilisateurs risque de rendre les choses plus compliquées.

Bonne journée !

oui, c'était juste une idée

Bonsoir,

Voici comment je m'y prend finalement (un peu brouillon dans la présentation, parce que la macro s'ajuste à différents types d'imports dans mon document) :

If ActiveSheet.Name = "BDD_SAISIE_FLORE" Then
sepV$ = ",": chk2 = 0: LLtL = 0: chk44 = 0: e = 0

  myfile = ThisWorkbook.Path & "\Bases de données\"
  fich = Dir(myfile & "*BDD_SAISIE_FLORE_*" & "*.csv")
  ddt = DateSerial(1, 1, 1)
  Do While fich <> ""
    If FileDateTime(myfile & fich) > ddt Then
      lastfich = myfile & fich
      ddt = FileDateTime(myfile & fich)
    End If
    fich = Dir
  Loop
End If

    If myfile = "" Then chk2 = chk2 + 1: Exit Sub
    myfile = lastfich
        csv = Tableau_csv_UTF8(myfile)
            If chk44 = 1 Then Exit Sub
1  Exit Sub

Bonne fin de journée !

Rechercher des sujets similaires à "vba importer document recent"