Comment faire pour utiliser ADOX avec des données Excel à partir de Visual Basic ou de VBA

Traductions disponibles Traductions disponibles
Numéro d'article: 303814 - Voir les produits auxquels s'applique cet article
Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Agrandir tout | Réduire tout

Sommaire

Résumé

Les objets ADOX (ActiveX Data Objects Extensions for Data Definition Language and Security) proposent aux développeurs d'objets ADO (ActiveX Data Objects) les fonctions de manipulation par le biais d'un programme de bases de données, de tables, de champs et d'autres objets de bases de données présentes dans les DAO (Data Access Objects). Depuis le lancement du fournisseur OLE DB Microsoft pour Jet version 4.0, qui prend en charge les pilotes ISAM auxquels le moteur Jet fait appel avec les bases de données de bureau autres que Microsoft Access, les développeurs d'objets ADO peuvent utiliser à la fois ADO et ADOX avec les classeurs et les feuilles de calcul Microsoft Excel.

Cependant, une feuille de calcul Excel n'étant pas une base de données ordinaire, les objets ADO rencontrent certaines limites lorsqu'ils sont utilisés avec Excel. En particulier, nombre de méthodes ADOX ne fonctionnent pas ou donnent des résultats inattendus lorsqu'elles sont utilisées avec Excel. Cet article présente certaines limites des objets ADOX et d'Excel. Pour plus d'informations sur l'utilisation d'ADO avec Excel, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
257819 COMMENT FAIRE : Utiliser ADO avec des données Excel à partir de Visual Basic ou de VBA
Cet article est composé de deux sections :

REMARQUE : Les tests correspondant à cet article ont été effectués sur Microsoft Windows 2000 Server Service Pack 2 (SP2) avec Microsoft Data Access Components (MDAC) 2.6 SP1, Microsoft Visual Basic 6 SP5 et Microsoft Excel 2002 (XP). Les utilisateurs observeront peut-être d'autres comportements avec des versions différentes de Windows, MDAC, Visual Basic ou Excel. Cet article ne présente pas nécessairement ces différences.

Plus d'informations

Catalogues ADOX

Dans le modèle objet ADOX, l'objet Catalog représente une base de données ou, dans le cas d'Excel, un classeur.
  • Vous pouvez utiliser un objet Connection ADO ou une chaîne de connexion pour créer ou ouvrir un objet Catalog. L'exemple de code suivant montre comment ouvrir Book1.xls en tant que Catalog ADOX :
    Dim cat As ADOX.Catalog
    Set cat = New ADOX.Catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\book1.xls;Extended Properties=Excel 8.0"
    					
  • L'objet Catalog possède une méthode Create mais pas de méthode Delete.

Création d'un catalogue

Vous ne pouvez pas faire appel à la méthode Create de l'objet Catalog ADOX pour créer un classeur Excel. Si vous tentez cette opération, le message d'erreur suivant apparaît :
L'opération n'est pas prise en charge pour ce type d'objet.
Vous pouvez toutefois créer un classeur Excel en précisant un nouveau nom de classeur pour votre catalogue et en ajoutant au moins une table au nouveau catalogue, à l'aide des techniques présentées ci-dessous. Cette méthode permet de créer un classeur contenant uniquement les feuilles de calcul que vous avez créées en tant que tables ADOX ; en d'autres termes, le nombre de feuilles vides par défaut spécifié pour un nouveau classeur Excel dans la boîte de dialogue Options ne sera pas ajouté.

Tables ADOX

L'objet Table ADOX correspond à l'un des objets Excel (c'est-à-dire, une feuille de calcul ou une plage) pouvant faire office de conteneur de données.

Création d'une table

Vous pouvez utiliser ADOX pour créer des tables dans Excel. Puisque vous ne pouvez pas créer une table sans créer également des colonnes, l'exemple de code se trouve dans la section intitulée "Colonnes ADOX".
  • La création d'une table ADOX donne à la fois une nouvelle feuille de calcul et une nouvelle plage dans celle-ci, qui porte le nom spécifié. Cette nouvelle plage nommée n'englobe que les en-têtes de colonnes. Par exemple, si vous créez une table (feuille de calcul) appelée MaTable, comptant deux colonnes, une plage nommée MaTable, définie comme MaTable!$A$1:$B$1, est aussi créée.
  • Vous pouvez choisir un nom de table contenant un espace. Cependant, ADOX remplace les espaces par des traits de soulignement dans les noms de feuilles de calcul et de plages que vous créez.
  • La nouvelle feuille de calcul est créée en tant que dernière feuille du classeur, après le nombre de feuilles vides par défaut précisé dans les options Excel de nouveau classeur.
  • Si vous tentez de créer une table alors que le classeur est ouvert dans Excel, vous obtiendrez le message d'erreur suivant :
    Erreur non spécifiée.
  • Si vous tentez de créer une table sans colonnes définies, la création semble aboutir, mais en fait rien n'est créé.
  • Si vous tentez de changer le nom d'une table existante, vous obtiendrez le message d'erreur suivant :
    L'opération n'est pas prise en charge pour ce type d'objet.

Suppression d'une table

Vous ne pouvez pas utiliser ADOX pour supprimer une table (feuille de calcul) ou une plage nommée dans Excel, qu'elle ait été créée ou non à l'aide d'ADOX.
  • Si vous tentez de supprimer la feuille de calcul (MaTable$), l'opération semble se dérouler sans erreur, mais la feuille de calcul reste dans le classeur. Vous pouvez appeler la méthode Delete plusieurs fois sans générer d'erreur, mais elle n'aura aucun effet.
  • Si vous tentez de supprimer la plage (MaTable), l'opération semble se dérouler sans erreur, mais la plage reste dans le classeur. Cependant, si vous tentez une fois de plus de supprimer la plage, vous obtiendrez l'erreur 3265 :
    Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé.
  • Si vous tentez de supprimer une plage nommée, sa définition reste intacte, mais toutes les données de la plage sont supprimées.

Colonnes ADOX

Les colonnes ADOX correspondent aux colonnes ou champs d'une base de données ; elles correspondent exactement aux colonnes d'une feuille de calcul Excel.

Types de données ADO utilisés avec Excel

ADO reconnaît six types de données dans une source de données Excel auxquelles vous pouvez faire appel pour créer des colonnes :

  • adDouble, type 5
  • adDate, type 7
  • adCurrency, type 6
  • adBoolean, type 11
  • adVarWChar, type 202
  • adLongVarWChar ("memo"), type 203

Colonnes en général

  • Vous pouvez ajouter des colonnes supplémentaires à une table déjà créée, si celle-ci ne contient pas de rangées de données.
  • Vous pouvez préciser des noms de colonnes contenant des espaces.
  • ADOX crée toujours des en-têtes de colonnes précédés d'un guillemet simple ('), par exemple, 'F1, 'Col1, 'Col2. Cela ne semble toutefois pas poser de problèmes plus tard, car le nom est extrait sans le guillemet.

Création de colonnes lors de la création d'une table

La création de colonnes donne de meilleurs résultats lorsqu'elle se fait au même moment que la création d'une table à l'aide d'ADOX.

Le code suivant crée une table (feuille de calcul) contenant deux colonnes (une numérique et une de texte) :
    Dim cat As ADOX.Catalog
    Dim tbl As ADOX.Table
    Dim col As ADOX.Column
    Set cat = New ADOX.Catalog
    cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
	"Data Source=" & App.Path & "\book1.xls;Extended Properties=Excel 8.0"
    Set tbl = New ADOX.Table
    tbl.Name = "TestTable"
    Set col = New ADOX.Column
    With col
        .Name = "Col1"
        .Type = adDouble
    End With
    tbl.Columns.Append col
    Set col = Nothing
    Set col = New ADOX.Column
    With col
        .Name = "Col2"
        .Type = adVarWChar
    End With
    tbl.Columns.Append col
    cat.Tables.Append tbl
				

Création de colonnes dans une feuille de calcul existante

L'ajout de colonnes à une feuille de calcul pré-existante vide donne des résultats étranges. Lorsque la première colonne ADOX est ajoutée à la collection Colonne de la table, ADOX crée un en-tête de colonne nommé F1 dans la colonne A de la feuille de calcul, puis le nouvel en-tête de colonne ADOX dans la colonne B. Ainsi, le code ADOX qui ajoute deux nouvelles colonnes donne en fait trois en-têtes de colonnes. Si vous tentez de supprimer cette première colonne non voulue de la collection Colonnes avant d'ajouter la première colonne ADOX, l'opération semble aboutir, mais la colonne non voulue est tout de même créée.

Suppression de colonnes

Vous ne pouvez pas supprimer de colonnes d'une table ADOX dans Excel.
  • Si la colonne ne contient aucune donnée, l'opération semble aboutir, mais la colonne et son en-tête restent intacts.
  • Si la colonne contient des données, l'opération de suppression échoue et le message d'erreur suivant s'affiche :
    Opération non valide.

Modification du type de données d'une colonne existante

Une fois qu'une colonne a été ajoutée à une table, si vous tentez de définir sa propriété .Type comme étant un type de données différent, vous obtiendrez le message d'erreur suivant :
L'opération demandée n'est pas autorisée dans ce contexte.

Ajout de données à des tables et colonnes Excel

Lorsque vous testez du code ADO avec Excel dans l'environnement de conception Visual Basic, la première fois que vous effectuez une opération de jeu d'enregistrements, vous pouvez recevoir le message d'erreur suivant :
L'ordre de tri sélectionné n'est pas géré par le système d'exploitation.
Vous pouvez ignorer ce message d'erreur ; cette erreur ne survient pas après la compilation de l'application. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
246167 PROBLÈME : Erreur de l'ordre de tri lors de l'ouverture d'un jeu d'enregistrements ADODB pour la première fois sur un fichier XLS Excel

Ajout de données à des colonnes Excel créées par ADOX

Lorsque vous faites appel à ADO pour insérer ou modifier des données dans les tables et colonnes que vous avez créées dans Excel à l'aide d'ADOX, ADO respecte les types de données que vous avez précisés pour ces colonnes, même si l'endroit où ces informations sont stockées n'est pas évident.
  • Toutes les valeurs de chaînes de texte sont stockées précédées d'un guillemet simple. Cela ne semble toutefois pas poser de problèmes plus tard, car la valeur est extraite sans le guillemet.
  • Si vous tentez d'insérer une chaîne de texte dans une colonne définie comme étant numérique, ou un nombre dans une colonne de texte, vous obtiendrez l'erreur 80040e21 :
    Une opération en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état.

Ajout de données à des colonnes Excel ordinaires

Lorsque vous utilisez ADO pour insérer ou modifier des données dans des feuilles de calcul ou des plages Excel qui n'ont pas été créées ou modifiées à l'aide d'ADOX, il n'existe aucune restriction quant au type de données que vous pouvez insérer.
  • Les chaînes de texte sont stockées sans guillemet simple.
  • Les nombres s'affichent alignés à gauche. Dans Excel 2002, les nombres sont signalés par la balise active signifiant "Nombres stockés en tant que texte". Cela peut entraîner un problème plus tard, lorsque vous utiliserez les données, surtout si celles-ci sont stockées dans Excel à des fins d'analyse numérique.

Utilisation des instructions SQL CREATE, ALTER et DROP

Vous pouvez exécuter des instructions du langage de définition des données (Data Definition Language, DDL) Microsoft SQL telles que CREATE, ALTER et DROP, sur des objets de base de données Excel, grâce à un objet Connection ADO pour obtenir les mêmes résultats que les méthodes ADOX correspondantes décrites ci-dessus.

Conclusion

  • ADOX fonctionne mieux avec Excel lorsque les colonnes d'une table sont créées en même temps que la table.
  • ADO fonctionne mieux avec les données Excel si celles-ci se trouvent dans une feuille de calcul créée à l'aide d'ADOX.

Propriétés

Numéro d'article: 303814 - Dernière mise à jour: lundi 6 décembre 2004 - Version: 2.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Mots-clés : 
kbhowto kbiisam kbdatabase KB303814
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