mise en forme lors de la recuperation de donnée depuis fichier text

hakoko

XLDnaute Nouveau
Bonsoir,
j'ai une macro qui recupere la drerniere ligne d'un fichier text, sauf que lors de la recuperation de ce fichier, la mise en forme change, il me copie tous dans une seule colonne, pouvez vous m'aidez a le recuperer cette ligne, avec des colonnes separées?
Sub macro()


Dim Fe As Worksheet
Dim Plage As Range
Dim Fichier As String

Fichier = "C:\Users\ishak\Desktop\douka\test.txt"

Set Fe = Worksheets("Feuil1")

With Fe

With .QueryTables.Add("TEXT;" & Fichier, Range("A1"))

.Refresh False
.Delete '<supprime la liaison

End With

Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(-1, 0))

Plage.EntireRow.Delete



End With

End Sub

merci pour votre aide
 

Pièces jointes

  • test.zip
    1.4 KB · Affichages: 14
  • test.zip
    1.4 KB · Affichages: 15
  • test.zip
    1.4 KB · Affichages: 15

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Il est normal que tu ne puisses pas récupérer la mise en forme de ton tableau, car il n'y a pas de séparateur fixe.
Dans ton fichier, j'ai trouvé 5 séparateurs différents, il faut les remplacer par des points virgule.
Idem pour la première ligne dans laquelle on mettra un ";" par cellule vide. Tout cela peut se traiter avec une petite macro. S'il s'agit de ne récupérer que la dernière ligne, c'est encore plus facile par macro.
Si tu as besoin, n'hésite pas. Ci joint ton tableau au format CSV (lisible avec NotePad++).
 

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Bizarre je ne vois pas le fichier joint. Je remets les deux. La macro se trouve dans le fichier .XLS et le tableau dans le fichier .ZIP
 

Pièces jointes

  • test.xls
    26 KB · Affichages: 42
  • test.xls
    26 KB · Affichages: 41
  • test.xls
    26 KB · Affichages: 41
  • test.zip
    1.3 KB · Affichages: 25
  • test.zip
    1.3 KB · Affichages: 22
  • test.zip
    1.3 KB · Affichages: 24

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Le fichier Test.txt et le fichier Test.xls contenant la macro doivent être dans le même dossier (n'importe où, sur n'importe quel lecteur), la macro commence par l'identification du dossier en question.
 

hakoko

XLDnaute Nouveau
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Re,

SVP, j'ai une macro qui importe differents données de differents fichiers de differents format (texte, CSV,..) chaque feuille du classeur importe un fichier en totalité pui suprime tt les données ne laissant que la 1ere et la derniere. vu que la macro prend du temp a se lancé jaimerai remplacé "limport du fichier et la supression des données inutile" par votre methode qui importe selement la derniere ligne. j'ai essayé mais j'y arrive pas. pouriez vous modifier ma macro SVP? merci pour votreaide
 

Pièces jointes

  • recup.zip
    7.8 KB · Affichages: 25
  • recup.zip
    7.8 KB · Affichages: 21
  • recup.zip
    7.8 KB · Affichages: 24

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Je vois que tu nages pas mal en VB, je préfère donc t'apprendre à traiter ce problème plutôt que de passer un temps fou à debugger ton code, ce qui ne t'apporterait rien. Je t'explique le mien dans dans le détail.

Code:
Sub Macro1()
    ' début déclaration de variables
    Dim dossier As String, fichier As String
    Dim ligne1 As String, ligne2 As String
    Dim compteur As Integer, J As Integer 
    ' fin déclaration de variables
        
    ' ThisWorkbook.Path & "\" retourne le nom du chemin du dossier dans lequel
    ' se trouve le fichier texte et le fichier Excel contenant la macro
    dossier = ThisWorkbook.Path & "\"
    ' On ajoute le nom du fichier au chemin pour avoir
    ' l'emplacement complet du fichier sur le disque.
    fichier = dossier & "test.txt"
    
    ' On ouvre ce fichier en lecture (For Input)
    ' Pour écrire dans un fichier texte on aurait utilisé For Output
    Open fichier For Input As #1
        ' On lit les 3 premières lignes du fichier texte sans les traiter
        ' elles correspondent aux lignes des titres
        For J = 1 To 3
            Input #1, ligne2
        Next J
        ' On lit la 1ère ligne des données du fichier texte et on la traite
        Input #1, ligne2
        ' on va écrire la 1ère ligne des données sur la ligne 3
        ' parce qu'on se réserve les 2 premières pour les titres
        Call Extraction(ligne2, 3)
        
        ' On cherche la dernière ligne non vide du fichier texte
        While Not EOF(1)
            ' EOF(1) signifie End Of File (fin de fichier)du registre #1
            ' (celui qu'on a ouvert pour lire le fichier texte)
            Input #1, ligne1
            ' Trim permet de supprimer des espaces vides de début et de fin de chaîne
            ' si ligne1 vaut "   AZERTY   " Trim(ligne1) vaut "AZERTY"
            If Trim(ligne1) <> "" Then ligne2 = Trim(ligne1)
        Wend
        ' On a lu toutes les lignes du fichier texte et mémorisé
        ' dans ligne2 la dernière ligne non vide du fichier
        ' on va écrire la dernière ligne des données sur la ligne 4
         Call Extraction(ligne2, 4)
    ' On referme le fichier texte qu'on avait ouvert
    Close #1
    
End Sub

Private Sub Extraction(ligne2, numligne)
    Dim ligne1 As String
    Dim J As Integer
    Dim Tableau As Variant
    
    ' On met en place un séparateur fixe
    ' Le point-virgule sert à séparer les colonnes dans un fichier CSV
    ' On commence par les chaînes de 5 espaces et on termine par les chaînes de 1 espace
    For J = 5 To 1 Step -1
        ' on remplace les chaînes de 5,4,3,2 et 1 espace par des point-virgules
        ' Le point-virgule sert à séparer les colonnes dans un fichier CSV
        ligne2 = Replace(ligne2, Space(J), ";")
    Next J
    ' On éclate dans un tableau la chaîne qui ne contient
    ' plus que des point-virgules comme séparateurs
    Tableau = Split(ligne2, ";")
    
    ' On reconstitue le tableau dans le fichier Excel
    ' ATTENTION : le premier index du tableau vaut 0 et non pas 1
    For J = 0 To UBound(Tableau)
        Cells(numligne, J + 1) = Tableau(J)
    Next J
    ' On vide le tableau, son contenu est dans le tableur
    Erase Tableau
End Sub
 

hakoko

XLDnaute Nouveau
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Re,

demain de bonne heur, je presente mon projet et tt le parametrage de mon interface et plein dautre application sont fondé sur la macro que je vous ai envoyé. sont focntionnement,
j'insert le nom du fichier dans A1
type de fichier dans B1
chemin vers ce fichier dans C1
et jaurai les données dans cette feuil.
jai essayé mille solution pour la rendre plus legere mais rien y fait, je souhaiterai remplacer ce qui ya entre with et end with par votre fonction qui recupere la derniere ligne si ya moyen.

