Texte découpée > Access Visual Basic

maximesm -  
 maximesm -
Bonjour,
J'aurai besoin d'un coup de main pour réaliser un programme en visual basic sous Access
Le But de ce programme est d'intégrer un fichier txt comme ceci dans une base de données Access

620101360 13 0101200731122007364574067456
A620101360003609790 1133035911900100011001
C620101360 133035911900100007000002012007AMI
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007B
C620101360 133035911900100007000002012007CS
C620101360 133035911900100007000002012007MPC
A620101360003609814 2270016276501200011001
C620101360 270016276501200007000002012007AMI
C620101360 270016276501200007000002012007B
C620101360 270016276501200007000002012007B

Chaque ligne commence par une lettre sauf la première ligne qui est l'entête, le but est que si la ligne commence par un A je mets les données dans une table A et si elle commence par un C je la mets dans une table C ainsi de suite...
Les tables je les crée moi-même
Ensuite chaque ligne rentre dans une table puis sont découpées en petites parties qui vont intégrer chacun un champ, par exemple:

A620101360003609814 2270016276501200011001

A | 620101360 | 0036098 | 1 | 4 | 2270016276501 | 200 | 0 | 11 | 001

Rentre dans la table A

idA | ch1 | ch2 | ch3 | ch4 | ch5 | ch6 | ch7 | ch8 | ch9 | ch10

Si quelqu'un est assez calé en visual basic sous Access, je voudrai bien un petit coup de main pour réaliser cette manip
Je suis preneur de tous types de réponses
Merci d'avance

4 réponses

  1. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    proposition :

    - importer les données dans une table temporaire
    - lire la table temporaire
    - traiter les données de chaque ligne en fonction de tes souhaits pour mettre à jour les tables A, B, C...

    Y'en a pour une centaine de lignes de VBA (si la fonction d'éclatement de la ligne n'est pas trop alambiquée)...
    0
    1. maximesm
       
      Avant tout Merci pour ta réponse,

      Je vois que tu veux importer mon fichier txt dans une table temporaire mais comment veux tu t'y prendre
      Déjà mon fichier txt fait 37000 lignes.
      Tu crois qu'il faudrait mettre chaque ligne dans un champ différents si il commence par un C ou un A ???

      Merci d'avance
      0
  2. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Une simple commande type DoCmd.TransferText avec quelques paramètres mettra ton fichier dans une table temporaire.

    Ensuite, il faudra lire cette table (idéalement via un recordset), puis extraire les données qui t'intéressent selon les critères que tu as choisi pour les mettre dans les bonnes tables...

    Tu crois qu'il faudrait mettre chaque ligne dans un champ différents si il commence par un C ou un A ???
    C'est toi qui décide de ce que tu veux faire des données !!!
    0
    1. seblekiller_oupas Messages postés 397 Statut Membre 5
       
      desole de m'introduire ici mais c'est juste pour savoir si blux pouvais m'aider ou pas (voir pb dans la liste) voila merci qd mm
      0
    2. maximesm
       
      C'est bon j'ai réussi à mettre le texte dans une table temporaire
      Mais maintenant je voudrais savoir comment tu fais pour découper chaque ligne et prendre les informations que je veux pour les mettre dans un champ de la table A
      Merci d'avance
      0
      1. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > maximesm
         
        Il faut donc lire le contenu de ta table avec un recordset, faire les opérations de découpage des données, puis ajouter les données à la table 'cible'.

        Un bout d'exemple (à adapter) :
        Set Rs0 = CurrentDb.OpenRecordset("Tempo", dbOpenTable, dbReadOnly)
        Set rs = CurrentDb.OpenRecordset("table_cible", dbOpenTable, dbAppendOnly)
        Rs0.Movefirst
        Do
            Var = Rs0!champ_de_la_table_tempo
            With rs
                .AddNew
                !champ1_de_la_table_cible = Trim(Mid(Var, 1, 6))
                !champ2_de_la_table_cible = Trim(Mid(Var, 8, 35))
                .....
                .Update
            End With
            Rs0.MoveNext
        Loop While Not Rs0.EOF
        
        --

        A+ Blux
         "Les cons, ça ose tout.
        C'est même à ça qu'on les reconnait"
        0
      2. maximesm > blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci pour tout,
        Mais c'est bizarre quand je fais créer un nouveau module et que je tape un code dedans et ensuite je l'execute il me demande de créer une macro tu sais pas comment on exécute un code ??
        Merci d'avance
        0
      3. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > maximesm
         
        On ne fait pas comme ça. Il faut mettre le code sur un bouton dans un formulaire (et non dans un module), comme ça quand tu appuies sur le bouton, il fait les opérations demandées...
        0
  3. maximesm
     
    Merci pour ton aide blux
    J'ai réussi à avancer pas mal dans mon code mais maintenant que j'ai découpé le texte je voudrai rajouter une clé primaire à ma table tu sais pas c'est quoi la commande??
    Merci d'avance
    0
    1. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Tu passes ta table en mode 'création', tu sélectionnes une colonne et tu cliques sur la clé dans la barre d'outils : ta colonne est devenue 'clé primaire'.
      0
      1. maximesm > blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci bien,
        Mais je voulais savoir comment on fait en code vba.
        Merci d'avance
        0
      2. blux Messages postés 2045 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > maximesm
         
        Il faut lancer une requête 'ALTER TABLE' avec la clause 'CONSTRAINT'.

        Regarde l'aide sur le SQL.
        0
  4. maximesm
     
    Salut blux,
    Est ce que tu pourrais me donner le code qui permet d'ajouter un champ qui s'auto incrémente en fonction du nombre de ligne pour faire un champ id et le mettre comme clé primaire? Si tu sais comment faire ça serait sympa
    Merci d'avance
    0