[vb .net] importer à partir d'excel vers une datagridview

Soyez le premier à donner votre avis sur cette source.

Snippet vu 27 365 fois - Téléchargée 44 fois

Contenu du snippet

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 / Exemple :


' 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...

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 7 mai 2012
Statut
Membre
Dernière intervention
17 janvier 2013

Bonjour
SVP, après avoir rempli le datagridview, comment insérer les données importées dans une table de la base de données access (connectée au projet)
Messages postés
91
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
23 juin 2009

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)
Messages postés
91
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
23 juin 2009

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
Messages postés
91
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
23 juin 2009

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)
Messages postés
26
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
7 octobre 2008

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!
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.