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 :

Lire / Ecrire dans un classeur excel en VBnet


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut Lire / Ecrire dans un classeur excel en VBnet
    Bonjour,
    Je decouvre VBnet et je cherche à transposer un petit programme que j'ai fais sous VBA6 sous excel.
    Pouvez vous me dire si c'est possible et comment s'il vous plait merci.

    VBnet semble plus adapté pour ce que je souhaite faire.

    Voici la base du code que j'utilise :

    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
    47
    48
    49
    50
    51
    52
    53
    54
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
         Fichier = "C:\Base de données.xls"
         NomFeuille = "Data"
     
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        '-----------------
     
        texte_SQL = "SELECT *  FROM [" & NomFeuille & "$]"
     
    Set Rst = New ADODB.Recordset
    Set Rst = Cn.Execute(texte_SQL)
     
    i = 0
    UserForm2.MSFlexGrid1.Clear
    UserForm2.MSFlexGrid1.Rows = 1
     
    txtcol = "ID|"
    For nbcol = 0 To Rst.Fields.Count - 1
        txtcol = txtcol & Rst.Fields(nbcol).Name & "|"
    Next nbcol
    txtcol = Left(txtcol, Len(txtcol) - 1)
     
    UserForm2.MSFlexGrid1.FormatString = txtcol
     
    i = 0
    While Not Rst.EOF
        i = i + 1
        MSFlexGrid1.Rows = i + 1
        MSFlexGrid1.ColWidth(0) = 400
        MSFlexGrid1.TextMatrix(i, 0) = i
     
        For Col = 1 To UserForm2.MSFlexGrid1.Cols - 1
            MSFlexGrid1.ColWidth(Col) = 2000
            MSFlexGrid1.TextMatrix(i, Col) = Rst.Fields(Rst.Fields(Col - 1).Name)
        Next Col
        Rst.MoveNext
    Wend
     
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
    VBnet semble ne pas aimer la ligne

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu as les fonctions d'interoperabilité d'excel.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    adodb n'existe pas en .net

    il faut le remplacer par system.data.oledb.oledbconnection
    oledbcommand pour la requete et oledbdatareader pour le curseur de lecture

    sinon le code doit ressembler à ca (le msflexgrid n'existe plus non plus, voir datagridview)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut
    Oulah oulah oulah.

    Je suis débutant sur VBnet, j'ai decouvert VBnet il y a peu...

    Bon déja changer mes variables. Cela donne si je me trompe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Dim Cn As OleDb.OleDbConnection
            Dim Fichier As String
            Dim NomFeuille As String, texte_SQL As String
            Dim Rst As OleDb.OleDbDataReader
            Fichier = "C:\Base de données.xls"
            NomFeuille = "Data"
            Cn = New OleDb.OleDbConnection
    Mais ensuite que devient ma connection, il a pas l'ai d'aimer l'initialisation de la connection surtout avec le provider. Sans parler de l'oleDbcommad.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            With Cn
                .Provider = "Microsoft.Jet.OLEDB.4.0"
                .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                    & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
                .Open()
            End With
            '-----------------
     
            texte_SQL = "SELECT *  FROM [" & NomFeuille & "$]"
     
     
            Rst = Cn.OleDbCommand(texte_SQL)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    .provider tu supprimes la ligne

    les recordset n'existent pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim cmd = cn.createcommand
    cmd.commandtext = "select ..."
    dim reader = cmd.executereader
     
    while reader.Read 'positionne le curseur sur la ligne suivante
         ' reader.item(num ou nom de la colonne) contient la valeur
    end while
    après si tu veux apprendre le vb.net, il faut le faire avant de coder ou d'adapter du code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Comment mentionné par Pol63, contrairement à VB6, VB.Net est langage objet. Ca ressemble à du VB6, on peut essayer de le bidouiller comme du VB6 mais c'est vite courrir à la catastrophe. Il est préfèrable d'apprendre et de comprendre les subtilités de la programmation orientée objet avant de tenter une experience périlleuse

  7. #7
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut
    Un grand merci J'ai beaucoup avancé grace à vous.
    Voici mon petit du code, juste une dernière question est il possible de maintenant utiliser des requetes update ou insert avec createcommand,merci.

    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
            Dim Cn As OleDb.OleDbConnection
            Dim Fichier As String
            Dim NomFeuille As String
            Dim i As Integer
            Fichier = "C:\Base.xls"
            NomFeuille = "Feuil1"
            Cn = New OleDb.OleDbConnection
     
            With Cn
                .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                    & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
                .Open()
            End With
     
     
            i = 0
            Dim cmd = cn.createcommand
            cmd.commandtext = "SELECT *  FROM [" & NomFeuille & "$]"
            Dim reader = cmd.executereader
            Me.DataGridView1.ColumnCount = reader.FieldCount
            Me.DataGridView1.RowCount = 1
     
     
            While reader.Read
                i = i + 1
            End While
            Me.DataGridView1.RowCount = i + 1
            reader.Close()
            i = 0
     
     
            reader = cmd.ExecuteReader
            While reader.Read 'positionne le curseur sur la ligne suivante
                For nbcol = 0 To reader.FieldCount - 1
                    Me.DataGridView1.Item(nbcol, i).Value = reader.Item(nbcol).ToString
                Next
                i = i + 1
            End While

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    oui, createcommand sert juste à créer un objet de type oledbcommand
    dans la propriété commandtext on peut mettre la ou les requetes qu'on souhaite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.commandtext = "UPDATE Sheet1 SET col2 = 'test' where col1 = 3" & vbcrlf & "UPDATE Sheet1 SET col3 = 'test2' where col1 = 4"
    insert de delete possibles aussi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut
    Bonjour,
    Je gère déjà une base de données mais sous Excel ce qui n'est pas très disons le pratique le problème est que le support des données ne peux avoir que deux format Excel ou à la limite le *.txt.(pas acess sur mon pc ...)
    Sous Excel avec les macro pas de problème mais comme dit précédemment c'est pas très pratique et question multi-user c'est cata..
    Je regarde don pour exporter la gestion de ma base de donnée sous vbnet qui me semble plus stable plus "fun" ai je tords

  10. #10
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut
    Trop fort VB, merci pour les infos je vais regarder des tutos histoire de me faire les dents;;;

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    avec une base access, il n'y a pas besoin d'avoir access sur le pc pour pouvoir l'ouvrir avec vb.net

    excel n'est pas une base de données, encore moins une base de données multi utilisateur
    access éventuellement ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut
    Comment est ce que je peux transformer ma base de donnée sous excel en acess sans acess ?
    La je comprend plus ,et apres il faut que la base de donnée sois en connection repartie (reseau)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    quand on veut faire une application mulitposte multiuser il faut en théorie une base de données réseau (type sql server express qui est gratuit)
    ce type de base de données s'accède par tcp/ip (enfin c'est vb.net qui gère tout, on donne juste une chaine de connexion et des requetes de la même manière)

    néanmoins quand on débutant et/ou que le projet est petit, on peut utiliser une base access qui a des mécanismes de verrouillage quand même
    il faut alors placer le fichier .mdb (ou .accdb depuis access 2007) sur un dossier partagé sur le réseau (\\monserveur\base\mabase.mdb)

    mais si tu voulais faire du multiuser avec excel il aurait aussi fallu mettre le fichier sur un dossier partagé
    par contre le fichier ne peut etre ouvert que par une personne à la fois ...


    pour transformer un fichier excel en base de données access il doit y avoir plusieurs moyens, mais je ne suis pas expert là dessus
    sans access c'est possible quand même, access est un nom qui désigne 2 choses, le logiciel access qui permet de manipuler une base access, mais le logiciel utilise le moteur JET, et ce moteur est en général présent avec windows ... donc pratique pour créer la structure mais pas obligatoire pour l'utilisation

    par contre développeur c'est un métier, si ce n'est pas le tiens et que tu as juste un besoin ponctuel, il me parait plus judicieux de passer par des professionnels, ca évitera de faire un truc caduque, buggé et/ou pas aussi pratique qu'il pourrait l'être
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre averti
    Homme Profil pro
    consultant BTP
    Inscrit en
    Février 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : consultant BTP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 51
    Par défaut
    Bon effectivement vous aviez aison j'ai reussi à "transposer " beaucoup de fonctions meme la fonction insert to. Et je suis passé par SQL expresse et visual studo pour convertir ma base excel et mdb, je pense que ça sera plus stable pour la suite et plus rapide plutot qu'un fichier excel.

    Merci pour les conseils en tout cas.

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

Discussions similaires

  1. Ecrire dans un classeur excel fermé
    Par schmitx dans le forum Excel
    Réponses: 0
    Dernier message: 02/02/2014, 18h28
  2. [XL-2003] Lire et écrire dans les classeurs Excel fermés
    Par skan_one dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/07/2009, 14h34
  3. lire/ ecrire dans un fichier excel
    Par simpatico dans le forum C#
    Réponses: 5
    Dernier message: 01/04/2009, 14h47
  4. [ADO VBA] Lire Ecrire dans classeur Excel fermé - Demande de précisions.
    Par botakelymg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/11/2007, 17h08
  5. Lire/Ecrire dans un fichier excel
    Par toutounesan dans le forum C++
    Réponses: 5
    Dernier message: 14/09/2007, 22h07

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