begin process at 2012 02 12 16:15:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > [VB .NET] IMPORTER À PARTIR D'EXCEL VERS UNE DATAGRIDVIEW

[VB .NET] IMPORTER À PARTIR D'EXCEL VERS UNE DATAGRIDVIEW


 Information sur la source

Note :
Aucune note
Catégorie :VB.NET Source .NET ( DotNet ) Classé sous :vbnet, import, excel, datagridview Niveau :Débutant Date de création :01/06/2006 Date de mise à jour :09/05/2007 18:52:57 Vu :20 471

Auteur : Lordthias

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Suite à une multitude de recherche, je n'ai pu trouver un code (ou une classe) permettant d'importer vers VB.Net à partir d'Excel.
J'ai donc fait cette petite classe qui n'est (en rien) de bonne qualité, cependant chez moi ca marche...En esperant que cela puisse servir a quelqu'un.


<b>Pour que ca marche : </b> il suffit juste d'une Form ou une MDIParent avec une datagrigview nommé DGV et un classeur excel avec la cellule <b>E5 comprise dans le tableau à importer</b>.

Ne vous acharner pas sur moi, c'est ma premiere classe en VB.Net et c'est du bricolage pur est dur...

B-

Source

  • ' espaces de noms
  • Imports System
  • Imports System.Data
  • Imports Excel
  • Public Class impXls
  • ' Déclarations pour classeur Excel
  • Private Appli As New Excel.Application
  • Private TClasseur As Excel.Workbook
  • Private TFeuille As Excel.Worksheet
  • Private NameSheet As String ' Le nom de la feuille
  • Private cpt As Integer ' variable pour comptage
  • Public tabSheet() As String
  • Public row() As String
  • 'dir : directory du fichier
  • 'Vis : visibilite du classeur lors de l'import
  • Public Sub ouvrirClasseur(ByVal Dir As String, ByVal Vis As Boolean)
  • Appli.Visible = Vis ' Application visible
  • Appli.DisplayAlerts = False ' Inactivation des alertes
  • ' Ouverture du classeur
  • Try
  • Appli.Workbooks.Open(Dir)
  • Catch ex As Exception
  • MsgBox("erreur")
  • End Try
  • ' Initialisation Classeur et Feuille Excel
  • TClasseur = CType(Appli.Workbooks(1), Excel.Workbook)
  • End Sub
  • 'Vis : visibilite du classeur lors de l'import
  • Public Sub fermerClasseur(ByVal Vis As Boolean)
  • ' Fermeture du classeur
  • Try
  • If Vis = True Then
  • Appli.Visible = False
  • End If
  • Appli.DisplayAlerts = True
  • Appli.Quit()
  • Catch ex As Exception
  • End Try
  • End Sub
  • 'NomSheet : nom de la feuille du classeur ou se trouvent les données à importer
  • 'DGV : le nom du DataGridView
  • Public Sub rempliDatagrid(ByVal NomSheet As String, ByVal DGV As DataGridView)
  • TFeuille = CType(TClasseur.Worksheets(NomSheet), Excel.Worksheet)
  • TFeuille.Range("E5").CurrentRegion.Select()
  • 'on prend connaissance de la taille du tableau a importer
  • Dim indGauche = TFeuille.Range("E5").End(XlDirection.xlToLeft).Column.ToString
  • Dim indDroite = TFeuille.Range("E5").End(XlDirection.xlToRight).Column.ToString
  • Dim indHaut = TFeuille.Range("E5").End(XlDirection.xlUp).Row.ToString
  • Dim indBas = TFeuille.Range("E5").End(XlDirection.xlDown).Row.ToString
  • ' on redientionne le datagridview
  • DGV.ColumnCount = indDroite - indGauche
  • 'On colore les en-têtes, on met les fonts
  • With DGV.ColumnHeadersDefaultCellStyle
  • .BackColor = Color.Navy
  • .ForeColor = Color.White
  • End With
  • Dim row(indDroite - indGauche) As String
  • 'Création d'un tableau de strings pour chaque ligne
  • For i As Integer = 0 To indBas - indHaut - 1
  • For j As Integer = 0 To indDroite - indGauche - 1
  • row(j) = TFeuille.Cells(i + indHaut, j + indGauche).value2
  • Next
  • 'MsgBox(row(0))
  • With DGV.Rows
  • .Add(row)
  • End With
  • Next
  • With DGV
  • 'Ordre des colonnes
  • For i As Integer = 0 To indDroite - indGauche - 1
  • .Columns(i).DisplayIndex = i
  • .Columns(i).HeaderText = i + 1
  • Next
  • End With
  • 'Ajouter les lignes
  • DGV.Rows.Add()
  • 'Enlever la ligne pointée
  • If DGV.SelectedRows.Count > 0 AndAlso Not DGV.SelectedRows(0).Index = DGV.Rows.Count - 1 Then
  • DGV.Rows.RemoveAt(DGV.SelectedRows(0).Index)
  • End If
  • End Sub
  • End Class
' espaces de noms
Imports System
Imports System.Data
Imports Excel

Public Class impXls

    ' Déclarations pour classeur Excel
    Private Appli As New Excel.Application
    Private TClasseur As Excel.Workbook
    Private TFeuille As Excel.Worksheet
    Private NameSheet As String    ' Le nom de la feuille
    Private cpt As Integer  ' variable pour comptage
    Public tabSheet() As String
    Public row() As String

    'dir : directory du fichier
    'Vis : visibilite du classeur lors de l'import
    Public Sub ouvrirClasseur(ByVal Dir As String, ByVal Vis As Boolean)
        Appli.Visible = Vis ' Application visible
        Appli.DisplayAlerts = False ' Inactivation des alertes
        ' Ouverture du classeur
        Try
            Appli.Workbooks.Open(Dir)
        Catch ex As Exception
            MsgBox("erreur")
        End Try
        ' Initialisation Classeur et Feuille Excel
        TClasseur = CType(Appli.Workbooks(1), Excel.Workbook)
    End Sub

    'Vis : visibilite du classeur lors de l'import
    Public Sub fermerClasseur(ByVal Vis As Boolean)
        ' Fermeture du classeur
        Try
            If Vis = True Then
                Appli.Visible = False
            End If
            Appli.DisplayAlerts = True
            Appli.Quit()
        Catch ex As Exception
        End Try
    End Sub

    'NomSheet : nom de la feuille du classeur ou se trouvent les données à importer
    'DGV : le nom du DataGridView
    Public Sub rempliDatagrid(ByVal NomSheet As String, ByVal DGV As DataGridView)

        TFeuille = CType(TClasseur.Worksheets(NomSheet), Excel.Worksheet)
        TFeuille.Range("E5").CurrentRegion.Select()
        'on prend connaissance de la taille du tableau a importer
        Dim indGauche = TFeuille.Range("E5").End(XlDirection.xlToLeft).Column.ToString
        Dim indDroite = TFeuille.Range("E5").End(XlDirection.xlToRight).Column.ToString
        Dim indHaut = TFeuille.Range("E5").End(XlDirection.xlUp).Row.ToString
        Dim indBas = TFeuille.Range("E5").End(XlDirection.xlDown).Row.ToString

        ' on redientionne le datagridview
        DGV.ColumnCount = indDroite - indGauche

        'On colore les en-têtes, on met les fonts
        With DGV.ColumnHeadersDefaultCellStyle
            .BackColor = Color.Navy
            .ForeColor = Color.White
        End With

        Dim row(indDroite - indGauche) As String
        'Création d'un tableau de strings pour chaque ligne
        For i As Integer = 0 To indBas - indHaut - 1
            For j As Integer = 0 To indDroite - indGauche - 1
                row(j) = TFeuille.Cells(i + indHaut, j + indGauche).value2
            Next
            'MsgBox(row(0))
            With DGV.Rows
                .Add(row)
            End With
        Next


        With DGV
            'Ordre des colonnes
            For i As Integer = 0 To indDroite - indGauche - 1
                .Columns(i).DisplayIndex = i
                .Columns(i).HeaderText = i + 1
            Next
        End With

        'Ajouter les lignes
        DGV.Rows.Add()

        'Enlever la ligne pointée

        If DGV.SelectedRows.Count > 0 AndAlso Not DGV.SelectedRows(0).Index = DGV.Rows.Count - 1 Then
            DGV.Rows.RemoveAt(DGV.SelectedRows(0).Index)
        End If

    End Sub


End Class

 Conclusion

