[VBA] Importer feuille Excel sous Access
Résolu
Kalderon
Messages postés
7
Statut
Membre
-
ladji_mo -
ladji_mo -
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...
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:
- [VBA] Importer feuille Excel sous Access
- Liste déroulante excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Word et excel gratuit - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- Importer favoris chrome - Guide
4 réponses
Finalement, j'ai trouvé la solution, c'était tout bête!
Il manquait simplement un "!" après "nf"
Autrement dit :
En effet, lorsqu'on ouvre une feuille, ce qui est rapporté n'est pas "feuille" mais "feuille!".
Merci quand même pour votre aide.
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.
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.
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.
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