Erreur - Récupérer table Access dans Excel
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!!:cfou:
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:
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 aide8-):P
Cordialement
Rémy
Erreur - Récupérer table Access dans Excel
Bonjour Menhir,
Merci pour la réponse, j'ai remplacé les lignes de code et il y a toujours la même erreur.
Oui je vais essayer de virer les selection, faut-il que je les remplace par des Activate et ActiveCell?
Par exemple si je remplace un
Code:
Sheets("COMMUNS").Select
par
Code:
Sheets("COMMUNS").Activate
Est-ce bien?
Je ne connais pas Access... En cherchant j'ai vu qu'il existe une fonction Nz(), est-ce que tu l'as connais?
Erreur - Récupérer table Access dans Excel
Merci pour les explications!
Je ne suis pas développeur... Je suis débutant en VBA mais j'aime travailler dans "Les règles de l'art"!!:D
Je vais reprendre mon code pour qu'il soit bien fait!!
Ok je vais essais d’exécuter mon code avec une nouvelle base Access pour voir si j'ai toujours l'erreur
Il me semble que dans la table Access, il y a des valeur au format date et binaire en plus du texte, C'est peut être ça..
[XL-2016] Erreur - Récupérer table Access dans Excel
Bonjour,
Alors est ce que quelqu'un aurait une réponse??
Merci par avance!