VBA - importer nombre inconnu de fichier .1 (txt)

JackHolmes

XLDnaute Nouveau
Bonjour à tous,

J'aimerais importer un nombre inconnu de fichiers texte (.1) générés par une machine sur le même nombre de feuilles excel (un fichier par feuille). Le nombre de fichier dépend de la durée de l'essai donc indépendant de ma volonté.

Ces fichiers textes sont dans un même dossier, et diffèrent par leurs noms qui contiennent le nom du produit analysé, la température, la date et de l'heure d'essai (ex: produit_35.0_2017-02-17_10-24-00.1 ; produit_45.0_2017-02-18_11-09-40.1 ; etc...).

Pourriez-vous m'aider à créer une macro qui importe ces fichiers texte dans excel?


Merci de votre réponse :)
 

Lone-wolf

XLDnaute Barbatruc
Bonjour jackHolmes et bienvenue sur XLD :)

Un essai avec ceci, à mettre dans un module standard.

VB:
Sub Test()
    Dim Fichier As String, Chemin As String
    Dim i As Long
   
    'Répertoire contenant les fichiers
    Chemin = "C:\Documents and Settings\mimi\dossier\general\excel"
    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
 

Lone-wolf

XLDnaute Barbatruc
Re

Désolé j'ai oublié d'ajouter ceci qui est plus important.

VB:
Sub ImportText(FileName As String, PosImport As Range)
    Dim QT As QueryTable
    Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FileName, Destination:=PosImport)
    With QT
        .TextFileSemicolonDelimiter = True
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .Refresh
    End With
End Sub
 

JackHolmes

XLDnaute Nouveau
retour:

̶I̶l̶ ̶y̶ ̶a̶ ̶u̶n̶e̶ ̶e̶r̶r̶e̶u̶r̶ ̶d̶e̶ ̶c̶o̶m̶p̶i̶l̶a̶t̶i̶o̶n̶ ̶(̶S̶u̶b̶ ̶o̶u̶ ̶F̶u̶n̶c̶t̶i̶o̶n̶ ̶n̶o̶n̶ ̶d̶é̶f̶i̶n̶i̶e̶)̶.̶̶
̶M̶ê̶m̶e̶ ̶s̶i̶ ̶j̶'̶a̶i̶ ̶u̶n̶ ̶p̶e̶u̶ ̶d̶e̶ ̶m̶a̶l̶ ̶à̶ ̶c̶o̶m̶p̶r̶e̶n̶d̶r̶e̶ ̶l̶a̶ ̶b̶o̶u̶c̶l̶e̶ ̶(̶j̶e̶ ̶c̶o̶n̶n̶a̶i̶s̶ ̶s̶e̶u̶l̶e̶m̶e̶n̶t̶ ̶d̶e̶s̶ ̶n̶o̶t̶i̶o̶n̶s̶ ̶d̶e̶ ̶C̶)̶,̶ ̶j̶e̶ ̶p̶e̶n̶s̶e̶ ̶q̶u̶'̶i̶l̶ ̶s̶'̶a̶g̶i̶t̶ ̶d̶u̶ ̶"̶I̶m̶p̶o̶r̶t̶T̶e̶x̶t̶"̶,̶ ̶p̶u̶i̶s̶q̶u̶e̶ ̶m̶e̶s̶ ̶f̶i̶c̶h̶i̶e̶r̶s̶ ̶s̶o̶n̶t̶ ̶d̶e̶ ̶t̶y̶p̶e̶ ̶F̶i̶c̶h̶i̶e̶r̶ ̶1̶ ̶(̶.̶1̶)̶̶
̶J̶e̶ ̶l̶e̶s̶ ̶o̶u̶v̶r̶e̶ ̶a̶v̶e̶c̶ ̶l̶e̶ ̶b̶l̶o̶c̶-̶n̶o̶t̶e̶s̶ ̶p̶o̶u̶r̶ ̶a̶c̶c̶é̶d̶e̶r̶ ̶a̶u̶x̶ ̶d̶o̶n̶n̶é̶e̶s̶ ̶m̶a̶i̶s̶ ̶c̶e̶ ̶n̶e̶ ̶s̶o̶n̶t̶ ̶p̶a̶s̶ ̶d̶e̶s̶ ̶f̶i̶c̶h̶i̶e̶r̶s̶ ̶.̶t̶x̶t̶


EDIT: oui d'accord je viens de voir ton complément, merci :)
 

JackHolmes

XLDnaute Nouveau
Fichier = Dir(Chemin & "\*.txt")

Lors de la compilation, "erreur d'exécution '52', nom ou numéro de fichier incorrect" sur cette ligne

J'ai vu sur un autre site ceci:

myFile = Dir(myPath & "\*.xls*")

Donc avec une "*" après le format du fichier à copier, mais cela fait la même erreur.

Saurais-tu pourquoi j'ai cette erreur qui s'affiche? (j'ai bien entendu modifié le code en fonction de mon répertoire; j'ai aussi changé le .txt en .1, qui est le format de mon fichier, mais j'ai la même erreur)

Merci
 

Lone-wolf

XLDnaute Barbatruc
Re

Essaie comme ceci

Chemin = "C:\Documents and Settings\mimi\dossier\general\excel\"
Fichier = Dir(Chemin & "*.i")

Do While Fichier <> ""
With Feuil1
i = .Cells(Rows.Count, "A").End(xlUp).Row + 1
ImportText Chemin & Fichier, .Cells(i, 1)
End With
Fichier = Dir
Loop

Mais je trouve bizarre que tes fichiers textes on l'extension .i.

EDIT: et je n'ais pas fait attention que tu était sous Office 2007.
 
Dernière édition:

JackHolmes

XLDnaute Nouveau
Ils sont générés par un logiciel d'une entreprise tierce, je n'ai pas accès à ça donc je suis obligé de me contenter des .i.

Je lance la macro, il n'y a pas d'erreur mais rien ne se passe. Je vais essayer de travailler à partir de ton code pour débloquer la situation. Je reviendrais si je trouve la solution.

Merci pour ton aide et du temps que tu as pris pour me répondre
 

JackHolmes

XLDnaute Nouveau
Oui bonjour, pardon. Non il n'y a aucun moyen, le logiciel qui génère les fichiers résultats n'est pas bon et peu modifiable.

En revanche, j'ai trouvé un moyen de contourner le problème, en lui faisant générer qu'un seul fichier avec tout les résultats les uns après les autres, du coup je n'ai plus besoin d'importer un nombre inconnu de fichier et le code est simplifié.

J'utilise alors les fonctions =EQUIV et =DECALER pour séparer les plages dans une autre feuille, à partir d'un compteur 5 bits qui s'incrémente à chaque changement de température ou de date, pour savoir ou sont les données au moment voulu ( =EQUIV(1;[tableau bit 1];0)pour la variable 40°C au 1er jour par exemple)

Désolé à la personne qui aura besoin d'importer un nombre inconnu de fichier, je n'ai pas réussi à tester le code.


Merci pour tout Lone-wolf, j'en ai appris un peu plus sur les macros grâce à toi.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib