Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Symptômes
Lorsque vous modifiez une feuille de calcul Excel via ADO et ODBC, vous pouvez recevoir le message d’erreur suivant si vous utilisez un objet Ado DataControl :
[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.
La cause
Ce problème se produit si vous essayez de modifier une feuille de calcul enregistrée ou ouverte en tant que ReadOnly.
Remarque
ReadOnly est le paramètre par défaut d’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 :
Vérifiez 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 :
- Ouvrez le Panneau de configuration, puis sélectionnez Administrateur de source de données ODBC.
- Double-cliquez sur votre DSN.
- Dans la boîte de dialogue Configuration d’ODBC Microsoft Excel, sélectionnez Options.
- Vérifiez que la case à cocher ReadOnly est désactivée.
Si vous utilisez une connexion sans DSN, veillez à inclure l’option « ReadOnly=0 » dans la chaîne de connexion. Par exemple:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Statut
Ce comportement est voulu.
Plus d’informations
Étapes de reproduction du comportement
Créez un projet EXE standard en Visual Basic.
Dans le menu Projet, sélectionnez Références, puis ajoutez une référence à la bibliothèque Microsoft ActiveX Data Objects.
Ajouter un bouton Commande à Form1.
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
Enregistrez l’application.
Créez une feuille de calcul Excel, puis enregistrez la feuille de calcul en tant que Test.xls.
Dans le menu Insertion, pointez sur Nom, puis sélectionnez Définir.
Créez un tableau dans la feuille de calcul Excel, puis nommez le tableau TB1.
Enregistrez la feuille de calcul dans le même dossier que l’application Visual Basic.
Appuyez sur F5 pour exécuter l’application.
références
Pour plus d’informations, consultez Office Space : conseils et astuces pour l’écriture de scripts d’applications Microsoft Office.