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

Requêtes et SQL. Discussion :

Requête pour remplir une table à partir d'un fichier Excel [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 181
    Points : 55
    Points
    55
    Par défaut Requête pour remplir une table à partir d'un fichier Excel
    Bonjour à tous,

    Je souhaiterai remplir une table d'Access. Les données proviennent d'un fichier Excel. J'ai essayé d'inserer les données par la procédure automatique (Fichier > Données Externes>Importer) mais une erreur d'importation ne permet d'avoir mes données dans Access.

    A mon sens, la seule solution c'est d'importer les données d'Excel colonnes par colonnes. J'ai créer les champs dans Access correspondants au entêtes de colonnes de mon fichier Excel.

    Je cherche le code VBA qui permettra de faire cette procédure.

    Merci en tout cas pour votre aide

    Olivier

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Regarde du côte de la fonction TransferSpreadsheet. Elle te sera très utile pour faire ce que tu souhaite

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 350
    Points : 507
    Points
    507
    Par défaut
    Bonjour,

    Je te conseillerais de passer par du VB, voici le code que moi j'ai utilisé pour remplir ma table a partir d'un fichier excel, si jamais il y a quelque chose que tu ne comprends pas, n'hésites pas, mais il est tout commenté, donc ca devrait aller !

    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
    Private Sub bt_MaJCli_Click()
     
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
     
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open("F:\stage p\fichier client.xls") 'chemin vers fichier Excel
    Set oWSht = oWkb.Worksheets("fichier client") ' nom de la feuille qui contient les données à importer
     
    'première ligne ou commence l'import
    i = 2
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant qu'on ne rencontre pas une case vide
    While oWSht.Range("I" & i).Value <> ""
        'condition de remplissage de la table => eviter les doublons
        'si l'enregistrement existe déjà dans la table destination,
        'on le supprime puis on place le nouveau
        If DCount("*", "[client]", "[codecli] LIKE '" & oWSht.Cells(i, 1) & "*'") = 1 Then
        'le numéro 1 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
            cSQL = "delete * from [client] where [codecli] LIKE '" & oWSht.Cells(i, 1) & "*'"
            DoCmd.RunSQL cSQL
        End If
        cSQL = ""
        'requète SQL (avec en paramètre la ligne i et le numéro de la colonne comme précisé au-dessus)
        cSQL = "insert into [client] ( [codecli], [nomcli] ) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ")"
        'ici, on ne prend que les colonnes A (=1) et B (=2).
        DoCmd.RunSQL cSQL 'exécute la requète
        'on incrémente la variable i pour passer à la ligne suivante
        i = i + 1
    Wend
    DoCmd.SetWarnings True
    End Sub

  4. #4
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 181
    Points : 55
    Points
    55
    Par défaut
    Merci pour ta réponse aussi rapide, puisque tu me dis "si jamais il y a quelque chose que tu ne comprends pas, n'hésites pas...", donc je n'hésite pas :

    Peux tu m'expliquer cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DCount("*", "[client]", "[codecli] LIKE '" & oWSht.Cells(i, 1) & "*'") = 1 Then
        'le numéro 1 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
            cSQL = "delete * from [client] where [codecli] LIKE '" & oWSht.Cells(i, 1) & "*'"
    Et plus précisemment les champs [client] , [codecli] ?
    Sachant que, si j'ai 22 colonnes dans mon fichier Excel, je devrais avoir 22 champs dans Access... Je dois mettre les 22 noms des champs, les uns derrière les autres ?

    Et enfin, si c'est le cas, je dois faire la meme chose pour cette ligne ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cSQL = "insert into [Catalogue] ( [codecli], [nomcli] ) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ")"
    J'espère que je suis clair dans mes explications ...
    Merci en tout cas pour ta réponse
    Olivier

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Puisque tu veux importer ton fichier Excel en VBA uniquement puisque tu as des erreurs avec la procédure automatique (Fichier > Données Externes>Importer), pourquoi ne fais-tu pas simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    docmd.TransferSpreadsheet acimport, acSpreadsheetTypeExcel5, <nom_Table_Access>, <chemin complet du fichier Excel>, false, <nom de ta feuile>!<plage de ta feuille à importer>
    Quelles sont les erreurs que tu as en important avec la procédure existante (Fichier > Données Externes>Importer) ?

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 181
    Points : 55
    Points
    55
    Par défaut
    Merci pour ta réponse Taoueret

    Meme si le code de marcuscircus me paraît pas mal, ta ligne de code me semble plus appropriée.

    En ce qui concerne le message d'erreur qui s'affiche en passant par la procédure existante, Access n'est pas explicite, mis à part qu'il me dit que le fichier "XXXXX" n'a pas été importé....

    Olivier

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 181
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Taoueret Voir le message
    Puisque tu veux importer ton fichier Excel en VBA uniquement puisque tu as des erreurs avec la procédure automatique (Fichier > Données Externes>Importer), pourquoi ne fais-tu pas simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    docmd.TransferSpreadsheet acimport, acSpreadsheetTypeExcel5, <nom_Table_Access>, <chemin complet du fichier Excel>, false, <nom de ta feuile>!<plage de ta feuille à importer>
    Quelles sont les erreurs que tu as en important avec la procédure existante (Fichier > Données Externes>Importer) ?
    Bonjour,

    Voici le code tel que je l'ai saisi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel5, Catalogue, Chemin du fichier Excel, False, Feuil1, A1:X984
    Cela ne fonctionne pas.

    J'ai essayé de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Catalogue, Chemin du fichier Excel, False, Feuil1, A1:X984
    entre [] mais j'ai un message d'erreur de débogage.

    Pour ne rien vous cacher, je sèche un peu.

    Merci pour votre aide
    Olivier

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Il te manque des guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel5, "Catalogue", "Chemin du fichier Excel", False, "Feuil1!A1:X984"

  9. #9
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 181
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Taoueret Voir le message
    Il te manque des guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel5, "Catalogue", "Chemin du fichier Excel", False, "Feuil1!A1:X984"
    Merci tout le monde, ça marche !

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

Discussions similaires

  1. remplir une table à partir d'un fichier .txt
    Par intel42 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/02/2012, 13h01
  2. Creer une table à partir d'un fichier Excel
    Par zouuc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2010, 10h08
  3. Remplir une table à partir d'un fichier.
    Par SonnyFab dans le forum ASP.NET
    Réponses: 34
    Dernier message: 29/09/2010, 17h07
  4. Remplir une table à partir d'un fichier .txt
    Par deubelte dans le forum Access
    Réponses: 2
    Dernier message: 06/11/2009, 11h58
  5. [AC-2003] Mise à jour d'une table à partir d'un fichier Excel
    Par calimeroAXS dans le forum Modélisation
    Réponses: 6
    Dernier message: 03/04/2009, 10h45

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