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 :

Lecture incomplète d'un fichier xls


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Par défaut Lecture incomplète d'un fichier xls
    Salut tout le monde,

    Depuis ce matin je me bats avec une fonction qui dois lire un fichier excel, mais il ne lis pas la cellule A1. Dans le tableau ou je copie ma lecture, il me mets nothing. Voilà comment je procède:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    'Ouverture du fichier contenant les infos
            OpenFileDialog1.InitialDirectory = "C:\"        'Adresse initiale
            OpenFileDialog1.Filter = "Fichier excell (*.xls)|*.xls"
            OpenFileDialog1.ShowDialog()
            TextBox1.Text = OpenFileDialog1.FileName.ToString()
            '**************************************************************************'
     
            'Charge le fichier et recup les infos
            Dim Fichier As String
            Dim Rstref As ADODB.Recordset
     
            'Définit le classeur fermé servant de base de données
            Fichier = OpenFileDialog1.FileName.ToString()
            'Nom de la feuille dans le classeur fermé
     
            TextBox5.Text = OpenFileDialog1.FileName.ToString()
            '************************************************************************************'
            'Définition des variables de saisie
            'Recup de l'entête
            Dim Cellules As String = "A0:Z1000"
            'Definition des sources
            Dim Source As ADODB.Connection
            Source = New ADODB.Connection
            Source.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";")
            Dim ADOCommand As ADODB.Command
            ADOCommand = New ADODB.Command
            With ADOCommand
                .ActiveConnection = Source
                .CommandText = "SELECT * FROM [Feuil1$" & Cellules & "]"
            End With
            'Execution de la commande
            Rstref = New ADODB.Recordset
            Rstref.Open(ADOCommand, , ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)
            'Récupération des données
            Rstref.MoveFirst()
            'Comptechamps = Rstref.Fields.Count
            'MessageBox.Show(test1.ToString())
            recupxlsreferentiel = Rstref.GetRows(-1, 0, )
            'Fermeture du fichier
            Rstref.Close()
            Source.Close()
            Source = Nothing
            Rstref = Nothing
            ADOCommand = Nothing
    Mais le pire c'est qu'il lit correctement le reste du fichier, c'est à n'y rien comprendre, quelqu'un aurait une petite piste pour m'aider svp?

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par Clydopathe Voir le message
    Mais le pire c'est qu'il lit correctement le reste du fichier, c'est à n'y rien comprendre, quelqu'un aurait une petite piste pour m'aider svp?
    C'est plutot cohérent : il n'y a pas de ligne d'indice "0" dans un fichier Excel.
    Essaye plutot la plage suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Cellules As String = "A1:Z1000"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Par défaut
    Je viens d'essayer avec cette plage et mon tableau est toujours vide en (0,0) alors qu'il devrais y avoir le mot savoir...

    J'ai pensé que ceci avais une incidence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Rstref.MoveFirst()
    Et ben non. je vais continuer à chercher. En tout cas merci pour l'aide.


    Edit: Je crois avoir trouvé un début de piste, mon fichier de base contient des doubles et des strings, indépendamment des colonnes. J'ai défini l'objet de récupération des données en objet comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Public recupxlsreferentiel(1000, 50) As Object
    Normalement il dois tout récupérer sans problème, ni question de type non?


    Edit 2: J'ai résolu mon problème en réorganisant le fichier excell, il ne faut pas mélanger les types dans une colonne var VB.net n'apprécie vraiment pas.

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Le Recordset est une classe issue de VB6 et est donc dépréciée en VB.Net.

    Je te conseille donc d'utiliser une connexion ADO.Net, tu auras certainement moins de bizarreries :
    Code C# : 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
    OleDbConnection cnx = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Classeur1.xls;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";");
    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Feuil1$]");
    cmd.Connection = cnx;
     
    cnx.Open();
    OleDbDataReader reader = cmd.ExecuteReader();
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            // Ici, tu récupères tes valeurs...
            // Par exemple :
            Console.WriteLine(reader.GetString(0) + reader.GetString(1));
        }
    }
    reader.Close();
    cnx.Close();

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Par défaut
    Merci je vais jeter un oeil la dessus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture de fichier xls par XLViewer
    Par molo dans le forum C++Builder
    Réponses: 7
    Dernier message: 18/02/2010, 13h23
  2. [XL-2002] Problème de lecture des fichiers xls
    Par lucarno dans le forum Excel
    Réponses: 2
    Dernier message: 09/04/2009, 19h53
  3. [C++] Lecture de fichiers *.XLS (classeur excel)
    Par Kyrel dans le forum Windows
    Réponses: 2
    Dernier message: 03/08/2007, 18h30
  4. [VBA]Modifier un fichier xls qui est en lecture seule
    Par niavlys77 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/04/2007, 19h45

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