merci si vous pouvez me donné un coup de pousse, je suis dans la galere.:(
 

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Attends, je crois que la fatigue commence à jouer.
Tu m'as envoyé pas mal de choses, mais ce que je voudrais voir c'est ton fichier CSV. Pour le texte c'est très simple.
J'attends ton retour.
 

hakoko

XLDnaute Nouveau
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Re , voici mon fichier CSV, merci bcp
 

Pièces jointes

  • download.zip
    4.8 KB · Affichages: 23
  • download.zip
    4.8 KB · Affichages: 26
  • download.zip
    4.8 KB · Affichages: 21

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Tu vois, on n'est jamais assez prècis.

Sur ce fichier CSV, quel est le numéro de la première ligne que tu veux extraire ? Je veux juste un numéro, sans bla...bla...
Comme ce fichier porte l'extension .csv, tu n'as pas besoin de préciser le type de fichier en B2.
Je sais bien qu'il existe plusieurs formats CSV, mais on va faire simple : extension point-virgule.

Au passage, j'ai croisé plus de personnes en retard dans ma vie que de personnes pressées. Et qui n'est pas en avance, est en ...... ?
Bon, on n'a pas forcément le même âge et les mêmes contraintes.
 

hakoko

XLDnaute Nouveau
Re : mise en forme lors de la recuperation de donnée depuis fichier text

re,
je veux recuperer la ligne la plus recente, et ellle se trouve en bas(derniere ligne), la meme chose pour les deux fichier text ke je vous ai envoyé;
A+
 

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Alors je n'ai pas tout compris, car j'ai bien capté :
chaque feuille du classeur importe un fichier en totalité pui suprime tt les données ne laissant que la 1ere et la derniere
.

Donc je vais faire avec la dernière ligne et on en restera là puisque c'est pour demain.
 

Dormeur74

XLDnaute Occasionnel
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Je crois que je suis arrivé au bout du bout.

Dans ton fichier .txt, le séparateur des milliers est le point US (exemple PI = 3.14) et dans ton fichier csv, le séparateur est la bonne virgule française (PI=3,14).

On est sur deux systèmes différents sur le plan de la lecture des fichiers texte (à cause de la virgule) et je ne vois pas de solution rapide pour gérer tes fichiers source. Bon courage pour la suite.
 

hakoko

XLDnaute Nouveau
Re : mise en forme lors de la recuperation de donnée depuis fichier text

Bonjour,

voila j'ai essayé une nouvelle macro adapté a mon fichier ci-joint, sauf que ça bug " erreur d’exécution '63':

Numéro d'enregistrement incorrect" et je ne sais pas de vient ce problème.


Type Enregistrement

Date As String * 10
Time As String * 8
Temp_Out As String * 7
Hi_Temp As String * 7
Low_Temp As String * 6
Out_Hum As String * 7
Dew_Pt As String * 6
Wind_Speed As String * 6
Wind_Dir As String * 7
Wind_run As String * 6
Hi_Speed As String * 7
Hi_Dir As String * 5
Wind_Chill As String * 7
Heat_Index As String * 7
THW_Index As String * 7
Bar As String * 8
Rain As String * 6
Rain_Rate As String * 7
Heat_D_D As String * 8
Cool_D_D As String * 8
In_Temp As String * 6
In_Hum As String * 7
In_Dew As String * 7
In_Heat As String * 7
In_EMC As String * 6
In_Air_Density As String * 8
Wind_Samp As String * 6
Wind_Tx As String * 6
ISS_Recept As String * 8
Arc_Int As String * 6

End Type

Sub DerLigne()

Dim Enrg As Enregistrement
Dim I As Long
Dim Der As Long

Open "D:\texte.txt" For Random As #1 Len = Len(Enrg)

'calcule le nombre d'enreristrement...
Der = LOF(1) / Len(Enrg)

'et récupère le dernier
Get #1, Der, Enrg

Close #1

'et les inscrits dans la ligne 1
With Enrg

Range("A1") = .Date
Range("A1").Offset(0, 1) = .Time
Range("A1").Offset(0, 2) = .Temp_Out
Range("A1").Offset(0, 3) = .Hi_Temp
Range("A1").Offset(0, 4) = .Low_Temp
Range("A1").Offset(0, 5) = .Out_Hum
Range("A1").Offset(0, 6) = .Dew_Pt
Range("A1").Offset(0, 7) = .Wind_Speed
Range("A1").Offset(0, 8) = .Wind_Dir
Range("A1").Offset(0, 9) = .Wind_run
Range("A1").Offset(0, 10) = .Hi_Speed
Range("A1").Offset(0, 11) = .Hi_Dir
Range("A1").Offset(0, 12) = .Wind_Chill
Range("A1").Offset(0, 13) = .Heat_Index
Range("A1").Offset(0, 14) = .THW_Index
Range("A1").Offset(0, 15) = .Bar
Range("A1").Offset(0, 16) = .Rain
Range("A1").Offset(0, 17) = .Rain_Rate
Range("A1").Offset(0, 18) = .Heat_D_D
Range("A1").Offset(0, 19) = .Cool_D_D
Range("A1").Offset(0, 20) = .In_Temp
Range("A1").Offset(0, 21) = .In_Hum
Range("A1").Offset(0, 22) = .In_Dew
Range("A1").Offset(0, 23) = .In_Heat
Range("A1").Offset(0, 24) = .In_EMC
Range("A1").Offset(0, 25) = .In_Air_Density
Range("A1").Offset(0, 26) = .Wind_Samp
Range("A1").Offset(0, 27) = .Wind_Tx
Range("A1").Offset(0, 28) = .ISS_Recept
Range("A1").Offset(0, 29) = .Arc_Int

End With

End Sub
 

Pièces jointes

  • texte.zip
    1.4 KB · Affichages: 14
  • texte.zip
    1.4 KB · Affichages: 15
  • texte.zip
    1.4 KB · Affichages: 17

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 348
Membres
103 822
dernier inscrit
kader55