Le code suivant lit sur un répertoire donné tous les fichiers Excel et les importe dans une base access. Il importe plus particulièrement les onglets "TestIndicateurs" et "Transpose". Contrainte lié à mon application: Ces 2 onglets doivent être masqués. Et le code ici présent marche très bien lorsque les onglets sont visibles, mais ne fonctionne pas lorsque je masque les onglets. J'ai donc rajouté la procédure Sub "ToutAfficher" (que j'appelle juste avant la lecture): En utilisant le débugger pas à pas je passe bien dans l'onglet mais il me sort une erreur à la compil.
L'erreur provient apparemment du fait que le fichier est en lecture seule donc il ne peut pas modifier les onglets en masqué. J'ai donc changé la ligne suivante:
Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=True) en
Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=False)
Le programme me fait donc l'import des feuilles masquées parfaitement bien hormis un gros pb à la fin de l'import:
il bug sur les fichiers excel et m'ouvre la boite de dialogue suivante:
"Fichier désormais disponible" "monFichier.xls" est à présent disponible pour modification. Ouvrez le fichier en lecture-écriture pour le modifier. (choix Lecture-Ecriture/Annuler) Et après il plante sur mes fichiers excel. Donc je tue les processus à la main.
En fait Excel réagit comme s'il y avait 2 accès concurrents sur le même fichier.
Comment faire pour éviter cela ? Il ne doit pas y avoir grand chose à changer mais je ne trouve pas
Merci à tous pour votre aide
Le code:
Sub ToutAfficher()
Dim ws As Worksheet For Each ws In Worksheets ws.Visible = True Next End Sub
Sub ImportAllFiles() Dim strPathToFiles As String Dim xlAppl As Excel.Application Dim Wb As Excel.Workbook Dim onglet As String Dim ws As Excel.Worksheet Dim Repertoire As String, Fichier As String
'Repertoire = "C:\Documents and Settings\dossier\" Repertoire = "C:\Documents and Settings\dossierOngletMasque\"
Fichier = Dir(Repertoire & "*.xls" ) Do While Fichier ""
Set xlAppl = CreateObject("Excel.Application" ) strPathToFiles = Repertoire & Fichier
'Supprimer enreg table T_Import_Brut DoCmd.RunSQL "DELETE FROM TImport" DoCmd.RunSQL "DELETE FROM TImport2"
Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=True)
Call ToutAfficher
For Each ws In Wb.Worksheets If ws.Visible = True Then onglet = ws.Name
Marsh Posté le 26-04-2006 à 17:42:54
Bonjour,
Le code suivant lit sur un répertoire donné tous les fichiers Excel et les importe dans une base access. Il importe plus particulièrement les onglets
"TestIndicateurs" et "Transpose".
Contrainte lié à mon application:
Ces 2 onglets doivent être masqués. Et le code ici présent marche très bien lorsque les onglets sont visibles, mais ne fonctionne pas lorsque je masque les onglets.
J'ai donc rajouté la procédure Sub "ToutAfficher" (que j'appelle juste avant la lecture):
En utilisant le débugger pas à pas je passe bien dans l'onglet mais il me sort une erreur à la compil.
L'erreur provient apparemment du fait que le fichier est en lecture seule donc il ne peut pas modifier
les onglets en masqué.
J'ai donc changé la ligne suivante:
Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=True)
en
Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=False)
Le programme me fait donc l'import des feuilles masquées parfaitement bien hormis un gros pb à la fin de l'import:
il bug sur les fichiers excel et m'ouvre la boite de dialogue suivante:
"Fichier désormais disponible"
"monFichier.xls" est à présent disponible pour modification.
Ouvrez le fichier en lecture-écriture pour le modifier. (choix Lecture-Ecriture/Annuler)
Et après il plante sur mes fichiers excel. Donc je tue les processus à la main.
En fait Excel réagit comme s'il y avait 2 accès concurrents sur le même fichier.
Comment faire pour éviter cela ? Il ne doit pas y avoir grand chose à changer mais je ne trouve pas
Merci à tous pour votre aide
Le code:
Sub ToutAfficher()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Visible = True
Next
End Sub
Sub ImportAllFiles()
Dim strPathToFiles As String
Dim xlAppl As Excel.Application
Dim Wb As Excel.Workbook
Dim onglet As String
Dim ws As Excel.Worksheet
Dim Repertoire As String, Fichier As String
'Repertoire = "C:\Documents and Settings\dossier\"
Repertoire = "C:\Documents and Settings\dossierOngletMasque\"
Fichier = Dir(Repertoire & "*.xls" )
Do While Fichier ""
Set xlAppl = CreateObject("Excel.Application" )
strPathToFiles = Repertoire & Fichier
'Supprimer enreg table T_Import_Brut
DoCmd.RunSQL "DELETE FROM TImport"
DoCmd.RunSQL "DELETE FROM TImport2"
Set Wb = xlAppl.Workbooks.Open(FileName:=strPathToFiles, ReadOnly:=True)
Call ToutAfficher
For Each ws In Wb.Worksheets
If ws.Visible = True Then
onglet = ws.Name
If onglet = "TestIndicateurs" Then
' transfert vers table T_Import_Brut
DoCmd.TransferSpreadsheet acImport, 8, "TImport", strPathToFiles, False, onglet & "!H2:L201"
ElseIf onglet = "Transpose" Then
' transfert vers table T_Import_IG
DoCmd.TransferSpreadsheet acImport, 8, "TImport2", strPathToFiles, False, onglet & "!A1:F"
End If
End If
Next ws
Wb.Close False
setwb = Nothing
xlAppl.Quit
Set xlAppl = Nothing
Fichier = Dir
Loop
End Sub