Rechercher : dans
Par :

Importation fichier .txt dans excel

Dernière réponse le 22 oct 2007 à 19:54:14 CVIOU, le 13 oct 2006 à 18:47:35 
 Signaler ce message aux modérateurs

Bonjour,

J'importe des fichiers .txt dans excel 2003 via un code VBA (code qui a été créé par un formateur) et j'ai des erreurs de format dans la colonne des dates. En effet, je constate qu'à l'importation des dates à l'origine de format jj/mm/aaaa sont converties en format mm/jj/aaaa, ce qui fait que la date du 07/03/06 devient 03/07/06. Le système ne pouvant pas convertir une date telle que 28/02/06, il le conserve en format standard. Donc dans une même colonne j'ai du format date et du format standard, ce qui provoque des incohérences et je n'arrive pas à uniformiser le format de ma colonne.

Lorsque je fais l'importation manuellement, tout se passe bien.

Il y a donc un problème dans la macro, mais je n'ai pas les connaissances pour réparer l'erreur.

Le service maintenance de notre interface "progress" nous dit qu'il faut intégrer dans la macro le mode BINARY au lieu du mode ASCI. Je veux bien mais je ne sais pas faire.

Si quelqu'un est intéressé pour se pencher sur mon problème, je peux envoyer mon code VBA sur le forum.

Merci d'avance à ceux et celles qui m'aideront.

Cordialement

Catherine

Meilleures réponses pour « importation fichier .txt dans excel » dans :
Fichier TXT Voir Format TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.
Transformer un fichier Microsoft Excel (.xls) en PDF VoirTransformer en fichier PDF un fichier Microsoft Excel (.xls) Rien de plus simple ! Ouvrez votre fichier *.xls avec OpenOffice.org Réglez éventuellement la mise en page par le menu Format / Page... Dès lors, 2 solutions pour transformer en...

1

JvDo, le 14 oct 2006 à 13:58:00

Bonjour,

qu'attends-tu pour mettre ton code et un peu de tes données !!

à première vue, ça n'a pas l'air très sorcier.

tu devrais même pouvoir t'en tirer seul en enregistrant une macro lorsque tu fais l'opération manuellement.

à te lire

Répondre à JvDo

2

CVIOU, le 14 oct 2006 à 20:51:55
  • +1

Bonsoir,

J'attendais que quelqu'un s'intéresse à mon problème et ta réponse me fait plaisir car je suis bien embêtée. Ca fait quelques temps que j'ai envie d'apprendre le VBA et je crois que cette fois je vais me lancer.

J'espère que pour toi ce sera un jeu d'enfant. Ca me serait d'une aide très précieuse.

D'avance merci

Voici le code :

Option Explicit
Dim MonFichier As Variant
Public Monclasseur As String
Dim Nblig As Long, i As Long, j As Long
Public Monchemin As String
Sub Importation()
'
' Importation Macro
' Macro enregistrée le 27/06/2006 par SERMA
'

'
Dim MonFichier As Variant


MonFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If MonFichier <> False Then

Workbooks.OpenText Filename:=MonFichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(17 _
, 1), Array(20, 1), Array(25, 1), Array(29, 1), Array(34, 1), Array(48, 1), Array(83, 1), _
Array(89, 1), Array(124, 1), Array(141, 1), Array(158, 1), Array(179, 1)), _
TrailingMinusNumbers:=True
ActiveSheet.Move Before:=Workbooks("Traitement global.xls").Sheets(1)
'aller derniere cellule
ActiveCell.SpecialCells(xlLastCell).Select
'recupere le n° de la ligne courante
Nblig = ActiveCell.Row + 1
Range("A1").Select
'suppression des lignes différentes d'une date
'mise d'une croix dans les lignes à garder
For i = 1 To Nblig
If IsDate(Cells(i, 1)) Then
Cells(i, 13).Value = "X"
Else
Cells(i, 13).Value = Empty
End If
Next i
'détruit les lignes
Range("A1").Select
j = 1
While ActiveCell.Row < Nblig
If Cells(j, 13).Value <> "X" Then
ActiveCell.EntireRow.Delete
Nblig = Nblig - 1
Else
j = j + 1
ActiveCell.Offset(1, 0).Select
End If
Wend
'détruit les colonnes
Columns("B:D").Delete Shift:=xlToLeft
Columns("D:E").Delete Shift:=xlToLeft
Columns("H:H").Delete Shift:=xlToLeft
Range("A1").Select
'lancer la macro de fusion des comptes
FusionneCompte
'lancer Ajout en tête
AjoutEntete
End If

End Sub

Sub FusionneCompte()
Range("A1").Select
Selection.CurrentRegion.Select
Nblig = Selection.Rows.Count
Range("A1").Select
Columns("B:B").Insert Shift:=xlToRight
Range("B1").FormulaR1C1 = "=RC[1]&RC[2]"
Range("B1").Select
Selection.Copy
For i = 2 To Nblig
Cells(i, 2).Select
ActiveSheet.Paste

Next i
Application.CutCopyMode = False
Range("A1").Select
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Columns("C:D").Delete Shift:=xlToLeft
Range("A1").Select
End Sub

Sub AjoutEntete()
Rows("1:1").Insert Shift:=xlDown
Range("A1").Value = "DATEPIECE"
Range("B1").Value = "COMPTE"
Range("C1").Value = "LIBELLE"
Range("D1").Value = "DEBIT"
Range("E1").Value = "CREDIT"
Range("F1").Value = "PIECE"
Range("A1").Select
End Sub


Sub NettoyageListe()
Dim MaLigne As Integer
Dim MaRecup As String
Dim Machaine As String
'nettoyage de la liste des fichiers
Worksheets("Traitement").Select
Range("A10:A60").ClearContents
Range("A10").Select

MaLigne = 10
Machaine = Range("a2").Value & "*.xls"
MaRecup = Dir(Machaine)
While MaRecup <> ""
Cells(MaLigne, 1).Value = MaRecup
MaLigne = MaLigne + 1
MaRecup = Dir
Wend

End Sub

Sub VidageFichiers()

Dim Machaine As String

Worksheets("Traitement").Select
Range("A10").Select

While ActiveCell.Value <> Empty
Machaine = Range("a2").Value & ActiveCell.Value
Workbooks.Open Filename:=Machaine
Range("A1").Select
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Value = "DATEPIECE"
Range("B1").Value = "COMPTE"
Range("C1").Value = "LIBELLE"
Range("D1").Value = "DEBIT"
Range("E1").Value = "CREDIT"
Range("F1").Value = "PIECE"
Range("A1").Select
ActiveWorkbook.Close savechanges:=True
ActiveCell.Offset(1, 0).Select
Wend
End Sub

Sub Colonnedate()

Columns("A:A").Select
Selection.NumberFormat = "dd/mm/yy"
End Sub

Cordialement
Catherine

Répondre à CVIOU

3

JvDo, le 15 oct 2006 à 02:45:28

Bonsoir,

je pense que le fait de rajouter Local:=True à la fin de la méthode OpenText de ta 1ère procédure (importation()) devrait solutionner tes problèmes.

Si ça ne suffit pas, mettre Array(0, 4) comme premier argument du Fieldinfo de l'OpenText

en regardant cette procédure, je me suis dit qu'il serait possible de la simplifier à 2 niveaux :
1) la méthode opentext permet de sauter des colonnes et de formater les colonnes
2) plutôt que de marquer les lignes sans date par des X pour ensuite les supprimer, pourquoi ne pas le faire tout de suite.
ça donnerait alors :

Sub Importation_bis()
' Importation Macro
' Macro enregistrée le 27/06/2006 par SERMA
' modif ODVJ le 15/10/2006
Dim MonFichier As Variant

MonFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If MonFichier <> False Then
    'le 2ème argument de chaque array du fieldinfo a pour signification :
    '==== 9 : colonne non distribuée
    '==== 3 : date au format J/M/A
    '==== 1 : format standard
    'local=:True permet d'utiliser les paramètres internationaux du système
    'c'est ce qui doit régler ton pb
    
    Workbooks.OpenText Filename:=MonFichier, Origin:=xlWindows, _
    StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 4), Array(17 _
    , 9), Array(20, 9), Array(25, 9), Array(29, 1), Array(34, 1), Array(48, 9), Array(83, 9), _
    Array(89, 1), Array(124, 1), Array(141, 1), Array(158, 1), Array(179, 9)), _
    TrailingMinusNumbers:=True, local:=True
        
    'ActiveSheet.Move Before:=Workbooks("Traitement global.xls").Sheets(1)
    
    'recupere le n° de la ligne courante
    Nblig = ActiveCell.SpecialCells(xlLastCell).Row
    Range("A1").Select
    'suppression des lignes différentes d'une date
    i = 1
    While i <= Nblig
        If Not (IsDate(Cells(i, 1))) Then
            Cells(i, 13).EntireRow.Delete
            Nblig = Nblig - 1
        Else
            i = i + 1
        End If
    Wend
    Range("A1").Select
    'lancer la macro de fusion des comptes
    FusionneCompte
    'lancer Ajout en tête
    AjoutEntete
End If
End Sub
Voilà. Pour tester cette procédure, j'aurais eu besoin de quelques lignes de tes données.

à toi de tester donc.

A+

Répondre à JvDo

4

CVIOU, le 15 oct 2006 à 11:56:06

Bonjour,

Je ne sais pas si je vais pouvoir tester la modif aujourd'hui, je me suis envoyé du bureau chez moi par mail le fichier txt et le fichier xls contenant la macro. Lorsque je lance la procédure chez moi, j'ai le message suivant :

TrailingMinusNumbers:= (Tout cela en surbrillance)
Message : Erreur de compilation - Argument nommé introuvable

Cet argument en clair c'est ?

Je pense que je n'ai pas déterminé le bon chemin de mes données sur C:

D'autre part, je voudrais bien t'envoyer mes données mais je ne peux pas mettre mon fichier txt sur le forum.

Un grand merci, je te t'informe de la suite dès que possible

Cordialement
Catherine

Répondre à CVIOU

5

JvDo, le 15 oct 2006 à 12:37:27

Bonjour,

curieux, ça passe chez moi sans problème.

tu peux utiliser Cjoint pour monter tes données et ton classeur.
si c'est la confidentialité qui te gêne, change les infos tout en gardant la structure du txt bien sûr.

le trailing minusmachin c'est pour le positionnement du signe négatif à droite des nombres. en fait ça ne doit pas te servir et tu peux le virer.

au fait, tu as bien un caractère _ en fin de ligne précédente !

A+

Répondre à JvDo

6

JvDo, le 15 oct 2006 à 12:39:58

Autre question, le dernier paramètre, le local:=true, tu l'as bien mis avec := et non pas = simplement
A+

Répondre à JvDo

7

CVIOU, le 15 oct 2006 à 17:50:45

Bonsoir,

Je voudrais bien envoyer un extrait de mon fichier txt ainsi que mon fichier xls mais je ne sais pas où le joindre.

J'ai bien le caractère _ en fin de ligne précédente et j'ai bien mis local:=true

A +

Cordialement
Catherine

Répondre à CVIOU

8

JvDo, le 15 oct 2006 à 19:04:22

Bonsoir,

tu peux utiliser http://cjoint.com/

A+

Répondre à JvDo

9

CVIOU, le 15 oct 2006 à 19:39:07

http://cjoint.com/?kptFISgdpE
http://cjoint.com/?kptKDHPA61

Je tente d'envoyer mes fichiers, dont le fichier txt épuré. J'espère que ça va marcher.

J'ai enlevé les 3 premières lignes comportant le nom de la société et la source du fichier.

J'ai modifieé les noms des tiers Je crois que par erreur j'ai également supprimé la dernière colonne du fichier.

J'espère que ces deux fichiers seront exploitable pour toi

Merci encore

Cordialement
Catherine

Répondre à CVIOU

10

JvDo, le 15 oct 2006 à 19:55:26

Bonsoir,

à première vue, il manque un s à number

je continue à regarder

A+

Répondre à JvDo

11

JvDo, le 15 oct 2006 à 19:58:15

Bonsoir,

ensuite, le Workbooks("Traitement global.xls").Sheets(1) doit planter car le fichier concerné n'a pas d'espace : Traitementglobal.xls.

A+

Répondre à JvDo

12

JvDo, le 15 oct 2006 à 20:06:42
  • +2

Bon,

ça semble Ok
ceci dit, je n'ai pas d'erreurs sur les dates même sans le local:=true

A+

Répondre à JvDo

13

CVIOU, le 16 oct 2006 à 12:39:03

Bonjour,

J'ai testé en arrivant au bureau, CA MARCHE !!!

Chez moi, j'avais reconstitué les dossiers et fichiers de mémoire et j'ai du faire erreur quelque part.

Effectivement, ça marche sans le local:=True, j'ai seulement modifié le 1er Array(0,4)

Un grand coup de chapeau, un grand merci et certainement à une autre fois car je crois que je vais me lancer, je pense que ça ne sera pas sans mal. Si tu as un conseil à me donner pour démarrer, il sera le bienvenu.

Cordialement
Catherine

Répondre à CVIOU

14

JvDo, le 16 oct 2006 à 13:32:40
  • +1

Bonjour,

1) l'envie
2) les livres
3) les formations
4) la touche F1
5) les forums :

http://www.excel-downloads.com/forum/forum-excel/
http://www.cathyastuce.com/w-agora/index.php?site=cathyastuc­e
http://forum.hardware.fr/hardwarefr/Programmation/VBVBAVBS/l­iste_sujet-1.htm
www.veriti.net 


6) Google pour voir le monde
7) du temps

bon courage et bienvenue

Répondre à JvDo

15

CVIOU, le 16 oct 2006 à 16:49:18

Bonour,

Je croyais mon affaire résolue et je viens de me rendre compte que j'ai encore un pb sur le n° de pièce (le 12ème array) car j'ai des cellules qui comportent des chiffres et des lettres, le tout en format texte.

Quel code faut-il utilisé en 2ème argument sur "l'array n° 12" pour solutionner le pb ?

Désolée, j'étais tellement contente que je me suis focalisée sur les dates et j'ai oublié de vérifier le reste. J'ai 3500 lignes dans mon fichier !!!

A +

Cordialement
Catherine

Répondre à CVIOU

16

JvDo, le 16 oct 2006 à 18:17:41

Bonjour,

quel problème as-tu?

A+

Répondre à JvDo

17

CVIOU, le 16 oct 2006 à 20:13:27

Bonsoir,

En fait la procédure mise en place par le formateur est un peu complexe.

Les fichiers générés par la procédure que tu viens de m'aider à corriger, ou plutôt que tu viens de corriger, sont transférés en tables attachées dans Access. Le problème est que dans excel, les données de la colonne "PIECE" sont en format standard avec des cellules composées uniquement de chiffres et d'autres avec des chiffres et des lettres. Dans Access, le format déterminé automatiquement est numérique, donc toutes les cellules contenant des lettres sont en erreur et comme la table est attachée, je ne peux pas modifier le format de champ, les champs étant définis dans la base de données externes.

Je pense qu'il faudrait compléter la macro excel afin que les lettres contenues dans la colonne "PIECE" soient exclues.

Tu vois mon problème, mais j'ai l'impression d'abuser un peu.

Mon gros problème est surtout que je n'ai pas trop le temps d'attendre de me former, de surcroît seule, pour résoudre cela, j'ai un très gros travail de consolidation comptable à faire sur 5 sociétés.

D'avance merci
Cordialement
Catherine

Répondre à CVIOU

18

JvDo, le 16 oct 2006 à 23:07:04

Bonsoir,

tu vois, ce que tu dis n'est pas assez précis :

veux-tu que simplement le champs pièces soit effacé uniquement s'il contient de l'alphanumérique?

ou veux-tu que l'enregistrement complet soit supprimé si le champs pièces contient de l'alphanumérique?

le dernier cas est très simple vu qu'il ressemble à l'exclusion des enregistrements dont la première colonne n'est pas une date :

For i = 1 To Nblig
    If IsDate(Cells(i, 1)) And IsNumeric(Cells(i, 12)) Then
        Cells(i, 13).Value = "X"
      Else
        Cells(i, 13).Value = Empty
    End If
Next i
là, on garde (ie on met un "X" en colonne 13) ce qui est date en première colonne et numérique en 12ème

le premier cas (je pense qu'il ne t'intéresse pas) se règlerait par le code suivant :
For i = 1 To Nblig
    If IsDate(Cells(i, 1)) Then
        Cells(i, 13).Value = "X"
        If Not (IsNumeric(Cells(i, 12))) Then Cells(i, 12) = Empty
      Else
        Cells(i, 13).Value = Empty
    End If
Next i

méfiance cependant si le champs d'accueil n'accepte pas les valeurs vides (empty). il faudrait alors plutôt mettre un 0.

A+

Répondre à JvDo

19

CVIOU, le 17 oct 2006 à 10:11:49

Bonjour,

Effectivement, je n'ai pas été claire, je veux qu'un champ alphanumérique devienne un champ numérique.

ex : 966B devient 966

Du style : RECHERCHER : un caractère alpha
REMPLACER PAR : (rien)

Il ne faut surtout pas supprimer un champ ou un enregistrement.

Merci

A +
Catherine

Répondre à CVIOU