Cette classe sera en constante évolution (du moins jusqu'à la fin de mon stage), donc je posterais de nouveau. Je suis ouvert a tout type de reflexion ou meme conseil...


 Historique

09 mai 2007 18:52:58 :
Cette classe ne m'a finalement pas servi. On peut utiliser ADO c'est (beaucoup) plus rapide mais c'est encore plus anarchique... Je mettrai la source dès que possible

 Sources de la même categorie

Source .NET (Dotnet) MODIFICATION DATE DE WINDOWS EN VB.NET ET VBA par us_30
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOI DE MAIL AVEC PIÈCE JOINTE par EhJoe
Source .NET (Dotnet) AMUSONS NOUS AVEC UN LABEL ^^ par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) UN NAVIGATEUR INTERNET EN VB.NET par azrti
Source avec Zip Source .NET (Dotnet) CONVERSION DE DEVISE MONAITAIRE VIA UN SERVICE WEB par bigmonkey7

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) TIC TAC TOE par simo5963
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE DE GESTION D'UNE COLLECTION DE PIÈCES DE MONNAIE AVE... par tchouny
IMPORTER UNE FEUILLE EXCEL VERS UNE TABLE ACCESS EXISTANTE par pifou25
Source avec Zip Source avec une capture INSÉRER DANS UN FICHIER EXCEL DES DONNÉES DE N'IMPORTE QUELL... par jessiem34
Source avec Zip Source avec une capture RÉCUPÉRER DES DONNÉES ACCESS DANS EXCEL par jpleroisse

Commentaires et avis

Commentaire de 2vbeur le 12/04/2007 14:48:27

pas mal pour du bricolage..
tu as ajouter des réfrence a ton projet ?

Commentaire de elect31 le 15/04/2007 21:30:27

Merci pour ta contribution,
mais chez moi ça ne fonctionne pas (je suis débutant) : l'"imports Excel" n'est pas reconnu (des ondulations vertes dessous) :message d'erreur:"l'espace de nom dans les imports Excel ne contient aucun membre public ou est introuvable...Vérifiez que l'espace ... est défini ou contient ... 1 membre public" ???
J'ai mis tout ton code dans une classe..
merci de tes explications si c'est possible
elect31

Commentaire de Lordthias le 09/05/2007 18:32:27

Oups, désolé pour le retard !!!
2VBEUR > effectivement j'ai ajouté des références au projet. Celle de Microsoft Excel 9.0 de mémoire (ca fait un an maintenant et j'ai plus de courage de retourner dans code pour verifier).

Elect31 > Ca doit être les références...

Ce que je peux dire c'est qu'à la fin je n'ai pas utilisé cette classe. J'ai utilisé la technologie ADO.net qui permet d'executer du SQL dans Excel (qui a dit anarchique???).
Je mettrais la source ADO si je trouve le temps.

Bon courage a tous...

Commentaire de Musau le 17/07/2007 16:32:12

Bonjour à tous!
Quelqu'un pourra m'aider en vb.net,je n'arrive à afficher mes données dans le datagrid qui ne prend pas la méthode DataBind(),quelqu'un a-t-il une idée sur ça? Bien à vous MKB.Et
Voici mon code

Imports System.Data.SqlClient

Public Class stater
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cmd As SqlCommand
        Dim conn As SqlConnection
        Dim ds As DataSet


        Dim da As SqlDataAdapter

        'Dim Netmon As NetMonClientObj
    
        conn = New SqlConnection()
        cmd = New SqlCommand
        ds = New DataSet()
        da = New SqlDataAdapter()

        conn.ConnectionString = "Data Source=ZORASEC50;Initial Catalog=KlantenFiche;Persist Security Info=True;User ID=sa;Password=Nacka123"
        cmd.Connection = conn
        cmd.CommandText = "select Naam from Customers"
        da.SelectCommand = cmd
        da.Fill(ds, "Customers")
        GridView1.DataSource = ds

Commentaire de Renfield le 17/07/2007 16:37:34 administrateur CS

poses plutot ta question sur le Forum.

Merci

Commentaire de bebstylus le 07/10/2008 11:10:05

Je me suis inspiré de ton code et y est apporté une petite modification pour faire gagner du temps à l'éxécution.

Public Sub rempliDatagrid(ByVal NomSheet As String, ByVal DGV As DataGridView)
        TFeuille = CType(TClasseur.Worksheets(NomSheet), Excel.Worksheet)
        'on prend connaissance de la taille du tableau a importer
        Dim indHaut = TFeuille.Range("E5").End(XlDirection.xlUp).Row.ToString + 1
        Dim indBas = TFeuille.Range("E5").End(XlDirection.xlDown).Row.ToString
