Bonjour, je me connecte à ma base de données Access en ADO pour exécuter des requêtes insert et select depuis une macro Excel. J'utilise donc 2 manières d’exécuter mes requête (objConnexion.Open et rs.open). Je ne m'y connais pas et j'ai réussit à exécuter certains de mes requête sur une macro simple mais dans ma vraie macro qui contient d'autres requêtes j'ai comme erreur "Cette opération n'est pas autorisée si l'objet est ouvert" à la ligne 28.
Je met donc
et cette fois j'ai l'erreur que la connexion est fermée. Je pense que je gère mal les connexions, malgré mes recherches, j'ai donc besoin de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 objConnexion.Close Set objConnexion = Nothing
Mon code fonctionnel est:
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 Dim objConnexion As ADODB.Connection Dim objrs As ADODB.Recordset Dim aa, bb ' Création de l'objet ADO Set objConnexion = New ADODB.Connection Set objrs = New ADODB.Recordset '''''' Set objCommand = CreateObject("ADODB.Command") ' Ouverture de la base sans DSN objConnexion.Open _ "Provider=Microsoft.ACE.OLEDB.12.0; " & _ "Password=;" & _ "User ID=Admin;" & _ "Data Source=C:\Users\MLR1.MDB;" Dim nomClasseur As String nomClasseur = ActiveWorkbook.Name Dim nomFeuille As String nomFeuille = ActiveSheet.Name strsql = "SELECT FORMATION.LIDM as lid, lecode FROM ...." objrs.Open strsql, objConnexion, adOpenKeyset, adLockOptimistic aa = objrs.Fields("lid").Value bb = objrs.Fields("lecode").Value TexteSQL4 = "INSERT INTO .... '" & aa & "' , '" & bb & "' FROM ..." objConnexion.Execute TexteSQL4
et mon code qui ne fonctionne pas est:
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
68
69
70
71
72
73
74
75
76
77
78 Dim objConnexion As ADODB.Connection Dim objrs As ADODB.Recordset Dim aa, bb ' Création de l'objet ADO Set objConnexion = New ADODB.Connection Set objrs = New ADODB.Recordset '''''' Set objCommand = CreateObject("ADODB.Command") ' Ouverture de la base sans DSN objConnexion.Open _ "Provider=Microsoft.ACE.OLEDB.12.0; " & _ "Password=;" & _ "User ID=Admin;" & _ "Data Source=C:\Users\MLR1.MDB;" 'l'annee de parcours = annee de la date courante Dim annee As String annee = Year(Now()) 'pour chaque cellule de B19 à B55 For Each C In Range("B19:B55") Dim ligne As Integer 'on récupère la ligne ligne = C.Row Dim nomClasseur As String nomClasseur = ActiveWorkbook.Name Dim nomFeuille As String nomFeuille = ActiveSheet.Name strsql = "SELECT F.LIDM as lid, lecode FROM F WHERE LIDM = (SELECT M.IDMENTION FROM M WHERE NOMM='" & nomClasseur & "') AND NOMF='" & nomFeuille & "'" ''''''''''''''''''''''' erreur sur cette ligne objrs.Open strsql, objConnexion, adOpenKeyset, adLockOptimistic aa = objrs.Fields("lid").Value bb = objrs.Fields("lecode").Value ' Traitement TexteSQL1 = "INSERT INTO A ...." TexteSQL2 = "INSERT INTO B ...." TexteSQL3 = "INSERT INTO C ....." objConnexion.Execute TexteSQL1 objConnexion.Execute TexteSQL2 objConnexion.Execute TexteSQL3 TexteSQL4 = "INSERT INTO E .... '" & aa & "' , '" & bb & "' ...." objConnexion.Execute TexteSQL4 End If Next 'prochaine ligne
J'ai modifier le code et réduit les requêtes mais le code d'origine est bon normalement.
J'ai l'impression que l'on ne fait pas un objConnexion.Execute et un objrs.Open en même temps de cette manière.
Partager