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

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
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
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
kbDSupport kbdse feuille de calcul classeur kbDAO350 kbDAO300 kbDAO250 kbIISAM kbExceL kbVBp400 kbVBp500 kbVBp600 kbVBp kbRegistry

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 194124 - Dernière mise à jour : 12/05/2015 09:27:49 - Révision : 4.0

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

  • kbnosurvey kbarchive kbmt kbprb KB194124 KbMtfr
Commentaires