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

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

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.