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 :
En vous remerciant d'avance pour votre aide.
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
Partager