Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Importation Excel

7 réponses
Avatar
EricO
Bonjour à tous,

J'aimerais avoir une macro dans Access pour importer des données dans
différentes cellules sur un onglet. Ensuite de vérifier s'il y a un autre
onglet et de faire la même chose.
Dès rendu à la fin des onglets, de fermer le fichier et d'en ouvrir un
autre..

Le nombre d'onglets peut différencier d'un fichier à l'autre. En plus, il y
a une protection dans les fichiers "Excel".

Merci de votre aide, très apprécié.

Érico

7 réponses

Avatar
3stone
Salut,

EricO wrote:
J'aimerais avoir une macro dans Access pour importer des données dans
différentes cellules sur un onglet. Ensuite de vérifier s'il y a un
autre onglet et de faire la même chose.
Dès rendu à la fin des onglets, de fermer le fichier et d'en ouvrir un
autre..

Le nombre d'onglets peut différencier d'un fichier à l'autre. En
plus, il y a une protection dans les fichiers "Excel".




Pour faire cela, intéresse toi à l'automation !
Dans le cas présent, à l'automation d'Excel.

Y'a plus k'a ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Blaise Cacramp
un petit exemple pour débuter :

Sub Exemple_xl_2()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim L As Long
Dim C As Integer

Dim sSql As String
Dim Rst As New ADODB.Recordset

sSql = "SELECT Tbl_Poste.CP_Code, Tbl_Poste.CP_Localite" _
& " FROM Tbl_Poste;"
Rst.Open sSql, CurrentProject.Connection, adOpenStatic
If Rst.EOF Then
Beep
MsgBox "pas d'enregistrements"
Exit Sub 'pas d'enregistrements
Else
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True 'ou False (plus rapide dans le cas d'un
grand tableau)
Set xlBook = xlApp.Workbooks.Add 'dans le cas d'un classeur
vierge
' ou Set xlBook = xlApp.Workbooks.Open("x:cheminnom.xlt") 'dans le
cas d'un modèle
' Ecrire quelques valeurs
Set xlSheet = xlBook.Worksheets("Feuil1") 'ou son vrai nom dans
un modèle (conseillé)

With xlSheet
For L = 1 To Rst.RecordCount
For C = 1 To 2
.Cells(L, C) = Rst(C - 1)
Next C
If Not Rst.EOF Then Rst.MoveNext
Next L
End With
MsgBox "fini ! "
xlApp.Visible = True '(s'il avait été à false en début de
procédure)
' Libérer les variables objet
Rst.Close
Set Rst = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End If
End Sub


"EricO" a écrit dans le message de news:

Bonjour à tous,

J'aimerais avoir une macro dans Access pour importer des données dans
différentes cellules sur un onglet. Ensuite de vérifier s'il y a un autre
onglet et de faire la même chose.
Dès rendu à la fin des onglets, de fermer le fichier et d'en ouvrir un
autre..

Le nombre d'onglets peut différencier d'un fichier à l'autre. En plus, il
y a une protection dans les fichiers "Excel".

Merci de votre aide, très apprécié.

Érico
Avatar
Erico
Un gros gros merci! Je vais regarder ça!

Salutations

"Blaise Cacramp" a écrit :

un petit exemple pour débuter :

Sub Exemple_xl_2()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim L As Long
Dim C As Integer

Dim sSql As String
Dim Rst As New ADODB.Recordset

sSql = "SELECT Tbl_Poste.CP_Code, Tbl_Poste.CP_Localite" _
& " FROM Tbl_Poste;"
Rst.Open sSql, CurrentProject.Connection, adOpenStatic
If Rst.EOF Then
Beep
MsgBox "pas d'enregistrements"
Exit Sub 'pas d'enregistrements
Else
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True 'ou False (plus rapide dans le cas d'un
grand tableau)
Set xlBook = xlApp.Workbooks.Add 'dans le cas d'un classeur
vierge
' ou Set xlBook = xlApp.Workbooks.Open("x:cheminnom.xlt") 'dans le
cas d'un modèle
' Ecrire quelques valeurs
Set xlSheet = xlBook.Worksheets("Feuil1") 'ou son vrai nom dans
un modèle (conseillé)

