IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Ecrire dans un fichier texte puis exporter


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut Ecrire dans un fichier texte puis exporter
    Bonjour,

    Comment faire pour écrire dans un fichier texte puis exporter les données d'une table vers ce fichier sans écraser les lignes déjà écrites?

    J'ai vu dans la foire aux questions les fonction pour créer et écrire dans un fichier texte mais dans mon cas ces lignes doivent être écrites au début. Si j'écris avant, elles sont effacées et je ne sais pas comment insérer des lignes dans un fichier texte.

    Quelqu'un aurait-il une solution?

    Merci...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Par défaut
    Bonjour,

    Pourriez-vous nous donner le texte que vous voulez écrire ainsi que la requète que vous désirez exporter ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut
    Bonjour SSJConsult,

    J'avais poser la question dans une autre discussion ou tu m'as répondu en me conseillant d'ajouter les données directement à la requête:
    http://www.developpez.net/forums/d93...ia-dialog-box/

    J'ai préféré ouvrir une autre discussion puisqu'il s'agissait d'un autre problême.Malheureusement la solution que tu m'as donné pose toujours les deux problèmes. Si je change la nature des champs je ne peux plus faire de tri puisque le 10 arriverait avant le 2 par exemple (dans le cas où le champ devriendrait un champ texte). Si je fais un order by à la fin, il me trie tout et pas uniquement les champs du dernier agrégat.

    Je veux ajouter les lignes,

    Import (tab) ASCII
    Units (tab) mm

    ,en tête du fichier texte avant le noms des champs puis les enregistrement. Je pense que le plus simple serait d'insérer au début du fichier texte les lignes et une combinaison retour à la ligne et retour chariot après avoir fait l'export mais malgré mais recherche je n'ai pas trouvé de fonctions permettant ce genre de fantaisies...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Par défaut
    En cherchant un petit peu, on pourrait peut-être essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT T1.Ch1, T1.Ch2, Trim(sTR(T1.Ch3)) As Ch31, T1.Ch4, T1.Ch5, T1.Ch6, T1.Ch7
     
    FROM (SELECT Top 1 '0' As CleTri, 'Import ASCII' AS Ch1, '' AS Ch2, '' AS Ch3, '' AS Ch4, '' AS Ch5, '' AS Ch6, '' AS Ch7  
          FROM MaTable
     
          UNION ALL
     
          SELECT Top 1 '1' AS CleTri, 'Units mm' AS Ch1, '' AS Ch2, '' AS Ch3, '' AS Ch4, '' AS Ch5, '' AS Ch6, '' AS Ch7  
          FROM MaTable
     
          UNION ALL
     
          SELECT Top 1 '2' As CleTri, 'Name' AS Ch1, 'Part' AS Ch2, 'Length' AS Ch3,  'Style' AS Ch4, 'Stripping type' AS Ch5, 'Right' AS Ch6,  'Strip' AS  Ch7  
          FROM MaTable
     
          UNION ALL
     
          SELECT '3' As CleTri, [Name] AS Ch1, [Part] AS Ch2, [Length] AS Ch3, [Style] AS Ch4, [Stripping type] AS Ch5, [Right] AS Ch6, [Strip] AS Ch7 
          FROM MaTable) AS T1
     
    ORDER BY [CleTri], [Name];
    ...croisons les doigts...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut
    J'ai bien croisé les doigts mais rien à faire le champs [Part] doit rester numérique et malgré le tri grâce à l'IDTri (très bonne idée soit dit en passant) Access le range comme si il s'agissait de texte à cause du troisième agrégat seravnt à rentrer les noms de champs.

    J'ai également essayé avec deux requêtes, la première triant les données et la seconde ajoutant les entêtes...rien à faire access me trie tout par ordre alphabétique...

    Je pense vraiment que la seule solution est de manipuler le fichier texte automatiquement (par VBA je suis sûr que c'est possible, si on peut écrire on doit pouvoir insérer) ou manuellement (dernier recours).

    Merci en tout cas pour ton aide.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Par défaut
    Pour pouvoir écrire dans un fichier sans passer par une requête du type que je vous ai donnée, il faut alors utiliser du code VBA pour écrire dans le fichier en utilisant un recordset.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Dim Rs  As Recordset
    Dim Sep As Integer
     
    Sep = 9 ' Code ASCII du séparateur de champs (ici:Tab horizontal)
     
    Set Rs = CurrentDb.OpenRecordset("SELECT * FROM MaTable ORDER BY [Name];", dbOpenSnapshot)
     
    Open MonFichier For Output As #1
     
    Print #1, "Import", Chr(Sep), "ASCII"
    Print #1, "Units", Chr(Sep), "mm"
    Print #1, "Name", Chr(Sep), "Part", Chr(Sep), "Length", Chr(Sep), "Style", Chr(Sep), "Stripping type", Chr(Sep), "Right", Chr(Sep), "Strip"
     
    While Not Rs.EOF
        Print #1, Rs.Fields("Name").Value, Chr(Sep), _
                  Rs.Fields("Part").Value, Chr(Sep), _
                  Rs.Fields("Length").Value, Chr(Sep), _
                  Rs.Fields("Style").Value, Chr(Sep), _
                  Rs.Fields("Stripping type").Value, Chr(Sep), _
                  Rs.Fields("Right").Value, Chr(Sep), _
                  Rs.Fields("Strip").Value, Chr(Sep)
        Rs.MoveNext
    Wend
     
    Rs.Close
    Set Rs = Nothing
    Close #1
    Selon le résultat attendu, le code pourrait aussi être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Dim Rs  As Recordset
    Dim Sep As Integer
     
    Sep = 9 ' Code ASCII du séparateur de champs (ici:Tab horizontal)
     
    Set Rs = CurrentDb.OpenRecordset("SELECT * FROM MaTable ORDER BY [Name];", dbOpenSnapshot)
     
    Open MonFichier For Output As #1
     
    Print #1, "Import" & Chr(Sep) & "ASCII"
    Print #1, "Units" & Chr(Sep) & "mm"
    Print #1, "Name" & Chr(Sep) & "Part" & Chr(Sep) & "Length" & Chr(Sep) & "Style" & Chr(Sep) & "Stripping type" & Chr(Sep) & "Right" & Chr(Sep) & "Strip"
     
    While Not Rs.EOF
        Print #1, Rs.Fields("Name").Value & Chr(Sep) & _
                  Rs.Fields("Part").Value & Chr(Sep) & _
                  Rs.Fields("Length").Value & Chr(Sep) & _
                  Rs.Fields("Style").Value & Chr(Sep) & _
                  Rs.Fields("Stripping type").Value & Chr(Sep) & _
                  Rs.Fields("Right").Value & Chr(Sep) & _
                  Rs.Fields("Strip").Value, Chr(Sep)
        Rs.MoveNext
    Wend
     
    Rs.Close
    Set Rs = Nothing
    Close #1

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut
    A l'execution de cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rs = CurrentDb.OpenRecordset("SELECT [Fichier de débit].Name,[Fichier de débit].Part,[Fichier de débit].Length,[Fichier de débit].Style,[Fichier de débit].[Stripping type],[Fichier de débit].[Right Strip],[Fichier de débit].[Left Strip] FROM [Fichier de débit] ORDER BY [Style],[Part];", dbOpenSnapshot)
    Access me renvoi un message d'erreur "Trop peu de paramètres. 1 attendu". J'avais déjà rencontré ce problème lorsque je tentais de remplacer une partie de mon code utilisant DLookup par un Recordset. En faite la requête pour l'extraction ce base sur une autre requête dont un des champs est conditionné par un champ texte de mon formulaire.

    En gros l'utilisateur sélectionne un numéro dans une liste déroulante, la requête "Etiquettes" selectionne les champs reliés à ce numéro et lorsque l'utilisateur clique sur le bouton "Exporter" la requête "Fichier de débit" tire et met en forme les données intéréssantes de "Etiquettes".

    Il semblerait que cette méthode ne soit pas compatible avec un recordset puisqu'à l'execution du code ces deux requêtes sont vides.

    Aurais-tu une idée?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Par défaut
    s'il te dit
    Trop peu de paramètres. 1 attendu
    c'est que l'un des champs n'est pas correctement renseigné.
    Ca pourrait déjà être le cas pour "Name" qui pourrait être un mot réservé

    Mets des [] autour de tous les noms de champs et ré-essaye.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rs = CurrentDb.OpenRecordset("SELECT [Fichier de débit].[Name], [Fichier de débit].[Part], [Fichier de débit].[Length], [Fichier de débit].[Style], [Fichier de débit].[Stripping type], [Fichier de débit].[Right Strip], [Fichier de débit].[Left Strip] FROM [Fichier de débit] ORDER BY [Style],[Part];", dbOpenSnapshot)
    De plus, dans ce cas particulier, tu pourrais te satisfaire de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rs = CurrentDb.OpenRecordset("SELECT * FROM [Fichier de débit] ORDER BY [Style],[Part];", dbOpenSnapshot)
    Si tu as encore l'erreur, c'est qu'un nom de champ est mal orthographié...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Par défaut
    Définitevement Access veut son paramètre et...ne le trouve pas.

    J'ai revérifié 5 fois l'orthographe et essayé avec * rien à faire. Je pense que la seule solution serait de transvaser les données dans une table temporaire sur le click puis de réaliser l'extraction avec Recordset à partir de cette table...

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Par défaut
    Re-bonjour,

    Si Access exige encore un parametre avec la *, c'est que l'erreur est dans les champs de tri...
    A moins que [Fichier de débit] ne soit elle-meme une requete enregistree. Dans ce cas, l'erreur peut emaner de cette (sous-)requete.

    En tout etat de cause, il serait inutile d'utiliser une table temporaire pour une requete aussi simple...

    Une remarque generale : pour eviter des problemes, en general, on evite de mettre des espaces ainsi que des caracteres speciaux (accents, par exemple) dans les noms de tables et de champs. Les espaces peuvent tres bien etre remplaces par des "_", ca n'enleve rien a la comprehension des noms...

Discussions similaires

  1. Réponses: 25
    Dernier message: 13/09/2007, 14h43
  2. [VB.net]ecrire dans un fichier text
    Par grand_prophete dans le forum Windows Forms
    Réponses: 12
    Dernier message: 04/05/2006, 16h37
  3. Réponses: 6
    Dernier message: 17/12/2005, 19h27
  4. [VB.NET] Ecrire dans un fichier texte...
    Par robert.michel9 dans le forum VB.NET
    Réponses: 5
    Dernier message: 04/12/2005, 14h35
  5. Ecrire dans un fichier text en MFC
    Par soufienne dans le forum MFC
    Réponses: 6
    Dernier message: 05/10/2005, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo