PRB : « L’opération doit utiliser une requête modifiable » Lorsque vous accédez à Excel via ODBC

Symptômes

Lorsque vous modifiez une feuille de calcul Excel via ADO et ODBC, le message d’erreur suivant peut s’afficher si vous utilisez un objet DataControl ADO :

[Microsoft][ODBC Excel Driver] Operation must use an updateable query.

Si vous utilisez un objet Recordset généré avec du code ADO, vous pouvez recevoir le message d’erreur suivant lorsque vous modifiez une feuille de calcul Excel via ADO et ODBC :

Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.

Cause

Ce problème se produit si vous essayez de modifier une feuille de calcul enregistrée ou ouverte en lecture seule.

Remarque

ReadOnly est le paramètre par défaut pour une connexion ODBC à Excel, avec ou sans nom de source de données (DSN). Par conséquent, l’utilisateur doit toujours modifier ce paramètre pour modifier les données.

Résolution

Pour résoudre ce problème, utilisez les méthodes suivantes :

  • Assurez-vous que la propriété LockType de l’objet Recordset n’est pas définie sur ReadOnly.

  • Assurez-vous que le fichier que vous essayez d’ouvrir n’est pas enregistré en tant que ReadOnly.

  • Si vous vous connectez via un DSN, procédez comme suit :

    1. Ouvrez Panneau de configuration, puis cliquez sur Administrateur de source de données ODBC.
    2. Double-cliquez sur votre DSN.
    3. Dans la boîte de dialogue Configuration de Microsoft Excel ODBC, cliquez sur Options.
    4. Assurez-vous que la zone ReadOnly case activée n’est pas sélectionnée.
  • Si vous utilisez une connexion sans DSN, veillez à inclure l’option « ReadOnly=0 » dans le chaîne de connexion. Par exemple :

    cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
    

Statut

Ce comportement est inhérent au produit.

Informations supplémentaires

Étapes pour reproduire le comportement

  1. Créez un projet EXE Standard en Visual Basic.

  2. Dans le menu Projet, cliquez sur Références, puis ajoutez une référence à la bibliothèque Microsoft ActiveX Data Objects.

  3. Ajouter un bouton Commande à Form1.

  4. Ajoutez le code suivant à Form1 :

    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    
    Private Sub Form_Load()
      Command1.Caption = "Edit"
    End Sub
    
    Private Sub Command1_Click()
      Dim DocPath As String
    
      DocPath = App.Path & "\Test.xls"
    
      Set cn = New Connection
      Set rs = New Recordset
    
      cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1"
      rs.LockType = adLockOptimistic
      rs.Open "TB1", cn
      rs.AddNew
      rs.Fields(1).Value = "New Value"
      rs.Update
    
      rs.Close
      cn.Close
      Set rs = Nothing
      Set cn = Nothing
    End Sub  
    
  5. Enregistrez l’application.

  6. Créez une feuille de calcul Excel, puis enregistrez-la en tant que Test.xls.

  7. Dans le menu Insertion, pointez sur Nom, puis cliquez sur Définir.

  8. Créez un tableau dans la feuille de calcul Excel, puis nommez le tableau TB1.

  9. Enregistrez la feuille de calcul dans le même dossier que l’application Visual Basic.

  10. Appuyez sur F5 pour exécuter l'application.

References

Pour plus d’informations, consultez l’article suivant :

Espace office : conseils et astuces pour l’écriture de scripts d’applications Microsoft Office