IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème de lecture de cellule date par le programme vb.net


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 46
    Points
    46
    Par défaut Problème de lecture de cellule date par le programme vb.net
    Bonjour à tous,

    je lis un fichier excel grâce à OLEDB. Tout se passe bien sauf lorsque je tente

    de recupérer une cellule du fichier excel qui a le format date. Le contenu de l

    a cellule est 02/12/2012. Lorsque je tente de récupérer cette cellule grâce à

    mon programme vb.net, j'obtiens plutôt 41245.

    Comment je peux faire pour récupérer directement 02/12/2012?

    Par avance MERCI

  2. #2
    Membre actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Points : 205
    Points
    205
    Par défaut
    Bonsoir.

    Vous devriez nous donner le code par lequel vous tentez cette récupération.


    Cordialement.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 46
    Points
    46
    Par défaut le code
    ci dessous le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Private Function LectureFichier(ByVal chemin As String) As String
            Dim MyConnection As System.Data.OleDb.OleDbConnection
            Dim DtSet As System.Data.DataSet
            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
            MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & chemin & "';Extended Properties=Excel 8.0;")
            MyConnection.Open()
            MyCommand = New System.Data.OleDb.OleDbDataAdapter _
                ("select * from [Feuil1$]", MyConnection)
            DtSet = New System.Data.DataSet
            MyCommand.Fill(DtSet)
     
     
                Dim numFact As String = DtSet.Tables(0).Rows(4).Item(1).ToString.Trim
                Dim daFac As String = DtSet.Tables(0).Rows(3).Item(1).ToString.Trim
                Dim dateech As String = DtSet.Tables(0).Rows(2).Item(11).ToString.Trim
     
                Dim indiceTVA As Integer = findTVAindice(DtSet)
                Dim indiceparcours As Integer = findParcoursindice(DtSet)
                Dim TVA As String = DtSet.Tables(0).Rows(indiceTVA).Item(5).ToString.Trim & DtSet.Tables(0).Rows(indiceTVA).Item(6).ToString.Trim
                Dim maLigneTampon As String = "TYPINFO>EXCEL 00;" & Chr(13) + Chr(10)
     
                maLigneTampon &= "ZON>NUMFA:""" & numFact & """;" & Chr(13) + Chr(10)
                maLigneTampon &= "ZON>DATEECH:""" & dateech & """;" & Chr(13) + Chr(10)
                maLigneTampon &= "ZON>DADOC:""" & daFac & """;" & Chr(13) + Chr(10)
                Dim maLigneDefinitive As String = ""
    maLigneDefinitive &= maLigneTampon & Chr(13) + Chr(10)
                Dim indice = 5
                Dim numligne As Integer = 0
                Dim monFormat As String = ""
                MyConnection.Close()
                Return maLigneDefinitive
            End Function
    C'est au niveau de DATEECH qu'il y'a le problème. Au niveau de DADOC, pas de problème.

    Pourtant sur le fichier excel, les deux cellules dates ont le même format.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si dateech est une date, déclarez la As Date plutot qu'As String
    après si dans excel la colonne n'est pas définie en date, c'est à vous de convertir le string en date
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Points : 46
    Points
    46
    Par défaut
    J'ai fais ce que vous avez dit. J'ai déclaré Dateech as date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Dim dateech As Date = CDate(DtSet.Tables(0).Rows(2).Item(11).ToString.Trim)
    Et ca marche pas, jai le message: "la conversion de la chaine 41245 en type Date n'est pas valide.

    ce que j'ai du mal à comprendre c'est que pour DADOC j'ai pas de soucis, je recupere bien et les cellules sont au même format.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    je pense que cela est du au fait que tes colonnes Excel sont hétéroclites, elles contiennent des types différents (nombre, Texte, format personnalisé ...)
    Une table doit normalement avoir un type unique pour chacune de ses colonnes.
    Je ne sais pas comment elle le définit dans un tel cas : le type de la première cellule, celui le plus courant dans la colonne ou autres ?
    Ici le GetType renvoie un Double et un String pour les cellules reçues.
    A mon avis il faut au préalable rechercher le type de la valeur reçue et faire une conversion.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Apparemment c'est ça :
    Types de données
    À l'inverse d'une base de données traditionnelle, il n'existe aucune façon directe de spécifier les types de données pour les colonnes des tableaux Excel. Au lieu de cela, le fournisseur OLE DB analyse huit lignes d'une colonne pour deviner le type de données pour le champ. Vous pouvez changer le nombre de lignes à analyser en spécifiant une valeur entre un (1) et seize (16) pour le paramètre MAXSCANROWS dans les propriétés étendues de votre chaîne de connexion.
    Il faudrait donc extraire chaque valeur recherchée une à une, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            MyCommand = New System.Data.OleDb.OleDbDataAdapter _
                ("select * from [Feuil1$B5:B5]", MyConnection)
    Là le bon type (Date) est retourné et la valeur est correctement affichée.

    Enfin, si l'extraction de données a pour but de renseigner du texte (Un rapport par exemple), il suffit juste de modifier la connection comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & chemin & _
                                                                 "';Extended Properties=""Excel 8.0;IMEX=1"";")
    IMEX=1 retourne les données au format Texte.

Discussions similaires

  1. Date par défaut Month Calendar .NET Control
    Par martin91 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 07/07/2011, 14h21
  2. problème de lecture de vecteurs date et heure
    Par helaaa dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/06/2010, 14h03
  3. [POI]Problème de lecture des cellules vides
    Par ng.phung dans le forum Documents
    Réponses: 1
    Dernier message: 02/05/2007, 14h45
  4. Problème de lecture des cellules dans une feuille Excel
    Par wangjun dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2006, 09h35
  5. Problème de tri sur les dates par année puis mois
    Par rob2-9 dans le forum Access
    Réponses: 26
    Dernier message: 11/08/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo