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 :

Exporter 2 tables en 1 fichier


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut Exporter 2 tables en 1 fichier
    Bonjour,

    je code dans Access pour le biais de VBA pour extraire mes données de manière automatique.
    Pour ça j'utilise la fonction DoCmd.TransferText acExportDelim, "NomSpécification", "TableAexporter ", "TableExportée.txt", True bien pratique au demeurant.

    Mon souci est assez basique, je souhaite pouvoir exporter dans un seul fichier de destination, 2 tables qui n'ont pas du tout le même format mais juste la même longueur.
    Très bêtement j'ai essayé d'enchaîner les 2 commandes DoCmd, mais bien évidemment la seconde a écrasé la première.

    Comment faire pour résoudre ce problème ?

    Merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    La seule solution, à mon avis, sera de créer une req. union, pour utiliser le résultat dans votre méthode d'export.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    2 tables qui n'ont pas du tout le même format mais juste la même longueur.
    Peux-tu expliquer ce que tu entends par "la même longueur" ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut
    les deux tables sont composés de champs totalement différents et de différentes longueurs, mais au final, elles font toutes les deux 250 caractères.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    les deux tables sont composés de champs totalement différents et de différentes longueurs, mais au final, elles font toutes les deux 250 caractères
    si c'est un fichier au format texte délimité, cela me semble difficile d'avoir un résultat exploitable puisque l'exportation ajoute les séparateurs de colonnes entre les champs, d'autant plus que tu as mis True pour l'entête de colonnes (le dernier paramètre de ta commande).
    Car pour une requête UNION ce n'est pas le nombre de caractères qui définit si une table a la même structure qu'une autre table, c'est le nombre de champs.

    Si 2 champs, à la même position ne sont pas de même type, il est possible de convertir l'un dans le type le plus approprié (en texte en général, car tout ce qui est date ou nombre peut se transformer en texte, alors que l'inverse est plus rare).

    Sinon, il est possible d'exporter par VBA en ouvrant le fichier texte et y écrire directement le contenu des 2 tables:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Function Export_tables()
       Dim strLigne As String
       Dim itexist As Long
       Dim rs1 As DAO.Recordset
       Dim rs2 As DAO.Recordset
       Dim i As Long
       Set rs1 = CurrentDb.OpenRecordset("Table1")
       Set rs2 = CurrentDb.OpenRecordset("Table2")
        rs1.MoveLast
        rs2.MoveLast
        itexist = (rs1.RecordCount + rs2.RecordCount)
     
        If itexist > 0 Then ' Au moins 1 fichier est renseigné
            Open "D:\TableExportees.txt" For Output As #1
        End If
        rs1.MoveFirst
        rs2.MoveFirst
     
        If Not rs1.EOF Then
            For i = 0 To rs1.Fields.Count - 1
             strLigne = strLigne & rs1.Fields(i).Name & ";"
            Next
            Print #1, (strLigne)
            Do Until rs1.EOF
                strLigne = ""
                For i = 0 To rs1.Fields.Count - 1
                    strLigne = strLigne & rs1.Fields(i) & ";"
                Next i
                Print #1, (strLigne)
                rs1.MoveNext
            Loop
        End If
     
     strLigne = ""
        If Not rs2.EOF Then
            For i = 0 To rs2.Fields.Count - 1
             strLigne = strLigne & rs2.Fields(i).Name & ";"
            Next
            Print #1, (strLigne)
     
            Do Until rs2.EOF
                strLigne = ""
                For i = 0 To rs2.Fields.Count - 1
                    strLigne = strLigne & rs2.Fields(i) & ";"
                Next i
                Print #1, (strLigne)
                rs2.MoveNext
     
            Loop
        End If
     
        If itexist > 0 Then Close #1
     
        rs1.Close
        Set rs1 = Nothing
        rs2.Close
        Set rs2 = Nothing
     
    End Function
    Sinon, peux-tu donner un exemple en prenant un enregistrement de chaque table et montrer le résultat de ce que tu souhaites avoir ?
    je code dans Access pour le biais de VBA pour extraire mes données de manière automatique.
    Et ceci dans quel but ?

    [EDIT:] correction du code fourni
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonsoir,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO (Text;FMT=Delimited;HDR=Yes;DATABASE=C:\MyRep;) TNIC.txt
    SELECT *
    FROM titi;
    Code schema.ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [TNIC.txt]
    ColNameHeader=True
    Format=Delimited(;)
    Col1=Client Text Width 10  
    Col2=ID Integer 
    Col3=Quoi Text Width 10 
    Col4=Valeur double
    Col5=QTS integer
    Col6=bool bit
    Col7=Status    integer
    Col8=Date  datetime
    Col9=Code  Text Width 10
    DateTimeFormat="dd/mm/yyyy hh:nn:ss"
    Nom : Sans titre.png
Affichages : 117
Taille : 15,4 Ko

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 56
    Points
    56
    Par défaut Résolu
    Merci pour vos différents messages et recherches, mais étant donné que je trouvais rien nulle part et que les réponses n'allaient pas forcément dans le bon sens, j'ai trouvé un subterfuge.

    J'ai inséré dans mon module VBA un bout de code déclenchant une fonction shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Shell "cmd /c copy " & FichierE & " /A + " & FichierD & " /A " & FichierF
    ça marche nickel et ça me va bien comme ça.

    Merci à tous

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

Discussions similaires

  1. Export de tables vers plusieurs fichiers excel
    Par miniquick dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/07/2007, 00h11
  2. [Macro]exporter une table vers un fichier.csv
    Par samca dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2007, 21h25
  3. Réponses: 3
    Dernier message: 06/01/2007, 17h44
  4. [JDBC] export de tables et ecriture fichier
    Par noOneIsInnocent dans le forum JDBC
    Réponses: 4
    Dernier message: 14/04/2006, 11h34
  5. Exporter une table dans un fichier excel
    Par david71 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/09/2005, 17h09

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