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