Importation fichier .txt dans excel

CVIOU -  
 franciss -
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

28 réponses

  • 1
  • 2
  1. franciss
     
    Salut Tlm! Je sais pas si vous pouvez m'aider..

    voici mon code :
    5
  2. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
  3. CVIOU
     
    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
  4. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bon,

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

    A+
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
  7. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
  8. CVIOU
     
    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
  9. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
  10. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    autre question, le dernier paramètre, le local:=true, tu l'as bien mis avec := et non pas = simplement
    A+
    0
  11. CVIOU
     
    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
  12. CVIOU
     
    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
  13. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonsoir,

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

    je continue à regarder

    A+
    0
  14. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonsoir,

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

    A+
    0
  15. CVIOU
     
    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
  16. CVIOU
     
    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
  17. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonjour,

    quel problème as-tu?

    A+
    -1
  18. CVIOU
     
    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
  19. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
  • 1
  • 2