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 :

Importation d'un fichier excel dans une table access


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Importation d'un fichier excel dans une table access
    Bonjour,

    J'ai trouvé plein de posts sur ce sujet, mais j'ai encore un problème, c'est pourquoi je crée celui-ci.

    Mon projet Access contient une table de recettes "Recipes". Cette table possède une relation avec une autre table.

    Depuis le formulaire affichant la table "Recipes" je peux exporter les données de la table dans un fichier Excel. J'aimerai pouvoir modifier ce fichier sous excel et le réimporter dans access.

    C'est là que ça coince. J'ai réussi à faire l'importation dans une nouvelle table, mais lorsque j'essaie de le faire directement dans la table "Recipes" un message d'erreur s'affiche, indiquant que toutes les données n'ont pas pu être ajouter à la table. Je pense que la cause en ait que le champs contenant le nom de la recette est la clé primaire et il ne peux pas contenir de doublons. Comment puis-je écraser ou effacer tous les champs de ma table ? Je ne peux pas effacer la dite table, à cause de la relation.

    D'avance merci pour votre aide

    CODE DU BP D'IMPORTATION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'Importation depuis un fichier excel
     
    Private Sub Commande76_Click()
    On Error GoTo Err_Commande76_Click
     
        Call import_excel("Recipes", "d:\data\rezepte\rezepte.xls")
     
    Exit_Commande76_Click:
         Exit Sub
     
    Err_Commande76_Click:
         MsgBox Err.Description
         Resume Exit_Commande76_Click
    End Sub
    CODE DE LA FONCTION D'IMPORTATION
    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
     
    '-------------------------------------
    'import_excel
    '-------------------------------------
     
    Sub import_excel(requête As String, filename As String)
     
    'Renvoi en cas d'erreur
    On Error GoTo import_excel_err
     
    'Importation
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel3, requête, filename, True
     
    'Message ok
    MsgBox "Import OK!" & (Chr(13)) & filename, vbInformation
     
    Exit Sub
     
    'Gestion en cas d'erreur:
    import_excel_err:
     
    'Message erreur
    MsgBox "Import Fehler!" & (Chr(13)) & filename, vbCritical
     
    End Sub

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Points : 261
    Points
    261
    Par défaut
    Une piste parmi d'autres ....

    - je créerais une table "Recipes_Tmp" identiques à "Recipes".

    - J'importerais les données d'Excel dans cette table (prendre soin de la vider avant ...)

    - Puis je ferais une requête de mise à jour de "Recipes" avec les éléments de "Recipes_Tmp" ayant la même clé primaire ....

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Hello,

    Merci pour ta réponse rapide.

    J'ai utiliser ta solution avec une deuxième table.

    Par contre je ne sais pas comment faire la requête de mise à jour. Peux-tu me donner un petit coup de pouce ? Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Points : 261
    Points
    261
    Par défaut
    Un exemple de SQL ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE Recipes INNER JOIN Recipes_Temp ON Recipes.NoRecipe = Recipes_Temp.NoRecipe 
    SET Recipes.Description = [Recipes_Temp].[Description], Recipes.QteAA = [Recipes_Temp].[QteAA], Recipes.Autres = [Recipes_Temp].[Autres];

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Hello,

    Merci pour ton aide

    Mais je ne comprends pas où et comment je dois utiliser cette requête...

    Peut-on faire la même fonction (mise à jour d'une table à partir d'une autre table) avec les fonctions VBA ?
    Ou peut-on copier une table dans une autre, même si cette dernière à une relation avec une autre table ?

    P.S.: Je travaille sur Access 2003

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Points : 261
    Points
    261
    Par défaut
    À l'intérieure de ta Sub ...

    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
     
    '-------------------------------------
    'import_excel
    '-------------------------------------
     
    Sub import_excel(requête As String, filename As String)
     
    'Renvoi en cas d'erreur
    On Error GoTo import_excel_err
     
    'Importation dans la table temporaire
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel3, Recipes_Temp, filename, True
    '**** Mise à jour
    Dim MonSQL as String
     
    MonSQL="UPDATE Recipes INNER JOIN Recipes_Temp ON Recipes.NoRecipe = Recipes_Temp.NoRecipe SET Recipes.Description = [Recipes_Temp].[Description], Recipes.QteAA = [Recipes_Temp].[QteAA], Recipes.Autres = [Recipes_Temp].[Autres];"
     
    CurentDB.Execute MonSQL
     
    '****
    'Message ok
    MsgBox "Import OK!" & (Chr(13)) & filename, vbInformation
     
    Exit Sub
     
    'Gestion en cas d'erreur:
    import_excel_err:
     
    'Message erreur
    MsgBox "Import Fehler!" & (Chr(13)) & filename, vbCritical
     
    End Sub

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Hello,

    Voici comment j'ai adapté ton 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
    'Importation depuis un fichier excel
    Private Sub import_Click()
    On Error GoTo Err_import_Click
     
       'Importation
       Call import_excel("Recipes_Temp", "d:\data\rezepte\rezepte.xls")
     
       'Mise à jour
       Dim MonSQL As String
     
       MonSQL = "UPDATE Recipes INNER JOIN Recipes_Temp SET Recipes.Skako flow = [Recipes_Temp].[Skako flow] WITH OWNERACCESS OPTION;"
     
       CurentDB.Execute MonSQL
     
    'Sortie de la fonction
    Exit_import_Click:
         Exit Sub
     
    'Traitement des erreurs
    Err_import_Click:
         MsgBox Err.Description
         Resume Exit_import_Click
     
    End Sub
    J'ai supprimé la partie : "ON Recipes.NoRecipe = Recipes_Temp.NoRecipe", car je suppose que c'est une condition et j'aimerais exécuter la mise à jour dans tous les cas. Est-ce que c'est correct ?

    Par contre, lors de l'exécution de mon code, le message d'erreur "Objet requis" est affiché.

    Ci-dessous ma table "Recipes" :



    Merci de me donner encore un coup de pouce

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Up

    Je suis un collègue à Cmaitre (lui est en ce moment en déplacement chez le client concerné par les questions ci dessus), svp est-ce que qlqn aurait une réponse pour son dernier poste? (Le dernier point qui nous pose problème)

    Dans l'espoir d'être secouru par une âme charitable, bonne journée a tous!

    Stark1er

    @Modérateurs: A votre avis, est-ce que je devrais recréer un nouveau poste dans la section SQL?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Points : 261
    Points
    261
    Par défaut
    Pour réussir, il faut faire correspondre la clé primaire de chaque tables
    Essayé avec le SQL suivant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim MonSQL As String
     
    MonSQL = "UPDATE Recipes INNER JOIN Recipes_Temp ON Recipes.Recipe = Recipes_Temp.Recipe SET Recipes.Skako flow = Recipes_Temp.[Skako flow] WITH OWNERACCESS OPTION;"
     
    CurentDB.Execute MonSQL

    Bonne chance

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide Mike, malheureusement le dernier conseil ne semble pas avoir fonctionné comme attendu..
    J'ai pas bcp plus de details à donner je n'ai eu avec mon collegue que peu de temps au telephone.

    Tant pis, on prendra le temps de faire (en fait surtout comprendre ) correctement chez nous et on enverra une mise a jour a notre client..

    Merci encore d'avoir pris sur ton temps!

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Points : 261
    Points
    261
    Par défaut
    Dans ma dernière intervention j'ai omis de mettre un champ entre braquette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     .... SET Recipes.Skako flow = Recipes_Temp.[Skako flow] ....
    remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .... SET Recipes.[Skako flow]= Recipes_Temp.[Skako flow] ...
    Si ça peut aider ....

    Bonne chance

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Solution
    Ci-dessous le lien vers un post dans le forum Access SQL :

    http://www.developpez.net/forums/sho...=1#post3157830

    Dans ce post ce trouve la solution pour faire la mise à jour d'une table

    Mike, merci pour ton aide

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/02/2014, 14h21
  2. [AC-2002] Importer fichier Excel dans une table Access
    Par Kalymar dans le forum Access
    Réponses: 4
    Dernier message: 28/05/2011, 15h09
  3. [AC-2000] Import fichier Excel dans une table Access déjà existante
    Par icecreams01 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/05/2010, 15h07
  4. Réponses: 3
    Dernier message: 20/04/2010, 09h31
  5. Réponses: 7
    Dernier message: 04/10/2005, 18h21

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