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 2007 en xlsm [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut Importation d'un fichier excel 2007 en xlsm
    Bonjour à tous,
    J'ai un fichier Exell dont le Worksheets est("Cible").
    Dans ce fichier exell je souhaite importer le colonne A à K dans ma base de donnée "ExellImporté".
    les colonne A à K ont des titres A="Studio"; B="CodeClient"; C="Agence" ; D="Nom" etc...
    Le chemin d'accès est : C:\Documents\[franck hp]\ExellImporté.
    Le nombre de ligne à importer est de la première à la dernière ligne non vide.
    Je souhaite lors de l'importation créer une nouvelle table qui s'appelera "TbImportationExell".
    Mes problèmes sont les suivants:

    Je n'arrive pas à importer un fichier .xlsm dans ma base access 2007, car dans mon fichier Exell j'ai du code visual basic que je souhaite garder c'est pour cela que je dois le sauvegarder en .xlsm, mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    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:\Documents\[franck hp]\ExellImporté.xlsm")
    Set oWSht = oWkb.Worksheets("Cible")
    Je n'arrive pas à créer une table qui reprendra le nom des champs d'Exell, ainsi que les données du champ
    Mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i = 1
    While oWSht.Range("A" & i).Value <> ""
     cSQL = "insert into [TbImportationExell] ( [Champ1], [Champ2] ) values (" & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ")"
    Bien sûr le nombre de ligne est variable.
    Je planche tout seul et c'est très dur. Si quelqu'un à une solution ou une info je suis preneur. Merci bien

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    bonjour,
    pourquoi n'utilises-tu pas la fonction dédiée au transfert depuis/vers excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Docmd.TransfertSpreadSheet

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Salut,
    Oui j'y avais pensé mais je pense que ma syntaxe est mauvaise et en plus je ne peut pas créer une nouvelle table et l'appeler "tableimportExell", ni nommer les champs de cette nouvelle table des noms de champs sur Exell.
    Ci-joint la syntaxe si tu as une idée....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet([ExellImporté.xlsm], acSpreadsheetTypeExcel12Xml, TbImportationExell, ("C:\Documents\[franck hp]\ExellImmporté.xlsm")) = acImport
    A+
    Franck

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    En utilisant l'aide en ligne , tu devrais trouver la syntaxe correcte

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Oui j'ai regardé dans F1 mais cela ne change pas mon problème event
    procedure. Je ne peux pas le faire fonctionner, certainement une erreur de syntaxe , je cherche et si je trouve je te l'indique. Merci pour ton aide
    Franck
    A+
    PS: Je pense que je ne suis pas doué aujourd'hui

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 397
    Points : 19 823
    Points
    19 823
    Billets dans le blog
    66
    Par défaut
    Bonsoir jpcheck et franckimmo,

    Comme indiqué par jpcheck il serait plus simple d'utiliser TransferSpreadsheet,

    Je ne peux pas tester pour les fichiers xlsm, mais pour les fichiers Excel classique çà doit ressembler à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acImport, 8, "TbImportationExell", "C:\Documents\[franck hp]\ExellImmporté.xlsm", True, "Cible!A1:K1000"
    8 : ce paramètre doit normalement être changé pour les fichiers xlsm.

    "Cible!A1:K1000" désigne la plage "A1:K1000" de la feuille "Cible" que tu va importer dans ta table.

    Ce 1000 désigne le nombre de ligne à importer, les lignes vides ne seront pas importer. Donc prevoir un nombre assez grand.

    Pour plus d'info bien sûr

    Si çà peut t'aider...

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous,
    La seule solution mais pas encore convaincante est la suivante, mais des problèmes subsistent:

    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 Bascule0_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:\Loyers_Développez_2007_3.xlsm")
    Set oWSht = oWkb.Worksheets("Cible")
    'premier ligne ou on commence l'import
    i = 1
     
    '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 [Table1] ( [Champ1], [Champ2] ) values (" & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ")"
     
    'exécute la requète
     
     
      i = i + 1
    Wend
     
    DoCmd.SetWarnings True
     
    End Sub
    Mon problème c'est après avoir cliqué sur le bouton à bascule0, il ne met pas à jour ma table1 et ne m'indique pas de message d'erreur non plus ? Je ne vois pas où je me suis trompé...
    Si quelqu'un à une suggestion, je suis toujours preneur.
    Merci à jpcheck et à user pour leur proposition et je les invite à m'apporter d'autres conseils s'ils le peuvent.
    Une bonne journée à tous
    A+
    Franck

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    dans ton code, tu n'exécutes pas ta requête

  9. #9
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Bonjour,
    Oui effectivement
    Mais maintenant que j'ai ajouté DoCmd.RunSql, j'ai remarqué que le code ajoute la valeur de deux champs dans ma Table1 au lieu de rajouter la valeurs de 11 champs ( car dans mon fichier Exell, j'ai 11 champs que je souhaite transferer dans ma base Access).

    Ci-joint ma syntaxe:
    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 Bascule0_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:\Loyers_Développez_2007_3.xlsm")
    Set oWSht = oWkb.Worksheets("Cible")
    'premier ligne ou on commence l'import
    i = 1
     
    '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 [Table1] ( [Champ1], [Champ2]) values (" & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ")"
     ',[Champ3], [Champ4],[Champ5], [Champ6],[Champ7], [Champ8],[Champ9],[Champ10],[Champ11],[Champ12]
    'exécute la requète
    DoCmd.RunSQL (cSQL)
     
     
      i = i + 1
    Wend
     
    DoCmd.SetWarnings True
     
    End Sub

    l'erreur d'exécution 3346 " Le nombre de valeurs dans la requête doit coïncider avec le nombre de champs de destination" s'affiche si j'ajoute plus que deux champs, dans mon SQL. Voilà le problème actuel. Mais chaque problème à une solution...Il faut simplement la trouver... Et comme il y en a plus dans 5 têtes qu'une je me disai que peut être....
    Merci pour votre patience et bonne journée

  10. #10
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous,
    Désolé j'ai pas bien inséré mon code.
    Mon erreur était simple. je n'avais pas créée suffisament de champs par rapport à la syntaxe de transfert. je remercie vivement jpschek, User. Ci-dessus voici la correction apporté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cSQL = "insert into [TblClients]"
    cSQL = cSQL + "( [CodeClient], [Agence], [Nom], [Caution], [DateEntrée],[DateSortie]) values"
    cSQL = cSQL + "(" & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ", " & Chr(34)
    cSQL = cSQL + oWSht.Cells(i, 4) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 5) & Chr(34)
    cSQL = cSQL + oWSht.Cells(i, 6) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 7) & Chr(34) & ")"
    Une bonne journée à tous

    Franck

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/08/2014, 15h43
  2. [WD16] Import fichier excel 2007
    Par christophe9117 dans le forum WinDev
    Réponses: 6
    Dernier message: 31/08/2011, 16h27
  3. [AC-2007] Importation automatique de fichiers Excel vers Ac-2007
    Par msdprojet dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/03/2011, 21h39
  4. Import fichier excel 2007 .xlxs sous SAS
    Par sasnew dans le forum SAS Base
    Réponses: 3
    Dernier message: 02/12/2010, 21h46
  5. importation d'un fichier excel à destination finale : delphi
    Par pier dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 24/09/2005, 23h23

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