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 :

extraire des données d'une table access et les convertir en txt


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut extraire des données d'une table access et les convertir en txt
    Bonjour à tous,

    je suis nouveau dans le bidouillage du VB access. Je vais essayer d'être clair pour vous exposer mon problème...chose pas toujours facile.
    J'ai une table access dont je voudrais extraire 3 champs :

    le 1er : identifiant station
    le 2ième : date de mesure
    le 3ième : mesure

    Il y a une quarantaine de stations avec leur mesures et les dates associées à suivre dans cette même table (cad 1811228 enregistrements !)
    Il me faut extraire ces trois champs pour CHAQUE station et convertir le fichier en .txt.
    j'ai codé en VB en naviguant dans divers forums dont celui-ci. Ce code doit demander l'identifiant de la station et opérer le transfert des données souhaitées en txt. le début du code fonctionne ! mais l'enthousiasme retombe vite après ...
    voici le module (excusez ces lignes de novice...):

    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
    Public Sub selection_enregistrement()
     
    Dim db As DAO.Database
    Set db = CurrentDb
    Dim sql As String
    Dim rs As DAO.Recordset
     
     
    'Affectation d'un identifiant
    Dim x As String
    x = InputBox("Entrez un Identifiant")
    sql = "SELECT Id_Station_1.Cotes, Date.Cotes, Valeur.Cotes FROM Cotes WHERE Id_Station_1.Cotes = x"  'requete
    Set rs = db.OpenRecordset(sql)
     
    'exportation en .txt
     
    DoCmd.TransferText acExportDelim, "sql", "C:\Utilisateurs\eescloup\Mes documents\MATLAB-data-routines\Cotes par station\txt_data_from_access\station.txt"
     
    End Sub
    en message d'erreur, j'ai notamment le 3061 (4 paramètres attendus)... le Set rs = db.OpenRecordset(sql) et/ou le sql semblent mis en cause.
    Aurait-il un bon baroudeur du VBA pour allumer la lumière dans ce couloir obscure de mon cerveau ...
    un grand MERCI !!!

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonsoir,

    Voici déjà la requete corrigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT Id_Station_1, Date, Valeur FROM Cotes WHERE Id_Station_1='" & x & "'"
    - le nom de la table se met devant... ou pas
    - la valeur de la chaine x doit être intégrée à la variable sql entre ' (sauf si c'est un nombre !)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci !!

    j'ai pas fait attention que j'avais un autre post ! dsolé...
    Super pour ton mess, je fais tourné le nouveau code et j'ai maintenant un chemin d'accès introuvable ! erreur 76 !
    voici le nouveau script élaboré à partir des autres messages de l'autre post:

    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
    Public Sub selection_enregistrement()
     
    Dim db As DAO.Database
    Set db = CurrentDb
    Dim sql As String
    Dim rs As DAO.Recordset
     
     
    'Affectation d'un identifiant
    Dim x As String
    x = InputBox("Entrez un Identifiant")
    sql = "SELECT Id_Station_1, Date, Valeur FROM Cotes WHERE Id_Station_1='" & x & "'"
    Set rs = db.OpenRecordset(sql)
     
    Open "C:\Utilisateurs\eescloup\Mes documents\MATLAB-data-routines\Cotes par station\txt_data_from_access\station.txt" For Output As #1
    Do Until rs.EOF
        Print #1, rs.Fields("Id_Station_1").Value & "," & rs.Fields("Date").Value & "," & rs.Fields("Valeur").Value
        rs.MoveNext
    Loop
    rs.Close
    Close #1
     
    End Sub

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut
    Bonsoir,
    Crée un raccourci sur ton bureau vers un document quelconque du dossier "Mes documents" édite le et tu verras qu'il est entouré de guillemets.
    Les chemins contenant des espaces doivent en être encadrés.
    Donc pour passer un guillemet en argument il faut soit le tripler """ soit "' soit chr34 & ". (la dernière solution est de loin la meilleure).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Open chr(34) &  "C:\Utilisateurs\eescloup\Mes documents\MATLAB-data-routines\Cotes par station\txt_data_from_access\station.txt" & chr(34) For Output As #1

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse !
    j'avance peu à peu... je réponds aussi en décalage car je suis en guyane.

    donc pour récapituler j'ai ce code :

    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
    Public Sub selection_enregistrement()
     
    Dim db As DAO.Database
    Set db = CurrentDb
    Dim sql As String
    Dim rs As DAO.Recordset
     
     
    'Affectation d'un identifiant
    Dim x As String
    x = InputBox("Entrez un Identifiant")
    sql = "SELECT Id_Station_1, Date, Valeur FROM Cotes WHERE Id_Station_1='" & x & "'"
    Set rs = db.OpenRecordset(sql)
     
    Open Chr(34) & "C:\Utilisateurs\eescloup\Data-stations\station.txt" & Chr(34) For Output As #1
    Do Until rs.EOF
        Print #1, rs.Fields("Id_Station_1").Value & "," & rs.Fields("Date").Value & "," & rs.Fields("Valeur").Value
        rs.MoveNext
    Loop
    rs.Close
    Close #1
     
    End Sub
    l'erreur concerne maintenant le chemin spécifié dans l'instruction open (erreur 52)... euh, petite confirmation (c peut-être bête) : le fichier .txt doit bien déjà existé et la boucle le remplit itérativement, c'est bien cela ?? il n'est pas question de créer via ce code un nouveau fichier .txt... suis-je clair ?

    (...car mon fichier station.txt existe dans le répertoire spécifié.)

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Dans cette file il y a un exemple de code qui écrit dans un fichier texte (non existant). Regarde si tu peux t'en inspirer

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    ok, j'y jette un oeil ! merci !

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Points : 80
    Points
    80
    Par défaut
    Hum...Bonjour,
    Citation Envoyé par ouatata Voir le message
    Merci pour ta réponse !
    l'erreur concerne maintenant le chemin spécifié dans l'instruction open (erreur 52)... euh, petite confirmation (c peut-être bête) : le fichier .txt doit bien déjà exister...
    Crée un raccourci sur ton bureau vers le document C:\Utilisateurs\eescloup\Data-stations\station.txt édite le et tu verras qu'il N'EST PAS entouré de guillemets ( En même temps cela permet de capturer la syntaxe ou/et tester le chemin).
    Les chemins contenant des espaces doivent en être encadrés. MAIS PAS LES AUTRES.

    Concernant le fichier: s'il n'existe pas, il le crée automatiquement.
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Open "C:\Utilisateurs\eescloup\Data-stations\station.txt"  For Output As #1

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour à tous !!

    Merci pour toutes vos remarques qui m'ont bien fait avancé ! il m'a suffit d'un petit coup de pouce final pour obtenir un code qui tourne au top !
    Le voici :
    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
    Sub OpenTextFileTest()
        Const ForReading = 1, ForWriting = 2, ForAppending = 3
        Dim fs, f
        Dim sSQL As String
     
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set f = fs.OpenTextFile("C:\Documents and Settings\MB\BUREAU\BDD\ID_sations.txt", ForReading, TristateFalse)
     
        Do While Not f.AtEndOfStream
            NOM = f.ReadLine()
            MsgBox (NOM)
            NOMtxt = NOM & ".txt"
            'sql = "SELECT Id_Station, Date, Valeur FROM Cotes WHERE Id_Station='" & NOM & "'"
            'Dim sql As String
            'sSQL = "SELECT Id_Station, Date, Valeur FROM Cotes WHERE Id_Station = 2603100105 "
            'Set rst = db.OpenRecordset(sSQL, dbOpenTable)
            'CurrentDb.CreateQueryDef "sSQL", "SELECT Cotes.Id_Station, Cotes.Date, cotes.Valeur FROM Cotes WHERE Cotes.Id_Station = 2603100105"
            CurrentDb.CreateQueryDef "sSQL", "SELECT Cotes.Id_Station, Cotes.Date, Cotes.Valeur FROM Cotes WHERE Cotes.Id_Station = '" & NOM & "'"
     
            DoCmd.OpenQuery "sSQL"
     
            Open "C:\Documents and Settings\MB\BUREAU\BDD\schema.ini" For Output As #1
            Print #1, "["; NOMtxt; "]", "CharacterSet = ANSI", "Format=TabDelimited", "ColNameHeader = False", "Format=Delimited(;)", Chr(13), "DECIMALSYMBOL=."
            Close #1
     
            DoCmd.TransferText acExportDelim, , "sSQL", "C:\Documents and Settings\MB\BUREAU\BDD\" & NOMtxt
     
            Kill "C:\Documents and Settings\MB\BUREAU\BDD\schema.ini"
     
            DoCmd.RunSQL ("DROP TABLE sSQL")
            DoCmd.Close
     
        Loop
        f.Close
     
    End Sub
    En espérant que ça puisse servir à d'autres débutants en bidouillage VB... moi je le suis un peu moins...

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/12/2013, 08h18
  2. Exporter des données d'une tables access
    Par elodie22 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/06/2008, 22h59
  3. extraction des données dans une table Access
    Par moabomotal dans le forum Access
    Réponses: 2
    Dernier message: 26/05/2006, 11h17
  4. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11

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