Importation fichier .txt dans excel

Fermé
CVIOU - 13 oct. 2006 à 18:47
 franciss - 22 oct. 2007 à 19:54
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
A voir également:

28 réponses

Salut Tlm! Je sais pas si vous pouvez m'aider..

voici mon code :
5
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
17 oct. 2006 à 18:14
Bonsoir,

c'est une bonne nouvelle!

je viens de me rendre compte qu'il existe une fonction VAL qui extrait le numérique d'une chaîne de caractères.

donc a priori la fonction vire_alpha() peut être remplacée par le VAL().

A+
2
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
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 20:06
Bon,

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

A+
1

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

Posez votre question
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
16 oct. 2006 à 13:32
Bonjour,

1) l'envie
2) les livres
3) les formations
4) la touche F1
5) les forums :
https://www.excel-downloads.com/forums/forum-excel.7/
http://www.cathyastuce.com/w-agora/index.php?site=cathyastuce
https://forum.hardware.fr/hfr/Programmation/liste_sujet-1.htm
www.veriti.net 


6) Google pour voir le monde
7) du temps

bon courage et bienvenue
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
14 oct. 2006 à 13:58
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
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 02:45
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+
0
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
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 12:37
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+
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 12:39
autre question, le dernier paramètre, le local:=true, tu l'as bien mis avec := et non pas = simplement
A+
0
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
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 19:04
Bonsoir,

tu peux utiliser https://www.cjoint.com/

A+
0
https://www.cjoint.com/?kptFISgdpE
https://www.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
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 19:55
Bonsoir,

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

je continue à regarder

A+
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
15 oct. 2006 à 19:58
Bonsoir,

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

A+
0
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
0
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
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
16 oct. 2006 à 18:17
Bonjour,

quel problème as-tu?

A+
0
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
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
16 oct. 2006 à 23:07
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+
0