[VBA Excel]pb macro importation de fichier txt sous excel [Résolu]

Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
- - Dernière réponse : r0man0
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
- 28 juin 2012 à 18:53
Bonjour,
je suis pas sûr de mon thème, mais bon je tente.
Voilà j'ai un soucis,
En utilisant une macro, je souhaite extraire de plusieurs fichiers texte, toutes les lignes commençant par "FWP" et les injecter dans une feuille de classeur les unes à la suite des autres en respectant l'ordre des fichiers texte qui sont sous la forme "01_xxxx to xxxx".

par exemple je lance ma macro elle l'ouvre le premier .txt "01_xxxx to xxxx"
elle en extrait les lignes concernées pour les coller dans ma feuille 1
puis elle ouvre le deuxième .txt "02_xxxx to xxxx" et elle en extrait les lignes concernées qu'elle colle à la suite des précédentes.

Ai-je été suffisamment claire?

J'avais commencé par importer le fichier texte en utilisant cette macro

Rem Attribute VBA_ModuleType=VBAModule
Sub Module1
Rem Sub importation_txt()
Rem '
Rem ' importation_txt Macro
Rem ' importer et découper le fichier texte
Rem
Rem ChDrive "D:"
Rem ChDir "D:\Perso\ROM1\test macro"
Rem Fichier = Application.GetOpenFilename("Texte fichiers (*.txt), *.txt")
Rem
Rem With ActiveSheet.QueryTables.Add(Connection:= _
Rem "TEXT;" & Fichier, Destination:=Range("$A$1"))
Rem .Name = Split(Fichier, "/")(UBound(Split(Fichier, "/")))
Rem .FieldNames = True
Rem .RowNumbers = False
Rem .FillAdjacentFormulas = False
Rem .PreserveFormatting = True
Rem .RefreshOnFileOpen = False
Rem .RefreshStyle = xlInsertDeleteCells
Rem .SavePassword = False
Rem .SaveData = True
Rem .AdjustColumnWidth = True
Rem .RefreshPeriod = 0
Rem .TextFilePromptOnRefresh = False
Rem .TextFilePlatform = 850
Rem .TextFileStartRow = 1
Rem .TextFileParseType = xlDelimited
Rem .TextFileTextQualifier = xlTextQualifierDoubleQuote
Rem .TextFileConsecutiveDelimiter = True
Rem .TextFileTabDelimiter = False
Rem .TextFileSemicolonDelimiter = False
Rem .TextFileCommaDelimiter = False
Rem .TextFileSpaceDelimiter = True
Rem .TextFileOtherDelimiter = "."
Rem .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
Rem .TextFileTrailingMinusNumbers = True
Rem .Refresh BackgroundQuery:=False
Rem End With
Rem
Rem End Sub
Rem
End Sub

car ce que j'ai oublié de préciser, c'est que lors de l'importation, le fichier texte doit être découper de sorte que chaque élément de la ligne soit placé par colonne.
Je commence à toucher le fond, s'il vous plaît aidez-moi.
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
14316
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
5 décembre 2018
3
Merci
Bonjour,

J'interviens car, je remarque que tu utilises "REM", sache qu'un simple ' suffit pour déclarer un commentaire.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---

Merci NHenry 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
3
Merci
Merci, j'y veillerai dorénavant.

Merci r0man0 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de r0man0
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
1)Le code que tu montres n'est certes pas du code VB.Net
on n'y voit par ailleurs absolument pas le lien : ni avec une "Base de données", ni avec XML !
Or, ta discussion a été ouverte dans la section :
Forum > VB.NET et VB 2005 > Base de données > XML

Cette discussion aurait du être ouverte dans la section "Langages dérivés > VBA". Nous te serions reconnaissant d'y veiller dorénavant (important).
2) Il est également important de présenter ici ses bouts de code indentés et entre balises code (3ème icône en partant de la droite). Il ne s'agit pas d'un luxe, mais d'une nécessité.
Ce n'est que dans ces conditions que j'analyserai ton code.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
14316
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
5 décembre 2018
0
Merci
Bonjour,

Concernant le code, lis le point 2 de ma signature.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Commenter la réponse de NHenry
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
Sorry, je suis encore moins qu'un rookie dans le domaine, je m'assurerai de ne pas commettre deux fois la même erreur pour la prochaine fois, sinon voilà j'ai fait comme vous m'avez demandé.

Attribute VBA_ModuleType=VBAModule
Module1
Sub importation_txt()
'
' importation_txt Macro
' importer et découper le fichier texte

ChDrive "D:"
ChDir "D:\Perso\ROM1\test macro"
Fichier = Application.GetOpenFilename("Texte fichiers (*.txt), *.txt")

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Fichier, Destination:=Range("$A$1"))
.Name = Split(Fichier, "/")(UBound(Split(Fichier, "/")))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileOtherDelimiter = "."
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

End Sub


Merci pour le lien cmarcotte, je vais en faire bon usage.
Commenter la réponse de r0man0
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
[F:\macro test\01_evreux to luxembourg Tapez le texte de l'url ici.]

Et voici le fichier texte que je mentionne dans mon premier message, je peux être quelque peu confus dans mon explication, c'est clair dans ma tête mais ça sort n'importe comment sur le clavier, si il vous faut d'autre explication, n'hésitez pas.

Concernant le lien de cmarcotte, j'ai parcourus ce qui me semblait intéressant pour moi, malheureusement j'ai du mal à identifier les termes qui m'aideraient dans la réalisation de ce code.
Par exemple dans "Trouver une chaine de caractère dans un fichier texte" je ne sais pas comment lui faire dire de trouver ce qui suit le mot FWP, de le faire pour toutes les lignes et de le copier dans ma feuille excel.
Et dans "Enregistrement en CSV, avec possibilité de choisir le délimiteur" je ne vois pas ce qu'il faut remplacer pour délimiter avec espace et point comme dans le code ci-dessus.

Merci.
Commenter la réponse de r0man0
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
J'ai pas réussi à joindre le fichier texte.
Commenter la réponse de r0man0
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
S'agissant de n'importer que des lignes commençant par FWP, la méthode utilisée (querytables.add) n'est pas applicable.
Il te faut alors nécessairement :
ouvrir le fichier texte par la méthode Open ... for Input, le lire ligne par ligne et n'ajouter à ton classeur que les lignes correspondant à ton critère.
Commence par t'exercer à ceci :
Ouverture, lecture ligne par ligne et détermination des bonnes lignes à l'aide de Left.
Les exemples d'ouverture, lecture et écriture de fichiers textes foisonnent littéralement sur ce forum, dont je te rappelle qu'il dispose d'un moteur de recherche.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Je viens de lire tes dernières explications :
En plus de Left, intéresse-toi donc à MID, mais également à Split
Ouvre s'il te plait ton aide VBA sur chacun de ces trois mots. Ils sont ta solution !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Regarde à quel point est utile, sur ce forum, l'utilisation de son moteur de recherche
Les exemples d'ouverture, lecture et écriture de fichiers textes foisonnent littéralement sur ce forum, dont je te rappelle qu'il dispose d'un moteur de recherche.

Je viens de l'utiliser ===>> et je tombe littéralement en quelques secondes sur une discussion quasiment identique. Et sur un code donné par moi-même !
Tapez le texte de l'url ici.
Alors ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
Oui, il est vrai que j'ai d'abord chercher sur un moteur de recherche plus large, avant de me précipiter sur ce site pour poster mon problème, cependant je ne sais pas si je l'ai préciser mais VBA reste encore très nébuleux pour moi, un collègue m'ayant parler de ce site, m'a dit que je trouverai le bon samaritain pour m'aider, parce que je ne suis pas encore en mesure à l'heure actuel de me passer de l'enregistreur de macro et j’éprouve de grosse difficulté à trouver une solution.
Mais je vais voir ce que je peux tirer tout seul de ton lien.
Merci pour ton aide.
Commenter la réponse de r0man0
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
un collègue m'ayant parler de ce site, m'a dit que je trouverai le bon samaritain pour m'aider

Le "bon samaritain" est d'abord (voir le règlement) le moteur de recherche de ce forum ! Et cela ne nécessite pas de connaissances en matière de développement. Il s'est en outre ici manifesté deux fois, en y recherchant pour toi !
Si l'exemple du lien reste pour toi du chinois, cela veut dire que les bases elles-mêmes te font encore défaut et qu'il te faut les apprendre avant de tenter quoi que ce soit (on ne saurait construire une maison sans avoir la moindre idée de ce que sont ses parties fondamentales, à commencer par les fondations. C'est évident).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
Oui il faut commencer par le commencement, mais le problème ce que l'on m'a imposé de mettre la charrue avant les bœufs, je ne suis pas pour me précipiter tête baissé, mais j'y étais un peu contraint, faut que j'apprenne sur le tas.

ça c'est ce à quoi ressemble mon fichier txt

# FliteStar/FliteMap generated flight plan.

FPL 00
FWP x a xxxx N xx xx.xx E x xx.xx xxxx
FWP x v xxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x v xxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x v xxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x i xxxxx N xx xx.xx E x xx.xx xxxx
FWP x a xxxx N xx xx.xx E x xx.xx xxxx

et voilà ton code que j'ai essayé d'adapter, avec peine.
Mais je n'intuite pas pourquoi il commence par Option Explicit.
C'est peut-être pour ça que je n'arrive pas à la lancer.
J'aimerai pouvoir retrouver la fenêtre qui me permettait de choisir et d'ouvrir mon fichier txt.
J'ai compris que la deuxième partie du code concernait la mise en forme, mais je me demandais où est ce qu'il fallait que je précise ma séparation avec des espaces et des points.

Option Explicit
Private Sub CommandButton1_Click()
  Dim derlig As Integer, ligne As String, feuille_desti As String
  Application.ScreenUpdating = False
  feuille_desti = "Feuil2"
  derlig = Range("A:A").End(xlDown)
 ChDrive "F:"
        ChDir "F:\Perso\ROM1\test macro"
        Fichier = Application.GetOpenFilename("Texte fichiers (*.txt), *.txt")
Do While Not EOF(1)
      Line Input #1, ligne
      If Left(ligne, 2) = "FWP" Then
        ajout ligne, derlig, feuille_desti
      End If
    Loop
  Close #1
  Application.ScreenUpdating = True
End Sub

Private Sub ajout(ByVal toto, ByRef derlig As Integer, ByVal F As String)
  Dim titi
  With Worksheets(F)
    titi = Split(toto, " ", ".")
    .Range(.Cells(derlig, 1), .Cells(derlig, UBound(titi) + 1)) = titi
    derlig = derlig + 1
  End With
End Sub
Commenter la réponse de r0man0
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Pressé ou non, bousculé ou non, tu vas s'il te plait ouvrir ton aide VBA sur la fonction split et la lire, hein.
Car :
titi = Split(toto, " ", ".")

n'a aucun sens !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
ok
Commenter la réponse de r0man0
Messages postés
41
Date d'inscription
vendredi 3 décembre 2010
Dernière intervention
11 février 2014
0
Merci
A y est je crois avoir trouvé mon problème depuis qques mois, par contre je n'arrive pas à intégrer une ligne de code que j'ai trouvé pour ne prendre les lignes qu'à partir de la ligne 3 dans mes fichiers txt,

mon code pour ce post

Sub Module1
Rem 
Rem Sub Importtxt()
Rem     Dim MyFile, MyPath, MyName
Rem     Dim Cell As Range
Rem     Application.ScreenUpdating = False
Rem     NomDuFichierOrigine = ActiveWorkbook.Name
Rem     Répertoire = ActiveWorkbook.Path & ""
Rem     Sheets("FeuilleDeTravail").Range("A1:A1000").Value = ""
Rem     CompteurFichier = 1
Rem     MyFile = Dir(Répertoire & "*.txt")
Rem     Sheets("FeuilleDeTravail").Cells(CompteurFichier, 1) = MyFile
Rem     CompteurFichier = CompteurFichier + 1
Rem     Do Until MyFile = ""
Rem     MyFile = Dir
Rem     If MyFile <> NomDuFichierOrigine Then
Rem     Sheets("FeuilleDeTravail").Cells(CompteurFichier, 1) = MyFile
Rem     CompteurFichier = CompteurFichier + 1
Rem     End If
Rem     Loop
Rem     With Sheets("FeuilleDeTravail")
Rem         For Each Cell In .Range("A1:A" & .Range("A65536").End(xlUp).Row)
Rem             NomDuFichier = Cell
Rem             NomCompletDuFichierAOuvrir = Répertoire & Cell
Rem             Workbooks.OpenText Filename:= _
Rem             NomCompletDuFichierAOuvrir, Origin:= _
Rem             xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
Rem             , ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:= _
Rem             False, Space:=True, Other:=True, Otherchar:=".", FieldInfo:=Array(Array(1, 1), Array(2, 1) _
Rem             , Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1) _
Rem             , Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1)), TrailingMinusNumbers _
Rem             :=True
Rem         ActiveSheet.Range("A1:M" & ActiveSheet.Range("A65536").End(xlUp).Row).Copy
Rem         Workbooks(NomDuFichierOrigine).Sheets("Résultats").Range("A" & Workbooks(NomDuFichierOrigine).Sheets("Résultats").Range("A65536").End(xlUp).Row + 1).PasteSpecial Paste:=xlPasteValues
Rem         Application.DisplayAlerts = False
Rem         Workbooks(NomDuFichier).Close savechanges:=False
Rem         Application.DisplayAlerts = True
Rem         Next
Rem     End With
Rem End Sub
Rem 
Rem 
End Sub


et concernant l'autre commande elle est ici

Sub import()
    Dim Directory As String, File As String, Temp As String
    Dim NumRow As Long, NumCol As Integer
    Dim FF As Integer, I As Integer
    Dim LigFic As Long
   
    Directory = ThisWorkbook.Path & "" & "fevrier08"   ' "E:\fevrier08"
    File = Dir(Directory & "*.txt")
    NumRow = ActiveCell.Row
    NumCol = ActiveCell.Column
    With ActiveSheet
        FF = FreeFile
        LigFic = 0
        Do While File <> ""
            Open Directory & File For Input As #FF
            Do While Not EOF(FF)
                Line Input #FF, Temp
                If LigFic > 4 Then
                    Table = Split(Temp, vbTab)
                    For I = 0 To UBound(Table)
                        If IsDate(Table(I)) Then
                            .Cells(NumRow, NumCol + I) = CDate(Table(I))
                        Else
                            .Cells(NumRow, NumCol + I) = Table(I)
                        End If
                    Next
                    NumRow = NumRow + 1
                End If
                LigFic = LigFic + 1
            Loop
            LigFic = 0
            Close #FF
            File = Dir
        Loop
    End With
End Sub


je ne sais que faire
Commenter la réponse de r0man0

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.