Select the product you need help with
Utilisation d'ADO avec des données Excel à partir de Visual Basic ou de VBANuméro d'article: 257819 - Voir les produits auxquels s'applique cet article SommaireRésumé Cet article décrit l'utilisation des objets ADO (ActiveX Data Objects) avec une feuille de calcul Microsoft Excel comme source de données. Il attire également l'attention sur les problèmes de syntaxe et les limitations propres à Excel. Les technologies OLAP ou de tableaux croisés dynamiques, de même que d'autres utilisations spécialisées des données Excel, ne sont pas abordées dans cet article. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft : 303814
(http://support.microsoft.com/kb/303814/FR/
)
Comment faire pour utiliser ADOX avec des données Excel à partir de Visual Basic ou de VBAPlus d'informationsINTRODUCTIONLes lignes et les colonnes d'une feuille de calcul Microsoft Excel ressemblent beaucoup à celles d'une table de base de données. Tant que les utilisateurs gardent à l'esprit que Microsoft Excel n'est pas un système de gestion de bases de données relationnelles et que ce simple fait impose certaines limitations, ils peuvent mettre à profit les fonctionnalités et les outils d'Excel pour stocker et analyser des données.Les objets Microsoft ADO permettent de travailler avec un classeur Excel comme avec une base de données. Cet article décrit cette utilisation de Microsoft Excel dans les sections suivantes :
Connexion à Excel à l'aide d'ADOADO permet de se connecter à un fichier de données Excel à l'aide de l'un des deux fournisseurs OLE DB compris dans MDAC :
Utilisation du fournisseur OLE DB Microsoft JetLe fournisseur Jet requiert uniquement deux informations pour se connecter à une source de données Excel : le chemin, y compris le nom de fichier, et la version du fichier Excel.Fournisseur Jet utilisant une chaîne de connexion Pilote ISAM introuvable. Fournisseur Jet utilisant la boîte de dialogue Propriétés des liaisons de données Si vous utilisez le contrôle de données ou l'environnement de données ADO dans votre application, la boîte de dialogue Propriétés des liaisons de données est affichée pour recueillir les paramètres de connexion nécessaires.
En-têtes de colonnes : Par défaut, le programme suppose que la première ligne de votre source de données Excel contient des en-têtes de colonnes pouvant être utilisés comme noms de champs. Si ce n'est pas le cas, vous devez désactiver ce paramètre ; sinon, votre première ligne de données « disparaîtra » pour être utilisée comme noms de champs. Ceci est accompli en ajoutant le paramètre facultatif HDR= aux propriétés Extended Properties de la chaîne de connexion. Le paramètre par défaut, qu'il n'est pas nécessaire de spécifier, est HDR=Yes. Si vous n'avez pas d'en-têtes de colonnes, vous devez spécifier HDR=No ; le fournisseur attribue à vos champs les noms F1, F2, etc. Étant donné que la chaîne Extended Properties contient désormais plusieurs valeurs, elle doit être entourée de guillemets, avec en plus une seconde paire de guillemets indiquant à Visual Basic que la première paire de guillemets doit être traitée comme une valeur littérale, comme dans l'exemple ci-dessous. (Des espaces supplémentaires ont été ajoutés pour des raisons de clarté visuelle.) Utilisation du fournisseur Microsoft OLE DB pour pilotes ODBCLe fournisseur pour pilotes ODBC (auquel cet article se réfère en tant que « fournisseur ODBC » pour des raisons de concision) ne requiert, lui aussi, que deux (2) informations pour se connecter à une source de données Excel : le nom du pilote et le chemin et nom de fichier du classeur.IMPORTANT : par défaut, la connexion ODBC à Excel est en lecture seule. Votre paramètre de propriété LockType du jeu d'enregistrements ADO ne remplace pas ce paramètre au niveau de la connexion. Vous devez attribuer à ReadOnly la valeur False dans votre chaîne de connexion ou dans votre configuration DSN si vous souhaitez modifier vos données. Sinon, le message d'erreur suivant s'affiche : L'opération doit utiliser une requête qui peut être mise à jour. Si vous utilisez le contrôle de données ou l'environnement de données ADO dans votre application, la boîte de dialogue Propriétés des liaisons de données est affichée pour recueillir les paramètres de connexion nécessaires.
En-têtes de colonnes : Par défaut, le programme suppose que la première ligne de votre source de données Excel contient des en-têtes de colonnes pouvant être utilisés comme noms de champs. Si ce n'est pas le cas, vous devez désactiver ce paramètre ; sinon, votre première ligne de données « disparaîtra » pour être utilisée comme noms de champs. Ceci est accompli en ajoutant le paramètre facultatif FirstRowHasNames= à la chaîne de connexion. Le paramètre par défaut, qu'il n'est pas nécessaire de spécifier, est FirstRowHasNames=1, où 1 = True. Si vous n'avez pas d'en-têtes de colonnes, vous devez spécifier FirstRowHasNames=0, où 0 = False ; le pilote attribue à vos champs les noms F1, F2, etc. Cette option n'est pas disponible dans la boîte de dialogue de configuration DSN. Toutefois, en raison d'un bogue du pilote ODBC, le fait de spécifier le paramètre FirstRowHasNames n'a aucun effet à l'heure actuelle. En d'autres termes, le pilote ODBC Excel (MDAC 2.1 et version ultérieure) traite toujours la première ligne de la source de données spécifiée en tant que noms de champs. Pour plus d'informations sur ce bogue, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft. 288343 Lignes à balayer : Contrairement à une base de données relationnelle, Excel ne donne pas à ADO des informations de schéma détaillées sur les données qu'il contient. Par conséquent, le pilote doit analyser (balayer) au moins quelques lignes des données existantes pour tenter de déterminer le type de données de chaque colonne. La valeur par défaut du paramètre "Lignes à balayer" est de huit (8) lignes. Vous pouvez spécifier une valeur entière de une (1) à seize (16) lignes ou spécifier zéro (0) pour analyser toutes les lignes existantes. Ceci est accompli en ajoutant le paramètre facultatif MaxScanRows= à la chaîne de connexion ou en modifiant le paramètre Lignes à balayer de la boîte de dialogue de configuration DSN.
(http://support.microsoft.com/kb/288343/FR/
)
BOGUE : Le pilote ODBC Excel ignore les paramètres FirstRowHasNames et HeaderToutefois, en raison d'un bogue du pilote ODBC, le fait de spécifier le paramètre Lignes à balayer (MaxScanRows) n'a aucun effet à l'heure actuelle. En d'autres termes, le pilote ODBC Excel (MDAC 2.1 et version ultérieure) analyse toujours les 8 premières lignes de la source de données spécifiée pour déterminer le type de données de chaque colonne. Pour plus d'informations sur le bogue du paramètre Lignes à balayer, y compris une solution de contournement simple, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft. 189897 Autres paramètres : Si vous construisez votre chaîne de connexion à l'aide de la boîte de dialogue Propriétés des liaisons de données, vous observerez peut-être que certains autres paramètres non indispensables des propriétés Extended Properties ont été ajoutés à la chaîne de connexion, notamment :
(http://support.microsoft.com/kb/189897/FR/
)
XL97 : Les données sont tronquées en 255 caractères avec le pilote ODBC ExcelDans l'environnement de création Visual Basic avec certaines versions de MDAC, le message d'erreur suivant peut s'afficher la première fois que votre programme se connecte à une source de données Excel au moment de la conception :
L'ordre de tri sélectionné n'est pas géré par le système d'exploitation. 246167
(http://support.microsoft.com/kb/246167/FR/
)
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 ExcelConsidérations pertinentes pour les deux fournisseurs OLE DBAvertissement concernant les types de données mixtesComme mentionné plus haut, ADO doit tenter de déterminer le type de données pour chaque colonne de votre plage ou feuille de calcul Excel. (Les paramètres de mise en forme des cellules Excel n'ont aucune incidence sur ce processus.) Un problème grave peut se produire si une colonne contient à la fois des valeurs numériques et du texte. Les fournisseurs Jet et ODBC renvoient tous deux les données du type majoritaire dans la colonne, mais renvoient des valeurs NULL (vides) pour le type de données minoritaire. Si les deux types sont représentés en proportions égales dans la colonne, le fournisseur choisit le type numérique. Par exemple :
Pour contourner ce problème dans le cas de données en lecture seule, activez l'option Mode d'importation à l'aide du paramètre "IMEX=1" dans la section Extended Properties de la chaîne de connexion. Ceci applique le paramètre de Registre ImportMixedTypes=Text. Toutefois, notez que les mises à jour peuvent donner des résultats inattendus dans ce mode. Pour plus d'informations concernant ce paramétrage, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft. 194124 Impossible d'ouvrir un classeur protégé par mot de passe
(http://support.microsoft.com/kb/194124/FR/
)
PROBLÈME : Valeurs Excel retournées comme NULL en utilisant DAO OpenRecordsetSi le classeur Excel est protégé par un mot de passe, vous ne pouvez pas l'ouvrir pour accéder aux données, même en entrant le mot de passe correct avec vos paramètres de connexion, à moins que le fichier ne soit déjà ouvert dans l'application Microsoft Excel. Si vous tentez de l'ouvrir, le message d'erreur suivant s'affiche : Impossible de déchiffrer le fichier. 211378
(http://support.microsoft.com/kb/211378/FR/
)
XL2000 : Erreur « Impossible de décoder le fichier » avec un fichier protégé par un mot de passeRécupération et modification des données Excel à l'aide d'ADOCette section aborde deux aspects du travail avec des données Excel :
Sélection des donnéesVous disposez de plusieurs méthodes pour sélectionner des données. Vous pouvez :
Sélection de données Excel à l'aide de codeVos données Excel peuvent être contenues dans l'un des éléments suivants de votre classeur :
Pour spécifier une feuille de calcul comme source d'enregistrements, utilisez le nom de la feuille de calcul suivi du symbole $ et entouré par des crochets. Par exemple : Si vous oubliez d'ajouter le symbole $ et les crochets, ou juste le symbole $, le message d'erreur suivant s'affiche : ... Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet spécifié Erreur de syntaxe dans la clause FROM. Erreur de syntaxe dans la requête. La clause de la requête est incomplète.
Pour spécifier une plage de cellules nommée comme source d'enregistrements, utilisez simplement le nom défini de la plage. Par exemple : Pour spécifier une plage de cellules non nommée comme source d'enregistrements, ajoutez la notation de ligne/colonne Excel standard à la fin du nom de la feuille entre crochets. Par exemple : Avertissement concernant la spécification des plages : Lorsque vous spécifiez une feuille de calcul comme source d'enregistrements, le fournisseur ajoute les nouveaux enregistrements au-dessous des enregistrements existants de la feuille de calcul, selon l'espace disponible. Lorsque vous spécifiez une plage (nommée ou non), le fournisseur Jet ajoute également les nouveaux enregistrements au-dessous des enregistrements existants de la plage, selon l'espace disponible. Toutefois, si vous effectuez une nouvelle requête sur la plage d'origine, le jeu d'enregistrements obtenu n'inclut pas les enregistrements que vous venez d'ajouter en dehors de la plage. Dans les versions de MDAC antérieures à 2.5, lorsque vous spécifiez une plage nommée, vous ne pouvez pas ajouter de nouveaux enregistrements au-delà des limites définies pour la plage ; sinon, le message d'erreur suivant s'affiche : Impossible d'agrandir la plage nommée. Sélection de données Excel avec le contrôle de données ADOAprès avoir spécifié les paramètres de connexion de votre source de données Excel sous l'onglet Général de la boîte de dialogue Propriétés ADODC, cliquez sur l'onglet Recordsource. Si vous choisissez adCmdText comme type de commande, vous pouvez entrer une requête SELECT dans la boîte de dialogue Texte de commande à l'aide de la syntaxe décrite plus haut. Si vous choisissez adCmdTable comme type de commande et que vous utilisez le fournisseur Jet, la liste déroulante affiche à la fois les plages nommées et les noms des feuilles de calcul disponibles dans le classeur sélectionné, en commençant par les plages nommées.Cette boîte de dialogue ajoute correctement le symbole $ aux noms des feuilles de calcul, mais n'ajoute pas les crochets requis. Par conséquent, si vous sélectionnez simplement un nom de feuille de calcul et cliquez sur OK, le message d'erreur suivant s'affiche par la suite : Erreur de syntaxe dans la clause FROM. Sélection de données Excel à l'aide de commandes de l'environnement de donnéesAprès avoir configuré la connexion d'environnement de données pour votre source de données Excel, créez un nouvel objet Command. Si vous choisissez Instruction SQL comme Source de données, vous pouvez entrer une requête dans la zone de texte à l'aide de la syntaxe décrite précédemment. Si vous choisissez Objet de base de données comme Source de données, que vous sélectionnez Table dans la première liste déroulante et que vous utilisez le fournisseur Jet, la liste déroulante affiche à la fois les plages nommées et les noms des feuilles de calcul disponibles dans le classeur sélectionné, en commençant par les plages nommées. (Si vous choisissez un nom de feuille de calcul dans cette liste, il n'est pas nécessaire d'ajouter manuellement des crochets autour du nom de la feuille de calcul comme pour le contrôle de données ADO.) Si vous utilisez le fournisseur ODBC, seules les plages nommées sont répertoriées dans cette liste déroulante. Toutefois, vous pouvez entrer manuellement un nom de feuille de calcul.Modification des données Excel : Editer, Ajouter et SupprimerEditerVous pouvez modifier des données Excel à l'aide des méthodes ADO courantes. Les champs de jeux d'enregistrements qui correspondent aux cellules dans la feuille de calcul Excel contenant des formules Excel (commençant par "=") sont en lecture seule et ne peuvent pas être modifiés. N'oubliez pas que par défaut, la connexion ODBC à Excel est en lecture seule, sauf spécification contraire dans vos paramètres de connexion. Pour plus d'informations, reportez-vous à la section "Utilisation du fournisseur Microsoft OLE DB pour pilotes ODBC" plus haut dans cet article. Ajouter Vous pouvez ajouter des enregistrements à votre source d'enregistrements Excel, selon l'espace existant. Toutefois, si vous ajoutez de nouveaux enregistrements en dehors de la plage spécifiée à l'origine, ils ne seront pas visibles si vous effectuez une nouvelle requête sur la plage d'origine. Pour plus d'informations, reportez-vous à la section "Avertissement concernant la spécification des plages". Dans certaines circonstances, lorsque vous utilisez les méthodes AddNew et Update de l'objet ADO Recordset pour insérer de nouvelles lignes de données dans une table Excel, ADO peut insérer les valeurs de données dans les colonnes incorrectes dans Excel. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft : 314763 Delete
(http://support.microsoft.com/kb/314763/FR/
)
CORRECTIF : ADO insère les données dans des colonnes incorrectes dans ExcelLa suppression de données Excel est soumise à plus de restrictions que celle de données d'une source de données relationnelle. Dans une base de données relationnelle, « ligne » n'a pas de sens en dehors d'« enregistrement » ; dans une feuille de calcul Excel, ceci n'est pas vrai. Vous pouvez supprimer des valeurs dans des champs (cellules). Toutefois, vous ne pouvez pas :
Récupération de la structure de la source de données (métadonnées) d'ExcelVous pouvez récupérer des informations sur la structure de votre source de données Excel (tables et champs) à l'aide d'ADO. Les résultats seront légèrement différents selon le fournisseur OLE DB employé, mais les deux fournisseurs renvoient au moins le même petit nombre de champs utiles d'information. Ces métadonnées peuvent être récupérées à l'aide de la méthode OpenSchema de l'objet ADO Connection, qui renvoie un objet ADO Recordset. Vous pouvez également utiliser la puissante Bibliothèque Microsoft ADOX (ActiveX Data Objects Extensions for Data Definition Language and Security) dans ce but. Toutefois, dans le cas d'une source de données Excel, dans laquelle une « table » est soit une feuille de calcul, soit une plage nommée, et un champ est l'un d'un petit nombre de types de données génériques, cette puissance supplémentaire n'est pas utile.Requête sur les informations de tableDe tous les objets disponibles dans une base de données relationnelle (tables, vues, procédures stockées, etc.), une source de données Excel n'expose que les équivalents de table, qui consistent en des feuilles de calcul et des plages nommées définies dans le classeur spécifié. Les plages nommées sont traitées en tant que « Tables » et les feuilles de calcul en tant que « Tables système », et vous ne pourrez pas récupérer beaucoup d'informations utiles sur la table en dehors de cette propriété « table_type ». Pour demander une liste des tables disponibles dans le classeur, utilisez le code suivant :
Le fournisseur ODBC renvoie, lui aussi, un jeu d'enregistrements de neuf (9) champs, dont il ne remplit que trois (3) :
Informations sur les champs de requêteChaque champ (colonne) d'une source de données Excel est l'un des types de données suivants :
Énumération des tables et champs et de leurs propriétésLe code Visual Basic (tel que l'exemple suivant) peut être utilisé pour énumérer les tables et les colonnes dans une source de données Excel et les champs d'information disponibles sur chacune d'elles. Le résultat de cet exemple est situé dans une zone de liste, List1, sur le même formulaire.Utilisation de la fenêtre DonnéesSi vous créez une liaison de données vers une source de données Excel dans la fenêtre Données de Visual Basic, la fenêtre Données affiche les mêmes informations que celles que vous pouvez récupérer par programmation comme décrit plus haut. En particulier, notez que le fournisseur Jet répertorie à la fois les feuilles de calcul et les plages nommées sous « Tables », tandis que le fournisseur ODBC n'affiche que les plages nommées. Si vous utilisez le fournisseur ODBC et que vous n'avez pas défini de plages nommées, la liste « Tables » restera vide.Limitations de Microsoft ExcelL'utilisation d'Excel comme source de données est soumise aux limitations internes des classeurs et des feuilles de calcul Excel. Celles-ci sont notamment :
Références Pour plus d'informations sur l'utilisation d'ADO.NET pour récupérer et modifier des enregistrements dans un classeur Excel avec Visual Basic .NET, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft. 316934 Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
(http://support.microsoft.com/kb/316934/FR/
)
Comment faire pour utiliser ADO.NET pour récupérer et modifier des enregistrements dans un classeur Excel avec Visual Basic .NET295646
(http://support.microsoft.com/kb/295646/FR/
)
Procédure de transfert des données d'une source de données ADO vers Excel avec ADO246335
(http://support.microsoft.com/kb/246335/FR/
)
Comment faire pour transférer des données d'un jeu d'enregistrements ADO vers Excel avec l'Automation247412
(http://support.microsoft.com/kb/247412/FR/
)
Méthodes de transferts de données vers Excel à partir de Visual Basic278973
(http://support.microsoft.com/kb/278973/FR/
)
ExcelADO montre comment utiliser ADO pour lire et écrire des données dans des classeurs Excel318373
(http://support.microsoft.com/kb/318373/FR/
)
Récupérer des métadonnées d'Excel à l'aide de la méthode GetOleDbSchemaTable dans Visual Basic .NETPropriétésNuméro d'article: 257819 - Dernière mise à jour: lundi 22 mars 2010 - Version: 4.6 Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
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. | Traductions disponibles
|


Retour au début








