GENERER UN FICHIER EXCEL

wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - 27 févr. 2017 à 10:45 - Dernière réponse : wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention
- 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
Afficher la suite 

10 réponses

Répondre au sujet
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 27 févr. 2017 à 11:16
+1
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de vb95
wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - 27 févr. 2017 à 11:31
0
Utile
C'est génial tu as raison , ça fonctionne .merci beaucoup pour l'aide tu es un champion :)
Commenter la réponse de wayne2017
wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - Modifié par wayne2017 le 27/02/2017 à 11:53
0
Utile
1
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?
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 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 .
Commenter la réponse de wayne2017
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 27 févr. 2017 à 12:52
0
Utile
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.
Commenter la réponse de ucfoutu
cs_Le Pivert 4775 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - Modifié par cs_Le Pivert le 27/02/2017 à 13:43
0
Utile
4
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
wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - 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
wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - 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"
cs_Le Pivert 4775 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention > wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention - 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
wayne2017 57 Messages postés jeudi 23 février 2017Date d'inscription 10 mai 2017 Dernière intervention > cs_Le Pivert 4775 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 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
Commenter la réponse de cs_Le Pivert

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.