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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 998 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

2vbeur
Messages postés
3
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
12 avril 2007
-
pas mal pour du bricolage..
tu as ajouter des réfrence a ton projet ?
elect31
Messages postés
9
Date d'inscription
mercredi 29 avril 2009
Statut
Membre
Dernière intervention
2 mars 2017
-
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
Lordthias
Messages postés
15
Date d'inscription
vendredi 21 janvier 2005
Statut
Membre
Dernière intervention
9 mai 2007
-
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...
Musau
Messages postés
18
Date d'inscription
mercredi 11 décembre 2002
Statut
Membre
Dernière intervention
3 octobre 2007
-
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
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
poses plutot ta question sur le Forum.

Merci

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.