Upload
camille-emakam
View
9
Download
2
Embed Size (px)
Citation preview
Bonjour, J'ai une table saisie_données qui regroupe toutes les saisies (code_article, date, entrées, sorties) et une requete qui appelle les données en fonction du critère code_article. L'objectif est d'avoir un état qui affiche les entrées, les sorties et un champ calculé qui affiche le résultat 'stock= stock_début + [entrées]-[sorties] ceci à chaque ligne de l'état. Avec la requete select je parviens à réunir les données mais le problème est d'avoir le champ calculer 'stock'
Voici les formules appropriées (Source Microsoft). Bien entendu il faut les adapter à votre situation.
Pour les recevoir, il faut d'abord créer 2 champs de type texte dans le pied de formulaire.
=Somme(nz([UnitésCommandées])-nz([UnitésReçues])) =Somme(nz([UnitésReçues])-nz([PerteUnités])-nz([UnitésVendues]))
Imaginons que vous désiriez importer non pas une seule feuille Excel, mais toutes les feuilles d'un classeur. Comment faire ?Astuce aimablement envoyée par Ludovic.
Si vous désirez plus d'explications concernant l'importation simple d'une feuilles Excel, c'est par ici.
Mode d'emploi :
- Dans la base de données Access dans laquelle vous désirez importer l'ensemble de toutes les feuilles de calcul d'un fichier Excel, écrivez le code suivant dans un module VBA, et exécutez le. Le fichier Excel s'appelle ici C:\TOTO.XLS. Il faut bien évidemment l'adapter à votre situation.
Sub ImportationGlobale Dim appXl As Excel.Application Dim intNbFeuille As Integer Dim intIndex As Integer Dim avarTabFeuille() As Variant
Dim WorkSheet As Excel.WorkSheet Dim tdf As TableDef Set appXl = CreateObject("Excel.Application") intNbFeuille = 1
'OUVRE LE FICHIER .XLS ET TROUVE LERS DIFFERENTES FEUILLES With appXl .Workbooks.Open "C:\toto.xls" ReDim avarTabFeuille(.Worksheets.Count) For Each WorkSheet In .Worksheets avarTabFeuille(intNbFeuille) = WorkSheet.name intNbFeuille = intNbFeuille + 1 Next .Quit End With Set appXl = Nothing
'CREE UNE TABLE LINKEE POUR CHACUNES DES FEUILLES TROUVEES For intIndex = 1 To UBound(avarTabFeuille) fEntrer = False Set tdf = CurrentDb.CreateTableDef(avarTabFeuille(intIndex)) tdf.Connect = "Excel 5.0;DATABASE=" & Result tdf.SourceTableName = avarTabFeuille(intIndex) & "$" CurrentDb.TableDefs.Append tdf CurrentDb.TableDefs.Refresh NextEnd Sub
1. Re : Importer 100 fichiers excel dans 1 table Access
bonsoir
Juste pour le Fun, voici une procédure qui boucle sur tous les classeurs d'un répertoire sans les ouvrir et transfert les données de la Feuil1 vers une table Access (Table1).
L'exemple suppose que Tous les onglets portent le même nom.Les classeurs sont structurés comme une vraie base (pas de données éparpillées) et de structure identique à la base Access (nombre de colonne et type de données adaptés:date,texte,numerique...etc...)
la procédure nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
Code :
Sub tranfertFeuilleClasseursFermes_VersAccess()Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.RecordsetDim oConn As ADODB.ConnectionDim j As IntegerDim Fichier As String, Repertoire As String '------------------------------------------------------'Connection à la Base AccessSet oConn = New ADODB.ConnectionoConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _"Data Source= 'C:\maBase.mdb';"
'les données seront placés dans Table1Set oRS = New ADODB.RecordsetoRS.Open "Select * from Table1", oConn, adOpenKeyset, adLockOptimistic'------------------------------------------------------ 'Boucle sur les classeurs Excel du répertoire cibleRepertoire = "C:\Documents and Settings\mimi\dossier\general\excel\Nomdossier"Fichier = Dir(Repertoire & "\*.xls")
Do While Fichier <> "" 'Connection au classeur Excel Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Repertoire & "\" & Fichier & ";" & _ "Extended Properties=""Excel 8.0;""" 'requête pour extraire les données de la Feuil1 oProdRS.Open "SELECT * FROM [Feuil1$]", Cn, adOpenStatic ' --- Transfert des données dans la base --- Do While Not (oProdRS.EOF) oRS.addNew For j = 0 To oRS.Fields.Count - 1 oRS.Fields(j) = oProdRS.Fields(j).Value Next j oRS.Update oProdRS.moveNext
Loop '------------------------------------------- oProdRS.Close 'Fermeture de la connection au classeur Excel Cn.CloseFichier = DirLoop
oRS.CloseSet oRS = Nothing'Fermeture de la connection AccessoConn.CloseSet oConn = NothingEnd Sub
SELECT Tonnages.Client, Sum(Tonnages.Volume) AS SommeDeVolume,
Tonnages.numAnnee,convDate(Tonnages.numAnnee,[SemaineACalculer]) AS
dateconvertieFROM Tonnages
WHERE Tonnages.tDate>=DateAdd("ww",-4,dateconvertie) And ( Tonnages.tDate<dateconvertie)
GROUP BY Tonnages.Client, Tonnages.tDate, Tonnages.numAnnee;