r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 février 2014
-
29 mars 2012 à 15:45
r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 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.
NHenry
Messages postés15067Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mai 2023158 28 juin 2012 à 18:29
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 ---
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 29 mars 2012 à 20:13
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15067Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mai 2023158 29 mars 2012 à 20:16
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 ---
r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 février 2014 30 mars 2012 à 09:28
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é.
r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 février 2014 30 mars 2012 à 09:43
[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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 30 mars 2012 à 09:46
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 30 mars 2012 à 09:48
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 30 mars 2012 à 10:21
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
r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 février 2014 30 mars 2012 à 14:21
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 30 mars 2012 à 14:40
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
r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 février 2014 30 mars 2012 à 15:20
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 30 mars 2012 à 16:55
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
r0man0
Messages postés41Date d'inscriptionvendredi 3 décembre 2010StatutMembreDernière intervention11 février 2014 28 juin 2012 à 15:49
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