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