Bonjour,

Je viens vers vous pour essayer de résoudre un problème lié à un processus d'Excel toujours actif après une écriture de données en VBA, depuis Access vers un classeur xls (l'objectif étant d'alimenter un tableau ligne par ligne avec des calculs effectués depuis ma BDD). J'ai pourtant cherché longuement des solutions à ce dysfonctionnement (déjà identifié dans des forums notamment ici) mais sans résultat pour moi.

Au premier lancement de la procédure, tout se déroule normalement. Le deuxième lancement (sans fermer access) bloque sur la méthode "range" qui me permet de récupérer la derniere ligne remplie dans une colonne. Excel est alors actif dans les processus Windows avant de lancer la procédure.
Si je supprime la ligne dédiée à la récupération de la dernière ligne excel, je ferme correctement le processus excel à chaque lancement.

ci-dessous mon 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Private Sub btn_test_export_xls_wikipcs_Click()
 
'Dim appexcel As Excel.Application
Dim appexcel As New Excel.Application 'remplace la ligne précédente à partir d'une réponse trouvé
Dim wbexcel As Excel.Workbook
Dim cnn1 As ADODB.Connection
Dim myrecordset As New ADODB.Recordset
Dim sql As String
Dim lastligne, u, i As Integer
 
'Appel du fichier Excel à remplir
 
appexcel.Visible = False ' testé à vrai sans succès 
Set wbexcel = appexcel.Workbooks.Open("E:\test.xls")
 
' Appel de la feuille
 
appexcel.Sheets("Feuil1").Select
 
 
' Recup derniere ligne B1 et affecte ligne +1 (bug à ce niveau)
 
lastligne = Range("B1").End(xlDown).Row
u = lastligne + 1
 
 
' recordset + requete calcul
 
Set cnn1 = CurrentProject.Connection
myrecordset.ActiveConnection = cnn1
 
sql = "ma requete"
 
'ouverture recordset
 
myrecordset.Open sql
 
i = 2
 
Do While myrecordset.EOF = False
 
' rempli les valeurs dans excel
 
appexcel.Cells(u, i) = myrecordset.Fields("CompteDeAvancement du PCS")
 
 
myrecordset.MoveNext
 
' vide recordset + deconnect
 
i = i + 1
 
Loop
 
myrecordset.Close
Set cnn1 = Nothing
 
' ferme excel
 
wbexcel.SaveAs "E:\test.xls"
wbexcel.Close
appexcel.Quit
 
Set appexcel = Nothing
Set wbexcel = Nothing
 
End Sub
En vous remerciant d'avance pour votre aide.