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 :

Copier des données de Access vers Excel [AC-2010]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Points : 35
    Points
    35
    Par défaut Copier des données de Access vers Excel
    Bonjour à tous,

    Je souhaiterais copier dans un fichier excel des enregistrements présents dans une base de données access. Je possède les chemins d'accès de ces deux fichiers. Je ne sais pas comment m'y prendre pour copier les données de l'un à l'autre. Voici mon code argumenté :

    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
    Private Sub copie()
     
      Dim accChemin As String ' Chemin de la base de données
      accChemin = "C:\mon Chemin ...accdb"
      Dim MonAccess As New Access.Application
      MonAccess.OpenCurrentDatabase (accChemin)
     
      Dim xlChemin As String ' Chemin du fichier excel
      xlChemin = "C:\ mon chemin ... xlsx"
     
      Dim app As Excel.Application
      Dim wkb As Excel.Workbook
      Dim wks As Excel.Worksheet
     
      Set app = New Excel.Application
      Set wkb = app.Workbooks.Open(xlChemin)
      Set wks = wkb.Worksheets("Feuil1")
     
      Dim SQL As String
     
    'active la routine de gestion d'erreur.
    On Error GoTo erreur
     
        'pour éviter les messages lors de l'ajout des enregistrements
        DoCmd.SetWarnings False
     
    '*********************************************************
     
            SQL = "SELECT champ1, champ2 FROM MaTable1"
            'COPIER CES DONNEES dans le fichier excel feuil1, ligne1
     
            SQL = "SELECT champ3, champ4 FROM MaTable2"
            'COPIER CES DONNEES A LA SUITE DU FICHIER EXCEL feuil1
     
    '*********************************************************
     
        'on réactive les messages d'erreurs
        DoCmd.SetWarnings True
     
            'On libère l'ensemble des variables
            Set wks = Nothing
            Set wkb = Nothing
            Set app = Nothing
            MonAccess.Quit acQuitSaveNone
            Set MonAccess = Nothing
     
        Exit Sub
     
    erreur:    ' Routine de gestion d'erreur.
        MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbInformation
     
    End Sub
    Pourriez vous m'aider à combler le bloc entre étoiles, en utilisant peut être un With ou tout autre idée.
    Merci à tous pour vos suggestions

    BH

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    As-tu consulté la FAQ Access : http://access.developpez.com/faq/?page=Excel

    Il y a déjà pleins d'informations.

    Un tuto intéressant à lire également : http://cafeine.developpez.com/access/tutoriel/excel/

    De plus en faisant une recherche sur le forum Access avec le mot Excel il y a une grande quantité de discussions sur le sujet.

    Commence déjà la lecture du tuto et de la FAQ, tu commenceras à y voir plus clair.

    Philippe

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Merci pour ces différents liens, j'avais déjà lu les deux premiers, mais dans les exemples proposés, on insére les données case par case dans le fichier Excel, y a t-il un moyen pour réaliser un "copier-coller" direct ?

    Faut-il également que je passe par DAO?

    Cdl,

    B

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 618
    Points : 43 591
    Points
    43 591
    Par défaut
    Voici un code que j'utilise :

    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
     
    Private Sub Export_excel()
    Dim xlapp As Object
    Dim xlwb As Object
    Dim xlsh As Object
     
    Set xlapp = CreateObject("Excel.Application")
    Set xlwb = xlapp.Workbooks.Add
    Set xlsh = xlwb.Worksheets(1)
    Set rs = Me.Recordset
     
    xlsh.Range("A1").SELECT
    intCount = 0
    Do Until intCount = rs.Fields.Count
            xlapp.ActiveCell = rs.Fields(intCount).Name
            xlapp.ActiveCell.Offset(0, 1).SELECT
            intCount = intCount + 1
    Loop
     
    rs.MoveFirst
    xlsh.Range("A2").CopyFromRecordset rs
     
    xlsh.Range("1:1").SELECT
    xlapp.Selection.Font.Bold = True
    xlsh.Range("A1").SELECT
    xlapp.Visible = True
     
    End Sub
    Je copie les données dans un doc excel vierge. Tu peux l'adapter.

    Le code est assez facile à comprendre.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Merci pour ces informations mais je ne vois pas comment le code interragit avec la base de données. Pourriez-vous m'expliquer.

    Cdl,

    B

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    J'ai changé le bloc central pour ceci :

    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
    Private Sub copie()
     
      Dim accChemin As String ' Chemin de la base de données
      accChemin = "\monchemin.mdb"
     
      Dim MonAccess As DAO.Database
      Set MonAccess = DAO.OpenDatabase(accChemin)
      Set Rs = DAO.Recordset
     
      Dim xlChemin As String ' Chemin du fichier excel
      xlChemin = "C:\ mon chemin ... xlsx"
     
      Dim app As Excel.Application
      Dim wkb As Excel.Workbook
      Dim wks As Excel.Worksheet
     
      Set app = New Excel.Application
      Set wkb = app.Workbooks.Add(xlChemin)
      Set wks = wkb.Worksheets(1)
     
      Dim SQL As String
     
    'active la routine de gestion d'erreur.
    On Error GoTo erreur
     
        'pour éviter les messages lors de l'ajout des enregistrements
        DoCmd.SetWarnings False
     
    '*********************************************************
     
            SQL = "SELECT champ1, champ2 FROM MaTable1"
            Set Rs = MonAccess.OpenRecordset(SQL, DAO.dbOpenSnapshot)
            wks.Range("A1").CopyFromRecordset Rs
     
            SQL = "SELECT champ3, champ4 FROM MaTable2"
            Set Rs = MonAccess.OpenRecordset(SQL, DAO.dbOpenSnapshot)
            wks.Range("A1").End(xlDown).Row.CopyFromRecordset Rs
     
    '*********************************************************
     
        'on réactive les messages d'erreurs
        DoCmd.SetWarnings True
     
            'On libère l'ensemble des variables
            Set wks = Nothing
            Set wkb = Nothing
            Set app = Nothing
            MonAccess.Quit acQuitSaveNone
            Set MonAccess = Nothing
     
        Exit Sub
     
    erreur:    ' Routine de gestion d'erreur.
        MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbInformation
     
    End Sub
    Qu'en pensez vous? Est-ce-que cela pourrait fonctionner? J'ai déjà une première erreur sur mon DAO.Recordset ligne 8 qui me dit : Membre de méthode ou de données introuvables pourtant je suis sur de mon chemin d'access à la base.

    Cdl,

    B

  7. #7
    Invité
    Invité(e)
    Par défaut
    Re

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Rs as DAO.Recordset
    Le syntaxes ne s'inventent pas, bien lire la FAQ et les tutos, le code a été testé avant d'être publié.

    Philippe

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Ok désolé pour l'erreur, it works ! Merci à tous pour vos messages.

    @bientôt

    B

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

Discussions similaires

  1. [XL-2003] Transférer des données d'ACCESS vers EXCEL
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/10/2011, 22h44
  2. Exporter des données d'Access vers Excel.
    Par SunRay dans le forum VBA Access
    Réponses: 1
    Dernier message: 01/09/2009, 10h24
  3. [A-03] Extraire des données d'Access vers Excel
    Par azräel dans le forum VBA Access
    Réponses: 5
    Dernier message: 29/10/2008, 08h13
  4. Copier des données d'une feuille excel vers plusieurs autres
    Par LeeBamboo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/08/2008, 15h46
  5. Copier des données d'un fichier Excel vers des tableau Word
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2008, 14h57

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