GENERER UN FICHIER EXCEL

wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017 - Modifié par cptpingu le 27/02/2017 à 11:12
wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017 - 1 mars 2017 à 15:01
Bonjour.

Je suis étudiant débutant avec Visual Basic .je rencontre un problème avec mes lignes de codes, car j'ai créer un fichier excel depuis un bouton et importes les données de ce datagridview vers ce fichiers excel mais alors a chaque fois que je veux générer ce fichier il me fait un flash back (s'ouvre et se referme en même temps ) . j'arrive pas a voir l'erreur dans mon programme , je vous en prie de m'aider , s'il vous plait ceci me stresse beaucoup ,j'arrive pas a trouver une solution depuis des jours .voici mon code en gros:

Private Sub BtnGenererFichierExcel_Click(sender As Object, e As EventArgs) Handles BtnGenererFichierExcel.Click


Dim excel As Microsoft.Office.Interop.Excel.Application

Try
            excel = New Microsoft.Office.Interop.Excel.Application
            excel.Workbooks.Open("C:\Users\wayne\Desktop\ClasseursTexts .xlsx")
            Dim i As Integer, j As Integer
            Dim diff As Integer = 1
            ' if you want column header from dgv elese omit the block  
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  
            For j = 0 To DataGridViewFichier.ColumnCount - 4
                excel.Worksheets(1).cells(1, j + 1) = DataGridViewFichier.Columns(j).Name
            Next
            diff += 1
                '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''  
                For i = 1 To DataGridViewFichier.RowCount - 1

If DataGridViewFichier.Rows(i).IsNewRow = False Then
                    For j = 0 To DataGridViewFichier.ColumnCount - 1

excel.Worksheets(1).cells(i + 24, j + 1) = DataGridViewFichier.Item(j, i).Value  'i+22, starts from 22nd rows, and j+8, starts from 8th column
                    Next
                    End If
            Next

excel.Application.Visible = True
            excel.Worksheets(1).select()
            excel.ActiveWorkbook().Save()
            excel.Workbooks.Close()
            excel.Quit()
            excel = Nothing
        Catch ex As System.Runtime.InteropServices.COMException
            MessageBox.Show("Error accessing Excel: " + ex.ToString())
        Catch ex As Exception
            MessageBox.Show("Error: " + ex.ToString())
        End Try




End Sub

5 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
27 févr. 2017 à 11:16
bonjour
Sans certitude
Ces 3 lignes ferment le classeur, font quitter Excel
Donc tu ne vois plus Excel

excel.Workbooks.Close()
excel.Quit()
excel = Nothing


Crées-toi un bouton de commande sur ta Form VB pour fermer Excel
1
wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017
27 févr. 2017 à 11:31
C'est génial tu as raison , ça fonctionne .merci beaucoup pour l'aide tu es un champion :)
0
wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017
Modifié par wayne2017 le 27/02/2017 à 11:53
merci beaucoup pour l'aide ,il fonctionne parfaitement.
j'ai une question je ne sait pas comment faire pour déplacer toutes les premières lignes de la feuille excel pour le ramener vers le bas avec une ligne de code dans mon programme VB, donc a chaque fois que je vais devoir générer un fichier excel via ma datagridview je voudrais que toutes les premières lignes qui identifie les données de ma datagridview ne restent plus a la toute première ligne de la feuille excel . comment le faire s'il vous plait?
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
27 févr. 2017 à 21:23
bonsoir
un principe : une autre question appelle un autre post comme le dit si bien ucfoutu que je salue .
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 févr. 2017 à 12:52
je ne sait pas comment faire pour déplacer toutes les premières lignes de la feuille excel pour le ramener vers le bas

Le faire depuis VB.Net = instructions VBA à passer depuis VB.Net.
Quelles seraient ces instructions depuis VBA (directement, donc). Si tu ne les connais pas non plus ==>> question à poser dans le forum VBA/Excel.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié par cs_Le Pivert le 27/02/2017 à 13:43
Bonjour,

voir ceci:

http://codes-sources.commentcamarche.net/source/101574-import-excel-dans-datagridview-en-vb-net

