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

Access Discussion :

copier le contenu d'un fic.txt et coller dans un autre .txt


Sujet :

Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    315
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 315
    Points : 243
    Points
    243
    Par défaut copier le contenu d'un fic.txt et coller dans un autre .txt
    j'ai créé plusieurs fichiers texte en écrivant mes données avec
    Open a.txt For Output As #1
    Print #1, "date : " & Date
    Print #1, mes données
    Close #1
    Je souhaite maintenant ouvrir chaque fichier dans une bouche et copier leur contenu dans un unique fichier de synthèse

    Open a.txt For Input As #1
    Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
    Input #1, Date
    Input #1, data
    Loop
    Close #1 ' Ferme le fichier.

    ' ouvre le fichier de synthese en écriture
    'Open synthese For Output As #1
    Print #1, Date
    Print #1, data
    Close #1
    mes premiers essais donnent le résultat suivant

    les données des fichiers ne se suivent pas, elles s'écrasent successivement
    dois-je laisser le fichier synthèse ouvert en écriture?

  2. #2
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt

    il est un peu bizarre ton code, je ne vois qu'un fichier source et l'ouverture du fichier de synthèse est commenté... Je ne vois pas où est la boucle.

    sinon tu as deux fichiers d'ouverts en même temps, tu ne peux pas utiliser deux fois le même numéro de fichier

    la façon la plus correcte est d'utiliser FreeFile pour récupérer un numéro de fichier libre plutôt que de mettre arbitrairement un numéro de fichier en dur

    j'ai pas d'exemple sous la main mais en cherchant FreeFile tu devrais en trouver

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 371
    Points : 23 845
    Points
    23 845
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim numFic as integer : numFic=FreeFile()
    Attention FreeFile ne s'incrémente que quand l'Instruction Open a été faite si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    n1=FreeFile()
    n2=FreeFile()
    n1 sera égale à n2

    Pour que cela marche il faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    n1=FreeFile()
    open "f1" for ... as #n1
    n2=FreeFile()
    Là n1 sera différent de n2

    A+

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    315
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 315
    Points : 243
    Points
    243
    Par défaut demande complémentaire
    merci pour ce rapide premier coup de main, tu as raison je n'ai pas été très clair
    je livre ci-dessous ma sub et les questions en cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub bt_fichier_note_Click()
        Dim note_name
        Dim num_file
     
     
        ' définir le nom du fichier
        note_name = "doc" & Me!doc_num & "data" & Me!data_num & ".txt"
        synthese = "synthese_" & Me!data_titre & ".txt"
    a cet endroit je souhaiterais connaitre le nombre d'enregistrements dans la requete
    avec tes conseils cette partie fonctionne
    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
     
       ' ouvre le fichier en lecture de données
        Open CurrentProject.Path & "\note\" & synthese For Output As #1
            Print #1, "SYNTHESE DES NOTES " & note_name
            Print #1, Date
            Print #1, ""
     
            Do
            '
            fic_existe = Dir(CurrentProject.Path & "\note\" & note_name)
            If fic_existe <> "" Then
                ' ouvre le fichier note en lecture de données
                num_file = FreeFile()
                Open CurrentProject.Path & "\note\" & note_name For Input As #num_file
                    Input #num_file, xfic
                    Input #num_file, xdate
                    Input #num_file, xdata
                    Input #num_file, xnote
                Close #num_file
            End If
     
     
            Print #1, xfic
            Print #1, xdate
            Print #1, xdata
            Print #1, xnote
    lire l'enregistrement suivant dans la requête pour obtenir les nouvelles valeurs de "Me!doc_num" et "Me!data_num"
    la requête en question est celle qui alimente les champs de mon formulaire
    j'imagine qu'une solution serait d'utiliserle nombre d'enregistrements de ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Loop While enreg < nb_enreg ' ?????
     
        Close #1
     
     ' ouvrir le fichier de synthèse avec "notepad"
            Shell "notepad.exe " & CurrentProject.Path & "\note\" & synthese, vbMaximizedFocus
     
    End Sub
    Modération : cafeine, et non les balises QUOTE

  5. #5
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    regarde du côté de recordsetclone pour parcourir les enregistrements du formulaire

    Vite fait, pour parcourir le recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    While not Me.RecordsetClone.EOF
    ....
    me.recordsetclone.movenext
    Wend
    Pour récupérer le nombre d'enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.RecordsetClone.Recordcount
    tu trouveras plus d'infos dans le tutoriel DAO.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    315
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 315
    Points : 243
    Points
    243
    Par défaut suite, ça avance
    J'ai intégré vos dernières suggestions
    il y a du progrès
    la boucle ne balaye pas les enregistrements de la requête
    en fait si j'ai 2 enregistrements , la boucle = 2 fois
    mais Me!doc_num & "data" & Me!data_num ne changent pas de valeur

    l'écriture sur le fichier de synthèse donne 2 fois la copie du premier fichier
    remarque : si je relance ma sub, il n'y a plus rien dans le fichier
    il doit me manquer un RAZ

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Private Sub bt_fichier_note_Click()
        Dim note_name
        Dim num_file
     
        ' définir le nom du fichier
        synthese = "synthese_" & Me!data_titre & ".txt"
     
        'nombre d 'enregistrement dans la requete
        nb_enreg = Me.RecordsetClone.RecordCount
     
        ' ouvre le fichier en lecture de données
        Open CurrentProject.Path & "\note\" & synthese For Output As #1
            Print #1, "SYNTHESE DES NOTES " & Me!data_titre
            Print #1, Date
            Print #1, ""
     
        While Not Me.RecordsetClone.EOF
                'nom de la note à copier
                note_name = "doc" & Me!doc_num & "data" & Me!data_num & ".txt"
     
                fic_existe = Dir(CurrentProject.Path & "\note\" & note_name)
                If fic_existe <> "" Then
                    ' ouvre le fichier note en lecture de données
                    num_file = FreeFile()
                    Open CurrentProject.Path & "\note\" & note_name For Input As #num_file
                        Input #num_file, xfic
                        Input #num_file, xdate
                        Input #num_file, xdata
                        Input #num_file, xnote
                    Close #num_file
                End If
     
                Print #1, xfic
                Print #1, xdate
                Print #1, xdata
                Print #1, xnote
     
            Me.RecordsetClone.MoveNext
            Wend
     
        Close #1
     
     ' ouvrir le fichier de synthèse avec "notepad"
            Shell "notepad.exe " & CurrentProject.Path & "\note\" & synthese, vbMaximizedFocus
     
    End Sub

  7. #7
    Expert éminent sénior
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    lit le fichier et met le résultat dans la variable xdate

    si tu veux la mettre dans le formulaire il faut un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Input #num_file, Me!data_num
    Mais Ma!data_num renvoie à la valeur de data_num de l'enregistrement courant dans le formulaire.
    Là on utilise le RecordsetClone qui est comme son nom l'indique une copie des données du formulaire (parce que je pensais que tu faisais le contraire = copie du formulaire dans un fichier)
    Je pense que tu peux utiliser directement me.Recordset au lieu de Me.RecordsetClone.
    Sauf si tu ne veux pas déclencher les événements du formulaire lors de la mise à jour des champs, à ce moment il faut resynchroniser à la fin le RecordsetClone avec le Recordset du formulaire mais je n'ai pas la commande en tête.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    315
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 315
    Points : 243
    Points
    243
    Par défaut
    Arkham46
    tu me dis:
    Sauf si tu ne veux pas déclencher les événements du formulaire lors de la mise à jour des champs, à ce moment il faut resynchroniser à la fin le RecordsetClone avec le Recordset du formulaire mais je n'ai pas la commande en tête.
    ouaouff
    si je comprends bien:
    avec RecordsetClone, je tripotte une copie des données et cela n'influence pas le contenu de mon formulaire

    mon souhait est d'utiliser un champ d'une table inclus dans le résultat d'une requête qui alimente mon formulaire actif
    dans l'aide DAO Access, j'ai trouvé cela, suis-je sur la bonne piste ?

    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
     
    Notons toutefois que dans la majorité des cas, il est plus rapide d'ouvrir un nouvel objet Recordset directement depuis un objet Database en spécifiant une requête SQL complète à l'argument source.
     
    Dim oDb as DAO.Database 
    Dim oRstFiltre as DAO.Recordset 'Instancie la base de données 
    Set oDb=CurrentDb 'Ouvre un curseur retournant tous les clients résidant à Paris 
    Set oRstFiltre=oDb.OpenRecordset("SELECT * FROM TblClients WHERE Ville=" & Chr(34) & "Paris" & Chr(34)",dbOpenDynaset) 
     
    '*************************************** 
    'ici, traitement sur le recordset filtre 
     
    '*************************************** 
     
    'Libération des objets 
    oRstFiltre.Close oDb.Close 
    Set oRstFiltre=Nothing 
    Set oDb=Nothing

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    315
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 315
    Points : 243
    Points
    243
    Par défaut
    MERCI
    pour votre contribution
    Bravo aux pationnés du forum Access

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copier le contenu d'un .docx pour l'ajouter dans un autre .docx
    Par ahmedpa dans le forum Général Java
    Réponses: 17
    Dernier message: 17/07/2013, 14h27
  2. [XL-2007] Copier des données d'un classeur et les coller dans un autre
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/06/2012, 07h18
  3. Réponses: 7
    Dernier message: 18/09/2009, 15h23
  4. Réponses: 3
    Dernier message: 19/05/2009, 10h00
  5. Réponses: 3
    Dernier message: 01/04/2007, 14h08

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