With xlSheet
For L = 1 To Rst.RecordCount
For C = 1 To 2
.Cells(L, C) = Rst(C - 1)
Next C
If Not Rst.EOF Then Rst.MoveNext
Next L
End With
MsgBox "fini ! "
xlApp.Visible = True '(s'il avait été à false en début de
procédure)
' Libérer les variables objet
Rst.Close
Set Rst = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End If
End Sub


"EricO" a écrit dans le message de news:

> Bonjour à tous,
>
> J'aimerais avoir une macro dans Access pour importer des données dans
> différentes cellules sur un onglet. Ensuite de vérifier s'il y a un autre
> onglet et de faire la même chose.
> Dès rendu à la fin des onglets, de fermer le fichier et d'en ouvrir un
> autre..
>
> Le nombre d'onglets peut différencier d'un fichier à l'autre. En plus, il
> y a une protection dans les fichiers "Excel".
>
> Merci de votre aide, très apprécié.
>
> Érico


.

Avatar
Erico
Ça semble super.

Est-ce possible, au lieu de faire une ligne par cellule, d'avoir un petit
programme de 3 lignes, de prendre la cellule indiquer dans la colonne
"Description" dans ma table? ex. H6 pour la première ligne et D10 pour la 2e,
et ainsi de suite....
J'en ai pour environ 50 cellules à prendre par feuille et les mettre sur une
seule ligne dans ma table d'Access.

Érico
Avatar
Blaise Cacramp
Ah, j'avais compris l'inverse.
Oui, il est possible de lire des feuilles Excel, mais je suis assez réticent
parce qu'une feuille, à moins qu'elle soit bien protégée, est trop
facilement modifiable. Il n'y a pas dans Excel le respect de lintégrité
d'un enregistrement.

S'il y a 50 cellules qui se suivent aussi harmonieusement que H6 et D10,
cela va être dur de faire cela en 3 lignes, hein ?

Met ton problème plus à plat que ce soit bien compréhensif.

Blaise

"Erico" a écrit dans le message de news:

Ça semble super.

Est-ce possible, au lieu de faire une ligne par cellule, d'avoir un petit
programme de 3 lignes, de prendre la cellule indiquer dans la colonne
"Description" dans ma table? ex. H6 pour la première ligne et D10 pour la
2e,
et ainsi de suite....
J'en ai pour environ 50 cellules à prendre par feuille et les mettre sur
une
seule ligne dans ma table d'Access.

Érico
Avatar
Erico
Pas de danger, les cellules seront toujours à la même place.

Voici un exemple....
_______________________________________________
Option Compare Database
Option Explicit


Public Sub Import_demandes(Optional Établissement As Integer)

Const ROOT = "C:Documents and SettingsedufourMes
documentsAccessTest_demandes", FILE = "-DEMANDE DE COMPLEMENTAIRE
2010-2011.xls"
Const EXCEL_APPLICATION = "Excel.Application"
'
Dim Exe As Excel.Application, Xls As Workbook, Wsh As Worksheet, Zone As
Range, Line As Range
Dim Dtb As Database, XlsRcs As Recordset, TblRcs As Recordset, I As
Integer, J As Integer

Set Exe = CreateObject(EXCEL_APPLICATION)
Set Dtb = CurrentDb()
'Importation vers Table
Set XlsRcs = Dtb.OpenRecordset("Demandes_RFM_2010-2011")
'Set TblRcs = Dtb.OpenRecordset("PAPA_Réception")