'Deplacer up down
    Private Sub MoveRow(ByVal i As Integer)
        Try
            If (DataGridView1.SelectedCells.Count > 0) Then
                Dim curr_index As Integer = DataGridView1.CurrentCell.RowIndex
                Dim curr_col_index As Integer = DataGridView1.CurrentCell.ColumnIndex
                Dim curr_row As DataGridViewRow = DataGridView1.CurrentRow
                DataGridView1.Rows.Remove(curr_row)
                DataGridView1.Rows.Insert(curr_index + i, curr_row)
                DataGridView1.CurrentCell = DataGridView1(curr_col_index, curr_index + i)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    'monter item
    Private Sub cmdup_Click(sender As System.Object, e As System.EventArgs) Handles cmdup.Click
        If DataGridView1.CurrentCell.RowIndex = 0 Then
            Exit Sub
        End If
        MoveRow(-1) ' move up in the datagridview (row index is 1 less)
        cmdsave.Enabled = True
        modif = True
    End Sub
    'descendre item
    Private Sub cmddown_Click(sender As System.Object, e As System.EventArgs) Handles cmddown.Click
        If DataGridView1.CurrentCell.RowIndex = DataGridView1.Rows.Count - 2 Then
            Exit Sub
        End If
        MoveRow(1) ' move down in the datagridview (row index is 1 more)
        cmdsave.Enabled = True
        modif = True
    End Sub

@+ Le Pivert
0
wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017
28 févr. 2017 à 09:03
Bonjour Le Pivert

j'ai utiliser ce code mais j'arrive pas a la solution , vu que ma Datagridview est lie a une Base de Donnée qui ce trouve dans le serveur , je voudrais que lorsque les données s'affiche ds ma Datagridview et que je Click sur le bouton pour générer le fiche excel , tous les donnees se retrouvent dans le fichier excel mais pas a la première ligne de la feuille excel disons a partir de la 10ieme ligne
0
wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017
28 févr. 2017 à 09:11
le programme me dit ceci je cite : " IMPOSSIBLE D'AJOUTER PAR PROGRAMMATION DES LIGNES A LA COLLECTION DES LIGNES DATAGRIDVIEW LORSQUE LE CONTRÔLE EST LIE AU DONNEES"
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017
28 févr. 2017 à 10:43
As-tu regardé le programme que je t'ai indiqué. Si oui, dans ce cas tu as pu prendre connaissance de l'enregistrement de la datagridview dans le classeur Excel!

Comme ceci:

  'enregistrer la bdd
    Private Sub cmdsave_Click(sender As System.Object, e As System.EventArgs) Handles cmdsave.Click
        Dim c As Integer
        Dim val As String
        If cmbfeuille.Text = "" Then Exit Sub
        xlApp.ScreenUpdating = False
        xlApp.DisplayAlerts = False
        xlWorkBook = xlApp.Workbooks.Open(chemin)
        xlWorkSheet = CType(xlWorkBook.Worksheets(cmbfeuille.Text), Excel.Worksheet)
        For l As Integer = 0 To DataGridView1.RowCount - 1
            For c = 0 To DataGridView1.ColumnCount - 1
                val = CStr(DataGridView1.Rows.Item(l).Cells(c).Value)
                xlWorkSheet.Cells(l + 2, c + 1) = val
            Next c
        Next l
        xlWorkSheet.Range("A:F").Columns.AutoFit() 'colonnes autoresizes
        xlApp.ScreenUpdating = True
        xlApp.DisplayAlerts = True
        xlWorkBook.Close()
        xlApp.Quit()
        modif = False
    End Sub


dans ce code l'enregistrement se fait à partir de la 2ème ligne:

    xlWorkSheet.Cells(l + 2, c + 1) = val


il te suffit de l'adapter pour le 10 ème ligne comme ceci:

    xlWorkSheet.Cells(l + 10, c + 1) = val


Simple n'est-il pas!

@+ Le Pivert
0
wayne2017 Messages postés 57 Date d'inscription jeudi 23 février 2017 Statut Membre Dernière intervention 10 mai 2017 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
1 mars 2017 à 15:01
Merci le Pivert ,il marche mais j'ai des bugg que je cherche encore a gérer .vraiment grand merci
0
Rejoignez-nous