Amélioration macro, imporation de fichiers txts

Résolu/Fermé
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 - Modifié par kgigant le 27/02/2013 à 15:44
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 - 28 févr. 2013 à 13:45
Bonjour,

Ci-dessus, j'ai une macro qui importe des fichiers txts d'un dossier vers mon classeur Excel. Lorsque je lance la macro les fichiers se rangent dans l'ordre croissant par rapport à leurs noms sur ma feuille excel

Est-il possible de rajouter une ligne de code qui permettre de ranger les fichier txts dans mon classeur en fonction de leurs date de modification ?
ex : le fichier le plus ancien se range en A1
...
le fichier le plus récent se range en A....

précision : Les fichiers txts sont classé par rapport à leur date de modif dans le fichier source, du plus ancien au plus récent


voici la macro:

Sub importfichiertxt()
Dim Fichier As String, Chemin As String
Dim i As Long


'Répertoire contenant les fichiers
Chemin = "N:\Departements\export"
Fichier = Dir(Chemin & "\*.txt")

'Boucle sur les fichiers
Do While Fichier <> ""

i = Range("A65536").End(xlUp).Row + 1
ImportText Chemin & "\" & Fichier, Cells(i, 1)

Fichier = Dir
Loop
End Sub
Sub ImportText(NomFichier As Variant, Cible As Range)
Dim QT As QueryTable

Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _
NomFichier, Destination:=Cible)

With QT
'Définit les séparateur de colonnes dans le fichier txt
.TextFileOtherDelimiter = ";"
.TextFileSemicolonDelimiter = True
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.Refresh
End With
End Sub

Merci
A voir également:

3 réponses

eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 225
27 févr. 2013 à 17:54
Bonjour,

FileDateTime("c:\tmp\test.txt") te ramène date-heure de la dernière modification.
A ajouter dans une autre colonne et trier dessus.

eric


0
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 9
Modifié par kgigant le 28/02/2013 à 08:22
Daccord donc si je veux rajouter cette ligne en colonne P dans ma macro je dois faire quoi ?
J'ai du mal a comprendre comment et ou exploiter cette formule
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 225
28 févr. 2013 à 10:39
Bonjour !

Essaie comme ça :
'Boucle sur les fichiers
Do While Fichier <> ""
    i = Range("A65536").End(xlUp).Row + 1
    ImportText Chemin & "\" & Fichier, Cells(i, 1)
    Cells(i, "P") = FileDateTime(Chemin & "\" & Fichier)
    Fichier = Dir
Loop

eric
0
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 9
28 févr. 2013 à 11:31
merci
0
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 9
28 févr. 2013 à 11:51
C'est exactement ça, je l'ai modifié légerement,

Cells(i + 5, "P") = FileDateTime(Chemin & "\" & Fichier)

je l'ai décaller à i+ 5 car ce sont selement les données de la 5° à la 29° ligne du fichier txt que je vais garder pour exploiter.

J'aimerais donc écrire:

Cells(i + 5:i + 29, "P") = FileDateTime(Chemin & "\" & Fichier)

mais ca génere un blocage tu serais l'écrire correctement ?
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 225
28 févr. 2013 à 12:03
1 fichier = 1 date de modification = 1 cellule résultat.
Ca ne veut rien dire ton truc. Tu veux inscrire 25 fois la même chose et en écraser 24 par l'écriture suivante ??

eric
0
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 9
28 févr. 2013 à 13:01
1 fichier = 1 date de modification = 1 cellule résultat. on est d'accord

J'aimerais juste recopier ce resultat dans les 23 cellules suivantes.
ex: ma première date s'inscrit en P7--> elle se recopie jusqu'à P30
ma deuxième date s'inscrit en P36--> elle se recopîe jusqu'en P59
.......
Pour ensuite tout filtrer remettre dans l'ordre croissant et lancer ma macro suivante
0
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 9
28 févr. 2013 à 13:11
Peu etre que ce que je demande n'est pas forcément lié avec ma première macro, il existe peut etre une macro qui chercherai toutes les valeurs en colonne P, si elle en trouve une alors elle la copie sous les 23 cellues du dessus

ex : elle trouve une valeur en P6, elle copie cette valleur jusqu'a P29
elle trouve une valeur en P32, elle copie cette valeur jusqu'à P55
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 225
Modifié par eriiic le 28/02/2013 à 13:30
Essaie de prendre pour habitude de dire ce que tu veux plutôt que de mettre une ligne de code toute fausse qui ne veut rien dire.
Cells(i, "P").Resize(23) = FileDateTime(Chemin & "\" & Fichier)
Mais je ne vois pas où tu vas passer de la ligne 29 à la ligne 55 puisque tu te bases sur la dernière ligne de la colonne A.

eric
0
kgigant Messages postés 202 Date d'inscription lundi 21 mars 2011 Statut Membre Dernière intervention 8 janvier 2014 9
28 févr. 2013 à 13:45
exactement ca ! merci
Désolé mais ce n'est pas évident à formuler, pour moi ca me semble logique avec le doc sous les yeux
0