Lier (attacher) une série de fichiers Excel protégés
Je dois mensuellement lancer une fonction qui lie (attache) une série de 180 à 450 fichiers Excel dans une base Access.
Ces fichiers Excel sont déposés sur un serveur par de nombreux utilisateurs à qui on demande de saisir des zones bien particulières. Pour cette raison, tous ces fichiers sont protégés (classeur et feuilles) par un seul et même mot de passe (que je connais).
Je pourrais bien entendu ouvrir chacun de ces fichiers avec du code VB en utilisant le mot de passe mais cela me semble lourd et inutile puisque je souhaite simplement charger certaines zones de ces fichiers dans des tables pour une exploitation de consolidation.
Mon problème : Access refuse d'attacher ou d'importer des fichiers Excel protégés !
PS - j'ai positionné mes options de sécurité en niveau faible tant dans Access que dans Excel.
Réponse tardive Import données excel fichiers protégés
Un peu tardif mais cela peut aider quelqu'un qui cherche.
Voici de quoi importer des données de fichiers excel protégés
Il faut simplement avoir créé les tables de destination avant.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| Sub import_excel(fichier_avec_chemin As String, lafeuille As String, tabledestination As String, nbchamps As Integer)
Dim Plage As Range
Dim Tableau1 As Variant
Dim x As Long, i As Long
Dim Rs1 As Recordset
Dim appexcel As Excel.Application
Dim wbexcel As Excel.Workbook
Set appexcel = CreateObject("Excel.Application")
appexcel.Visible = False
Set wbexcel = appexcel.Workbooks.Open(fichier_avec_chemin, ReadOnly:=True, Password:="VOTREMOTDEPASSE")
CurrentDb.Execute ("delete * from " & tabledestination)
Set Rs1 = CurrentDb.OpenRecordset(tabledestination, 2)
Set Plage = wbexcel.Worksheets(lafeuille).Range("A1").CurrentRegion.Offset(1, 0)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, Plage.Columns.Count)
Plage.Select
Tableau1 = Plage.Value
For x = 1 To UBound(Tableau1, 1)
With Rs1
.AddNew
For i = 0 To nbchamps
.Fields(i) = Tableau1(x, i + 1)
Next i
.Update
End With
Next
appexcel.DisplayAlerts = False
wbexcel.Saved = True
wbexcel.Close (False)
appexcel.Quit
Set wbexcel = Nothing
Set appexcel = Nothing
End Sub |