GENERER UN FICHIER EXCEL

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

Votre réponse

10 réponses

Meilleure réponse
vb95
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
- 27 févr. 2017 à 11:16
1
Merci
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

Merci vb95 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de vb95
wayne2017
Messages postés
57
Date d'inscription
jeudi 23 février 2017
Dernière intervention
10 mai 2017
- 27 févr. 2017 à 11:31
0
Merci
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
Messages postés
57
Date d'inscription
jeudi 23 février 2017
Dernière intervention
10 mai 2017
- Modifié par wayne2017 le 27/02/2017 à 11:53
0
Merci
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
Messages postés
1701
Date d'inscription
samedi 11 janvier 2014
Dernière intervention
15 novembre 2018
- 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
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 27 févr. 2017 à 12:52
0
Merci
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
Messages postés
5520
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 novembre 2018
- Modifié par cs_Le Pivert le 27/02/2017 à 13:43
0
Merci
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
Messages postés
57
Date d'inscription
jeudi 23 février 2017
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
wayne2017
Messages postés
57
Date d'inscription
jeudi 23 février 2017
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"
cs_Le Pivert
Messages postés
5520
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 novembre 2018
> wayne2017
Messages postés
57
Date d'inscription
jeudi 23 février 2017
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
wayne2017
Messages postés
57
Date d'inscription
jeudi 23 février 2017
Dernière intervention
10 mai 2017
> cs_Le Pivert
Messages postés
5520
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 novembre 2018
- 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.