Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2828 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro pour Importer fichier txt spécifique [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro pour Importer fichier txt spécifique [résolu]

n°2184082
ccadic
Posté le 04-04-2013 à 14:35:33  profilanswer
 

Bonjour à tous,
 
En fait, j'aimerai importer un fichier txt sous excel pour un type de fichier délimité par des séparateurs espaces.
 
Je pense que c'est assez simple mais je ne connais pas la commande pour le type de fichier et le type de séparateur.
 
Je vous ai mis un exemple de ce que j'aimerai obtenir.
 
Je vous remercie d'avance.


Message édité par ccadic le 05-04-2013 à 13:46:15
mood
Publicité
Posté le 04-04-2013 à 14:35:33  profilanswer
 

n°2184161
Marc L
Posté le 04-04-2013 à 17:00:28  profilanswer
 

 
            Bonjour,   LoL pour l'exemple ‼
 
            Sinon le faire manuellement en utilisant l'enregistreur de macros, c'est pratique pour se donner une base de code …
 

n°2184164
ccadic
Posté le 04-04-2013 à 17:03:38  profilanswer
 

Je l'ai fait, j'ai pu donc avancer un peu.
 
En fait j'aimerai supprimer des lignes soit vides soit contenant du texte.
 
Pour les lignes vides j'ai trouvé mais pas pour lignes contenant du texte

n°2184174
Marc L
Posté le 04-04-2013 à 17:26:21  profilanswer
 

 
           Sans voir de code, comment aider ?       Sinon quel est le type des lignes à conserver ?
 

n°2184180
ccadic
Posté le 04-04-2013 à 17:30:25  profilanswer
 

Voici un exemple du fichier txt que je veux importer :
 
 
 
 
 
 
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        12.000000
     126           0        27.000000
     127           0        25.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0         6.000000
     126           0         5.000000
     127           0         8.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        10.000000
     126           0        20.000000
     127           0         6.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
 
 
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        15.000000
     126           0       120.000000
     127           0        66.000000
     136           0        23.000000
     140           0        33.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        63.000000
     126           0        82.000000
     127           0         9.000000
     136           0        27.000000
     140           0        32.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        99.000000
     126           0        26.000000
     127           0       134.000000
     136           0        22.000000
     140           0         3.000000
 
 
 
 
 
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        10.000000
     126           0        20.000000
     127           0         6.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        10.000000
     126           0        20.000000
     127           0         6.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        10.000000
     126           0        20.000000
     127           0         6.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
Voici ce que j'aimerai obtenir :  
ID--El. Pos. A B C
125 0 12.000000 15.000000 32.000000
126 0 27.000000 120.000000 562.000000
127 0 25.000000 66.000000 358.000000
136 0 3.000000 23.000000 27.000000
140 0 3.000000 33.000000 89.000000
125 0 6.000000 63.000000 66.000000
126 0 5.000000 82.000000 2.000000
127 0 8.000000 9.000000 123.000000
136 0 3.000000 27.000000 80.000000
140 0 3.000000 32.000000 2.000000
125 0 10.000000 99.000000 27.000000
126 0 20.000000 26.000000 244.000000
127 0 6.000000 134.000000 3.000000
136 0 3.000000 22.000000 46.000000
140 0 3.000000 3.000000 25.000000

n°2184183
ccadic
Posté le 04-04-2013 à 17:31:44  profilanswer
 

J'ai utilisé ce code pour supprimer les lignes vides :
 
Sub TEST()
 
Dim LastLig As Long, i As Long, pp As Long, j As Long
 
Application.ScreenUpdating = False
With Worksheets("Feuil1" ) 'adapte le nom de ta feuille
    LastLig = .UsedRange.Rows.Count + .UsedRange.Row - 1
    For i = LastLig To 2 Step -1
        If Application.CountA(.Rows(i)) = 0 Then .Rows(i).Delete
    Next i
     
End With

n°2184192
Marc L
Posté le 04-04-2013 à 17:43:45  profilanswer
 

ccadic a écrit :

Voici ce que j'aimerai obtenir :  
ID--El. Pos. A B C
125 0 12.000000 15.000000 32.000000

            Rien que cette première ligne 125, je ne vois pas bien la concordance avec le fichier,
            comment arrives-tu à ce résultat (notamment les 32) ?
 
            J'aimerais bien voir une logique claire et un lien si possible sur le fichier à importer …
 

n°2184196
ccadic
Posté le 04-04-2013 à 17:49:37  profilanswer
 

A partir du fichier txt, il faut :
- Supprimer les premières lignes vides
- Supprimer la 1e colonne obtenue
- Supprimer les 3 lignes vides plus la ligne contenant (-Entity ID...) entre chaque mini tableau
Après avoir fait cela sur les 3 premiers mini tableau, on obtient la colonne A.
On refait ça pour avoir B, et là on copie la colonne de chiffre obtenue puis on la colle à coté de la colonne A et pareil pour C.

n°2184197
ccadic
Posté le 04-04-2013 à 17:50:39  profilanswer
 

Voila ce que donne l'enregistrement :
 
Sub Macro1()
'
' Macro1 Macro
'
 
'
    Rows("1:8" ).Select
    Selection.Delete Shift:=xlUp
    Columns("A:A" ).Select
    Selection.Delete Shift:=xlToLeft
    Rows("7:10" ).Select
    Selection.Delete Shift:=xlUp
    Rows("12:15" ).Select
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=15
    Rows("31:34" ).Select
    Selection.Delete Shift:=xlUp
    Rows("36:39" ).Select
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=27
    Rows("55:58" ).Select
    Selection.Delete Shift:=xlUp
    Rows("60:63" ).Select
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=-21
    Range("C26:C40" ).Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-24
    Range("D2" ).Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=33
    Range("C50:C64" ).Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-42
    Range("E2" ).Select
    ActiveSheet.Paste
    Range("C1" ).Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "A"
    Range("D1" ).Select
    ActiveCell.FormulaR1C1 = "B"
    Range("E1" ).Select
    ActiveCell.FormulaR1C1 = "C"
    Range("A20:E84" ).Select
    Selection.ClearContents
    Range("A19" ).Select
    ActiveWindow.SmallScroll Down:=-18
End Sub


Message édité par ccadic le 04-04-2013 à 17:53:42
n°2184214
Marc L
Posté le 04-04-2013 à 19:08:44  profilanswer
 

Marc L a écrit :

Rien que cette première ligne 125, je ne vois pas bien la concordance avec le fichier,
comment arrives-tu à ce résultat (notamment les 32) ?

            Toujours pas eu d'explication sur ce 32 d'où peut-il bien sortir à part d'un chapeau magique ‼
 
            Si ton code généré par l'enregistreur de macros fonctionne, c'est réglé.
 
            Sinon je préfère traiter les données en amont et n'inscrire dans la feuille que le résultat final attendu, plus simple, efficace et rapide …
            Pour l'instant, bloquant dès ta première ligne à cause du 32, je retiens qu'il ne faut conserver que les lignes avec des nombres …
 

mood
Publicité
Posté le 04-04-2013 à 19:08:44  profilanswer
 

n°2184261
ccadic
Posté le 05-04-2013 à 09:45:00  profilanswer
 

Pour le moment j'arrive à supprimer les lignes vides et maintenant j'aimerai supprimer certaines lignes avec du texte.

n°2184265
ccadic
Posté le 05-04-2013 à 10:04:03  profilanswer
 

Y avait une erreur dans le fichier txt :
 
 
 
 
 
 
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        12.000000
     126           0        27.000000
     127           0        25.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0         6.000000
     126           0         5.000000
     127           0         8.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        10.000000
     126           0        20.000000
     127           0         6.000000
     136           0         3.000000
     140           0         3.000000
 
 
 
 
 
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        15.000000
     126           0       120.000000
     127           0        66.000000
     136           0        23.000000
     140           0        33.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        63.000000
     126           0        82.000000
     127           0         9.000000
     136           0        27.000000
     140           0        32.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        99.000000
     126           0        26.000000
     127           0       134.000000
     136           0        22.000000
     140           0         3.000000
 
 
 
 
 
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        32.000000
     126           0       562.000000
     127           0       358.000000
     136           0        27.000000
     140           0        89.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        66.000000
     126           0         2.000000
     127           0       123.000000
     136           0        80.000000
     140           0         2.000000
 
 
 
-Entity ID--El. Pos. ID--Scalar Value-
     125           0        27.000000
     126           0       244.000000
     127           0         3.000000
     136           0        46.000000
     140           0        25.000000
 
Il était là le 32, etc...

n°2184267
ccadic
Posté le 05-04-2013 à 10:04:54  profilanswer
 

Le souci c'est que le nombre le ligne de donnée dans un mini-tableau peut varier...

n°2184300
Marc L
Posté le 05-04-2013 à 12:48:35  profilanswer
 

 
            Sauf que pour la première ligne avec ton dernier fichier j'obtiens ceci :

      125 0 12.000000 6.000000 10.000000


            Avec une autre procédure regroupant sur les valeurs des deux premières colonnes, il y a un 32 mais dans la dernière série :

      125 0 12.000000 6.000000 10.000000 15.000000 63.000000 99.000000 32.000000 66.000000 27.000000

            Alors, où est la logique ?‼
 

ccadic a écrit :

Pour le moment j'arrive à supprimer les lignes vides et maintenant j'aimerai supprimer certaines lignes avec du texte.

            Il n'a pas compris !

Marc L a écrit :

Sinon je préfère traiter les données en amont et n'inscrire dans la feuille que le résultat final attendu

            Donc en procédant ainsi, il n'y a rien à supprimer ‼
 
            Exemple :

Code :
  1. Sub ImportSimple()
  2.     N = FreeFile
  3.     Open "D:\Tests\ccadic.txt" For Input As #N
  4.     L = Split(Input(LOF(N), #N), vbCrLf)
  5.     Close #N
  6.     Set N = ActiveSheet.UsedRange
  7.     Range([A2], N(N.Count)).ClearContents
  8.     R = 1
  9.  
  10.     For Each N In L
  11.         If Val(N) > 0 Then
  12.             R = R + 1
  13.             S = Split(Application.WorksheetFunction.Trim(N))
  14.             Cells(R, 1).Resize(, UBound(S) + 1) = S
  15.         End If
  16.     Next
  17. End Sub

           Vu ?
 
           Au passage, cela résout donc ton problème de code "pourri" d'importation que tu as posté hier sur VB France !
           Je remarque que tu as été aussi peu clair, c'est pour cela qu'ils ne t'ont pas répondu …
 
           Aide primaire :  curseur sur une instruction puis touche F1 …
 

n°2184306
ccadic
Posté le 05-04-2013 à 13:34:41  profilanswer
 

Merci, j'ai réussi à faire qqch qui me convient bien et qui fonctionne.
Toutefois, j'aimerai avoir une boucle sur mon importation de fichier. Pour le moment je fais ça :
 
'Importer le fichier txt
    ChDir "C:\Users\stagiaire\Documents\EXCEL"
    Workbooks.OpenText Filename:="C:\Users\stagiaire\Documents\EXCEL\INSERT-FORCES-GP01.txt", _
        Origin:=xlMSDOS, _
        StartRow:=1, _
        DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=True, _
        Tab:=False, _
        Semicolon:=False, _
        Comma:=False, _
        Space:=True, _
        Other:=False, _
        FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
 
Mais j'aimerai ne pas avoir à nommer le nom de mon fichier mais plutôt importer chaque fichier txt dans un fichier excel différent, est-ce possible !?

n°2184309
Marc L
Posté le 05-04-2013 à 13:43:37  profilanswer
 

 
           Tout est quasi possible …   (voir l'aide de la fonction Dir)
 
           Mais là ce n'est plus le sujet de départ, celui-ci est donc clos !
 

n°2184469
Marc L
Posté le 06-04-2013 à 13:30:05  profilanswer
 

ccadic a écrit :

Merci, j'ai réussi à faire qqch qui me convient bien et qui fonctionne.

            En fait tu n'as rien fait, c'est seulement du code généré par l'enregistreur de macros !
 
            Si tu persistes à utiliser cette méthode OpenText, ce serait bien de corriger ses paramètres
            (certains sont erronés, d'autres n'ont pas lieu d'être),
            notamment concernant la structure du fichier à importer dans  FieldInfo
            car seules les colonnes 2 à 4 ont besoin d'être importées …
 
            Voir l'exemple en développant  XlColumnDataType  dans  FieldInfo  dans l'aide de la méthode  OpenText  …
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro pour Importer fichier txt spécifique [résolu]

 

Sujets relatifs
lecture d'un fichier java .niodécouper une chaine de caractères d'un fichier en java
Upload de fichier + gestion comptes utilisateursPython et XBMC : récupérer le fichier en cours de lecture
Décodage fichier phpOuverture fichier excel lié a a access, depuis access - pb update
[Joomla!] Fichier de log dans le dossier administrator/Macro rechercher remplacer [Résolu]
Ecritude dans un fichier.bat à partir de VBAErreur d execution 432 nom du fichier ou de la classe introuvable lors
Plus de sujets relatifs à : Macro pour Importer fichier txt spécifique [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR