Vous ne pouvez pas modifier, ajouter ou supprimer des données dans des tableaux liés à un classeur Excel dans Access
Numéro de la base de connaissances d’origine : 904953
Symptômes
Dans Microsoft Office Access 2007, Microsoft Office Access 2003 ou Microsoft Access 2002, vous ne pouvez pas modifier, ajouter ou supprimer des données dans des tableaux liés à un classeur Microsoft Excel.
En outre, vous pouvez rencontrer ce comportement lorsque l’une des conditions suivantes est remplie :
- Vous créez une requête pour récupérer des données à partir de tables liées à un classeur Excel.
- Vous créez un formulaire qui accède aux données des tableaux liés à un classeur Excel.
- Vous utilisez DAO ou ADO pour mettre à jour par programmation les tables liées à un classeur Excel.
Le message suivant s’affiche lorsque vous exécutez une requête pour mettre à jour les enregistrements dans un classeur Excel lié :
L’opération doit utiliser une requête pouvant être mise à jour
Le message suivant s’affiche lorsque vous utilisez DAO pour mettre à jour par programme les tables liées à un classeur Excel :
Impossible de mettre à jour l’erreur d’exécution « 3027 ». La base de données ou l'objet est en lecture seule.
Lorsque vous essayez de mettre à jour les données liées dans ADO, le message est le même, mais le numéro d’erreur peut ressembler à ce qui suit :
-2147217911 (80040e09)
Lorsque vous exécutez une requête pour insérer des enregistrements dans un classeur Excel, vous recevez le message d’erreur suivant, même si le classeur Excel n’est pas lié à une base de données Access :
L’opération doit utiliser une requête pouvant être mise à jour
Cause
Ce comportement attendu se produit lorsque l’une des conditions suivantes est remplie :
- Vous utilisez Office Access 2007.
- Vous avez installé Microsoft Office 2003 Service Pack 2 (SP2) ou un Service Pack ultérieur ou toute mise à jour Access 2003 publiée après Office 2003 SP2.
- Vous avez installé la mise à jour pour Access 2002 (KB904018) du 18 octobre 2005.
- Vous avez installé une application de runtime Access qui inclut Microsoft Office 2003 Service Pack 2 (SP2) ou un Service Pack ultérieur, toutes les mises à jour Access 2003 publiées après Office 2003 SP2 ou la mise à jour pour Access 2002 (KB904018) datée du 18 octobre 2005 ou ultérieure.
Solution de contournement
Pour contourner ce comportement attendu, utilisez l’une des méthodes suivantes.
Méthode 1 : Utiliser Microsoft Excel
Ouvrez le classeur Excel lié dans Microsoft Excel, puis apportez vos modifications au classeur. Une fois les modifications effectuées, enregistrez-les, puis fermez le classeur.
Méthode 2 : Utiliser Office Access 2007, Access 2003 ou Access 2002
Importez le classeur Excel lié dans Access, puis apportez vos modifications aux données. Une fois les modifications effectuées, exportez les données sous la forme d’un fichier .xls Excel.
Pour exporter le tableau d’Access vers Excel, exécutez le code suivant dans Access.
Public Sub WorkArounds()
On Error GoTo Leave
Dim strSQL, SQL As String
Dim Db As ADODB.Connection
Set Db = New ADODB.Connection
Db.CursorLocation = adUseClient
Db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=<AccessPath>"
'Note: In Office Access 2007, use the following line of code:
'Db.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=<AccessPath>"
SQL = "<MyQuery>"
CopyRecordSetToXL SQL, Db
Db.Close
MsgBox "Access has successfully exported the data to excel file.", vbInformation, "Export Successful."
Exit Sub
Leave:
MsgBox Err.Description, vbCritical, "Error"
Exit Sub
End Sub
Private Sub CopyRecordSetToXL(SQL As String, con As ADODB.Connection)
Dim rs As New ADODB.Recordset
Dim x
Dim i As Integer, y As Integer
Dim xlApp As Excel.Application
Dim xlwbBook As Excel.Workbook, xlwbAddin As Excel.Workbook
Dim xlwsSheet As Excel.Worksheet
Dim rnData As Excel.Range
Dim stFile As String, stAddin As String
Dim rng As Range
stFile = "<ExcelPath>"
'Instantiate a new session with the COM-Object Excel.exe.
Set xlApp = New Excel.Application
Set xlwbBook = xlApp.Workbooks.Open(stFile)
Set xlwsSheet = xlwbBook.Worksheets("<WorkSheets>")
xlwsSheet.Activate
'Getting the first cell to input the data.
xlwsSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
y = xlApp.ActiveCell.Column - 1
xlApp.ActiveCell.Offset(1, -y).Select
x = xlwsSheet.Application.ActiveCell.Cells.Address
'Opening the recordset based on the SQL query and saving the data in the Excel worksheet.
rs.CursorLocation = adUseClient
If rs.State = adStateOpen Then
rs.Close
End If
rs.Open SQL, con
If rs.RecordCount > 0 Then
rs.MoveFirst
x = Replace(x, "$", "")
y = Mid(x, 2)
Set rng = xlwsSheet.Range(x)
xlwsSheet.Range(x).CopyFromRecordset rs
End If
xlwbBook.Close True
xlApp.Quit
Set xlwsSheet = Nothing
Set xlwbBook = Nothing
Set xlApp = Nothing
End Sub
Remarque
Dans cet exemple de code, remplacez les espaces réservés suivants :
<AccessPath>
<ExcelPath>
<MyQuery>
<MyQuery est un> espace réservé pour la requête que vous exécutez sur les tables de la base de données Access. Le résultat de la requête est exporté vers le classeur Excel.
<Feuilles>
<Feuilles> de travail est un espace réservé pour la feuille de calcul excel vers laquelle vous souhaitez exporter le résultat. Pour exécuter cet exemple de code, appuyez sur Ctrl+G pour ouvrir la fenêtre Exécution , tapez WorkArounds, puis appuyez sur Entrée.
Informations supplémentaires
En raison de problèmes juridiques, Microsoft a désactivé les fonctionnalités d’Access 2003 et d’Access 2002 qui permettent aux utilisateurs de modifier les données des tableaux liés qui pointent vers une plage dans un classeur Excel. Toutefois, lorsque vous apportez des modifications directement dans le classeur Excel, les modifications apparaissent dans le tableau lié dans Access.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour