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

Access Discussion :

Importer les données d'un fichier Excel (.xls) dans une table Access


Sujet :

Access

  1. #1
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut Importer les données d'un fichier Excel (.xls) dans une table Access
    Bonjour, comme l'indique le titre, je voudrais importer les données d'un fichier Excel (.xls) dans une table Access. Par contre, je n'ai pas besoin de tout le tableau. Juste de certaines colonnes et dans ces colonnes, je ne veux pas non plus toutes les lignes .
    Mon objectif est d'actualiser en un clic (ou même automatiquement au lancement du programme si c'est possible) les données de mes tables à partir de ce fameux fichier xls.

    Alors, j'ai essayé de faire une macro dans Access avec l'action "TransférerFeuilleCalcul", et j'ai mis une ligne pour chaque colonne du fichier Excel que je voulais, en définissant la plage désirée à chaque fois (toujours de la ligne 11 à la ligne 476, après c'est juste la lettre qui change ). Mais ça me met toutes les données dans le même colonne (la 1ère) et je me retrouve avec une seule colonne remplie de plus de 1000 lignes.
    Au départ, j'avais mis tout dans la même action en mettant les plage voulues à la suite comme ceci : B11:B476;C11:476;D11:476;...., mais c'était trop long et Access ne pouvait pas faire l'importation.

    Je suis presque sûr qu'avec du vrai code VBA (pas avec des macros), on peut le faire, ou avec une requète SQL, mais je m'y connais pas trop, alors je sais pas trop comment faire.

    J'attends avec impatience vos remarques et propositions.

    Cordialement, un apprenti-programmeur
      1  0

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et Bienvenu sur le Forum Office de DVP.

    Tu as sur ce forum des tutos comme celui-ci, qui pourrons t'aiguiller.

    De plus fait des recherches avec le mot Excel, et tu trouveras plein d'exemples d'importation Excel - Access.

    Starec
      0  0

  3. #3
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Ok merci pour les liens, je vais regarder si ma réponse s'y trouve
      0  0

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

    Ta réponse ne s'y trouvera pas obligatoirement, ce tuto concerne surtout de Access vers Excel, mais cela te donnera des pistes.

    Starec
      0  0

  5. #5
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Oui, effectivement, après lecture attentive et intéressée, je m'apperçois que ça ne parle que de l'importation Access vers Excel, or moi, j'aurais plutôt besoin de pistes pour l'importation Excel vers Access
      0  0

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

    Les pistes sont Automation, cette fois on pilote Excel à partir d'Access, le DoCmdTransfert, qui peut faire l'inverse, les tables liés, en fait les solutions sont nombreuses.

    Dans ton cas je verrais bien par Automation, va faire un tour dans la FAQ et les Sources, il y'a des exemples de codes pour piloter Excel à partir d'Access, ainsi que sur le Forum Access, en faisant une recherche avec le mot Excel.

    Lorsque tu es dans le forum, sur la barre bleu tu as Recherche, saisie Excel et dans la liste déroulante sélectionne le forum Access.

    Starec
      1  0

  7. #7
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Ok, je regarde

    Merci de la rapidité de tes réponses
      0  0

  8. #8
    Membre habitué

    Inscrit en
    Mars 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 92
    Points : 127
    Points
    127
      0  0

  9. #9
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    C'est intéressant, mais pour une importation unique, or moi je voudrais que ma base de données se mette à jour en se basant sur un fichier Excel, automatiquement à chaque lancement du programme (ou en cliquant sur un bouton, à la limite).
    Sinon, je dois avouer que j'ai des difficultés à trouver des trucs sur l'automation dont vous m'avez parlé.
    Est-ce qu'il ne serait pas judicieux d'automatiser l'export du fichier Excel vers un format texte comme le CSV, puis, de l'importer vers Access une fois converti ?
      0  0

  10. #10
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    récement j'ai du faire une fonction du même type
    le codé donné en plus simple un peu prés:

    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
     
    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("NOM DE TON FICHIER EXCEL")
    Set oWSht = oWkb.Worksheets("NOM DE TA FEUILLE")
    'premier ligne ou tu commence ton import
    i = 2
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant que la cellule n'est pas vide
    While oWSht.Range("A" & i).Value <> ""
     
      cSQL = "insert into Tableprincipale ( num_affaire ) values (" & Chr(34) & oWSht.Cells(i, 1) & chr(34) & ")"
     
    'exécute la requète
      DoCmd.RunSQL cSQL
     
     
      i = i + 1
    Wend
     
    DoCmd.SetWarnings true
    si il y a quelque chose que tu comprend pas demande moi

    t'intègre se code dans une fonction pour un bouton Access ou pour l'ouverture d'un formulaire

    Et oubli pas d'ajouter microsoft Excel dans tes références du vba
      1  0

  11. #11
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Alors, j'ai plusieurs questions : à quel endroit on définit la plage des cellules à importer ? Et ou est-ce qu'on mentionne la BDD et la table de destination de l'importation ?
    Parce que j'ai testé et j'ai erreur de syntaxe sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cSQL = "insert into Tableprincipale ( num_affaire &  ") values (" &
    J'ai inséré ton code dans le "code évènement" du bouton d'un forumulaire.
    Ca donne ça :
    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
    Private Sub Commande0_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("C:\Interventions\création.xls")
    Set oWSht = oWkb.Worksheets("Tableau réseau BPS")
    'premier ligne ou tu commence ton import
    i = 2
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant que la cellule n'est pas vide
    While oWSht.Range("A" & i).Value <> ""
     
      cSQL = "insert into Tableprincipale ( num_affaire &  ") values (" &
    Chr (34) & oWSht.Cells(i, 1) & Chr(34) & ")"
     
    'exécute la requète
      DoCmd.RunSQL cSQL
     
     
      i = i + 1
    Wend
     
    DoCmd.SetWarnings True
    End Sub
      0  0

  12. #12
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    donc pour importé c la commande docmd.runsql qui permet d'effectué des requete d'ajout ou de modification de table

    et l'erreur se produit car tu na pas modifier le nom de la table et le champ.

    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
     
    Private Sub Commande0_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("C:\Interventions\création.xls")
    Set oWSht = oWkb.Worksheets("Tableau réseau BPS")
    'premier ligne ou tu commence ton import
    i = 2
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant que la cellule n'est pas vide
    While oWSht.Range("A" & i).Value <> ""
     
      cSQL = "insert into [Nom de ta table] ( [NOM du champ de ta table] ) values (" &
    Chr (34) & oWSht.Cells(i, 1) & Chr(34) & ")"
     
    'exécute la requète
      DoCmd.RunSQL cSQL
     
     
      i = i + 1
    Wend
     
    DoCmd.SetWarnings True
    End Sub
    si ta d'otre question n'ésite pas
      0  0

  13. #13
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Ok, j'ai compris, mais pour la plage à importer c'est où ?
    J'aimerais bien sélectionner une plage de cellules à importer genre : (C11:C600);(E11:E600);(F11:F600) ...
    Enfin je sais pas si c'est la bonne syntaxe car je m'y connais pas trop en Excel, mais quelque chose comme ça. En fait je voudrais exporter les colonnes X, Y, Z ... mais seulement à partir de la 11ème ligne jusqu'à la fin du tableau.
    J'espère que tu as compris

    Merci des conseils !

    Edit : Autant pour moi : après réflexion et lecture approfondie (car j'ai déjà fait d'autres langages de programmation), j'ai cru comprendre que ce que je te demande ci-dessus doit se faire dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cSQL = "insert into [test] ( [champ1] ) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ")"
    Par contre, j'ai testé ton code et il marche, mais j'ai pas trop compris ce qu'il importe exactement. Est-ce que tu pourrais m'expliquer plus en détail ce que fait ta requète ? Car j'aimerais faire une requète qui fasse ce que je t'ai expliqué en haut.

    Re-merci !
      0  0

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 105
    Points : 86
    Points
    86
    Par défaut
    Bonjour tout le monde

    J'ai les meme difficulté que azertix concernant un import excel...
    Moi egalement je ne voudrai importer qu'a partir d'une certaine ligne du tableau et certaine colonnes de ce tableau (ex : les colonnes B,D,E,G....)
    J'utilise le
    DoCmd.TransferSpreadsheet acImport, 8, "Employés","C:\Fichier.xls", True, "B;D;E;G"

    cela ne marche pas

    J'ai consulté la faq http://access.developpez.com/faq/?page=Excel
    et les forums j'ai pas trouvé...
      0  0

  15. #15
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Effectivement, on a les mêmes problématiques ...
    Attendons la réponse de totofe pour avoir des précisions sur la requète, ça nous permettra de choisir la plage de cellules à importer
      0  0

  16. #16
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    bonjour tout le monde.

    donc oui ce code permet d'importer les valeurs des cellules de excel pour l'ajouter au champ [champ1] de la table [test]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cSQL = "insert into [test] ( [champ1] ) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ")"
     
    DoCmd.RunSQL cSQL
    et ceci a l'aide de la fonction "cells" apliqué à l'objet worksheet. qui prend en paramètre 2 entiers. la première renseigne la ligne de la cellule et la deuxième la colone.
    Donc pour votre fonction faut que vous fassiez deux boucle qui incrément les lignes et les colones.

    La requète permet d'ajouter un enregistrement à la table en ajoutant une valeur au champ [champ1]

    si vous voulez ajoutez plusieurs valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "insert into [test] ( [champ1], [champ2],.... ) values (" & oWSht.Cells(i, 1) & ", " & oWSht.Cells(i, 2) & ",... )"
    bien sure le nombre de champ doit être identique dans les deux parenthèse.
      1  0

  17. #17
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Bon alors, j'ai fait plusieurs tests et j'ai vu comment on choisissait la colonne et la ligne de départ, mais je vois pas trop comment faire pour changer de colonne. Parce que, si j'ai bien compris, le "A" dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While oWSht.Range("A" & i).Value <> ""
    est la colonne de départ ?
    D'autre part je sais utiliser les boucles en C, mais je touche pas trop en VB et je ne comprends qu vaguement ta boucle "tant que" dont le code est cité ci-dessus.
    Tu pourrais m'expliquer plus clairement les changements de ligne et de colonne et/ou donner un exemple, s'il te plait ?

    Merci d'avance,
    Azertix

    P.S : Si ça peut t'aider, je voudrais récupérer les données des colonnes G,H,J,K,N, mais seulement de la ligne 5 à la ligne où il n'y a plus rien, tout en bas. Or le code tu m'as proposé ne prend les valeurs que de la colonne A sans prendre les données des autres.
    Sinon, j'ai pas trop compris non plus comment on définissait les champs de destination pour chaque plage de cellules importée.
    Désolé pour toutes ces questions, mais comme je débute, je préfère m'informer précisément sur les trucs que j'ai pas compris (plutôt que de pomper du code "connement").
    J'attends ta réponse
      0  0

  18. #18
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    et tes colonnes G,H,J,K,N tu veu les stocké dans quelles champs de ta table?
    pas tous dans le même je supose.
      0  0

  19. #19
    Membre éprouvé Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 958
    Points : 937
    Points
    937
    Par défaut
    Non, je veux les stocker dans des champs différents, et avec des noms de champ différents de ceux du tableau xls source.
    Il faudrait que ça incrémente ma base de données sans créer de doublons, car c'est un programme que je veux utiliser pour mettre à jour la BDD.

    Merci encore
      0  0

  20. #20
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 411
    Points : 230
    Points
    230
    Par défaut
    Code VBA : 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
     
    Private Sub Commande0_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("C:\Interventions\création.xls")
    Set oWSht = oWkb.Worksheets("Tableau réseau BPS")
    'premier ligne ou tu commence ton import
    i = 5
     
    'pour éviter les messages lors de l'ajout des enregistrements
    DoCmd.SetWarnings False
     
    'tant que la cellule n'est pas vide
    While oWSht.Range("G" & i).Value <> ""
     
      cSQL = "insert into [Nom de ta table] ( [champ1], [champ2], [champ3], [champ4], [champ5] ) values (" &
    Chr (34) & oWSht.Cells(i, 7) & Chr(34) & ", " & Chr (34) & oWSht.Cells(i, 8) & Chr(34) & ", " & Chr (34) & oWSht.Cells(i, 10) & Chr(34) & ", " & Chr (34) & oWSht.Cells(i, 11) & Chr(34) & ", " & Chr (34) & oWSht.Cells(i, 14) & Chr(34) & ")"
     
    'exécute la requète
      DoCmd.RunSQL cSQL
     
     
      i = i + 1
    Wend
     
    DoCmd.SetWarnings True
    End Sub
    oubli pas de changer les noms des champs et celui de ta table
      1  0

Discussion fermée
Cette discussion est résolue.
Page 1 sur 9 12345 ... DernièreDernière

Discussions similaires

  1. importer les données d'un fichier Excel Protégé
    Par ARFY56 dans le forum Access
    Réponses: 15
    Dernier message: 21/11/2018, 21h11
  2. Réponses: 3
    Dernier message: 20/08/2010, 21h48
  3. importer les données d'un fichier excel vers oracle 10g
    Par sarita_ima dans le forum Documents
    Réponses: 2
    Dernier message: 04/09/2009, 13h52
  4. Importer les données d'un fichier excel dans une table
    Par dams95190 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/12/2007, 10h35
  5. Réponses: 3
    Dernier message: 27/07/2007, 13h06

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