Bonjour,

J'ai créer une procédure dans un module standard qui:
1. ouvre un fichier excel et chaque ligne
2. enregistre chacune des lignes dans une table de ma base de données distantes
3.ferme enfin le fichier excel


Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
36
37
38
39
40
41
42
43
44
45
Public Sub PiloterExcelDepuisAccess(fileexcel As String)
    Dim xlApp As Excel.Application
    Dim xlSheet As Excel.Worksheet
    Dim xlBook As Excel.Workbook
    Dim nbrelignes As Long
    Dim nbrecolonnes As Long
    Dim i As Long
    Dim j As Long

    'J'initialise mes variables
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open(fileexcel)

    'référence à la requête
    Set qdf = CurrentDb.QueryDefs("RQTLECTUREFICHIEREXCEL")

    'je récupère le nombre de lignes du fichier Excel
    nbrelignes = ActiveSheet.UsedRange.Rows.Count
    nbrecolonnes = ActiveSheet.UsedRange.Columns.Count

    For i = 2 To 3 'nbrelignes
        InitialiserVariables
        For j = 1 To nbrecolonnes
            'traitement
        Next
        'enregistrement dans la base de donnees
        qdf.Parameters("param1") = valeur1
        qdf.Parameters("param2") = valeur2
        qdf.Parameters("param3") = valeur3
        qdf.Execute                                 '<== si requête action
    Next

    'libération de la référence
    Set qdf = Nothing

    'Code de fermeture
    xlBook.Close SaveChanges:=False
    
    xlApp.Application.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

Mon soucis, lorsque je ferme le fichier excel, il ne le ferme pas complètement. Et je me retrouve donc avec une instance de Excel (visible dans le GESTIONNAIRE DES TACHES WINDOWS) cachée. Lorsque je veux à nouveau lire les données, j'ai une erreur parce que le fichier est occupé ou pas bien fermé.

Comment faire pour fermer complètement l'application Excel?