Dim indGauche = TFeuille.Range("E5").End(XlDirection.xlToLeft).Column.ToString
        Dim indDroite = TFeuille.Range("E5").End(XlDirection.xlToRight).Column.ToString

        Dim range1 As Excel.Range
        Dim range2 As Excel.Range
        Dim cells_excel As Object

        Dim row(indDroite-indGauche) As String
        
        range1 = TFeuille.Cells(indHaut, indGauche)
        range2 = TFeuille.Cells(indBas, indDroite)
        cells_excel = TFeuille.Range(range1, range2).Value2

        Dim j, k As Integer
        For j = 0 To UBound(test, 1) - 1
            For k = 0 To UBound(cells_excel, 2) - 1
                row(k) = test(j + 1, k + 1)
            Next
            DGV.Rows.Add(row)
        Next
    End Sub

Bonne continuation!

Commentaire de erokage le 25/05/2009 14:00:57

J'ai essayer vos programmes mais il ne tourne pas sur vb 2008
Auriez vous une alternative a me proposer?
Voici le programme que j'ai qui ouvre excel mais qui n'affiche pas tout le datagrid mais qui finalement ne tourne plus!
(ps:je suis un novice sur vb)

Commentaire de erokage le 25/05/2009 14:01:24

Private Sub PictureBox8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox8.Click
        'Transfert du datagrid vers excel'
        Dim c, j As Integer

        Dim xl As New Object

        xl = CreateObject("Excel.application")


        xl = DataGridView1
        xl.visible = True

        xl.workbooks.Add()

        For c = 0 To DataGridView1.Columns.Count - 1

            xl.cells.Item(c + 1, 1) = DataGridView1.Columns(c).Name

        Next

        For l As Integer = 0 To DataGridView1.Rows.Count - 1

            For c = 0 To DataGridView1.Rows.Count - 1

                xl.cells.item(l + 1, j + 1) = DataGridView1.Rows(l).Cells.Item(c).Value

            Next c

        Next l


    End Sub

Commentaire de erokage le 25/05/2009 15:01:52

J'ai essayer vos programmes mais il ne tourne pas sur vb 2008
Auriez vous une alternative a me proposer?
Voici le programme que j'ai qui ouvre excel mais qui n'affiche pas tout le datagrid mais qui finalement ne tourne plus!
(ps:je suis un novice sur vb)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Import Bloomberg vers Excel [ par casa2A ] Bonjour,Je cherche à importer des données Bloomberg vers une feuille Excel et je n'ai aucune idée de la manière pour débuter mes recherches. Si vous a ouvrir excel ou n'import quelle autre base de donnée [ par Yesai ] La vie ne vaut pas la peine d'être vecu si on est seul. Import de feuilles Excel vers Access [ par xalimero ] Bonjour à tous!!!Je dois programmer une fonction équivalente à lafonction d'import de données externes sous accessen vba access justement.Je ne sais a Souci d'import de fichier texte dans Excel [ par Lemy ] Bonjour,Je suis toute nouvelle sur VB et je rencontre quelques difficultés.Dans mon programme, je me connecte à une base de données, j'effectue une re Import txt dans excel (VBA) [ par jerbi ] Bonjour,J'aimerais qu'en cliquant sur un bouton, une fenêtre avec le contenu d'un dossier s'ouvre: le dossier contient des fichiers txt.L'utilisateur import et export de cellule excel [ par feroce88 ] je voudrais savoir les instrutions qui permette l'import et l'export de cellule excel merci d'avanceFEROCE Import export excel access [ par voix_off ] Bonjour &#224; tous !J'&#233;cris ici car j'ai un gros souci ! Je suis d&#233;butant en VB, j'ai r&#233;alis&#233; quelques petites macros, et l&#224; Import d'Excell vers Access [ par chmouette ] salut tout le monde,Je suis toujours en train de d&#233;velopper mon appli access&nbsp;pour le boulot, et je rencontre (encore!) un probl&#232;me...Je Import automatique d'un dll dans un fichier excel [ par boosty85 ] Bonjour à tous, Je suis en train de développer un dll en VB6, qui possédera des fonctions pour excel. Ce dll, je devrai l'importer automatiquement lo Pb Import fichier excel [ par devba77 ] Bonjour, Le code suivant lit sur un répertoire donné tous les fichiers Excel et les importe dans une base access. Il importe plus particulièrement le


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,841 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales