PRB : Excel valeurs retournées comme NULL à l'aide de DAO OpenRecordset

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

Sommaire

Symptômes

Lorsque vous vous connectez à une feuille de calcul Excel à l'aide de la méthode DAO OpenRecordset, certaines valeurs dans une colonne Excel peuvent être renvoyées comme NULL lorsque la valeur sous-jacente n'est pas une valeur NULL. Cela se produit généralement lorsque numérique et les types de données texte sont mélangés entre eux au sein de la même colonne d'Excel.

Cause

Ce problème est dû par une limitation du pilote Excel ISAM dans la mesure où une fois celui-ci détermine le type de données d'une colonne Excel, il retournera la valeur NULL pour toute valeur qui n'est pas du type de données au pilote ISAM a par défaut pour cette colonne d'Excel. Le pilote Excel ISAM détermine le type de données d'une colonne Excel en examinant les valeurs réelles dans les premières lignes et il choisit un type de données qui représente la majorité des valeurs dans son prélèvement.

Résolution

Il existe deux solutions de contournement pour ce problème :
  1. Vérifiez que les données dans Excel sont entrées sous forme de texte. Reformatage simplement la colonne d'Excel sur le texte ne va pas cela. Vous devez saisir à nouveau les valeurs existantes après le reformatage de la colonne d'Excel. Dans Excel, vous pouvez utiliser F5 pour entrer à nouveau les valeurs existantes dans la cellule sélectionnée.
  2. Vous pouvez ajouter l'option IMEX = 1; à la Excel chaîne dans la méthode OpenDatabase de connexion. Par exemple :
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    Remarque : paramètre IMEX = 1 indique au pilote pour utiliser le mode d'importation. Dans cet état, le paramètre ImportMixedTypes de Registre = texte va être remarqué. Cela force les données combinées à convertir en texte. Pour que cela fonctionne correctement, il se peut également que vous deviez modifier le paramètre de Registre TypeGuessRows = 8. L'ISAM pilote par défaut analyse les huit premières lignes et à partir de cet échantillonnage détermine le type de données. Si cette huit lignes prélèvement est entièrement numérique, définition IMEX = 1 ne convertira pas le type de données par défaut sur le texte, elle aura numérique.

    Vous devez être prudent que IMEX = 1 ne pas être utilisée sans discernement. Il s'agit d'IMPORT mode, les résultats peuvent être imprévisibles si vous tentez de le faire ajoute ou met à jour des données dans ce mode.

    Les paramètres de IMEX possibles sont :
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    la clé de Registre où se trouvent les paramètres décrits ci-dessus est :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    Consultez la section Références de cet article pour plus d'informations sur si la feuille de calcul Excel comporte des en-têtes de colonne de texte avec les données numériques.

Statut

Ce comportement est voulu par la conception même du produit.

Plus d'informations

Procédure pour reproduire le problème

Pour dupliquer ce problème, vous devez tout d'abord créer un classeur Excel avec une feuille de calcul de la feuille Sheet1 par défaut. Dans la première colonne de la feuille Sheet1, entrez les valeurs suivantes - 123, aaa, 456, bbb, 789. Enregistrez ce classeur dans votre répertoire C:\Temp et nommez-le Book1.XLS.

Dans Visual Basic, créez un nouveau projet standard EXE et procédez comme suit :
  1. Créer une référence à la bibliothèque d'objets Microsoft DAO 3.5. Dans Visual Basic 6.0, il s'agit de bibliothèque d'objets Microsoft DAO 3.51.
  2. Ajoutez un bouton de commande à nouveau formulaire.
  3. Placez le code suivant dans la section des déclarations générales du formulaire :
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    exécuter le projet en appuyant sur la touche F5 et notez que dans la fenêtre Débogage, les valeurs de texte s'affichent comme NULL. Si la majorité des valeurs dans la feuille de calcul Excel texte, le résultat à partir du code ci-dessus doit être annulé. Autrement dit, les valeurs numériques devraient revenir en tant que valeurs NULL.

Références

Pour plus d'informations, consultez l'article suivant dans la base de connaissances Microsoft :

190195 : Comment faire : extraire des informations sur la feuille Excel à l'aide de DAO

Propriétés

Numéro d'article: 194124 - Dernière mise à jour: jeudi 24 juin 2004 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 4.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic 4.0 Édition Entreprise
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Mots-clés : 
kbmt kbprb KB194124 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 194124
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