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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
objConnexion.Close
Set objConnexion = Nothing
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.


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.