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 :

[VBA] Importer une feuille Excel sous Access


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [VBA] Importer une feuille Excel sous Access
    Bonjour!

    Je souhaite importer une feuille Excel de mon choix sous Access, en la mettant sous forme de table. Je choisis d'abord une feuille Excel dans une liste déroulante (noms mis manuellement dans la liste) Cette importation se fait par un clic sur un bouton:

    - ouverture d'une boite de dialogue
    - recherche manuelle du fichier xls
    - puis importation auto de la feuille (choisie auparavant dans la liste déroulante)

    Seulement, par exemple, lorsque je choisis "Societes2006" dans la liste déroulante et que j'actionne le bouton, j'ai le message suivant,après sélection du fichier dans la boite de dialogue:

    "Erreur d'exécution '3011':
    Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet 'Societes2006'. Assurez-vous que l'objet existe et que vous avez correctement saisi son nom est son chemin d'accès."


    Pour l'importation, j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LaunchCD = Trim(Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, vbNullChar) - 1))
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, nt, LaunchCD, True, nf
    nt => désigne le nom de la table de sortie
    nf => désigne le nom de la feuille à importer
    LaunchCD => désigne le nom du fichier

    Le code précédent est contenu dans une fonction, appelée LaunchCD (...) . "nt" et "nf" sont déclarés en string, par un byref.

    Le tout est retourné dans la procédure du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me!Résultat = LaunchCD(Me, NomTable, NomFeuille)
    NomTable (déclaré en string) => fait référence à nt
    NomFeuille (déclaré en string) => fait référence à nf

    Merci de m'aider...j'en ai vraiment besoin. c'est dans le cadre de mon stage.
    Si vous voulez, je peux vous envoyer mon code entier, ça vous aidera mieux.

  2. #2
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Voici le code en question :

    Dans le module:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Option Compare Database
     
    Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
    "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
     
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
     
    Function LaunchCD(ByRef strform As Form, ByRef nt As String, ByRef nf As String) As String
     
        Dim OpenFile As OPENFILENAME
        Dim lReturn As Long
        Dim sFilter As String
        OpenFile.lStructSize = Len(OpenFile)
        OpenFile.hwndOwner = strform.Hwnd
        OpenFile.lpstrFile = String(257, 0)
        OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
        OpenFile.lpstrFileTitle = OpenFile.lpstrFile
        OpenFile.nMaxFileTitle = OpenFile.nMaxFile
        OpenFile.lpstrInitialDir = "F:\Stage Kévin\Bases\"  'Choisissez ici le répertoire initial
        OpenFile.lpstrTitle = "Ouverture du fichier" 'Entrez ici le titre de votre boite de dialogue
        OpenFile.flags = 0
        lReturn = GetOpenFileName(OpenFile)
            If lReturn = 0 Then
                MsgBox "Veuillez choisir un fichier", vbInformation, "Fichier non trouvé"  'choisir un msg d'erreur
            Else
                LaunchCD = Trim(Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, vbNullChar) - 1))
                DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, nt, LaunchCD, True, nf
            End If
     
    End Function
    Dans la procédure du bouton "Importer":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Import_Click()
     
       Dim NomTable As String
       Dim NomFeuille As String
     
        NomFeuille = ListeTable
        NomTable = ListeTable
     
       Me!Résultat = LaunchCD(Me, NomTable, NomFeuille)
       Résultat = "Table importée"
    End Sub
    ListeTable est le nom donné à la liste déroulante, qui comporte les noms de feuilles Excel (ajoutés à la main)

    J'espère que c'est assez explicite et que vous pourrez m'aider.

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Personne pour m'aider???
    Mon problème est "peut-être" trop complexe.

    A vrai dire, ce que je souhaite faire, est tout bête:

    A partir d'une interface Access, je choisis le fichier Excel et la feuille Excel (car les fichiers possèdent plusieurs feuilles) que je veux, et je l'importe. Tout ça, si possible avec un bouton (ou plusieurs?)....et bien sûr, en code VBA.

    Merci d'avance, c'est très important, c'est pour mon stage.

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

    Regarde dans ta variable LaunchCD ce qu'il y a. Vu ton message peut-être que tu n'as pas le chemin complet.

    Va jeter un coup d'oeil sur ce tuto de Caféine.


    Starec

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Avec le débugger, j'ai regardé le contenu de LaunchCD, et il contient bien le chemin d'accès correct.

    La variable nf contient bien le nom choisi dans la liste déroulante.
    Mais peut-être faut-il que je remette le chemin d'accès pour la feuille? bien que j'en doute fortement.

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

    Ton message dit qu'il n'a pas trouvé
    Societes2006
    C'est quoi ?

    Pour moi je devine qu'il n'a que cela dans la chaine, et nom le chemin complet + le nom du fichier + .xls

    Starec

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    A l'exécution, la variable LaunchCD comporte ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F:/Stage Kévin/Bases/Sinistres_primes06-07.xls
    ... et la variable nf comporte cela :

    Et cette valeur correspond à ceci:



    Autrement dit, la valeur que je choisis dans la liste déroulante ci-contre.
    (les valeurs ont été entrées à la main, je précise)

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

    Donc c'est le nom de ta feuille qui ne va pas, es-tu sûr de l'orthographe ?

    Je t'avoue je n'utilise pas cette méthode, je travaille par automation.
    Mais je cherche.

    Starec

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ce n'est pas l'orthographe, car j'ai fait des tests, en remplaçant la variable nf par un nom de feuille directement, "Societes2006" par exemple (dans le code, ça donne: "Societes2006!").

    Peut-etre que c'est le format de nf qui n'est pas correct?
    Je l'ai déclaré en string pour faire référence à NomFeuille dans le formulaire:

    Du coup, peut-être que le programme ne le reconnaît pas en tant que feuille Excel?

    PS: si jamais, il n'y a vraiment pas de solution, je vais sûrement me tourner vers l'automation, mais cela pourra rémédier à ma problématique? (j'ai jamais touché à l'automation...)

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

    Ce n'est pas l'orthographe, car j'ai fait des tests, en remplaçant la variable nf par un nom de feuille directement, "Societes2006" par exemple (dans le code, ça donne: "Societes2006!").
    "Societes2006!"
    Peut-être que le !

    Starec

  11. #11
    Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Yes!!!

    C'est ça! C'est bien le "!" qui manquait dans mon code...comment ai-je pu omettre ce détail !

    Il suffisait seulement de remplacer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, nt, LaunchCD, True, nf
    Par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, nt, LaunchCD, True, nf & "!"
    Un grand merci à toi, Starec! (je bloquais sur ce problème depuis plus d'une semaine...)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/10/2016, 18h53
  2. [AC-2013] Importer une feuille Excel dans Access
    Par rag83 dans le forum Modélisation
    Réponses: 11
    Dernier message: 18/01/2015, 12h38
  3. entetes et debut d'import d'une feuille excel sous Access
    Par skillipo dans le forum VBA Access
    Réponses: 0
    Dernier message: 21/11/2007, 16h51
  4. Réponses: 9
    Dernier message: 30/05/2006, 17h55
  5. Comment copier une feuille EXCEL sous ACCESS?
    Par PAULOM dans le forum Access
    Réponses: 7
    Dernier message: 28/04/2006, 10h01

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