Fichier TXT vers excel 2003

Résolu
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 18 mars 2012 à 09:32
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 18 mars 2012 à 16:41
Bonjour à tous,

J'ai un problème à résoudre concernant l'import dans fichier TXT vers Excel 2003.

Je m?explique :
J'ai un fichier TXT qui ce présente sous la forme suivante et qui fait au complet plus de 70 000 lignes.

Magasin   |col |hauteur  |adresse   | Equipement  |Date 1ere mise en service  
MG        |.   |.        |AF        |O            |20/05/2010           
MG        |.   |.        |AG        |N            |20/05/2011  
MG        |.   |.        |AZ        |O            |20/05/2009 
MG        |.   |.        |AA        |N            |20/05/2008
MG        |.   |.        |AC        |O            |20/05/2008           
MA        |.   |.        |AC        |O            |20/05/2008           
MB        |.   |.        |AC        |O            |20/05/2008  
MG        |.   |.        |AC        |O            |10/05/2007  




Je souhaiterai importer dans une feuille Excel uniquement les MG de la première colonne du fichier .TXT



Le code ci-dessous permet d'importer le fichier au complet, sans critère, mais comme le fichier .TXT fait plus de 70 000 et que Excel 2003 ne gère pas autant de ligne il ne manque des données.


Dim mesdonnées
mesdonnées = "import"

 
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\Downloads" & mesdonnées & ".txt", Destination:=Range("A1"))
        .Name = "données"
        .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 = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With









Est-il possible de modifier ce code pour y rajouter un critère (uniquement les MG de la première colonne) ou bien une autre méthode ?

Merci pour votre aide.

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 16:14
Ben ... fastoche ===>> tu laisses ajout tel quel et tu ne modifies que ce code, ainsi :
Private Sub CommandButton1_Click()
  Dim derlig As Integer, ligne As String, feuille_desti As String, oui As Boolean
  Application.ScreenUpdating = False
  feuille_desti = "Feuil2" ' <<<<<<======== ici le nom de la feuille d'accueil des données
  derlig = 2 ' <<<========== ici ta ligne de départ sur la feuille (ou détermination par code avec End(XlUp) )
  Open "d:\couic.txt" For Input As #1 ' <<<<<<===== ici ton fichier à traiter
    Do While Not EOF(1)
      Line Input #1, ligne
      If Left(ligne, 2) = "MG" Or Not oui Then
        ajout ligne, derlig, feuille_desti
        oui = True
      End If
    Loop
  Close #1
  Application.ScreenUpdating = True
End Sub


Une fois testé : clique sur "réponse acceptée" (que l'on puisse libérer ce sujet).

____________________
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 10:14
Bonjour,
Le plus simple est alors probablement de :
- ouvrir ton fichier texte (méthode Open For input)
- ouvrir un deuxième fichierB (méthode Open For Output)
- le lire ligne par ligne (Line Input)
--- si ligne commence par "MG" ===>> écrire dans fichierB (par Print)
- fermer les deux fichiers
- importer FichierB dans Excel

Le moteur de recherche de ce forum devrait te conduite à une multitude d'exemples en ce qui concerne la lecture et l'écriture de fichiers texte. (sujet récurrent).
____________________
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
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
18 mars 2012 à 10:26
Merci pour ta réponse !

Oui effectivement tu as raison je pourrais utiliser ta méthode car je travaille actuellement de cette manière mais cela m?oblige à recréer un autre fichier TXT.

C'est pour ça que j'aimerai importer directement dans Excel avec des critères ?

A ton avis c'est possible ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 10:38
Si tu veux utiliser des critères directement, ce sera pire :
1) exporter vers table de base de données
2) requête sur la table

En te rappelant que la première méthode peut se terminer par un Kill FichierB !



____________________
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 10:47
Ou encore (mais sera beaucoup plus lent en exécution) :
- lire le fichierA ligne par ligne
- si ligne commence par "GB" ====>> split de la ligne avec le caractère | ===>> alimenter ta feuille de calcul avec chaque élément du split ainsi fait


____________________
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 11:12
Non, finalement et tout bien pensé :
Tu peux aller aussi vite sans créer un second fichier ===>>
Regarde :
soit ligne_bonne chaque ligne retenue à la lecture du fichierA ===>>
On va ici simplifier (je te laisse définir ligne_bonne à ta lecture) : exemple/démo uniquement :

Option Explicit
Private Sub CommandButton1_Click()
  Dim derlig As Integer, ligne_bonne As String
  derlig = 2
  ligne_bonne = "aaa|bbb|ccc"
  ajout ligne_bonne, derlig
  ligne_bonne = "xxx|yyy|zzz|kkk"
  ajout ligne_bonne, derlig
End Sub

Private Sub ajout(ByVal toto, ByRef derlig As Integer)
  Dim titi
  titi = Split(toto, "|")
  Range(Cells(derlig, 1), Cells(derlig, UBound(titi) + 1)) = titi
  derlig = derlig + 1
End Sub

donc : toi, dans ton code de lecture par input :
pour chaque ligne ligne_bonne :
ajout ligne_bonne, derlig


____________________
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 mars 2012 à 11:45
Allez (c'est dimanche).
Voici tout le machin :
Option Explicit
Private Sub CommandButton1_Click()
  Dim derlig As Integer, ligne As String, feuille_desti As String
  Application.ScreenUpdating = False
  feuille_desti = "Feuil2" ' <<<<<<======== ici le nom de la feuille d'accueil des données
  derlig = 2 ' <<<========== ici ta ligne de départ sur la feuille (ou détermination par code avec End(XlUp) )
  Open "d:\couic.txt" For Input As #1 ' <<<<<<===== ici ton fichier à traiter
    Do While Not EOF(1)
      Line Input #1, ligne
      If Left(ligne, 2) = "MG" 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




____________________
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
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
18 mars 2012 à 15:37
Merci pour ton travail.

Excellent c'est tout ce que je voulais.

Je te demanderai uniquement une chose supplémentaire.

Pouvons-nous garder la première ligne également cela servira à simplifier les recherches avec des filtres dans Excel?


Magasin      |col |hauteur  |adresse   | Equipement  |Date 1ere mise en service  



merci
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
18 mars 2012 à 16:41
Comme tu le dis fastoche !!

Un grand merci à toi pour ta patience et ta célérité.


Et vive le Dimanche !!

A+
0
Rejoignez-nous