[VBA] Importer feuille Excel sous Access

Résolu/Fermé
Kalderon Messages postés 7 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 18 mai 2007 - 23 avril 2007 à 15:40
 ladji_mo - 25 avril 2016 à 18:16
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...
A voir également:

4 réponses

Kalderon Messages postés 7 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 18 mai 2007 9
3 mai 2007 à 12:13
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.
8
bonjour kalderon;
je ss très interessé par ton code, puis je avoir le privilège d'avoir le code source ??
si possible, merci de me transmettre le fichier sur ma boite e mail : tj.youssef@gmail.com

merci d'avance
0
merci c'est interressant...
0
Kalderon Messages postés 7 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 18 mai 2007 9
24 avril 2007 à 09:36
UP ! J'ai vraiment besoin d'aide! Merci d'avance
1
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
24 avril 2007 à 14:32
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.
0
sncf Messages postés 121 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 11 septembre 2011 14
24 avril 2007 à 18:16
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
-1