Bonjour à tous,
je viens vers vous car j'ai une erreur que je n'arrive pas à résoudre seul...
J'ai réalisé une macro qui importe les tables Access et qui les insert dans Excel, mais au moment de la copie j'ai une erreur : la méthode CopiFromRecordset de l'objet range a échoué...
Lorsque j'appuie sur débogage puis F5 le message revient je re clique sur débogage puis F5 et je recommence, la macro continue est la copie de la table est bon!!
Est-ce que cela est dû au fait qu'il y a des champs nul/vide dans la table Access?
Existe-il une solution?
Voici 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 'Déclaration variables public Public Cn As ADODB.Connection Public rs As ADODB.Recordset Public strCn As String Public CheminAccess As String Public i As Long 'C'est un compteur pour faire la boucle en f(j) Public j As Long 'C'est un compteur pour lister les table Public k As Integer 'C'est un conteur pour les feuilles Excel Public x As Long 'C'est un compteur pour les trois fichiers Public y As Long 'C'est un compteur pour inserer les ligne Public Table As String 'Nom de la table Access Public CheminF1 As String 'Chemin du fichier mdb V3R7 Public CheminF2 As String 'Chemin du fichier mdb V4R1 Public CheminF3 As String 'Chemin du fichier mdb V4R2 Public Derniere_ligne As Long Public FichierExcel As String Public chemin As String 'Chemin du fichier Excel Public Chemin1 As String 'Chemin du fichier mdb V3R7 Public Chemin2 As String 'Chemin du fichier mdb V4R1 Public Chemin3 As String 'Chemin du fichier mdb V4R2 Public Fichier1 As String 'Fichier mdb V3R7 Public Fichier2 As String 'Fichier mdb V4R1 Public Fichier3 As String 'Fichier mdb V4R2 Public Feuille1 As String 'Feuille pour déclarer la table principale Public Feuille2 As String 'Feuille pour déclarer la table temporaire Public Cel As Range 'Plage de selection de comparaison Public cellule As String 'Contenu de la cellule Public Declare Function GetTickCount& Lib "kernel32" () Sub Import_AccessData() FichierExcel = ActiveWorkbook.Name Workbooks(FichierExcel).Activate Sheets("Feuil1").Select Chemin1 = Range("D8") Chemin2 = Range("D9") Chemin3 = Range("D10") Fichier1 = Range("D13") Fichier2 = Range("D14") Fichier3 = Range("D15") CheminF1 = Chemin1 & "\" & Fichier1 CheminF2 = Chemin2 & "\" & Fichier2 CheminF3 = Chemin3 & "\" & Fichier3 chemin = ActiveWorkbook.Path & "\" & FichierExcel Sheets("Feuil1").Select Cells(Cells.Columns.Count, 1).End(xlUp).Select 'Permet de déterminer la dernière cellule vide de la colonne 1 j = ActiveCell.Row 'permet de récupérer le N° de ligne dans la variable j For i = 8 To j 'Boucle pour récupérer les noms des tables à extraire vers Excel Sheets("Feuil1").Select Table = Range("A" & i) For x = 1 To 3 'Boucle pour récupérer les les tables à extraire vers Excel des 3 fichiers If x = 1 Then CheminAccess = CheminF1 End If If x = 2 Then CheminAccess = CheminF2 End If If x = 3 Then CheminAccess = CheminF3 End If ' Connection à la base Access Set Cn = New ADODB.Connection strCn = "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=" & CheminAccess & ";" Cn.Open strCn ' Ouverture recordset / table ' Objet Recordset représente les enregistrements d'une table Set rs = New ADODB.Recordset rs.Open "SELECT * FROM" & "[" & Table & "]", Cn, adOpenKeyset, adLockOptimistic 'On colle les valeur sur la feuille "Communs" pour faire la base de recherche. FichierExcel = ActiveWorkbook.Name Workbooks(FichierExcel).Activate Sheets("COMMUNS").Select Cells(Cells.Columns.Count, 1).End(xlUp).Select If x <> 1 Then ActiveCell.Offset(1, 0).Select End If Selection.CopyFromRecordset rs ' Fermeture recordset et connection rs.Close Set rs = Nothing Cn.Close Set Cn = Nothing If x = 1 Then Sheets("V3R7").Select End If If x = 2 Then Sheets("V4R1").Select End If If x = 3 Then Sheets("V4R2").Select End If ' Connection à la base Access Set Cn = New ADODB.Connection strCn = "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=" & CheminAccess & ";" Cn.Open strCn ' Ouverture recordset / table ' Objet Recordset représente les enregistrements d'une table Set rs = New ADODB.Recordset rs.Open "SELECT * FROM" & "[" & Table & "]", Cn, adOpenKeyset, adLockOptimistic Workbooks(FichierExcel).Activate Cells(Cells.Columns.Count, 1).End(xlUp).CopyFromRecordset rs ' Fermeture recordset et connection rs.Close Set rs = Nothing Cn.Close Set Cn = Nothing Next x Next i
Merci part avance pour votre aide
Cordialement
Rémy
Partager