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 6 et antérieur Discussion :

exporter données d'un datagrid vers excel


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut exporter données d'un datagrid vers excel
    Bonjour a tous,

    J'ai du mal à exporter mes données datagrid vers excel, voici un code que j'ai trouvé sur un autre site et que normalement doit marcher mais il marche pas chez moi: Ma boucle ne fonctionne pas, c'est à dire, que ma ligne d'entête (k) s'inscrit très bien, ma première ligne de données s'inscrit au compet et après c'est toujours cette première ligne de données qui s'inscrit et à l'infinit sans arrêt.

    Donc ma boucle inscrit seulement la première ligne sous à l'infinet, voici mon code:

    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
     
     
    Dim cnx As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnx.ConnectionString = "Provider=SQLOLEDB;Data Source=TEST;Initial Catalog=CaisseDCN;User ID=ssssss;Password=test;"
    cnx.Open
     
    Set xlo = CreateObject("Excel.Application")
    rst.Open "SELECT * FROM Depannage", cnx
    DoEvents
    xlo.Visible = True
    xlo.workbooks.Add
    i = rst.RecordCount
    j = DataGrid1.Columns.Count
    For k = 0 To j - 1
           xlo.workbooks(1).sheets(1).Cells(l + 1, k + 1) = DataGrid1.Columns(k).Caption
    Next k
    l = 0
    rst.MoveFirst
    Do While Not rst.EOF
    For k = 0 To j - 1
           DataGrid1.Col = k
           xlo.workbooks(1).sheets(1).Cells(l + 2, k + 1) = DataGrid1.Text
    Next k
    rst.MoveNext
    l = l + 1
    Loop
    Merci de votre aide, je suis débutante.....
    Je pense que je veux trop rendre mes programmes "User Friendly"

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    comme tu utilise la propriété Col pour changer de colonne dans ton dataGrid .. utilise la propriété Row .. pour la ligne...

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Merci de bien vouloir m'aider, mais comme je suis débutante peux-tu me donner un exemple, je suis un peu perdu!
    Je pense que je veux trop rendre mes programmes "User Friendly"

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    essai ..:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (...)
    For k = 0 To j - 1
           DataGrid1.Col = k
          DataGrid1.Row = l
           xlo.workbooks(1).sheets(1).Cells(l + 2, k + 1) = DataGrid1.Text
    Next k
    (...)
    Ta variable l à l'air d'être prévue pour cela ... tu as du oublier un morceau dans ton copier/coller ...

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé, ça commence bien mais après 20 ligne ça bloque:

    DataGrid1.Row = l

    Le message d'erreur est invalid Row number
    Je pense que je veux trop rendre mes programmes "User Friendly"

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    il y as combien de lignes dans ton datagrid..?

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Mon datagrid a 21 colonnes et à l'écran 7 mais j'ai mis un charriot pour faire dérouler. Je m'appercois que les première lignes s'exportent bien mais a partir de la huitième, les données sont melées ....Donc les seules lignes qui rentre bien c'est celles visibles à l'écran dans mon dategrid.

    Avez-vous une idées pour bien importer toutes les données mêmes c'elles non visibles...
    Je pense que je veux trop rendre mes programmes "User Friendly"

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Après plusieurs tests, je sais maintenant que mon problème vient du fait que je n'ai pas le nombre de ligne dans mon datagrid.

    avec:

    j = datagrid1.colums.count

    je connais le nombre de colonne de mon datagrid mais je dois trouver le nombre de lignes visibles et invisibles pour envoyer toutes mes données.

    je sais comment aller chercher le nombre de lignes visible:

    i = datagrid1.visibleRows

    mais je ne sais pas comment faire pour compter les invisibles aussi?
    Je pense que je veux trop rendre mes programmes "User Friendly"

  9. #9
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    mais je ne sais pas comment faire pour compter les invisibles aussi?
    peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     NbrInvisible = DataGrid1.Rows - DataGrid1.visibleRows
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Merci de vouloir m'aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbrInvisible = DataGrid1.Rows - DataGrid1.visibleRows
    dataGrid1.Rows n'existe pas dans ma version, j'ai seulement .Row (sans le s) et ça compte pas mes lignes = 0 .....Je suis en VB6
    Je pense que je veux trop rendre mes programmes "User Friendly"

  11. #11
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    , je ne parviens pas à trouver le composant DataGrid, d'ou ma proposition non verifiée.
    rst.RecordCount lui, ne correspondrait-il pas au nombre total de Ligne du dataGrid ?
    Apres je te laisses tranquille avec mes propositions

    J'ai trouvé
    Citation Envoyé par MSDN Library
    Utilisez la propriété Count de la collection Columns du contrôle DataGrid et la propriété RecordCount de l'objet Recordset pour déterminer le nombre de colonnes et de lignes du contrôle. Un contrôle DataGrid peut comporter autant de colonnes que le permettent les ressources système, le maximum étant de 32 767 colonnes.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Merci de ta patience....

    Dans mon code j'ai :

    mais ça me donne 0 et non le nombre de lignes.

    A moins que ma connection se fasse mal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim cnx As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnx.ConnectionString = "Provider=SQLOLEDB;Data Source=TEST;Initial Catalog=CaisseDCN;User ID=ssssss;Password=test;"
    cnx.Open
     
    Set xlo = CreateObject("Excel.Application")
    rst.Open "SELECT * FROM Depannage", cnx
    DoEvents
    Je pense que je veux trop rendre mes programmes "User Friendly"

  13. #13
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rst.Open "SELECT * FROM Depannage", cnx
    DoEvents
    rst.MoveLast 'pour remplir aller au dernier enregistrement
    i = rst.RecordCount
    rst.MoveFirst 'revenir au 1° enregistrement
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    J'ai un message d'erreur à la ligne "L'ensemble des lignes ne prend pas les récupérations arrière"


    Merci de ton aide
    Je pense que je veux trop rendre mes programmes "User Friendly"

  15. #15
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    essais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rst.Open "SELECT * FROM Depannage", cnx
    DoEvents
    rst.MoveFirst 'revenir au 1° enregistrement
    i = rst.RecordCount
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  16. #16
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 185
    Points
    17 185
    Par défaut
    Ton ouverture du recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rst.Open "SELECT * FROM Depannage", cnx, adOpenStatic, adLockOptimistic
    ce qui devrai ne pas créer d'erreur pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rst.Open "SELECT * FROM Depannage", cnx, adOpenStatic, adLockOptimisticDoEvents
    rst.MoveLast 'pour remplir aller au dernier enregistrement
    i = rst.RecordCount
    rst.MoveFirst 'revenir au 1° enregistrement
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  17. #17
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bon matin (ici il est 08h30),

    Je viens de vérifier avec rst.moveFirst et i= toujours -1 ça compte toujours pas le nombre de ligne dans ma table.

    Merci
    Je pense que je veux trop rendre mes programmes "User Friendly"

  18. #18
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Un gros merci ça fonctionne, le recordcount fonctionne bien, j'ai mon nombre de ligne.

    Mais j'ai toujours le même problème, ça exporte seulement les lignes visibles de mon datagrid....Je sais que je suis pas loin mais il m'en manque un bout:

    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
    Private Sub cmdImprimer_Click()
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer
    Dim xlo As Object
    Dim cnx As New ADODB.Connection
    Dim rst As New ADODB.Recordset
     
    cnx.ConnectionString = "Provider=SQLOLEDB;Data Source=TEST;Initial Catalog=CaisseDCN;User ID=tessst;Password=bonjour;"
    cnx.Open
     
    Set xlo = CreateObject("Excel.Application")
    rst.Open "SELECT * FROM Depannage", cnx, adOpenStatic, adLockOptimistic
     
    rst.MoveLast 'pour remplir aller au dernier enregistrement
    i = rst.RecordCount
    rst.MoveFirst 'revenir au 1° enregistrement
     
     
    DoEvents
     
    xlo.Visible = True
    xlo.workbooks.Add
     
    j = DataGrid1.Columns.Count
    For k = 0 To j - 1
           xlo.workbooks(1).sheets(1).Cells(l + 1, k + 1) = DataGrid1.Columns(k).Caption
    Next k
    l = 0
    rst.MoveFirst
    Do While Not rst.EOF
     
     
     
     
    For k = 0 To k - 1
           DataGrid1.Col = k
           xlo.workbooks(1).sheets(1).Cells(l + 2, k + 1) = DataGrid1.Text
     
    Next k
    rst.MoveNext
    l = l + 1
    Loop
     
     
     
    End Sub
    Je pense que je veux trop rendre mes programmes "User Friendly"

  19. #19
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Re-bonjour,

    Le problème est que les données s'exportent bien pour ce qui est visible, mais pas pour les données invisibles.

    Serait-il mieux d'exporter les données de ma table au lieu du datagrid et si oui je chercher comment modifier mon code en conséquence.

    Merci de votre aide et surtout de votre patience.
    Je pense que je veux trop rendre mes programmes "User Friendly"

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut
    bonjour,
    pour exporter ton recordset sous Excel il te suffit d'adapter le code suivant

    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
    Set rs_restite = New ADODB.Recordset
     
            rs_restite.Open 'la requete', db
     
    'Ouverture de l'application
            Set appexcel = CreateObject("Excel.Application")
            Set mysheet = appexcel.workbooks.Add
     
            appexcel.Visible = True
            appexcel.UserControl = True
     
            'Gestion du fichier et ouverture statique
            ' appexcel.workbooks.Open repertoire
            'Visualisation en fond d'ecran la page excel
            appexcel.Visible = True
            'On remplit l'entete de la page excel
            appexcel.Worksheets(1).Cells(1, 1).Value = "NOM"
            appexcel.Worksheets(1).Cells(1, 1).Font.Bold = True
            appexcel.Worksheets(1).Cells(1, 2).Value = "PRENOM"
            appexcel.Worksheets(1).Cells(1, 2).Font.Bold = True
            appexcel.Worksheets(1).Cells(1, 4).Value = "PROJET"
            appexcel.Worksheets(1).Cells(1, 4).Font.Bold = True
            appexcel.Worksheets(1).Cells(1, 5).Value = "TEMPS"
            appexcel.Worksheets(1).Cells(1, 5).Font.Bold = True
     
            While Not rs_restite.EOF
                ' nom
                appexcel.Worksheets(1).Cells(i, 1).Value = rs_restite(0)
                ' prenom
                appexcel.Worksheets(1).Cells(i, 2).Value = rs_restite(1)
                ' projet
                appexcel.Worksheets(1).Cells(i, 4).Value = rs_restite(2)
                ' temps
                appexcel.Worksheets(1).Cells(i, 5).Value = rs_restite(3)
     
                i = i + 1
                rs_restite.MoveNext
            Wend
     
            rs_restite.Close
    Bonne chance, j'espère que ca répond à la question

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. exporter le contenu du datagrid vers excel
    Par fraizas77 dans le forum VB.NET
    Réponses: 1
    Dernier message: 02/06/2012, 22h29
  2. [Débutant] exporter les donnes d'un datagrid vers un fichier excel
    Par bila20mina dans le forum VB.NET
    Réponses: 0
    Dernier message: 10/04/2012, 15h45
  3. Exporter données textbox Visual Studio vers Excel
    Par vérokit dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/01/2008, 10h14
  4. exporté les donnees du datagrid vers excel
    Par bicho dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/09/2007, 18h28
  5. exporter données (requete ou DBGrid) vers Excel
    Par marie253 dans le forum Bases de données
    Réponses: 4
    Dernier message: 14/09/2004, 10h20

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