' Debut de l importation
On Error Resume Next
' Do While Not XlsRcs.EOF
If XlsRcs!Numéro = Établissement Or Établissement = 0 Then
'Efface les vieux
Dtb.Execute "Delete * FROM PAPA_Réception WHERE Numéro = " &
CStr(XlsRcs!Numéro)
'jjouvre le fichier excel
Set Xls = Exe.Workbooks.Open(ROOT & XlsRcs!Code & FILE)
'Va dans l'onglet
Set Wsh = Xls.Worksheets("Calendrier")
Set Zone = Wsh.Range("Projets")
For I = 0 To Zone.Rows.Count - 1
If Len(Zone.Cells(I + 1, 1)) > 0 Then
TblRcs.AddNew
TblRcs!Numéro = XlsRcs!Numéro
For J = 0 To Zone.Columns.Count - 1
TblRcs.Fields(`Conclusion`1).Value = Wsh.Cells(C24)
TblRcs.Fields(J + 1).Value = Zone.Cells(I + 1, J + 1)
Next J
TblRcs.Update
End If
Next I
XlsRcs.Edit
XlsRcs!Pilote = Wsh.Cells(50, 3)
XlsRcs!Téléphone = Wsh.Cells(52, 3)
XlsRcs!Courriel = Wsh.Cells(54, 3)
XlsRcs!Date = Wsh.Cells(56, 3)
XlsRcs.Update
Xls.Close False
End If
XlsRcs.MoveNext
Loop

TblRcs.Close
XlsRcs.Close
Exe.Quit

For Each Fld In Dtb.TableDefs(XlsRcs.Name).Fields
XlsRcs.Fields(Fld.Name) = Wsh.Cells(Fld.Description)

Next Fld
End Sub
Avatar
Blaise Cacramp
Bon, tu as tout ce qu'il faut.
Bonne continuation !
"Erico" a écrit dans le message de news:

Pas de danger, les cellules seront toujours à la même place.

Voici un exemple....
_______________________________________________
Option Compare Database
Option Explicit


Public Sub Import_demandes(Optional Établissement As Integer)

Const ROOT = "C:Documents and SettingsedufourMes
documentsAccessTest_demandes", FILE = "-DEMANDE DE COMPLEMENTAIRE
2010-2011.xls"
Const EXCEL_APPLICATION = "Excel.Application"
'
Dim Exe As Excel.Application, Xls As Workbook, Wsh As Worksheet, Zone
As
Range, Line As Range
Dim Dtb As Database, XlsRcs As Recordset, TblRcs As Recordset, I As
Integer, J As Integer

Set Exe = CreateObject(EXCEL_APPLICATION)
Set Dtb = CurrentDb()
'Importation vers Table
Set XlsRcs = Dtb.OpenRecordset("Demandes_RFM_2010-2011")
'Set TblRcs = Dtb.OpenRecordset("PAPA_Réception")


' Debut de l importation
On Error Resume Next
' Do While Not XlsRcs.EOF
If XlsRcs!Numéro = Établissement Or Établissement = 0 Then
'Efface les vieux
Dtb.Execute "Delete * FROM PAPA_Réception WHERE Numéro = " &
CStr(XlsRcs!Numéro)
'jjouvre le fichier excel
Set Xls = Exe.Workbooks.Open(ROOT & XlsRcs!Code & FILE)
'Va dans l'onglet
Set Wsh = Xls.Worksheets("Calendrier")
Set Zone = Wsh.Range("Projets")
For I = 0 To Zone.Rows.Count - 1
If Len(Zone.Cells(I + 1, 1)) > 0 Then
TblRcs.AddNew
TblRcs!Numéro = XlsRcs!Numéro
For J = 0 To Zone.Columns.Count - 1
TblRcs.Fields(`Conclusion`1).Value = Wsh.Cells(C24)
TblRcs.Fields(J + 1).Value = Zone.Cells(I + 1, J +
1)
Next J
TblRcs.Update
End If
Next I
XlsRcs.Edit
XlsRcs!Pilote = Wsh.Cells(50, 3)
XlsRcs!Téléphone = Wsh.Cells(52, 3)
XlsRcs!Courriel = Wsh.Cells(54, 3)
XlsRcs!Date = Wsh.Cells(56, 3)
XlsRcs.Update
Xls.Close False
End If
XlsRcs.MoveNext
Loop

TblRcs.Close
XlsRcs.Close
Exe.Quit

For Each Fld In Dtb.TableDefs(XlsRcs.Name).Fields
XlsRcs.Fields(Fld.Name) = Wsh.Cells(Fld.Description)

Next Fld
End Sub