rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[VBA] Importer feuille Excel sous Access

Posté par Kalderon, le lundi 23 avril 2007 à 15:40:10
Bonjour!

Mon objectif : Je souhaite importer une feuille Excel à partir d'Access.

Je rentre donc dans une liste déroulante (dans un formulaire) le nom de ma feuille excel à importer. Puis, un clic sur un bouton me permet:
- d'ouvrir une boite de dialogue et choisir le fichier excel
- le programme reconnait alors le nom de la feuille choisie (car le fichier a plusieurs feuilles)
- d'importer cette feuille dans une nouvelle table Access qui portera le même nom

Mon problème, c'est qu'il ne semble pas trouver la feuille!

***

Voici mon code (la feuille, ici, est "societes2006") :

Première partie: code de la fonction
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 Excel.Worksheet) 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

Deuxième partie : code du bouton
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 de la liste déroulante.

Lorsque j'exécute, la boite de dialogue s'ouvre bien, mais ensuite, j'ai le message suivant:

"Erreur d'execution '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 et son chemin d'accès."

SVP, j'aurais besoin d'un p'tit coup de main! Je ne sais plus quoi tenter...
Répondre à Kalderon  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Kalderon, le mardi 24 avril 2007 à 09:36:28
UP ! J'ai vraiment besoin d'aide! Merci d'avance
Répondre à Kalderon

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le mardi 24 avril 2007 à 14:32:37
Bonjour, je suis bien incapable de t'aider avec la méthode que tu as choisie...
mais, puisque Blux est en vacances, je te propose une autre solution.

Il est possible de lier sous access des feuilles Excel qui sont affichées comme des tables attachées et qui sont mises à jour automatiquement lorsque les données sont mises à jour sous Excel.

Menu fichier, données externes, lier des tables.
Dans la boite de dialogue du bas, choisir fichiers Excel puis parcourir les fichiers et choisir les feuilles voulues.
Répondre à zenon

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sncf, le mardi 24 avril 2007 à 18:16:20
Bonjour
Essaye dans un module VBA

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, nom de la table de destination des données importés, Nom et chamin du fichier à importer, True

Ca devrait marcher
Répondre à sncf

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Kalderon, le jeudi 3 mai 2007 à 12:13:41
Finalement, j'ai trouvé la solution, c'était tout bête!
Il manquait simplement un "!" après "nf"

Autrement dit :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, nt, LaunchCD, True, nf  & "!"


En effet, lorsqu'on ouvre une feuille, ce qui est rapporté n'est pas "feuille" mais "feuille!".

Merci quand même pour votre aide.
Répondre à Kalderon
Logiciels pertinents trouvés dans les téléchargements
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger GANTT Project 2.0.7GANTT Project - GanttProject est un outil de gestion de projet libre, permettant de réaliser des diagrammes de GANTT afin de planifier un...Catégorie: Gestion de projet
Licence: Open Source
Télécharger OpenOffice.org 2.4.1OpenOffice.org - OpenOffice est une suite bureautique complète entièrement gratuite, compatible avec la suite Microsoft Office. Elle...Catégorie: Suite bureautique
Licence: Open Source
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [VBA] Importer feuille Excel sous Access »