Les Allergies
Alimentaires
Posez votre question Signaler

[VBA] Importer feuille Excel sous Access [Résolu]

Kalderon 7Messages postés 6 avril 2007Date d'inscription - Dernière réponse le 25 févr. 2010 à 22:04
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...
Lire la suite 

[VBA] Importer feuille Excel sous Access »

5 réponses
Réponse
+6
moins plus
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.
TJ youssef - 25 févr. 2010 à 22:04
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
Ajouter un commentaire
Réponse
+1
moins plus
UP ! J'ai vraiment besoin d'aide! Merci d'avance
Ajouter un commentaire
Réponse
-1
moins plus
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.
Ajouter un commentaire
Réponse
-1
moins plus
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
Ajouter un commentaire
Ce document intitulé « [VBA] Importer feuille Excel sous Access » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?