ACCESS importer un fichier excel !

Résolu/Fermé
Signaler
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
-
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
-
Bonjour, à tous et à toutes

je travail sur ACCESS 2000, sur un formulaire qui a la forme de tableur (je travail directement sur ma table), et j'aimerais pouvoir sauvegarder la saisie de ma table, donc j'ai crée une commande qui sauve les données sur fichier excel (ce qui fonctionne bien), j'aimerais si possible pouvoir les réimporter après sur ma table (importer le fichier xls sur ma table) !!

j'ai essayé avec ce code :

Private Sub Commande101_Click()
DoCmd.TransferSpreadsheet acImport, , "ma_table", "H:\Classeur1.xls", 0
End Sub

mais rien y fait, un message d'erreur apparait "comme quoi il trouve que le caractere F1 ne correspond pas à la table" , or je n'ai rien touché. J'ai entendu qu'il y'avais une limitation en taille d'importation avec ce type d'instruction !

Si quelqu'un peut m'aider et me montrer un bout de code !!

Merci d'avance

15 réponses

Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Bonsoir Mimi_25,

Dans mes vieilleries ACCESS 2000 , j'ai retrouvé cette syntaxe d'import :

A tester :


DoCmd.TransferSpreadsheet acImport, 8, "<Nom de la table>", "C:\<Chemin explicite>\<fichier Excel>.xls", True, "feuil2!"

A noter : on peut désigner la feuille à importer.

Cordialement
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
1770
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
11 novembre 2021
651
Ton problème n'est pas lié au code qui est correct, peut-être au classeur ou à son contenu.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
donc j'ai essayé ton code en désignant la feuille et ca marche à merveille !!

merci Jean_Jacques

j'aurais voulu savoir si tu connaissais les boites de dialogue (type ouvrir un fichier)??
car j'aimerais afficher une boite de dialogue qui me demande le fichier à ouvrir !!

Appparemment il y'en a ou tu peut récupérer le chemin du fichier à ouvrir mais
ca m'a l'air un peu compliqué !!

