Importation fichier texte sans connaitre le nom du fichier à importer

crapsnois Messages postés 2 Date d'inscription mercredi 27 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006 - 27 déc. 2006 à 13:27
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 28 déc. 2006 à 08:36
Bonjour,

Je vous explique mon probleme, il faut que je cré un code vba (sous excel) pour importer des fichiers texte.
les fichiers se trouvent c:\liste

Les fichiers texte porte comme nom
612261300hp.
6 pour l'année 
  12 pour le mois
      26 pour le jour
           1300 pour l'heure
et hp c'est comme ca.

Ces fichiers viennet d'une extraction qui ne se fait pas à heure fixe.
Je voudrais un code qui m'importe tous les fichiers du jour (peut importe l'heure)
Mais je suis bloqué

6 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
27 déc. 2006 à 14:08
utilise dir et un filtre année & mois & jour & "*.txt"
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2006 à 14:10
voici une fonction qui te permettra de lancer tes imports, en spécifiant le repertoire de départ (facultatif)
et la date des fichiers exportés (facultatif aussi, prend la date du jour par default)

étrange, cette nomenclature, pour les années...
que feras-tu en 2010 ?

Public Sub ImportFilesByDate(Optional ByRef vsPath As String = "C:", Optional vdImport As Date)
Dim sFileName As String
    If vdImport = 0 Then
        vdImport = DateTime.Date
    End If
    sFileName = Dir$(vsPath & Right$(Year(vdImport), 1) & Format$(vdImport, "MMDD") & "????hp")
    Do While LenB(sFileName)
        MsgBox vsPath & sFileName
        sFileName = Dir$()
    Loop
End Sub





Renfield





Admin CodeS-SourceS

- MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2006 à 14:13
mal vu...

change le C:\ en C:\liste

et ajoutes au passage l'extension que tu souhaites, pour ces fichiers (dans l'appel à Dir$)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
27 déc. 2006 à 14:41
 Bonjour à tous

Sur le même principe que Renfield:

Path = "C:\liste"
MsgBox ShowFolderList(Path),vbInformation,"Liste des fichiers a transférer"
Function ShowFolderList(strPath)
Dim fso, Dossiers, fic, fichiers, strListe
Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossiers = fso.GetFolder(strPath)
Set fichiers = Dossiers.Files
For Each fichier in fichiers



    If Len(fichier.Name) = 15 And _
       Left(fichier.Name,5) =  Right(Year(Date),1) & Month(Date) & Day(Date) And _
       Right(fichier.Name,6) = "hp.txt" Then



       strListe = strListe & vbcrlf & fichier.Name
   End If



Next
ShowFolderList = strListe & vbcrlf
End Function


reste à tester "hhmm"

jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crapsnois Messages postés 2 Date d'inscription mercredi 27 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006
27 déc. 2006 à 15:14
Re derriere pour chaque importation je dois avoir le code:



Workbooks.OpenText Filename:= _
        "Pc\liste\612211300PEh.txt", Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=False, _
        Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 9), Array( _
        3, 9), Array(4, 9), Array(5, 9), Array(6, 9), Array(7, 9), Array(8, 9), Array(9, 9), Array(10 _
        , 9), Array(11, 1), Array(12, 9), Array(13, 9), Array(14, 9), Array(15, 9), Array(16, 9), _
        Array(17, 9), Array(18, 9), Array(19, 1), Array(20, 9), Array(21, 9), Array(22, 9), Array( _
        23, 9), Array(24, 9), Array(25, 9), Array(26, 9), Array(27, 9), Array(28, 9), Array(29, 9), _
        Array(30, 9), Array(31, 9), Array(32, 9), Array(33, 9), Array(34, 9), Array(35, 9), Array( _
        36, 9), Array(37, 9), Array(38, 9), Array(39, 9), Array(40, 9), Array(41, 9), Array(42, 9), _
        Array(43, 9), Array(44, 9), Array(45, 9), Array(46, 9), Array(47, 9), Array(48, 9), Array( _
        49, 9), Array(50, 9), Array(51, 9), Array(52, 9), Array(53, 9)), TrailingMinusNumbers _
        :=True



De plus je ne sais pas ou mettre la macro public.
J'ai copier le code dans un module et j'ai essai de le faire pas à pas F8 mais il ne se passe rien.

Concernant le format du nom de l'extraction, effectivement en 2010 on est dans la merde mais d'ici là je ne serais plus dans la mm boite.

En tout cas merci pour votre aide, c'est super sympa
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 déc. 2006 à 08:36
La procédure que je t'ai donnée requiert un parametre, elle ne pourra donc etre lancée automatiquement, via l'interface des macros.

ajoutes donc:

Public Sub LancerImportation()
Dim sBuffer As String
    sBuffer = InputBox("Veuillez saisir la date des fichiers à importer :", "Date des fichiers ?", DateTime.Date)
    If IsDate(sBuffer) Then
        ImportFilesByDate , CDate(sBuffer)
    Else
        MsgBox "Saisie invalide.", vbExclamation
    End If
End Sub

et pour l'import :

Public Sub ImportFilesByDate(Optional ByRef vsPath As String = "C:\Liste", Optional vdImport As Date)
Dim sFileName As String
    If vdImport = 0 Then
        vdImport = DateTime.Date
    End If
    sFileName = Dir$(vsPath & Right$(Year(vdImport), 1) & Format$(vdImport, "MMDD") & "????hp.txt")
    Do While LenB(sFileName)
        ImportFile vsPath & sFileName
        sFileName = Dir$()
    Loop
End Sub

Public Sub ImportFile ( Byref vsFileName as String )
Workbooks.OpenText Filename:= _
        vsFileName
, Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=False, _
        Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 9), Array( _
        3, 9), Array(4, 9), Array(5, 9), Array(6, 9), Array(7, 9), Array(8, 9), Array(9, 9), Array(10 _
        , 9), Array(11, 1), Array(12, 9), Array(13, 9), Array(14, 9), Array(15, 9), Array(16, 9), _
        Array(17, 9), Array(18, 9), Array(19, 1), Array(20, 9), Array(21, 9), Array(22, 9), Array( _
        23, 9), Array(24, 9), Array(25, 9), Array(26, 9), Array(27, 9), Array(28, 9), Array(29, 9), _
        Array(30, 9), Array(31, 9), Array(32, 9), Array(33, 9), Array(34, 9), Array(35, 9), Array( _
        36, 9), Array(37, 9), Array(38, 9), Array(39, 9), Array(40, 9), Array(41, 9), Array(42, 9), _
        Array(43, 9), Array(44, 9), Array(45, 9), Array(46, 9), Array(47, 9), Array(48, 9), Array( _
        49, 9), Array(50, 9), Array(51, 9), Array(52, 9), Array(53, 9)), TrailingMinusNumbers _
        :=True
End Sub

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous