Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[.NET] EXPORT EXCEL XLS RAPIDE PAR MSQUERY (PROC STOCKÉES TABLES VUES REQUETES ...)


Information sur la source

Catégorie :VB.NET Source .NET ( DotNet ) Niveau : Débutant Date de création : 10/12/2004 Date de mise à jour : 10/12/2004 11:48:34 Vu : 19 240

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (39)
Ajouter un commentaire et/ou une note

Description

régulièrement y a des codes qui tombent qui montrent comment remplir un tableau excel case par case, mais des qu'il y a quelques milliers de lignes c'est lent.

Le code ouvre l'aplication excel en cours ou une nouvelle.
Il appelle la proc sur le serveur
Il renvoie les milliers de lignes et affiche le tout en moins d'une seconde.
Le code est totalement accesible par des débutants.

Enjoy It
[b]VBenouille.[/b]
[i]ps: je vous mets juste le code de la fonction, car je le tire directement de mon projet pro et je l'adapte a peine (je change juste les noms des variables) [/i]
 

Source

  • Private Sub ExportExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuExportXls.Click
  • 'wait'n see
  • Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
  • 'ouverture d'excel
  • Dim xlApp As Excel.Application
  • Try
  • xlApp = GetObject(, "excel.application")
  • Catch
  • xlApp = New Excel.Application
  • Finally
  • xlApp.Visible = False
  • End Try
  • 'ajout d'une page et sélection
  • Dim xsSoldesComptes5 As Excel.Worksheet = xlApp.Workbooks.Add.ActiveSheet
  • 'requete serveur
  • With xsSoldesComptes5.QueryTables.Add(Connection:= _
  • "ODBC;DRIVER=SQL Server;SERVER=MonServeur;Integrated Security=SSPI;" & _
  • "APP=Microsoft® Query;DATABASE=MaBase;Trusted_Connection=Yes" _
  • , Destination:=xsSoldesComptes5.Range("A1"))
  • .CommandText = "MaProcStockée" ' ou la requete select * from machin si vous n'avez pas de proc
  • .Name = "SoldesComptes5"
  • .FieldNames = True
  • .RowNumbers = False
  • .FillAdjacentFormulas = False
  • .PreserveFormatting = True
  • .RefreshOnFileOpen = False
  • .BackgroundQuery = True
  • .RefreshStyle = Excel.XlCellInsertionMode.xlOverwriteCells
  • .SavePassword = False
  • .SaveData = False
  • .AdjustColumnWidth = True
  • .RefreshPeriod = 0
  • .PreserveColumnInfo = True
  • .Refresh(BackgroundQuery:=False)
  • End With
  • ' affichage
  • Me.Cursor = System.Windows.Forms.Cursors.Default
  • xlApp.Visible = True
  • End Sub
Private Sub ExportExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuExportXls.Click
    'wait'n see
        Me.Cursor = System.Windows.Forms.Cursors.WaitCursor

    'ouverture d'excel
    Dim xlApp As Excel.Application

        Try
            xlApp = GetObject(, "excel.application")
        Catch
            xlApp = New Excel.Application
        Finally
            xlApp.Visible = False
        End Try

    'ajout d'une page et sélection
    Dim xsSoldesComptes5 As Excel.Worksheet = xlApp.Workbooks.Add.ActiveSheet

    'requete serveur
        With xsSoldesComptes5.QueryTables.Add(Connection:= _
            "ODBC;DRIVER=SQL Server;SERVER=MonServeur;Integrated Security=SSPI;" & _
            "APP=Microsoft® Query;DATABASE=MaBase;Trusted_Connection=Yes" _
            , Destination:=xsSoldesComptes5.Range("A1"))

            .CommandText = "MaProcStockée"     ' ou la requete select * from machin si vous n'avez pas de proc

            .Name = "SoldesComptes5"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = Excel.XlCellInsertionMode.xlOverwriteCells
            .SavePassword = False
            .SaveData = False
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh(BackgroundQuery:=False)
        End With

    ' affichage
        Me.Cursor = System.Windows.Forms.Cursors.Default
        xlApp.Visible = True
    End Sub

Conclusion

demande d'ajouter la librairie Microsoft excel 9.
la fonction réagit à un clic sur un menu qui s'appelle mnuExportExcel, il faut adapter la déclaration à votre projet de test.
les droits d'acces à la base sont gérés par windows (sspi), il faut donc que l'utilistateur aie les droits de faire la requête ou d'éxécuter la proc stockée comme moi.

le code est en prod chez moi.
dites moi si vous voyez des défauts ou si vous avez des remarques.

 

Historique

10 décembre 2004 11:48:37 :
rajout de l'annotation finale

Commentaires et avis

signaler à un administrateur
Commentaire de Patrice99 le 11/12/2004 11:07:57

Bien, je voulais justement un truc de ce genre, je vais voir si cela marche.

Dans le même genre, je rappele qu'ODBC permet de lire un fichier Excel quasi-instantanément, je ferais une démo bientot...

Au fait, tu n'as pas de problème avec Excel 9 en dotnet ?
Regarde ici :
XLDOTNET : QUITTER EXCEL SANS LAISSER D'INSTANCE EN RAM
www.vbfrance.com/code.aspx?id=27541

signaler à un administrateur
Commentaire de Benouille le 13/12/2004 16:01:05

si! si! cela pose des soucis effectivement: tant que l'appli est lancée, excel considère qu'il a un "appelant" et l'instance reste active meme une fois fermée.

ceci dit une fois l'appli et excel fermés, l'instance est libérée.

c'est aussi pour ça que j'en ouvre pas un nouveau par défaut et que je regarde d'abord si une instance d'excel est pas déja lancée (cf le try catch)

par contre pour ce qui est de marcher, ça marche bien; moi j'ai fait le test avec 65 000 lignes, je t'invite a le faire aussi, tu me diras ce que t'en penses.

signaler à un administrateur
Commentaire de Patrice99 le 13/12/2004 16:29:45

Oui mais attention, pendant qu'il y a une instance d'Excel qui reste plantée en RAM, cela risque d'empecher le fonctionnement normal d'Excel tant que ton appli est ouverte.

Dès que j'ai le temps, je teste ton soft.

signaler à un administrateur
Commentaire de SR2 le 04/01/2005 23:27:45

Ca a l'air super votre truc
mais comment on récupère les résultats dans une liste box par exemple
merci

signaler à un administrateur
Commentaire de Benouille le 05/01/2005 11:14:24

pour une listbox c'est pas du tout la bonne methode :)
recherche sur ce site, sur msdn ou sur pimpernet, tu devrais trouver assez facilement.

signaler à un administrateur
Commentaire de Patrice99 le 08/01/2005 09:35:04

Ok, ça fonctionne très bien, mais je viens de m'apercevoir que sous Access, j'avais déjà une fonction pour exporter une requête directement sous Excel via CopyFromRecordset :

Private Sub CopierRqDansXL(sFeuilleXL$, sRq$, oWkb As Object, oXL As Object)
    
    Dim oSht As Object
    Dim intLastCol%, intLastRows%, iCols%
    Const conMAX_ROWS = 20000
    
    Dim Rq As DAO.Recordset
    On Error GoTo ErrCRqXL
    Set Rq = CurrentDb.OpenRecordset(sRq, dbOpenSnapshot)
    Set oSht = oWkb.Worksheets(sFeuilleXL)
    With oSht
        .Activate ' Activer la feuille XL
        ' Suppression du contenu précédent
        intLastCol = .UsedRange.Columns.Count
        intLastRows = .UsedRange.Rows.Count
        .Range(oXL.Cells(1, 1), oXL.Cells(conMAX_ROWS, intLastCol)).ClearContents
        ' Recopier le nom des champs de la table ou rq
        For iCols = 0 To Rq.Fields.Count - 1
            .Cells(1, iCols + 1).Value = Rq.Fields(iCols).Name
        Next iCols
        ' Recopier la table ou rq
        .Range("A2").CopyFromRecordset Rq
    End With
    
Fin:
    On Error Resume Next ' Au cas où la Rq ne serait pas encore ouverte
    Rq.Close
    Set oSht = Nothing
    Exit Sub

ErrCRqXL:
    AfficherMsgErreur Err, "CopierRqDansXL"
    Resume Fin

End Sub

signaler à un administrateur
Commentaire de Benouille le 12/01/2005 15:23:39

oula faut que je regarde ça.
c'est un truc générique le copy from recordset ?
ça peut être pas mal à utiliser si la gestion des droits s'avère insuffisante (ie si l'utilisateur n'a pas les droits sur la requete alors que l'applis les a).

je regarderais ça dans l'apres midi.
merci.

signaler à un administrateur
Commentaire de Benouille le 12/01/2005 15:38:03

visiblement il y a des soucis avec cette fonction
--------------------------------------------------------------------------------
Posté par : PIERRERAVAUX
le 08/08/2003 12:27:41
  Re : Exportation d'un recordset
Répondre à ce message - Imprimer ce message
--------------------------------------------------------------------------------
Bonjour,

J'ai un petit problème avec cette instruction Copyfromrecordset qui fonctionnait très bien avec une base ACCESS97 et qui ne fonctionne plus avec ACCESS2000

Est-ce à cause de cette library Microsoft Excel 9.0 que je n'ai pas sur mon poste.

Merci de votre aide

Cordialement
--------------------------------------------------------------------------------

en fait au dela de la version d'excel je suppose que le probleme vient plus de l'acces aux données. donc vérifie si ta fonction marche encore sur une version plus récente.
A part ça et le fait que cela ne récupère pas l'entete des champs, cela semble être assez simple comme méthode.

signaler à un administrateur
Commentaire de Patrice99 le 12/01/2005 15:47:14

Oui c'est générique, quelqu'un a fait une démo à ce sujet récemment :
www.vbfrance.com/code.aspx?ID=28744
En plus il est passé par ADODB, on n'est pas obligé de passer par Access, ca devrait donc marcher aussi en .Net

Je confirme que ca marche bien avec toutes les versions d'Access, je viens de livrer un logiciel avec à un client !

Par contre j'ai déjà rencontré un cas où ca ne marche plus sur un poste : on obtenait l'err n°430 (Requete ADO au lieu de DAO avec Excel 97 ???) et je n'ai jamais pu corriger cela (il faut reinstaller Excel dans ce cas je pense)

signaler à un administrateur
Commentaire de Benouille le 12/01/2005 16:04:18

je saurais m'en souvenir si je travaille avec un recordset local ou si pour une raison soudaine, l'utilisateur venait a avoir moins de droits que l'appli (mais avec moi il y a peu de chance: l'applis n'a pas de droits, seuls les droits utilisateurs comptent).

dans les autres cas ou je peux connecter excel à la base de données sans passer par vb, sachant en outre que cela permet une mise a jour ultérieure des données (une requete msquery pouvant être mise a jour), j'utiliserais msquery.

en plus en enlevant les options qui servent a rien, ça va un plus vite malgres tout (évite les entetes de colonnes); meme si je reconnais pour le coup que l'argument du gain de 4 secondes d'écriture de code peut être limite :)

a voir en perf aussi si c'est pareil, ou si c'est plus rapide.
En bref je garde les deux et je ferais selon le besoin ;)
merci pour ta réactivité et tes eclaircissements.

VBnouille

signaler à un administrateur
Commentaire de xtrusion le 27/01/2005 16:55:34

Salu!
Voici ma methode pr me connecter a ma base de données access :
========================================
Imports System.Data
Imports System.Data.OleDb
Imports System.Net

Public Class visudocs
    Inherits System.Windows.Forms.Form
    'declaration de la connection
    Private Connection As New OleDb.OleDbConnection
    'declaration du DataSet
    Private DtSet As New DataSet
    'declaration du dataAdapter
    Private Adapbiblio As New OleDb.OleDbDataAdapter("select Titre, Date, Public, Support, Thème, Service, Auteur, MaisondEdition, DatedePublication, RevuecontenantlArticle, Emplacement, NombredExemplaires, Résumé from Document order by Titre", Connection)

Private Sub visudocs_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        'on parametre la chaine de connection pour la base de donnée biblio.mdb
        Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & _
        "data source= " & Application.StartupPath & "\" & "biblio.mdb;"

        'rempli le dataset
        Adapbiblio.Fill(DtSet, "Document")

        'remplissage de la liste avec le dataset
        Dim Matable As DataTable
        Matable = DtSet.Tables("Document")
        Grid_docs.DataSource = Matable
end sub
========================================

Commen faire pr appliker cette premiere source déposée par benouille a mon projet sivouplé?

Je suppose ke tout se passe ici :
**************************
With xsSoldesComptes5.QueryTables.Add(Connection:= _
            "ODBC;DRIVER=SQL Server;SERVER=MonServeur;Integrated Security=SSPI;" & _
            "APP=Microsoft® Query;DATABASE=MaBase;Trusted_Connection=Yes" _
            , Destination:=xsSoldesComptes5.Range("A1"))
**************************
Mais commen faire?

C'est vraimen important les gars ! ;o)

Merci davance all !

signaler à un administrateur
Commentaire de Benouille le 28/01/2005 01:16:50

access n'est pas a proprement parlé un serveur, mais a priori ça ne change pas grand chose, remplace donc le nom du serveur de la base par tes noms et la proc stockée par ta requete et cela devrait marcher.

si cela ne fonctionne pas , va dans excel, ouvre une nouvelle macro, connecte toi depuis excel à ta base access, recupère le code et remplace le ici.
ça n'est pas plus compliqué que ça.
-----------------

signaler à un administrateur
Commentaire de xtrusion le 28/01/2005 13:50:43

merci a toi ms jcomprends pa commen tu ve ke je me connecte a ma bdd access a partir d'excel, ds outils macro, jvois pa koi faire, jpense avoir tout essayé ! :p

Et kd tu me dis de remplacer le nom du serveur par mes noms a moi, je mets koi ? g koi a remplacer conkretement steplé?

Merci de votre aide ! elle mé precieuse ! :p

signaler à un administrateur
Commentaire de xtrusion le 28/01/2005 13:54:07

paske la g mi ca ms ca marche pa, ca ouvre excel ms rien de plus :



With xsSoldesComptes5.QueryTables.Add(Connection:= _
            "ODBC;DRIVER=SQL Server;SERVER=Connection;Integrated Security=SSPI;" & _
            "APP=Microsoft® Query;DATABASE=biblio.mdb;Trusted_Connection=Yes" _
            , Destination:=xsSoldesComptes5.Range("A1"))

            .CommandText = "select * from Document"  ' ou la requete select * from machin si vous n'avez pas de proc


Merci les gars ! ;o)

signaler à un administrateur
Commentaire de Benouille le 28/01/2005 17:33:12

la macro sert a récupérer le code.

tu ouvres un nouvelle macro pour commencer l'enregistrement.

ensuite tu vas dans excel, données, données externes, nouvelle requete. la tu dois choisir une source de données, tu choisis MS Access DAtabase, tu pointes sur ton .mdb, et tu fais une requete bidon (select * from matable ou matable est le nom d'une table de ta base access). à la fin tu dois avoir les données de ta tables acces dans excel.

tu arrete ta macro et tu regardes dans le code de la macro la chaine de connection qu'il a utilisé, tu remplaces ma chaine de connection par la tienne et cela devrait fonctionner.

je suppose que tu devrais avoir une différence ici: ODBC;DRIVER=SQL Server; parceque tu ne vas pas passer par odbc mais oledb et pas prendre le driver prévu pour sql server mais celui pour access.

je n'ai pas access donc je ne peux pas tester pour toi, mais tu devrais t'en sortir en faisant les choses calmement et en lisant bien tout.

signaler à un administrateur
Commentaire de xtrusion le 31/01/2005 13:54:04

Merci a toi ! voici le code :

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin\biblio.mdb" _
        ), Array( _
        ";DefaultDir=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin;DriverId=25;FIL=MS Access" _
        ), Array(";MaxBufferSize=2048;PageTimeout=5;")), Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT Document.Titre, Document.Date, Document.Public, Document.Support, Document.Thème, Document.Service, Document.Auteur, Document.MaisondEdition, Document.NumRevue, Document.DatedePublication, Docu" _
        , _
        "ment.RevuecontenantlArticle, Document.Résumé, Document.Emplacement, Document.NombredExemplaires" & Chr(13) & "" & Chr(10) & "FROM Document Document" & Chr(13) & "" & Chr(10) & "ORDER BY Document.Titre" _
        )
        .Name = "Lancer la requête à partir de MS Access Database"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

Le soucis c kil me dit ke array est un type donc kil ne pe pa etre utiliser en tant qu'expression ... Et si je les vire les array, ca marche pa .... jcomprends pa ...
Ya kelke chose a faire ? ;o) toi t'en as pa ds ton code source des array .... moi jen ai partout ! lol

T'a pa une idée par hazard? :P

Merci davance !

signaler à un administrateur
Commentaire de Benouille le 31/01/2005 19:37:22

ah bin vi c'est plutot caca ton truc

la chaine de connection doit pas être si lourdement vétue, elle doit se retrouver quasi à poil: en string.

moi j'aurais fait comme toi: enlevé les tableaux (array)
"ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin\biblio.mdb;DefaultDir=C:\Documents and Settings\Administrateur\Bureau\Projet 2005\Projet 2005\Biblio[FAL62]\bin;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;",Destination:=Range("A1"))

idem plus bas
        .CommandText = "SELECT Document.Titre, Document.Date, Document.Public, Document.Support, Document.Thème, Document.Service, Document.Auteur, Document.MaisondEdition, Document.NumRevue, Document.DatedePublication, Document.RevuecontenantlArticle, Document.Résumé, Document.Emplacement, Document.NombredExemplaires FROM Document ORDER BY Document.Titre"

s'il attends du string, il faut lui passer du string.

vbnouille, grenouille en string

signaler à un administrateur
Commentaire de xtrusion le 01/02/2005 09:08:53

T'es trop le meilleur Benouille ! :P

Ca fonctionne a merveille !

Dernière question, promis apré je t'embete plus ! ;o)

Ma base de donnée doit pouvoir être deplacée, donc j'essaye de lui mettre un chemin relatif, et quelque soit ce que j'essaye ca marche pas ... Jvoudré simplement kelle soit définie par défaut dans le repertoire de l'executable .... Donc je fé :

(Connection:="ODBC;DSN=MS Access Database;DBQ=Application.StartupPath\biblio.mdb;DefaultDir=Application.StartupPath;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;", Destination:=listedocs.Range("A1"))

Ms il a pa l'air d'apprecier le Application.StartupPath ... J'essaye de le mettre entre "&" et tout ms il aime pa trop trop trop ca ! lol Alor ke ds ma chaine de connection a BDD ca fonctionne ...
J'ai essayé ca aussi ms sans succès :

DBQ=Application.StartupPath & " \ " & biblio.mdb;DefaultDir=Application.StartupPath

Si ta une idée merci, sinon, laisse tomber ;o) tu en a deja assez fé ! Merci pour tout! (jdiré bien a charge de revanche ms ... jriske pa de pouvoir t'aider en VB apparement ! :p ) LOL

signaler à un administrateur
Commentaire de Benouille le 01/02/2005 11:06:37

le principe ici d'utiliser msquery à la différence des solutions habituelles de remplissage d'une feuille excell par parcourt d'un recordset (ou dataset maintenant), c'est d'utiliser la puissance de msquery pour qu'il fasse lui meme l'acces a la bdd (ici access).

ça veut dire que tu crées un fichier un excel par le code, et ce fichier excel vit ensuite sa vie tout seul, pouvant meme rafraichir ses données avec la base sans intervention de ton programme qui l'a construit.

ça veut dire aussi puisqu'il n'est pas lié a ton programme, qu'il ne le connait pas, la chaine de connection sera donc créée une fois pour toute.
(mais tu peux la modifier depuis ton classeur xls créé).

si c'est au moment de l'instalation (création du doc excel dans le rep de l'application qui peut être n'importe ou  mais qui ne bougera jamais une fois posé) que tu veux déterminer le app.path alors la tu peux le faire.

pour ça faut lui passer une chaine string qui contienne le bon chemin. dans ta chaine tu lui passes en dur "application.startuppath", c'est pas malin: c'est la valeur chaine de application.startuppath qui est interressante pas son nom en lui meme.

autrement dit:
sConnection = "odbc ... " & app.path & " ....
ou la valeur de app.path est insérée au bon endroit.

attention: comme dit plus haut, la chaine de connection est ensuite figée dans excel.

ça me dérange pas de t'aider dans la mesure ou t'attends pas de moi que je resolve tes problemes ou que je te programme ton truc à ta place; dans la mesure ou tu reflechis et que tu cherches les solutions par toi meme avant de poser les questions.
bonne prog.

ouaip tu pourras pas m'aider en vb: je suis passé a vb.net ;)
mais c'est pas grave, tu pourras aider quelqu'un d'autre, c'est pas juste entre nous deux que ça se passe.

signaler à un administrateur
Commentaire de xtrusion le 01/02/2005 13:26:50

OK merci pr tout en tout cas ! La jvé chercher c juste un pb de syntaxe ...
++

signaler à un administrateur
Commentaire de xtrusion le 03/02/2005 09:47:56

bon ben voila, ca fonctionne a merveille ! Merci a vous tous car joré jamais pu y arriver tout seul ! :P

Jsé meme pa kommen vous avé été capable de faire un truc pareil ... ( et encore jme doute ke c pa ce kil y a de plus difficile a faire ... ms kd meme ! lol ) il me reste plus ka virer excel de la RAM automatikement pr eviter kil plante ...

MERCI surtout a BENOUILLE pr sa patience et ses connaissances ! ^^

++

signaler à un administrateur
Commentaire de Patrice99 le 03/02/2005 11:37:11

XLDOTNET : QUITTER EXCEL SANS LAISSER D'INSTANCE EN RAM
www.vbfrance.com/code.aspx?id=27541

signaler à un administrateur
Commentaire de guigui43 le 15/02/2005 11:13:50

J'ai pas cette librairie  Microsoft excel 9 !!!
Comment faire ou peut-on me l'envoyer?

signaler à un administrateur
Commentaire de DocPhiphi le 15/02/2005 22:08:23

Pour avoir la librairier Microsoft Excel 9 il faut avoir Excel installé sur son poste, donc l'acheter......

signaler à un administrateur
Commentaire de isame le 22/02/2006 18:12:47

bonsoir si quelqu'un pourrait m'aider
kan je l'excéute (application web) il me met une erreur
<System.UnauthorizedAccessException: Accès refusé. >
pourtant j'ai donné tous les droits

signaler à un administrateur
Commentaire de Benouille le 23/02/2006 14:59:32

faut croire que non ;Þ

signaler à un administrateur
Commentaire de isame le 23/02/2006 15:05:46

bah si
j'arrive a créer un fichier texte ou xml mais pas excel...
il bloque  à
     xlapp= new Excel.application

signaler à un administrateur
Commentaire de SR2 le 24/02/2006 11:56:11

essaies
dim xlapp as object
set xlapp=createobject("excel.application")

signaler à un administrateur
Commentaire de Benouille le 24/02/2006 15:37:43

t'es sur que t'as excel sur le serveur?

ça de mande de la configuration je crois pour les utiliser en distant

signaler à un administrateur
Commentaire de isame le 24/02/2006 15:49:23

oui j'ai excel 2000

signaler à un administrateur
Commentaire de cycofred0 le 28/08/2006 15:11:02


Sympa.

Pour ma part je cherche à balancer le contenu d'un gros tableau en mémoire dans Excel. Problème de performance avec : MyXL.Worksheets(X).cells(Y,Z).value = "BLAH BLAH"   qui rame à mort quand il y en a pour plusieurs milliers de lignes.

La méthode la plus rapide que j'ai trouvée est de générer d'exporter mon tableau en HTML, puis de l'importer dans un objet Excel (temps d'exécution passant de 3 minutes à 15 secondes par fichier). Question : y a t'il plus simple / plus rapide ?

Merci :-)

signaler à un administrateur
Commentaire de Benouille le 18/09/2006 14:52:09

cycofredo: c'est exactement le but de cette source

signaler à un administrateur
Commentaire de cycofred0 le 18/09/2006 15:15:51


Le code ci-dessus part d'une base de données. Dans mon cas je cherche à exporter vers Excel une matrice en mémoire, donc ODBC est proscrit (à moins d'exporter le contenu de ma matrice vers une base avec 50.000 "INSERT INTO" mais c'est aussi lent je présume...)

signaler à un administrateur
Commentaire de Patrice99 le 19/09/2006 15:59:48

Il est possible d'exporter via ODBC vers un fichier Excel, à condition que la première ligne contienne l'entete de chaque colonne (et c'est aussi une bonne idée d'ajouter une ligne d'exemple pour indiquer à Excel le type de donnée à recevoir), voir un exemple ici :
ODBCDotNet : Extraire des requêtes ODBC dans un tableau de tableaux de String
www.vbfrance.com/code.aspx?ID=34701
Je vais mettre à jour cette source prochainement.

signaler à un administrateur
Commentaire de cmd_raz le 16/02/2007 11:26:09

C'est trés pratique c'est sur la question; si j'ai un lien de foto et que je veux que la foto sois integre dans la feuille on ne peut pas le faire.

signaler à un administrateur
Commentaire de Benouille le 06/03/2007 20:52:32

ah

signaler à un administrateur
Commentaire de M51 le 07/06/2007 17:29:43

Salut,

je souhaite Exporter une DataTable vers Excel (cette DataTable est construite d'après des données de Dataset retravaillé)
Existe-t'il un moyen de ne pas passer par de la cellule à cellule ?
Le code ici doit se connecter à une base (voire base Access dans le cas de xtrusion)

Merci d'avance

signaler à un administrateur
Commentaire de Benouille le 11/06/2007 12:52:49

je ne vois pas de différence quelque soit la source des données.
reste juste à trouver la chaine de connection vers ton dataset à mon avis.

en même temps je l'ai jamais fait (datatable vers excel direct) et si j'avais à le faire, je crois que je ferais pas comme ça de toutes façons.


je pense que tu dois avoir un moyen simple de le faire, essaie par exemple de mettre ta datatable dans la 1ère cellule. il se pourrait qu'excell s'aperçoive qu'il s'agit d'un tableau et te le dispatche tout seul.

Dans tous les cas il doit y avoir une méthode plus rapide, moins pénible et surtout moins vilaine que le remplissage cellule par cellule.


Benouille, quelques grammes de grenouille dans un monde de brute

signaler à un administrateur
Commentaire de greg38bj le 20/12/2007 22:45:58 10/10

salut
cette source m'a été trés utile, mais j'aimerais pouvoir changer une image présente sur ma feuille excel par cette méthode.
Est ce possible ?
l'enregistreur de macro ne me fait rien sur les images ...
merci de m'aider si cela est possible

greg38bj

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.