donc je demande un peu d'aide !!
Merci d'avance
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
J'ai trouvé ca mais j'ai pas compris grand chôse !! :-(

Option Explicit

Public Filtre1 As String
Public Filtre2 As String
Public Filtre3 As String
Public Filtre4 As String
Public Filtre5 As String
Public Filtre6 As String
Public Filtre7 As String

Public Const DLG_FILE_OPEN = 1
Public Const DLG_FILE_SAVE = 2
Public Const DLG_COLOR = 3
Public Const DLG_FONT = 4
Public Const DLG_Print = 5
Public Const DLG_HELP = 6

'File Open/Save Dialog Flags
Public Const OFN_READONLY = &H1&
Public Const OFN_OVERWRITEPROMPT = &H2&
Public Const OFN_HIDEREADONLY = &H4&
Public Const OFN_NOCHANGEDIR = &H8&
Public Const OFN_SHOWHELP = &H10&
Public Const OFN_NOVALIDATE = &H100&
Public Const OFN_ALLOWMULTISELECT = &H200&
Public Const OFN_EXTENSIONDIFFERENT = &H400&
Public Const OFN_PATHMUSTEXIST = &H800&
Public Const OFN_FILEMUSTEXIST = &H1000&
Public Const OFN_CREATEPROMPT = &H2000&
Public Const OFN_SHAREAWARE = &H4000&
Public Const OFN_NOREADONLYRETURN = &H8000&

'Color Dialog Flags
Public Const CC_RGBINIT = &H1&
Public Const CC_FULLOPEN = &H2&
Public Const CC_PREVENTFULLOPEN = &H4&
Public Const CC_SHOWHELP = &H8&

'Fonts Dialog Flags
Public Const CF_SCREENFONTS = &H1&
Public Const CF_PRINTERFONTS = &H2&
Public Const CF_BOTH = &H3&
Public Const CF_SHOWHELP = &H4&
Public Const CF_INITTOLOGFONTSTRUCT = &H40&
Public Const CF_USESTYLE = &H80&
Public Const CF_EFFECTS = &H100&
Public Const CF_APPLY = &H200&
Public Const CF_ANSIONLY = &H400&
Public Const CF_NOVECTORFONTS = &H800&
Public Const CF_NOSIMULATIONS = &H1000&
Public Const CF_LIMITSIZE = &H2000&
Public Const CF_FIXEDPITCHONLY = &H4000&
Public Const CF_WYSIWYG = &H8000& 'must also have CF_SCREENFONTS & CF_PRINTERFONTS
Public Const CF_FORCEFONTEXIST = &H10000
Public Const CF_SCALABLEONLY = &H20000
Public Const CF_TTONLY = &H40000
Public Const CF_NOFACESEL = &H80000
Public Const CF_NOSTYLESEL = &H100000
Public Const CF_NOSIZESEL = &H200000

'Printer Dialog Flags
Public Const PD_ALLPAGES = &H0&
Public Const PD_SELECTION = &H1&
Public Const PD_PAGENUMS = &H2&
Public Const PD_NOSELECTION = &H4&
Public Const PD_NOPAGENUMS = &H8&
Public Const PD_COLLATE = &H10&
Public Const PD_PRINTTOFILE = &H20&
Public Const PD_PRINTSETUP = &H40&
Public Const PD_NOWARNING = &H80&
Public Const PD_RETURNDC = &H100&
Public Const PD_RETURNIC = &H200&
Public Const PD_RETURNDEFAULT = &H400&
Public Const PD_SHOWHELP = &H800&
Public Const PD_USEDEVMODECOPIES = &H40000
Public Const PD_DISABLEPRINTTOFILE = &H80000
Public Const PD_HIDEPRINTTOFILE = &H100000

'Help Constants
Public Const HELP_CONTEXT = &H1 'Display topic in ulTopic
Public Const HELP_QUIT = &H2 'Terminate help
Public Const HELP_INDEX = &H3 'Display index
Public Const HELP_CONTENTS = &H3
Public Const HELP_HELPONHELP = &H4 'Display help on using help
Public Const HELP_SETINDEX = &H5 'Set the current Index for multi index help
Public Const HELP_SETCONTENTS = &H5
Public Const HELP_CONTEXTPOPUP = &H8
Public Const HELP_FORCEFILE = &H9
Public Const HELP_KEY = &H101 'Display topic for keyword in offabData
Public Const HELP_COMMAND = &H102
Public Const HELP_PARTIALKEY = &H105 'call the search engine in winhelp

Function ajoute(a$) As String
If a$ <> "" Then a$ = a$ + "|"
ajoute = a$
End Function

'Lignes d'appel...
'NomFichier = cmd_ouvre()
'Si 1 filtre en plus >> NomFichier = cmd_ouvre("txt") < par ex.
'Si plusieurs filtres, initialiser les filtres Filtre1 à 4
'la routine ajoute le filtre tous (*.*)
Function cmd_Ouvre(Optional Filt1 As String) As String
Dim CTRL$, a$, b$, F1$, F2$, F3$, F4$
CTRL$ = Chr$(13) + Chr$(10)
If Filt1 <> "" Then
a$ = " Fichier (*." & Filt1 & ") | *." & Filt1
End If
If Filtre1 <> "" Then
a$ = ajoute(a$)
a$ = a$ + " Fichier (*." & Filtre1 & ") | *." & Filtre1
Filtre1 = ""
End If
If Filtre2 <> "" Then
a$ = ajoute(a$)
a$ = a$ + " Fichier (*." & Filtre2 & ") | *." & Filtre2
Filtre2 = ""
End If
If Filtre3 <> "" Then
a$ = ajoute(a$)
a$ = a$ + " Fichier (*." & Filtre3 & ") | *." & Filtre3
Filtre3 = ""
End If
If Filtre4 <> "" Then
a$ = ajoute(a$)
a$ = a$ + " Fichier (*." & Filtre4 & ") | *." & Filtre4
Filtre4 = ""
End If
a$ = ajoute(a$)
a$ = a$ + " Tous (*.*) | *.*"
Dialog.CMDialog1.Filter = a$
Dialog.CMDialog1.FilterIndex = 1
Dialog.CMDialog1.FLAGS = CF_EFFECTS Or OFN_HIDEREADONLY Or CF_ANSIONLY
Dialog.CMDialog1.Action = DLG_FILE_OPEN
cmd_Ouvre = Dialog.CMDialog1.FileName
Unload Dialog
End Function

Function cmd_Police()
Dialog.CMDialog1.DialogTitle = "Sélection police"
Dialog.CMDialog1.FLAGS = CF_WYSIWYG + CF_BOTH + CF_SCALABLEONLY
Dialog.CMDialog1.Action = DLG_FONT
Filtre1 = Dialog.CMDialog1.FontName
Filtre4 = Dialog.CMDialog1.FontSize
Filtre5 = Dialog.CMDialog1.FontBold
Filtre6 = Dialog.CMDialog1.FontItalic
cmd_Police = Dialog.CMDialog1.FontName
End Function

Function cmd_Print()
Dialog.CMDialog1.FLAGS = PD_ALLPAGES
Dialog.CMDialog1.Min = 1
Dialog.CMDialog1.Max = 100
Dialog.CMDialog1.FromPage = 1
Dialog.CMDialog1.ToPage = 100
Dialog.CMDialog1.Action = DLG_Print
Unload Dialog
End Function

'Filt1 = extention des fichiers à chercher
'ex: TXT ou EXE
'la routine ajoute le filtre tous (*.*)
Function cmd_SaveAs(Filt1 As String) As String
Filtre1 = "Fichier (*." & Filt1 & ") | *." & Filt1
Filtre2 = "Tous (*.*) | *.*"
Dialog.CMDialog1.Filter = Filtre1 + "|" + Filtre2
Dialog.CMDialog1.FilterIndex = 1
Dialog.CMDialog1.FLAGS = OFN_HIDEREADONLY
Dialog.CMDialog1.Action = DLG_FILE_SAVE
cmd_SaveAs = Dialog.CMDialog1.FileName
Unload Dialog

End Function
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Bonjour,

Merci pour ce retour d' information

Par ailleurs, pour ce qui concerne la boîte de dialogue, j'ai ma petite idée sur la façon de procéder, mais ma solution est lourdingue, voire ingérable ... Je lance un appel sur CCM qui connaîtraient une solution simple via une boîte de dialogue ..

Toutefois, à titre transitoire, il est toujours possible de créer un formulaire avec la liste exhaustive des liens possible.
Une liste de boutons dédiés quoi ..

Bonne journée
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
oui pourquoi pas !!

mais j'aurais voulu savoir ce que tu pensais de ce code ??

lien : http://www.commentcamarche.net/faq/sujet 12535 vb6 vba le controle commondialog

Et je suis allé voir sur plusieurs forums, et il l'utilise !!
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
J'en pense que cela vaut la peine d'essayer. Un test n'engage à rien ... Surtout si l'on fait au préalable une sauvegarde de l'existant !

Le code me paraît plausible (Toutefois, je n'ai pas tout compris !)
Un copier coller et tu verras tout de suite de quoi il retourne ....

Cordialement

La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
Il me met une erreur, et je crois comprendre pourquoi :

je crois que je n'ai pas la référence Microsoft Common Dialog !!

Je vais devoir me débrouiller autrement !! merci quand même Jean-Jacques !!

Cordialement
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Nous n'en avons pas terminé. Entre temps j'ai trouvé une syntaxe facilement modulable qui remplit ton cahier des charges :

Il s'agit de créer une zone de liste modifiable (nommée "Dossier" dans cet exemple) liste
- Dans son onglet Données/origine source, déclarer : Liste valeurs
- Dans contenu des valeurs déclarer les noms des fichiers à importer : <Excel_01>; <Excel_02>; <Excel_03>; <>; etc
- Dans l'évènement après mise à jour copier/coller ce qui suit en l'adaptant à ton contexte :
_______

Private Sub Dossier_AfterUpdate()

On Error GoTo Err_Dossier_Click

Dim stDocName As String
Dim stLinkCriteria As String

Select Case Dossier.Text
Case Is = "Excel_01"

stDocName = "Excel_01"
Case Is = "Excel_02"
stDocName = "Excel_02"
Case Is = "Excel_03"
stDocName = "Excel_02"
End Select

rem DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.TransferSpreadsheet acImport, 8, "<Nom de la table>", "C:\<Chemin explicite>\stDocName.xls", True, "feuil2!"



Exit_Dossier_Click:
Dossier = ""
Exit Sub

Err_Dossier_Click:
MsgBox Err.Description
Resume Exit_Dossier_Click

End Sub
______
Il y aura sans doute quelques bricoles à corriger ..... ou alors je me suis planté total !

A+
La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
J'ai essayé ton code Jean_Jacques
et ça fonctionne pas mal (j'ai dût rajouter un refresh pour formulaire et deux, trois bricoles pour supprimer mes enregistrements) !!

Mais le problème c'est que j suis limité dans le choix des fichiers et des répertoires (les utilisateurs ne pourront pas modifier le code car ils utiliseront le rum time) !!

d'où l'utilisation d'une fenêtre de dialogue !! mais si il ya une autre actuces j suis preneur !! ;-)

A+
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Mimi_25, vba-ouvrir-un-fichier-sans-donner-le-chemin

Sur ce lien j'ai trouvé quelque chose qui semble approprié :

Source:
http://www.commentcamarche.net/forum/affich 4663999 vba ouvrir un fichier sans donner le chemin#0

Solution proposée :
Sub ouverture()
CurDir
Workbooks.Open Filename:=".\<xyz>.xls"

End Sub

A tout

La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
Euh oui mais comment j''intègre cette fonction à mon nouveau code (ton code) ??

Dslé j suis débutant, j suis un "jeune" pratiquant d'ACCESS !! :-(

@+
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111 >
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008

Mimi_25,

Pour moi aussi c'est terra incognita !
- Je suppose que cette syntaxe, en l'adaptant, se substitue purement et simplement à la syntaxe
des Case ....

En route pour l'aventure


Cette fois je m'absente
A+

La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
Ce que j'ai oublé de te dire c'est que depuis mon formulaire je copie et je colle mes données (de ma table) sur un fichier excel et ensuite je les enregistre sous un répertoire !! peut être ya t'il possibilité de gérer l'enregitrement et l'importation ??

A+
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Mimi_25,

Au fait, pourquoi ne pas créer un fichier Excel lié :
Dans ce cas de figure -> Saisie dans access -> enregistrement dans Excel ?

A+
NB : Je mabsente le reste de la journée

La science ne fait que trouver ce qui existe depuis toujours.
REEVES Hubert.
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
Bon j'ai trouver un bout de code sur :

https://access.developpez.com/faq/?page=CheminsRep

pour afficher ma fenêtre de dialogue reste plus qu'à récupérer le chemin du fichier et le
tour est joué, mais pour l'instant je n'y arrive pas ! :-)

apparemment la variable s'appelle '1' !!

A+
Messages postés
31
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
18 novembre 2008
2
j'ai résolu mon problème en cherchant sur :

https://access.developpez.com/faq/?page=CheminsRep
dans le post ouvrir et récupérer le lien. J'ai adapté en prenant la variable "ouvrirfichier" et ça
marche super bien !!

Je tiens à remercier les personnes qui m'ont répondu tout particulièrement Jean_Jacques !!
Merci

A+
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
111
Mimi_25,

Toutes mes félicitations pour ta ténacité Mimi_25.
Mais aurais-tu la bonté de me communiquer une copie de ton labeur ?

Je ne manquerai pas de tirer profit de nos échanges, et ne manquerai pas, s'il y lieu, d'en faire profiter autrui !

Porte-toi bien
A+

La science ne fait que trouver ce qui existe depuis toujours !
REEVES Hubert.