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 :

Récupération de valeurs Excel


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut Récupération de valeurs Excel
    Bonjour tout le monde,

    Voici un morceau de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      excelFile = CommonDialog1Open.FileName : appXls = New Excel.Application : appXls.Visible = False
                        book = appXls.Workbooks.Open(excelFile)
                        rowCount = book.Worksheets("données").Range("A65536").End(Excel.XlDirection.xlUp).Row
    Donc là j'ouvre un fichier excel. Je veux ensuite récupérer certaines valeurs de ce fichier, et les ajouter à une liste de points de la dll Zedgraph, permettant de faire des graphiques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                        For I = 14 To rowCount
     
                            pointsCourbeY1.Add(book.Worksheets("données").Cells(I, "A").Value, book.Worksheets("données").Cells(I, "B").Value)
                            pointsCourbeY2.Add(book.Worksheets("données").Cells(I, "A").Value, book.Worksheets("données").Cells(I, "E").Value)
                        Next
    Le soucis est que ça prend énormément de temps ! pour 11000 lignes, ça prend quelque chose comme 6 minutes sur mon portable.

    Cependant, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                      For I = 14 To 11000
                            pointsCourbeY2.Add(1, 1)
                            pointsCourbeY1.Add(1, 1)
                        Next
    Ca se fait en moins d'une seconde. J'imagine que ça vient de la recherche de la valeur dans le fichier excel.

    Bref ! je cherche un moyen de récupérer ces valeurs sans que ça prenne trois heures. Je viens donc ici voir si vous auriez des idées qui pourraient m'aider ?

    Merci de m'avoir lu

  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
    Oui, tu as le moyen de te connecter au fichier Excel, comme à une base de données (donc très performant pour des jeux de données importants), et exécuter une requête SQL.
    Pour plus d'informations, voir : Lire et écrire dans les classeurs Excel fermés (c'est en VBA, mais tu pourras facilement le traduire en VB.NET).

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut
    Ok je vais regarder àa avec beaucoup d'attention !

    Merci skalp

  4. #4
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Oui, tu as le moyen de te connecter au fichier Excel, comme à une base de données (donc très performant pour des jeux de données importants), et exécuter une requête SQL.
    Pour plus d'informations, voir : Lire et écrire dans les classeurs Excel fermés (c'est en VBA, mais tu pourras facilement le traduire en VB.NET).

    Rebonjour Skalp,

    Selon toi (ou quelqu'un d'autre ), quelle serait la meilleure façon de mettre une rangée de cellules (par exemple "A1:A10000" dans un tableau ?

    Par exemple, je cherche à mettre dans mon tableau de double toutes les valeurs contenues dans les cellules A1 jusqu'à A10000. Comment réaliser cette opération le plus rapidement possible ?

    Par avance merci !

  5. #5
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut
    Citation Envoyé par GriffinK Voir le message
    Rebonjour Skalp,

    Selon toi (ou quelqu'un d'autre ), quelle serait la meilleure façon de mettre une rangée de cellules (par exemple "A1:A10000" dans un tableau ?

    Par exemple, je cherche à mettre dans mon tableau de double toutes les valeurs contenues dans les cellules A1 jusqu'à A10000. Comment réaliser cette opération le plus rapidement possible ?

    Par avance merci !
    Quelque chose dans ce genre peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim varA(2000) As Object
    varA = book.Worksheets("données").Range("A1:A1000")
    ...marche pas malheureusement

  6. #6
    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
    Il existe une FAQ qui traite de cette problématique : Comment transférer des données sous Excel rapidement ?

  7. #7
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Il existe une FAQ qui traite de cette problématique : Comment transférer des données sous Excel rapidement ?
    Bonjour Skalp,

    Voici mon 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
    34
    35
    36
    37
    38
    39
    40
    Dim xlApp As Excel.Application
     
            Try
                xlApp = GetObject(, "excel.application")
            Catch
                xlApp = New Excel.Application
            Finally
                xlApp.Visible = False
            End Try
     
            'ajout d'une page et sélection 
            Dim xsTransfert As Excel.Worksheet = xlApp.Workbooks.Add.ActiveSheet
            Dim StrConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.XLS;Extended Properties=Excel 8.0;"
     
            Try
                ' ici on crée la chaine de connexion
                ' (on se connecte à SQL Server dans notre exemple)
                With xsTransfert.QueryTables.Add(StrConn, Destination:=xsTransfert.Range("A1"))
                    .CommandText = "Select * from [feuil1$]" ' ou requete SELECT
                    .Name = "données"
                    .FieldNames = True
                    .RowNumbers = True
                    .FillAdjacentFormulas = False
                    .PreserveFormatting = True
                    .RefreshOnFileOpen = False
                    .BackgroundQuery = True
                    .RefreshStyle = Excel.XlCellInsertionMode.xlOverwriteCells
                    .SavePassword = False
                    .SaveData = False
                    .AdjustColumnWidth = True
                    .RefreshPeriod = 0
                    .PreserveColumnInfo = True
                    .Refresh(BackgroundQuery:=False)
                End With
     
                ' affichage 
                xlApp.Visible = True : xlApp.Visible = Excel.XlSheetVisibility.xlSheetVisible : xsTransfert.Visible = Excel.XlSheetVisibility.xlSheetVisible
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    Le but est de récupérer les valeurs excel dans une autre feuille excel ? au final je me retrouverai toujours avec des milliers de données dans la nouvelle feuille, du coup je ne serai guère avancé, mais j'imagine qu'il y a quelque chose que je ne vois pas / comprends pas ?

  8. #8
    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 Skalp Voir le message
    Il existe une FAQ qui traite de cette problématique : Comment transférer des données sous Excel rapidement ?
    Ah pardon, tu veux faire l'inverse :
    Citation Envoyé par GriffinK Voir le message
    Selon toi (ou quelqu'un d'autre ), quelle serait la meilleure façon de mettre une rangée de cellules (par exemple "A1:A10000" dans un tableau ?

    Par exemple, je cherche à mettre dans mon tableau de double toutes les valeurs contenues dans les cellules A1 jusqu'à A10000. Comment réaliser cette opération le plus rapidement possible ?
    Une solution rapide pour récupérer les valeurs des cellules A1 à A10000 est de te connecter au fichier Excel et de récupérer les valeurs avec une requête SQL.

    Dans ce cas, le lien que je t'ai donné plus haut : Lire et écrire dans les classeurs Excel fermés devrait t'aider. Je pense que tu n'as pas lu cet article, sinon tu ne serais plus bloqué

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

Discussions similaires

  1. Communication RS232-Excel : Récupération de valeurs chiffrées
    Par vba.v123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/07/2011, 07h19
  2. [XL-2007] Macro Excel - récupération contenu valeur + moyenne
    Par clem16031983 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2009, 16h27
  3. Récupération de valeurs distinctes dans excel
    Par developpeur62 dans le forum Excel
    Réponses: 1
    Dernier message: 23/10/2006, 11h41
  4. récupération de valeur de lien
    Par sex-sansbol dans le forum ASP
    Réponses: 3
    Dernier message: 07/06/2004, 10h43
  5. Récupération de valeurs d'un tableau
    Par leeloo076 dans le forum ASP
    Réponses: 12
    Dernier message: 25/03/2004, 10h59

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