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 :

Syntaxe d'importation données dans une table access existante


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut Syntaxe d'importation données dans une table access existante
    Bonjour,

    Je suis débutante sur Access.
    Je connais la syntaxe d'importation d'une nouvelle table à partir d'un fichier Excel.
    Je voudrais savoir si il existe une syntaxe pour importer les données d'un fichier Excel vers une table access déjà existante?

    Merci pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour et bienvenu dans le monde merveilleux des bases de données relationnelles et de Access en particulier :-).

    As-tu regardé l'aide associé à TransferSpreadsheet ? Je pense qu'il devrait répondre à tes questions.

    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut modifs des valeurs par defaut des champs ds une table access attachée
    J'ai importé des données d'un fichier Excel dans une table Access deja existante en créant une table "attachée".
    Je sais que la table attachée n'est pas modifiable ds access.

    Dans ma base , j'ai des requetes existantes qui utilisent ces tables attachées.
    Du coup les requetes ne fonctionnent plus à cause des valeurs par défaut de la table qui ont été modifiées (lors de l'import j'ai du ecraser les données de la table initialement créer et donc les propriétés des champs ont été modifiés automatiquement)


    Comment faire pour definir les valeurs par défaut des champs pour utiliser mes requetes?

    Merci d'avance pour votre aide.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Ok, faisons le tri :o).

    Si tu as fait une table attachée alors tu n'as pas importé tes données dans Access tu as juste dit à Access où il pouvait les trouver.

    Ensuite, si je te suis bien, tu as fait des requêtes sur cette table attachée. Donc en résumé tu as fait des requêtes sur une feuille Excel.

    Puis tu as finalement importé tes données Excel dans une table Access c'est cela ?

    Je ne vois pas bien ce que les valeurs par défaut (qui sont des valeurs attribuées à un champs lors de la création d'un nouvel enregistrement) viennent faire dans le décor donc j'ai probablement manqué une marche de ton raisonnement.

    Pourrais-tu afin de faciliter les choses :
    • mettre la description de ta table
    • mettre le SQL (editeur de requête, affichage SQL) d'une de tes requêtes qui ne marche plus
    • dire ce qui ne marche plus dans ta requête
    • dire ce que devrait faire la requête (ex : liste de tous les clients qui ont fait plus de 1000$ de chiffre d'affaire et qui habitent le val d'oise.)


    A+

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut
    Merci pour ton retour! je vais essayer d'etre plus clair et expliquer mon probleme.

    Initialement un tiers a crée une base de données Access avec différentes tables (créées et alimentées manuellement) et des requetes ont été réalisées en exploitant ces différentes tables. Il existe donc des liaisons entre ces tables.

    Maintenant, on me demande de trouver le moyen d'alimenter et mettre à jour automatiquement les tables Access :
    J'ai testé différentes solutions comme le code vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet AcImport
    la table attachée, la copie
    mais je suis toujours confrontée au problème suivant :

    problème de liaison et valeurs par défaut des champs qui empeche l'execution des requetes existantes.

    Je voudrais à partir des données source , mettre à jour les données dans les différentes tables (sans que les liaisons soient touchées) et executer les differentes requetes pour exploiter les resultats.

    Je suis un peu perdue, quelle serait la solution la plus adaptée à ma situation!

    merci beaucoup pour ton aide

  6. #6
    Membre habitué
    Homme Profil pro
    Activités informatiques diverses
    Inscrit en
    Février 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Activités informatiques diverses
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 153
    Points : 188
    Points
    188
    Par défaut
    Bonjour.
    N'est-il pas possible de lier le fichier excel à la BDD à chaque ouverture de la base ou d'un formulaire puis d'en extraire et copier les données "interessantes" via une ou plusieurs requêtes appelées par VBA.
    Avoir des détails sur la constitution des tables et du fichier exel avec des données exemples permettrai de mieux t'aider.
    Cordialement.

  7. #7
    Membre régulier Avatar de Patrice.H
    Homme Profil pro
    Étudiant en alternance
    Inscrit en
    Février 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant en alternance

    Informations forums :
    Inscription : Février 2010
    Messages : 82
    Points : 111
    Points
    111
    Par défaut
    Tu peux aussi le faire en deux étapes :
    1- Le transfertspreadsheet vers une table temporaire
    2- Le passage de la table temporaire vers la table utilisée.

    Dans le 2 tu peux alors formater plus finement tes données, remplacer les valeurs par défaut avec la commande nz() et les convertir de la façon que tu préfères.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Personnellement je suivrai la méthode de Patrice.H qui te donne plus de contrôle sur ce qui se passe dans le processus d'importation.

    Si tu as des relations entre tes tables (ce que tu appèles 'liaisons') il y a probablement un ordre à respecter dans le chargement de tes données (ex dans un système de gestion de commande, il faut charger les clients et les produits avant de pouvoir charger les commandes).

    Si c'est possible poste une copie d'écran du diagramme des relations et aussi la structure des tables importées, ça aiderai à te guider.

    A+

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut
    Merci pour les reponses!!
    j'ai cherche la méthode pour la copie des données d'une table à une autre dans la meme base sur internet mais je en trouve pas !! pouvez vous m'aider svp!! merciiiiii

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    Bonjour,
    Je dirais simplement copier/coller dans table locale.
    Mais + pro
    Pour automatiser par la suite :
    Copier/coller la structure seule de la feuille liée dans une table locale.
    Créer toujours sur cette feuille liée une requête ajout qui alimente cette même table locale.
    Ensuite pour chaque mise a jour :
    Par code : effacer les données de la table locale puis exécuter la requête ajout.

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    La méthode la plus simple est de faire une requête ajout.

    A+

  12. #12
    Membre régulier Avatar de Patrice.H
    Homme Profil pro
    Étudiant en alternance
    Inscrit en
    Février 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant en alternance

    Informations forums :
    Inscription : Février 2010
    Messages : 82
    Points : 111
    Points
    111
    Par défaut
    Pour cela il te suffit de faire une requête d'ajout après avoir préalablement vidé la table de destination si nécessaire.

    Tu peux également formater tes données dans la requête avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nz(matable_temporaire!colonn1;mavaleur_si_null)
    ou
    vraixfaux(matable_temporaire!colonn1="0";"zéro";"pas zéro")
    Ou avec une requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.runsql = "update table...where"
    Résumons :
    1-Importer vers la table temporaire (docmd.transfertspreadsheet)
    2-Formater la table temporaire (nz(), vraifaux() docmd.runsql="")
    3-Vider la table de destination (du SQL="delete*from table" ou une requête de suppression)
    4-Transférer vers la table de destination (du SQL="insert into..." ou une requête d'ajout)

    Si tu débute, créer une requête te sera peut être plus simple, sauf si tu es déjà familière avec le SQL

    PS: c'est docmd.openquery " " pour lancer une requête depuis vba

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut
    Merci pour vos réponses!
    j'ai tenté d'appliquer la méthode de patrice!

    Voici le code que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ImportationDepuisExcel1()
    DoCmd.TransferSpreadsheet aclmport, acSpreadsheetTypeExcel9, "T_DomaineTemp", "C:\Documents and Settings\Mes documents\Données entrée Analean.xls", True, "Domaine!"
    MsgBox "Importation Excel Access terminée. Table Domaine temp créée!", vbInformation
     
    DoCmd.RunSQL ("update <T_DomaineTemp>")
     
    DoCmd.RunSQL ("delete*from T_domaine")
     
    DoCmd.RunSQL ("insert into  <T_Domaine> SELECT  <CodeDomaine>, <Domaine>   FROM < T_DomaineTemp>")
    End Sub
    J'ai des erreurs de syntaxe pour les fonctions update et insert into !

    pouvez vous m'aider à resoudre mon probleme?

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    En access les délimiteurs de noms sont [] et ils sont facultatifs si ton nom est d'un seul morceau (ex : "Nom_Champ" ne nécessite pas de [] mais "Nom Champ" les rend obligatoires). Ceci dit je déconseille d'utiliser des espaces et des - dans les noms de champ ou de table cela fait une source de problème de moins.

    La syntaxe de ton update est incorrecte. Pour écrire du SQL Access je t'encourage a utiliser l'éditeur de requête. Tu crées ta requête avec l'éditeur avec des "glisser/déplacer", tu vérifies qu'elle donne le résultat attendu puis tu fais afficher le SQL correspondant. Ensuite tu n'as plus qu'à copier ce SQL dans une chaîne de caractère et le tour est joué.

    Dans l'éditeur, sensiblement au milieu tu as un bouton pour choisir le type de requête que tu veux créer (select, update, ajout, ...).

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut
    Merci pour vos conseils que j'ai essaye de mettre en oeuvre dans Access.

    J'ai créer les differentes requetes ajout et supp pour mes differentes tables.
    Sur mes 5 tables, seules pour 2 tables le processus d'import fonctionne bien.
    Pour les 3 autres, je suis confrontée au meme probleme( voir écran PJ )

    c'est dans la requete ajout qu'il y a un probleme et je ne sais pas comment faire!!
    Merci pour votre aide!

  16. #16
    Membre habitué
    Homme Profil pro
    Activités informatiques diverses
    Inscrit en
    Février 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Activités informatiques diverses
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 153
    Points : 188
    Points
    188
    Par défaut
    Bonjour.
    Le message indique une violation de clé. Cela signifie donc que la table que tu essaie de remplir comporte une relation avec une autre et que cette autre table doit être mise à jour auparavant. Voir les relations entre tables dans la fenêtre "Relations".
    Cordialement.

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci de ta réponse!!
    j'ai fais des verification ssur les liaisons comme tu me l'as conseille mais pour la table qui pose probleme elle est effectivement liée à une autre tale mais celle ci est bien mise à jour!! ce'st poiur cela que je ne comprends pourquoi ce la ne focntionne pas!!!
    qu'est ce je pourrais faire !! de mon cote je vais refaire mes manip pour la création des tables

    si tu as des pistes , je suis preneuse!!!

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Je n'ai pas regardé tes données mais il faudrait que tu vérifie que toutes les valeurs de clef étrangère dans ta seconde table sont bien présent dans les clefs primaire de ta première table.

    Une solution simple pour le valider est de charger tes nouvelles données dans une table de travail indépendante des autres puis au moyen de requête de vérifier la présence dans tes tables de références des éléments dont tu as besoin.

    Par exemple si tu charges des commandes, il faut vérifier que tous les codes clients sont bien dans la table client. Si il en manque il faut créer les codes manquant. Une fois tous les codes clients créés dans la table client, là tu peux procéder au chargement dans les tables des commandes.

    A+

  19. #19
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse !!
    J'ai bien vérifier l'etat des relations et l'état des champs et tout est coherent!!

    je te rappelle le contexte pour m'aider :

    Initialement un tiers a crée une base de données Access avec différentes tables (créées et alimentées manuellement) et des requetes ont été réalisées en exploitant ces différentes tables. Il existe donc des liaisons entre ces tables.

    Maintenant, j'ai mis en place un chargement automatique excel/access en suivant tes conseils pour creer les tables temporaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ImportationDepuisExcel1()
    DoCmd.TransferSpreadsheet aclmport, acSpreadsheetTypeExcel9, "T_DomaineTemp", "C:\Documents and Settings\Mes documents\LOGPI ANALEAN\Données entrée Analean.xls", True, "Domaine!"
    MsgBox "Importation Excel Access terminée. Table Domaine temp créée!", vbInformation
    DoCmd.OpenQuery ("Requête Suppression")
    DoCmd.OpenQuery ("RequêteAjout")
    End Sub
    En PJ , l'état des relations.
    Par exemple: à partir d'excel, on charge l'onglet Secteur dans une table Temporaire T_secteur puis on copie les donnees de la table Secteur vers la table Secteur via la requete Ajout.
    selon le code ci dessus.

    on a toujours le message d'erreur lors de mon precedent message!

    Qu'est ce qui pourrait bloquer?? Merci d'avance

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Points : 72
    Points
    72
    Par défaut Un tuto pour sauver les novices, SVP !
    J'ai suivi cette discussion depuis un bon moment, car je savais que j'allais être confronté au même problème.
    Peut-on nous indiquer SVP un tuto pour bien mener à terme ce genre de taches, avec par exemple la manip des données via DAO, surtout quand les liaisons entre tables sont déjà mises en place. Question de faire celà de manière "propre"

    Merci d'avance

Discussions similaires

  1. [AC-2000] Importation de données dans une table access
    Par Totik dans le forum IHM
    Réponses: 2
    Dernier message: 19/09/2009, 01h53
  2. Réponses: 4
    Dernier message: 24/10/2008, 17h37
  3. extraction des données dans une table Access
    Par moabomotal dans le forum Access
    Réponses: 2
    Dernier message: 26/05/2006, 11h17
  4. Vérification de donné dans une table access
    Par xdiethank dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2006, 15h29
  5. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11

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