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 d'une table Access vers une table Excel


Sujet :

VBA Access

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Points : 43
    Points
    43
    Par défaut Export d'une table Access vers une table Excel
    Bonjour à tous,

    Je vais vous exposer mon problème.
    Voilà, j'ai une table access que j'arrive à exporter sur une table excel (alléluia).
    Maintenant ce que je souhaite obtenir c'est l'exportation par rapport à une condition sur un champ de ma table access. Je m'explique, sur ma table 'OPERATION' de access, j'ai un champ date, et je voudrais faire en sorte que l'exportation se fasse quand la date passe d'une année sur l'autre. (01/01/aaaa<=date<='31/12/aaaa').
    En fait, le but est d'archiver ma table dans un fichier excel selon la date donnée.

    Voici 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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    Private Sub archive_Click() 
     
       Dim xlApp As Excel.Application 
        Dim xlSheet As Excel.Worksheet 
        Dim xlBook As Excel.Workbook 
        Dim I As Long, J As Long 
        Dim t0 As Long, t1 As Long 
     
        t0 = Timer 
        Dim rec As DAO.Recordset 
     
        Set rec = CurrentDb.OpenRecordset("OPERATION", dbOpenSnapshot) 
     
        'Initialisations 
        Set xlApp = CreateObject("Excel.Application") 
        Set xlBook = xlApp.Workbooks.Add 
     
        'Ajouter une feuille de calcul 
        Set xlSheet = xlBook.Worksheets.Add 
        xlSheet.Name = "Table" 
     
        ' le titre 
        '  écriture dans la cellule de ligne 1 et de colonne 1 
        xlSheet.Cells(1, 1) = "Export d'une table Access" 
     
     
        ' les entetes 
        '  .Fields(Index).Name renvoie le nom du champ 
        For J = 0 To rec.Fields.Count - 1 
            xlSheet.Cells(2, J + 1) = rec.Fields(J).Name 
            ' Nous appliquons des enrichissements de format aux cellules 
            With xlSheet.Cells(2, J + 1) 
                .Interior.ColorIndex = 15 
                .Interior.Pattern = xlSolid 
                .Borders(xlEdgeBottom).LineStyle = xlContinuous 
                .Borders(xlEdgeBottom).Weight = xlThin 
                .Borders(xlEdgeBottom).ColorIndex = xlAutomatic 
                .HorizontalAlignment = xlCenter 
            End With 
        Next J 
     
        ' recopie des données à partir de la ligne 3 
        I = 3 
        Do While Not rec.EOF 
            For J = 0 To rec.Fields.Count - 1 
                ' .Fields(Index).Type renvoie le type du champ 
                '   si c'est un Texte (dbText) nous insérons "'" pour 
                '   qu'il soit reconnu par Excel comme du Texte 
                If rec.Fields(J).Type = dbText Then 
                    xlSheet.Cells(I, J + 1) = "'" & rec.Fields(J) 
                Else 
                    xlSheet.Cells(I, J + 1) = rec.Fields(J) 
                End If 
            Next J 
            I = I + 1 
            rec.MoveNext 
        Loop 
     
        ' code de fermeture et libération des objets 
        xlBook.SaveAs "F:\Feuille.xls" 
        xlApp.Quit 
        rec.Close 
        Set rec = Nothing 
        Set xlSheet = Nothing 
        Set xlBook = Nothing 
        Set xlApp = Nothing 
     
        t1 = Timer 
        Debug.Print I & " enregistrements", Format(t1 - t0, "0") & " secondes" 
     
    End Sub



    Voilà en vous remerciant d'avance, j'espère que vous pourrez me venir en aide.
    Merci,

  2. #2
    Membre averti
    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
    Points : 356
    Points
    356
    Par défaut Peut-etre une solution...
    Bonjour,

    Ne cherchant pas a connaitre la condition exact a appliquer, je pense que tu pourrais essayer de remplacer l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("OPERATION",dbOpenSnapshot)
    Par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("SELECT * FROM OPERATION WHERE ... ;", dbOpenSnapshot)
    J'espere t'avoir aide un peu
    - Bien programmer n'est pas choisir la solution la plus simple, mais la meilleure -

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    Ah tiens je n'y avais pas pensé.
    merci bien

    je vais tester et je te dirais si c'est ce que je souhaite obtenir.

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    c'est bon milles merci ça fonctionne bien

    par contre j'ai une autre question, je ne comprends pas pourquoi lorsque j'exporte d'acces via excel, les champs sont transformés ??? par exemple mais valeur oui non sont transformés en VRAI FAUX et mes dates sont transformées en valeur numérique, c'est assez bizarre...

  5. #5
    Membre averti
    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
    Points : 356
    Points
    356
    Par défaut
    ...eternels problemes de compatibilite des formats...

    Tu dois formater les cellules Excel de la maniere souhaitee.
    Pour connaitre les instructions correctes, "joue" avec des "record macro" en Excel avant de reporter les instructions ainsi generees en VBA Access.

    Desole, je ne connais pas d'autre solution
    - Bien programmer n'est pas choisir la solution la plus simple, mais la meilleure -

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    ok ok pas de soucis, tu m'as déjà bien aidé.

    sinon dans ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rec = CurrentDb.OpenRecordset("SELECT * FROM OPERATION WHERE ... ;", dbOpenSnapshot)
    l'inconvénient, c'est que je dois saisir au fur et a mesure les dates pour exporter.
    En supposant que c'est l'utilisateur qui va faire l'exportation, est-ce que c'est possible que je fasse en sorte de lui poser la question du genre :

    quelle année à extraire ? de ce fait l'utilisateur pourra faire son choix.

    merci d'avance

  7. #7
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour.

    Essayez quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM OPERATION WHERE (((maTable.mon CHamp)=[|Quelle valeur?]));
    en remplaçant "maTable.mon CHamp" par le champ de votre table correspondant.

    Pierre

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    J'ai essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rec = CurrentDb.OpenRecordset("SELECT * FROM OPERATION WHERE (((OPERATION.sai_o)=[Quelle saison est à archiver?]));", dbOpenSnapshot)

    cela me retourne une erreur de type '3061' Trop peu de paramètres. 1 attendu.

  9. #9
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Essayez de trouver la bonne syntaxe SQL en vous aidant de l'éditeur de requête d'Access.

    Pierre

  10. #10
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2007
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2007
    Messages : 169
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par lechtinico Voir le message
    J'ai essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rec = CurrentDb.OpenRecordset("SELECT * FROM OPERATION WHERE (((OPERATION.sai_o)=[Quelle saison est à archiver?]));", dbOpenSnapshot)

    cela me retourne une erreur de type '3061' Trop peu de paramètres. 1 attendu.
    Salut,

    Il faut peut être rajouter des guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec = CurrentDb.OpenRecordset("SELECT * FROM OPERATION WHERE (((OPERATION.sai_o)=['Quelle saison est à archiver?']));", dbOpenSnapshot)
    ____________
    Yonnel

    http://www.gylsolutions.fr - Conseil en informatique - Access VBA
    Lionel Garnier

    N'oubliez pas de voter pour les posts en cliquant sur le
    Cliquez sur le bouton lorsque vous êtes satisfaits de la réponse!
    mon site pro

  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    DAO n'accepte pas les requêtes contenant ce genre de paramètre (saisie utilisateur) dans la méthode OpenRecordset. Il est nécessaire de passer par un objet QueryDef.

    Autre possibilité : récupérer la saisie utilisateur à l'aide de la fonction Inputbox.

  12. #12
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Désolé d'avoir mal aiguillé.

    Je me suis basé juste sur une demande de la valeur du critère dans une requête en SQL.

    Ne maîtrise pas assez DAO.


    la proposition suivante paraît-elle correcte?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    saison = inputbox ("Quelle saison est à archiver?")
    sql = "SELECT * FROM OPERATION WHERE ((OPERATION.sai_o)=" & saison & ");"
    Set rec = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
    en partant du principe que la valeur "saison" est numérique.

    Pierre

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    Je tiens à vous remercier, votre aide m'a été précieuse.
    J'ai utilisé le code de Pierre, cela fonctionne à merveille, la saison est bien en numérique, mais finalement j'ai quand même utilisé DAO.
    Maintenant, une dernière petite chose, et oui le vba et moi c'est une longue histoire...

    Est-il possible d'enregistrer chaque saison sur une nouvelle feuille Excel ?
    car ce qu'il se passe c'est que quand je saisis une saison différente, cela m'écrase les donneés de la saison que j'avais exporter précédemment.

  14. #14
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Alors là, ça ne sera que des suppositions, je ne maîtrise pas du tout les export dans excel.

    Mais, je me dis que l'idée serait de donner un nom à chaque feuille, nom construit à partir de la variable "saison".

    Pierre

Discussions similaires

  1. [AC-2010] insert into pour envoyer les donnees d'une table Access vers une table Mysql
    Par jj4822 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 01/12/2014, 11h12
  2. copier une table access vers une feuille excel
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/06/2010, 18h25
  3. Import des tables d'une BDD access vers une autre table
    Par Darki dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/07/2007, 15h06
  4. Réponses: 8
    Dernier message: 21/04/2006, 16h50
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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