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 :

Transfert Fichier Texte dans ACCESS depuis vba Excel [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut Transfert Fichier Texte dans ACCESS depuis vba Excel
    Bonjour,

    A partir d'un code dans un fichier Excel, je dois effectuer les taches suivantes:

    1-ouvrir une autre fenêtre parcourrir
    2-sélectionner un fichier texte (.txt)
    3-ouvrir une fenêtre parcourrir
    4-sélectionner un fichier ACCESS
    5-Ouvrir ce fichier Access (en la déclarant sous la variable "bdAccess")
    6-importer le fichier texte dans une table de mon fichier ACCESS (car il y a 600 000 ligne minimum, donc impossible sous excel)

    Jusqu'à l'étape 5, je sais faire.

    Je sais aussi importer le fichier texte en rentrant dans le fichier ACCESS et en utilisant :
    ->soit une macro ACCESS
    ->soit l'équivalent en vba : DoCmd.TransferText acImportDelim ,"","NomTable","NomFichierTexte"

    Mon soucis vient du fait qu'au boulot, beaucoup de gens n'ont que ACCESS runtime.

    Je voudrais donc pour lancer la commande "DoCmd.TransferText" depuis le code vba dans le fichier Excel.

    Si quelqu'un a un idée.

    Merci d'avance.

  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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    salut,
    tu peux accéder à la fonction Docmd depuis l'objet Application sous Access.

    Ca donnera un code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim AccApp As Access.Application
    'utilise createobject le cas échéant
    AccApp.Docmd.TransferText

  3. #3
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Salut et merci de ta réponse.

    Je me doutais qu'il manquait une déclaration mais dès que cela touche une autre appli que Excel, j'ai du mal à comprendre.

    Bon, j'ai mis:
    Dim AccApp As Access.Application
    et:
    AccApp.Docmd.DoCmd.TransferText acImportDelim ,"","NomTable","NomFichierTexte"

    Sur la ligne "AccApp As Access.Application", cela me dit que le type définit par l'utilisateur n'est pas définit.

    Ensuite, je ne comprend lorsque tu me dis d'utiliser createobject.

  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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    Si tu utilises Access.Application, il faut que tu ajoutes la bibliothèque Acces à ton projet.

    Sinon tu passes par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim AccApp As Object
    Set AccApp = CreateObject("Access.Application")

  5. #5
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Ok, j'ai rajouté dans Référence "Microsft Access 11.0 Object.library"
    La macro se lance mais lorsqu'elle arrive sur la commande d'import "AccApp.Docmd ...", j'ai la fenêtre debogage avec le message:
    "Variable ojet ou variable de bloc with non définie"

  6. #6
    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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    Peux-tu nous montrer le code que tu utilises pour le moment stp ?

  7. #7
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Voila:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim bdAccess As Database
    Dim AccApp As Access.Application
    'On ouvre la base
    Set bdAccess = OpenDatabase("D:\Fichiers\FichierAccess.mdb")
    AccApp.DoCmd.TransferText acImportDelim, "", "Table_Temporaire", "D:\Fichiers\liste_globale.txt", False, """"
    End Sub
    Dans le fichier Access "FichierAccess.mdb", j'ai bien une table "Table_Temporaire" dans laquelle j'importe le fichier "liste_globale.txt"

  8. #8
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Je bloque toujours.
    J'ai l'impression qu'il faut déclarer un variable pour "AccApp.DoCmd" mais je n'y arrive pas.

  9. #9
    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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    modifie tes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim AccApp As Access.Application
    Set bdAccess = OpenDatabase("D:\Fichiers\FichierAccess.mdb")
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim AccApp As New Access.Application
    Set bdAccess = AccApp.OpenDatabase("D:\Fichiers\FichierAccess.mdb")

  10. #10
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Cela ne marche pas.
    J'ai le message suivant sur "OpenDatabase:
    Erreur de compilation
    Membre de méthode ou de données introuvable

    Effectivement, lorsque je regarde les proposition de vba apprès avoir renseigné "Set bdAccess = AccApp", il n'apparait dans la liste que "OpenAccesproject" ou "Open CurrentDatabase".
    J'ai les essayé mais sans succès.

    Ci-dessous le code que j'ai lancé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub testforum2()
    Dim bdAccess As Database
    Dim AccApp As New Access.Application
     
    Set bdAccess = AccApp.OpenDatabase("D:\Fichiers\FichierAccess.mdb")
     
    AccApp.DoCmd.TransferText acImportDelim, "", "Table_Temporaire", "D:\Fichiers\liste_globale.txt", False, ""
     
    End Sub
    J'ai fais aussi une capture des références que j'ai mis dans vba.

  11. #11
    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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    salut,

    mes excuses, j'ai tapé machinalement

    La fonction OpenDatabase passe par DBEngine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AccApp.DBEngine.OpenDatabase

  12. #12
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Il doit y avoir un truc que j'ai mal fait.

    Cela m'ouvre Access mais j'ai l'impression qu'il ne m'ouvre pas mon fichier Access

    Au final, l'importation ne fait donc pas .

    Pour info, j'ai mis le même code (moins "AccApp") dans vba Access et l'importation fait correctement (voir ci-dessous).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.TransferText acImportDelim, "", "Table_Temporaire", "D:\Fichiers\liste_globale.txt", False, ""

  13. #13
    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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    et le code complet, ca donne quoi stp ?

  14. #14
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub testforum2()
    Dim bdAccess As Database
    Dim AccApp As New Access.Application
     
     
    Set bdAccess = AccApp.DBEngine.OpenDatabase("D:\Fichiers\FichierAccess.mdb")
     
    AccApp.DoCmd.TransferText acImportDelim, "", "Table_Temporaire", "D:\Fichiers\liste_globale.txt", False, ""
    End Sub

    Désolé pour l'affichage des code. Je ne savait pas.
    Je me posais justement la question pourquoi le texte des code que je mettais dans ce post changaient au bout d'un moment (j'ai pensé qu'il y avait un outils qui modifiait automatiquement).
    Cela ne reproduira plus c'est promis

  15. #15
    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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    je pense qu'on touche au but,
    j'ai modifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim bdAccess As Database
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim bdAccess As DAO.Database
    ta base est-elle bien ouverte à ce niveau ?

  16. #16
    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 642
    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 642
    Points : 34 354
    Points
    34 354
    Par défaut
    En fait, plutôt que de se battre sur le code en cours,
    regarde si ce code là n'est pas tout prêt :
    http://access.developpez.com/faq/?pa...TblAccessExcel

  17. #17
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Toujours pas

    J'ai mis pour afficher la fenêtre (je ne sais pas si c'est correct)

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testforum2()
    Dim bdAccess As DAO.Database
    Dim AccApp As New Access.Application
     
    AccApp.Visible = True
     
    Set bdAccess = AccApp.DBEngine.OpenDatabase("D:\Fichiers\FichierAccess.mdb")
     
    AccApp.DoCmd.TransferText acImportDelim, "", "Table_Temporaire", "D:\Fichiers\liste_globale.txt", False, ""
    End Sub

  18. #18
    Membre régulier Avatar de pio_killer
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 194
    Points : 101
    Points
    101
    Par défaut
    Ca y'est !

    D'abord merci à toi pour ton aide.

    En fait comme tu me l'a suggéré, on peut faire de 2 façon:
    1-soit depuis vba Excel, on lance un code qui se trouve sur le fichier ACCESS
    http://access.developpez.com/faq/?pa...e#ExecProcAppl

    2-Soit depuis vba Excel on lance directement l'importation

    Pour l'étape 1, il faut mettre dans le fichier Access les code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub ImportFichierTexte(Path)
    DoCmd.TransferText acImportDelim, "", "Table_Temporaire", Path, False, ""
    End Sub
    Ensuite, dans le fichier Excel, on met le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub testforum1()
    Dim MonAccess As New Access.Application
    MonAccess.OpenCurrentDatabase "D:\Fichiers\FichierAccess.mdb"
    MonAccess.Run "ImportFichierTexte", "D:\Fichiers\liste_globale2.txt"
    MonAccess.Quit acQuitSaveNone
    Set MonAccess = Nothing
    End Sub
    Pour l'étape 2, j'ai trouvé ce qui n'allait pas grace au code précédent.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub testforum2()
    Dim bdAccess As DAO.Database
    Dim AccApp As New Access.Application
     
    'On ouvre la base
    AccApp.OpenCurrentDatabase "D:\Fichiers\FichierAccess.mdb"
    'On lance la commande d'importation
    AccApp.DoCmd.TransferText acImportDelim, "", "Table_Temporaire", "D:\Fichiers\liste_globale2.txt", False, ""
    End Sub
    En fait, il fallait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set bdAccess = AccApp.DBEngine.OpenDatabase("D:\Fichiers\FichierAccess.mdb")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AccApp.OpenCurrentDatabase "D:\Fichiers\FichierAccess.mdb"
    Merci encore de ton aide.

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

Discussions similaires

  1. Modifier champs(access) depuis vba excel
    Par mimi123456789 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/08/2012, 07h46
  2. [XL-2000] trier et renommer une table access depuis vba excel
    Par lascrabbleuse dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/04/2009, 16h05
  3. Importer un fichier text dans Access depuis Excel
    Par alaingui dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2008, 14h58
  4. Commander Access depuis VBA Excel
    Par Mou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/03/2007, 14h41
  5. [VBA-E Access] Connection a Access depuis VBA Excel
    Par wace dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/11/2006, 12h33

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