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 :

export des tables vides acess vba


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut export des tables vides acess vba
    Bonjour,
    Je possède un nombre de table par classe d’école (cm1,cp,…),mon besoin est de faire l’export des infos de ces tables et les stockées dans un fichier texte sur mon bureau.
    Mon problème je souhaite que si une table est vide de ne pas me générer le fichier correspondant .
    Je n’arrive pas à faire cela avec une boucle if .Si vous avez des idées merci ;
    voici le code ( pour ce cas la table cm2 est vide maisle programme beug à la ligne If rs.Fields("nom")<>0 then
    Il me dit objet manquant ) :
    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
    Function Export_txt()
      Dim rs As DAO.Recordset
       Set rs = CurrentDb.OpenRecordset("Requête cm1")
     
     
    Open "C:\BUREAU \CLASSES\CM1.txt" For Output As #1
     
      Print #1, ("classe cm1")
      Do While Not rs.EOF
        Print #1, " < & rs.Fields("nom")& rs.Fields("prénom") & & rs.Fields("age") >"
        rs.MoveNext
         Print #1, (" ")
     Loop
         Set rs = CurrentDb.OpenRecordset("Requête cm2")
    If rs.Fields("nom")<>0 then 
    Open "C:\BUREAU \CLASSES\CM2.txt" For Output As #1
    Print #1, ("classe cm2")
      Do While Not rs.EOF
        Print #1, " < & rs.Fields("nom")& rs.Fields("prénom") & & rs.Fields("age") >"
        rs.MoveNext
         Print #1, (" ")
    Loop
      ELSE  
      Close #1
    END IF
    END FUNCTION
     
    Merci

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonjour,
    teste les valeurs EOF et BOF avant d'ouvrir ton fichier si les 2 ont la valeur True c'est que ta table est vide :
    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
    Function Export_txt()
      Dim rs As DAO.Recordset
       Set rs = CurrentDb.OpenRecordset("Requête cm1")
     
        If Not rs.EOF And Not rs.BOF Then
            Open "C:\BUREAU \CLASSES\CM1.txt" For Output As #1
     
            Print #1, ("classe cm1")
                Do While Not rs.EOF
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age") & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If
     
        Set rs = CurrentDb.OpenRecordset("Requête cm2")
     
        If Not rs.EOF And Not rs.BOF Then
            Open "C:\BUREAU \CLASSES\CM2.txt" For Output As #1
     
            Print #1, ("classe cm2")
            Do While Not rs.EOF
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age") & "; >"
                rs.MoveNext
                Print #1, (" ")
            Loop
            Close #1
        End If
    rs.Close
    Set rs = Nothing
    End Function

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut RE
    Hello
    Ca marche parfaitement bien merci à toi!

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut re
    Je souhaite rajouter une variable (qui s’incrémente automatiquement à ma ligne) à la variable age
    J’ai rajouté un I mais ca ne fonctionne pas
    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
     Function Export_txt()
      Dim rs As DAO.Recordset
       Set rs = CurrentDb.OpenRecordset("Requête cm1")
     
        If Not rs.EOF And Not rs.BOF Then
            Open "C:\BUREAU \CLASSES\CM1.txt" For Output As #1
     
            Print #1, ("classe cm1")
                Do While Not rs.EOF
    DiM  I AS byt
    For I =1 to 100
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
                    rs.MoveNext
                    Print #1, (" ")
    NEXT I
                Loop
            Close #1
        End If
     End Function
    Merci de votre aide

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonjour,
    J’ai rajouté un I mais ca ne fonctionne pas
    Ce n'est pas suffisant comme indication, merci de mieux expliquer ton problème (messages d'erreur, résultat incorrect...).
    Corrige déjà ceci :
    et déplace-le hors de tes boucles.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut Re
    A l’extérieure de la boucle ça marche mais ça ne s’incrémente pas
    A l’intérieur message d’erreur «3021 aucun enregistrement en cours.
    Merci

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Mettre uniquement le Dim I as Byte à l'extérieur de la boucle. Par convention, les variables sont déclarées en début de code.

    A l’intérieur message d’erreur «3021 aucun enregistrement en cours.
    A quelle instruction apparait ce message ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Do While Not rs.EOF
    	For I = 1 to 100
    		Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
    		rs.MoveNext
    		Print #1, (" ")
    	NEXT I
    Loop
    Peux-tu expliquer ce que doit faire ce code ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Bonjour l'erreur est sur sur la ligne
    & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"Le programme doit ajouter à la colonne age un entier de 1 à 100 pour donner des âges fictifs aux personnage mais chaque enregistrement doit sincrementer de 1
    Merci

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Do While Not rs.EOF
    	For I = 1 to 100
    		Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
    		rs.MoveNext
    		Print #1, (" ")
    	NEXT I
    ta boucle est incorrecte car elle force 100 fois le MoveNext à chaque lecture d'un enregistrement d'où le message 3021, car le Movenext au bout d'un moment arrive à la fin du Recordset.
    Si c'est pour donner un age fictif tu peux ajouter un nombre aléatoire.
    Utilise se code pour les générer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim nbLimitesup As Byte
    Dim nbLimiteInf As Byte
    Dim I As Byte     ' Déclarations de variables à placer en début de code
     
    nbLimiteInf = 1
    nbLimitesup = 100
    I = Int((nbLimitesup - nbLimiteInf + 1) * Rnd + nbLimiteInf)
    il ne reste plus qu'à ajouter I à age :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Print #1, ("classe cm1")
                Do While Not rs.EOF
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Désolé, j'ai été trop vite, il faut faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
           Print #1, ("classe cm1")
                Do While Not rs.EOF
                    I = Int((nbLimitesup - nbLimiteInf + 1) * Rnd + nbLimiteInf)
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If

  11. #11
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Désolé, j'ai été trop vite, il faut faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
           Print #1, ("classe cm1")
                Do While Not rs.EOF
                    I = Int((nbLimitesup - nbLimiteInf + 1) * Rnd + nbLimiteInf)
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If
    Bonsoir
    Merci de ton retour,
    Je cherche à ajouter un age fictif dans une plage définie,une sorte de suite qui s'incrémente en fonction de mon age initial, j'ai testé ton code il marche bien, sauf que la fonction aléatoire ne m'arrange pas o faite.

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Je ne comprend pas trop le but recherché. Et ceci tout simplement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Print #1, ("classe cm1")
                Do While Not rs.EOF
    				I = I + 1
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If

  13. #13
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Je ne comprend pas trop le but recherché. Et ceci tout simplement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Print #1, ("classe cm1")
                Do While Not rs.EOF
    				I = I + 1
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age")+I & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If
    hello
    c'était bien ca le but
    merci grace à toi je vais dormir moins bête soir.

  14. #14
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Bonsoir
    J’ai un petit problème avec mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
     Function Export_txt()
      Dim rs As DAO.Recordset
       Set rs = CurrentDb.OpenRecordset("Requête cm1")
     
        If Not rs.EOF And Not rs.BOF Then
            Open "C:\BUREAU \CLASSES\CM1.txt" For Output As #1
     
            Print #1, ("classe cm1")
                Do While Not rs.EOF
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age") & "; >"
                    rs.MoveNext
                    Print #1, (" ")
                Loop
            Close #1
        End If
     
        Set rs = CurrentDb.OpenRecordset("Requête cm2")
     
        If Not rs.EOF And Not rs.BOF Then
            Open "C:\BUREAU \CLASSES\CM2.txt" For Output As #1
     
            Print #1, ("classe cm2")
            Do While Not rs.EOF
                    Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age") & "; >"
                rs.MoveNext
                Print #1, (" ")
            Loop
            Close #1
        End If
    rs.Close
    Set rs = Nothing
    End Function
    Le code plante à la ligne : Print #1, " < " & rs.Fields("nom") & ";" & rs.Fields("prénom") & ";" & rs.Fields("age") & "; >"

    Avec le message d’erreur 52 : nom ou numéro de fichier incorrecte, pourtant la requete classe cm1 s’exécute bien avec des données, j’ai regardé sur internet il disent que c’est un problème de chemin, mais mon chemin est correcte.
    Je ne sais pas si tu vois d’où ça peut venir cette erreur ?
    Merci

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Bonsoir,
    peut-être à cause de l'espace après BUREAU ?

  16. #16
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    Bonsoir,
    peut-être à cause de l'espace après BUREAU ?
    Non le fichier marchait bien ,des que j'ai changé les entrées,plus rien,pourtant la requête acess marche

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    qu'appelles-tu "changer les entrées" ?

  18. #18
    Membre confirmé
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    qu'appelles-tu "changer les entrées" ?
    Changer les enregistrements de la requête de la table cm1

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    Peux-tu taper : close #1 dans la fenêtre d'exécution, cela forcera la fermeture du fichier si jamais il est ouvert (sinon, il y a un message d'erreur sans importance).
    Ensuite, modifie ton code en donnant un numéro différent pour cm2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Open "C:\BUREAU \CLASSES\CM2.txt" For Output As #2
    ...Print #2
    etc...

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    et enlèves quand même l'espace après BUREAU

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Export des tables d'une base
    Par jdiamsss dans le forum Oracle
    Réponses: 4
    Dernier message: 24/10/2006, 09h19
  2. [SQL-Server] Exporter des tables sans PHPmyAdmin ??
    Par seb92500 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/07/2006, 14h30
  3. exporter des table en fichier csv
    Par kornmuse90 dans le forum Administration
    Réponses: 1
    Dernier message: 17/03/2006, 09h17
  4. Ajouter un enregitrement a une table vide en VBA avec access
    Par Mateache dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/01/2006, 15h36
  5. Chemin des tables attachées en VBA
    Par stigma dans le forum Access
    Réponses: 3
    Dernier message: 17/06/2005, 09h42

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