IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Exporter les données d'une DataGridView


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut Exporter les données d'une DataGridView
    Petite explication de ce que je cherche à faire avec mon code.
    J'ai sur un disque serveur tout pleins de fichiers xls qui sont un vrai bordel infame.
    J'ai besoin de récupérer diverses info eparpillés dans ses fichiers et les mettre dans un table vide d'une base acess dans un table particulière.

    Ce que j'ai deja reussi à faire c'est importer la lister des fichier excel concernés dans un gridview. qui s'appelle Gridview1.
    un combobox et un bouton me permettra de récupérer les type d'infos que je desire dans un second gridview. Datagridview2.

    la partie ou je seche c'est comment exporter les données recoltées vers une table d'access. J'ai un dataset dans le projet que j'ai generer par rapport a ma base access avec les tables

    Si je link le datagridview2 datasource avec la table de mon dataset je ne peux creer des lignes supp j'ai une erreur.

    et dans le cas ou je link pas je ne sais pas comment aller ajouter ses infos dans la table access

    voici mon code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Imports System.IO
    Imports Microsoft.Office.Interop.Excel
     
    Public Class Form1
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
     
     
     
            Dim AppXls As New Microsoft.Office.Interop.Excel.Application
     
            Dim Wsheet As New Microsoft.Office.Interop.Excel.Worksheet
            Dim var01 As String
            Dim var02 As Double
            Dim var03 As Double
            Dim var04 As Double
            Dim var05 As Double
            Dim var06 As String
            Dim var07 As String
            Dim var08 As String
            Dim var09 As String
            Dim var10 As String
     
     
            Dim pathfi As String
            Dim Nmesfi As String
            If ComboBox1.SelectedItem = "TAUX HORAIRES" Then
     
                ' DataGridView2.DataSource = DBGMAODataSet.TARIFS
                Dim nb As Integer = DataGridView1.Rows.Count
                DataGridView2.Rows.Add(nb)
     
     
                For X As Integer = 0 To 10 'nb + 1
     
                    pathfi = DataGridView1.Rows(X).Cells(6).Value
     
     
     
                    AppXls.Visible = True 'on affiche la fenetre d'excel
                    AppXls.Workbooks.Open(pathfi, UpdateLinks:=False, [ReadOnly]:=True) 'ouverture du fichier excel
                    Wsheet = CType(AppXls.ActiveWorkbook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) 'on selectionne la page 1
                    Wsheet.Select()
     
                    'lecture des cellules tarifs horaires
                    Nmesfi = Wsheet.Range("AE1").Value ' N° contrat
                    var01 = Wsheet.Range("AH20").Value ' Taux de base
                    var02 = Wsheet.Range("AH21").Value ' Tech maintenance
                    var03 = Wsheet.Range("AH22").Value ' specialiste
                    var04 = Wsheet.Range("AH23").Value ' Monteur
                    var05 = Wsheet.Range("AH24").Value ' Aide monteur
     
                    var06 = Wsheet.Range("AJ20").Value ' SAmedi
                    var07 = Wsheet.Range("AJ21").Value ' Nuit
                    var08 = Wsheet.Range("AJ22").Value ' Dimanche
                    var09 = Wsheet.Range("AJ23").Value ' ferie
                    var10 = Wsheet.Range("AJ24").Value 'insalubrité
     
                    AppXls.ActiveWorkbook.Close(SaveChanges:=False)
     
                    DataGridView2.Rows(X).Cells(0).Value = Nmesfi
                    DataGridView2.Rows(X).Cells(1).Value = var01
                    DataGridView2.Rows(X).Cells(2).Value = var02
                    DataGridView2.Rows(X).Cells(3).Value = var03
                    DataGridView2.Rows(X).Cells(4).Value = var04
                    DataGridView2.Rows(X).Cells(5).Value = var05
                    DataGridView2.Rows(X).Cells(6).Value = var06
                    DataGridView2.Rows(X).Cells(7).Value = var07
                    DataGridView2.Rows(X).Cells(8).Value = var08
                    DataGridView2.Rows(X).Cells(9).Value = var09
                    DataGridView2.Rows(X).Cells(10).Value = var10
     
     
                Next
     
     
     
                AppXls.Quit()
            End If
     
     
        End Sub
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            'TODO: cette ligne de code charge les données dans la table 'DBGMAODataSet.TARIFS'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            Me.TARIFSTableAdapter.Fill(Me.DBGMAODataSet.TARIFS)
            Dim dir As New DirectoryInfo("C:\Users\Eric\Documents\Contrats GMAO")
     
            ' Dim dir As New DirectoryInfo("C:\")
     
     
            DataGridView1.DataSource = dir.GetFiles("*.xls")
     
        End Sub

    Merci de m'aiguiller vers la solution , bien que j'ai lu des tutos j'ai pas tous saisi au niveau de la maj en datagridview et BDD

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    si tes fichiers excels ont un formatage simple (avec des nom de colonnes, pas de fusion de cellules) tu peux utiliser ADO.net pour lire les données comme sur une base de données, c'est plus rapide que l'interop
    (ca s'utilise aussi simplement qu'access, dans le connectstring on spécifie le fichier excel, puis une table = un sheet, on peut select * from sheet1, on peut même faire CREATE TABLE pour créer un sheet etc...)

    il est au passage possible de faire des requetes d'insert dans access depuis excel, ADO s'occupant de lire et écrire les données
    http://www.c-sharpcorner.com/UploadF...ssinterop.aspx

    tu peux toujours afficher les données si l'utilisateur doit faire des choix dessus, mais le but serait après de transformer les choix en clause sur la requete pour filtrer

    ca permettra d'avoir peu de code et des bonnes performances
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Le formatage des fichiers excels ne sont justement pas simples.
    En fait ce sont des fichiers de calculs de cellules avec des formules pratiquement blindes de partout de fusion qui font appels egalement a des valeurs se trouvant dans des autres fichiers liés.
    C'est un gros bordel, j'ai éàà fichiers de 50 à 300 Mo le fichier ( je vous dis que c'est un frappadingue qui les a concus).
    J4identifie pour un projet les donnees des cellules que j'ai besoin. Dans mon code ci dessus j'ai limite le test a 10 boucles , si je lance le processus j'en ai pour 2 à 3 H pour récupérer toutes les infos. Mais ca ne me dérange pas dans la mesure ou je peux lancer le procede en fin de journée et le lendemain tout récupérer.
    Je veux juste sauvegarder mon datagridview à la fin du procede et si possible dans une table access.
    Je travaille avec Acess pour le moment car je crée une maquette , mais à la fin du projet les données devront etre renvoyés sur un AS400.

    et donc non les infos sont pas rengees dans des colonnes proprement c'est le fouillis total la dedans. d'ailleurs si ca avait ete le cas j'aurai fait ca avec une macro excel.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pour l'export il suffit de lire les lignes du dgv
    for each l in dgv.rows
    etc...
    si tu veux filtrer selon ce que l'utilisateur a choisi : if l(x).value <> telle valeur then continue for
    puis de faire des requetes sur les données de la lignes pour faire un insert dans access
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Je suggérerai de changer d'approche:

    • Utiliser DataSet, DataAdapters et DataTable pour s'interfacer à la base Access,
    • binder le DataGridView sur la DataTable.
    • pour transférer, alimenter la DataTable (non remplie ou vidée) avec les données Excel, puis utiliser la commande Update du DataAdapter,
    • pour visualiser la base acces après transfert, utiliser la méthode Fill du DatyaAdapter pour charger le contenu access dans la DataTable.

  6. #6
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Donc je reviens vers vous.
    Après quelques jours d'absences suite a un largage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub relation()
    Dim Eric as man
    Dim Corinne as woman
     
    if corinne= Eric then
    Corinne=" C'est finit entre nous"
    Eric= "m'en fout vais aller prog dans mon coin"
    end if
    end sub


    Enfin bon
    Donc je testeais ta solution Grafitto , cependant si je met la datatable meme vidée comme datasource je n'arrive pas à faire de rows.add. Faut il que je travaille avec une seule ligne à mettre à jour pour chaque traitement de fichiers. JE pensais faire une seul traitement de maj quand toutes les infos etaient recup en faite?

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/07/2007, 14h12
  2. Réponses: 5
    Dernier message: 10/07/2007, 09h43
  3. Exporter les données d'une flexgrid vers Excel
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/08/2006, 18h06
  4. [MySQL] Exporter les données d'une table en PHP
    Par caro_tpl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/08/2006, 11h25
  5. exporter les données d'une DB dans un doc. pdf
    Par gagalive dans le forum API standards et tierces
    Réponses: 35
    Dernier message: 15/07/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo