Vous ne pouvez pas modifier, ajouter ni supprimer des données dans des tables liées à un classeur Excel dans Office Access 2007, Office Access 2003 ou Access 2002

Traductions disponibles Traductions disponibles
Numéro d'article: 904953 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Dans Microsoft Office Access 2007, Microsoft Office Access 2003 ou Microsoft Access 2002, vous ne pouvez pas modifier, ajouter ni supprimer des données dans des tables liées à un classeur Microsoft Excel.

De plus, vous pouvez rencontrer ce problème lorsque l'une des conditions suivantes est remplie :
  • Vous créez une requête pour récupérer des données de tables liées à un classeur Excel.
  • Vous créez un formulaire qui accède à des données de tables liées à un classeur Excel.
  • Vous utilisez DAO ou ADO pour mettre à jour par programmation des tables liées à un classeur Excel.
Vous recevez le message d'erreur suivant lorsque vous exécutez une requête pour mettre à jour des enregistrements dans un classeur Excel lié :
L'opération doit utiliser une requête qui peut être mise à jour.
Vous recevez le message suivant lorsque vous utilisez DAO pour mettre à jour par programmation des tables liées à un classeur Excel :
Erreur d'exécution '3027' Mise à jour impossible. 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 être semblable au suivant :
-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 qui peut être mise à jour.

Cause

Ce comportement est normal et peut se produire lorsque l'une des conditions suivantes est remplie :
  • Vous utilisez Office Access 2007.
  • Vous avez installé Microsoft Office 2003 Service Pack 2 (SP2) ou une mise à jour pour Access 2003 publiée après Office 2003 SP2.

    Pour plus d'informations sur Microsoft Office 2003 Service Pack 2, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
    887616 Description de Microsoft Office 2003 Service Pack 2
  • Vous avez installé la mise à jour pour Access 2002 (KB904018) datée du 18 octobre 2005.

    Pour plus d'informations sur la mise à jour pour Access 2002 (KB904018), cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
    904018 Description de la mise à jour pour Access 2002 datée du 18 octobre 2005
  • Vous avez installé une application d'exécution Access qui inclut Microsoft Office 2003 Service Pack 2 (SP2), une mise à jour pour Access 2003 publiée après Office 2003 SP2 ou la mise à jour pour Access 2002 (KB904018) datée du 18 octobre 2005 ou version ultérieure.
    Pour plus d'informations sur la façon d'inclure des fichiers de mise à jour Office dans une application d'exécution Access, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
    916176 L'Assistant utilise les fichiers d'exécution inclus dans la version commerciale d'Access lorsque vous créez un package d'installation pour une application dans Access 2003 ou Access 2002

Contournement

Pour contourner ce comportement normal, appliquez l'une des méthodes ci-dessous.

Méthode 1 : Utilisation de Microsoft Excel

Ouvrez le classeur Excel lié dans Microsoft Excel et apportez-y les modifications souhaitées. Lorsque vous avez fini d'apporter des modifications, enregistrez-les, puis fermez le classeur.

Méthode 2 : Utilisation d'Office Access 2007, Access 2003 ou Access 2002

Importez le classeur Excel lié dans Microsoft Access, puis apportez les modifications souhaitées aux données. Lorsque vous avez fini d'apporter vos modifications, exportez vos données en tant que fichier Excel .xls.

Pour exporter la table d'Access à Excel, exécutez le code ci-dessous 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> correspond à la requête exécutée sur les tables dans la base de données Access. Le résultat de la requête est exporté vers le classeur Excel.
  • <WorkSheets>
    <WorkSheets> représente 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.

Plus d'informations

Pour des raisons juridiques, Microsoft a désactivé la fonctionnalité d'Access 2003 et Access 2002 qui permet aux utilisateurs de modifier les données de tables liées pointant vers une plage d'un classeur Excel. Toutefois, lorsque vous apportez directement des modifications dans le classeur Excel, celles-ci apparaissent dans la table liée dans Access.

Propriétés

Numéro d'article: 904953 - Dernière mise à jour: vendredi 23 mars 2007 - Version: 6.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002
  • Microsoft Excel 2000 Standard
  • Microsoft Access 2002 Runtime
  • Microsoft Office Access 2003 Runtime
Mots-clés : 
kbexpertiseadvanced kbdatabase kbtshoot kbprb KB904953
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com