Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1651 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VB] Lancer excel à partir d'un programme VB [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB] Lancer excel à partir d'un programme VB [Résolu]

n°1537956
Aquineas2
Damoiseau
Posté le 03-04-2007 à 16:21:13  profilanswer
 

Bon le problème doit vraiment être tout con, mais aucun des bouts de code que j'ai trouvé sur internet ne marchent pas.
donc, mon problème est que je veux créer un tableau excel à partir de données récupérées par mon programme VB développé sous visual studio 2005.
En cherchant j'ai trouvé :  
 

Code :
  1. Dim appExcel As Excel.Application
  2. Dim wbExcel As Excel.Workbook
  3. Dim wsExcel As Excel.Worksheet
  4. Set appExcel = CreateObject("Excel.Application" )
  5. appExcel.Workbooks.Add
  6. Set wbExcel = appExcel.ActiveWorkbook
  7. Set wsExcel = wbExcel.ActiveSheet


 
Qui devrait marcher normalement, mais lors de l'execution, VS2005 me dit  :
"Ancien format ou bibliothèque de types non valide. (Exception de HRESULT : 0x80028018 (TYPE_E_INVDATAREAD))"
 
C'est le code qui est mauvais? ou bien c'est moi qui ai oublié de configurer certains points de mon projet? Merci d'avance pour votre aide!


Message édité par Aquineas2 le 04-04-2007 à 17:56:38
mood
Publicité
Posté le 03-04-2007 à 16:21:13  profilanswer
 

n°1537970
aprilthe5i​th
Posté le 03-04-2007 à 16:37:07  profilanswer
 

Est-ce que dans ton éditeur, dans 'Outils/Références, "Microsoft Excel ... Object Library" est cochée ?

n°1537973
Aquineas2
Damoiseau
Posté le 03-04-2007 à 16:46:11  profilanswer
 

j'ai rajouté la librairie object excel 10.0
et dans imported namespace, "excel" est coché.


---------------
Le marketing aussi peut être solidaire. | La passion des p'tites images
n°1537980
tegu
Posté le 03-04-2007 à 16:56:40  profilanswer
 

Dites, pour les vieux comme moi, vous pourriez préciser en titre qu'il s'agit de VB.NET, histoire que je ne cherche pas :)

n°1537983
Aquineas2
Damoiseau
Posté le 03-04-2007 à 16:58:44  profilanswer
 

heu nan, j'pense pas... j'suis en visual basic simple... ou alors ya une notion qui m'a échappé :(


---------------
Le marketing aussi peut être solidaire. | La passion des p'tites images
n°1537987
tegu
Posté le 03-04-2007 à 17:00:25  profilanswer
 

C'est moi qui ai mal lu, désolé.
(carrément gâteux là :) )

 

edit: attend si je vois ton commentaire « imported namespace », c'est quoi en VS2005 ? l'équivalent de Outils/Référence en VB6 pê ?


Message édité par tegu le 03-04-2007 à 17:06:02
n°1537993
Aquineas2
Damoiseau
Posté le 03-04-2007 à 17:08:08  profilanswer
 

C'est ce que j'ai entouré en rouge en bas  :
 
http://www.aquineascollection.com/vhdwebpack/vhd/aquineas/excel.jpg


---------------
Le marketing aussi peut être solidaire. | La passion des p'tites images
n°1538010
aprilthe5i​th
Posté le 03-04-2007 à 17:34:32  profilanswer
 

Et pourquoi, tu ne coderais pas directement dans l'editeur vb d'Excel ?

n°1538017
aprilthe5i​th
Posté le 03-04-2007 à 17:39:43  profilanswer
 

Et ca, ca marche ?
 
sub test()
 
Dim Wbk As Workbook, Wsht As Worksheet
Dim Exc As New Excel.Application
Workbooks.Add
Set Wbk = ActiveWorkbook
Set Wsht = Wbk.Worksheets(1)
 
end sub

n°1538035
MagicBuzz
Posté le 03-04-2007 à 17:51:36  profilanswer
 

Vu que ça me lourdait un max, après avoir galéré quelques jours avec ce problème, j'ai opté pour la bonne grosse méthode bien bidon :
 

Code :
  1. public static void ExcelExport(DataSet ds)
  2.         {
  3.             object winStyle = IWshRuntimeLibrary.WshWindowStyle.WshHide;
  4.             object wait = (object)true;
  5.             ds.WriteXml(string.Format(@"{0}\export.xml", Application.StartupPath), XmlWriteMode.WriteSchema);
  6.             IWshRuntimeLibrary.WshShellClass shell = new IWshRuntimeLibrary.WshShellClass();
  7.             shell.Run(string.Format("wscript \"{0}\\ds2xls.vbs\" \"{0}\\export.xml\"", Application.StartupPath), ref winStyle, ref wait);
  8.             File.Delete(string.Format(@"{0}\export.xml", Application.StartupPath));
  9.         }


 


Option Explicit
 
' Titre : DS2XLS
' Auteur : MagicBuzz
' Version : 1.0
' Date : 10-05-2006
'
' Script VBS qui génère un document Excel à partir d'un extract "ToXml()" d'un Objet DataSet de .NET
' Ce script est censé fonctionner sur n'importe quelle version de Windows, et n'importe quelle version d'Excel
' Bon, rien n'est garanti non plus hein...
 
' Constantes
' Ces GUID génériques ont l'avantage d'être identiques pour toutes les versions
' Il faut alors faire confiance à Microsoft pour ne pas changer la structure des objets d'une version à l'autre
Const EXCEL_GUID = "Excel.Application"
Const MSXML_GUID = "MSXML.DOMDocument"
 
' Méthodes
Sub Main()
    ' Excel objects
    Dim xls
    Dim wkb
    Dim sht
     
    ' DOM objects
    Dim dom
    Dim declaration
    Dim table
    Dim colonne
    Dim ligne
     
    ' Common variables
    Dim args
    Dim filename
    Dim tabName
    Dim arrColonnes()
     
    ' Compteurs
    Dim i
    Dim j
     
    ' On récupère le nom du fichier XML à traîter
    Set args = WScript.Arguments
     
    If args.Count <> 1 Then
        MsgBox("Nombre d'arguments incorrects : 1 attendu" )
        Exit Sub
    End If
    filename = args(0)
     
    ' Création d'une instance d'Excel
    Set xls = CreateObject(EXCEL_GUID)
 
    ' On ne l'affiche pas
    'xls.Visible = True
     
    ' Ajout d'un espace de travail (par défaut, Excel s'ouvre vide)
    Set wkb = xls.Workbooks.Add()
     
    ' L'espace de travail contient de base 3 sheets. On en vire deux et on renomme la dernière
    ' En effet, un espace de travail doit au moins toujours contenir une feuille...
    For i = wkb.WorkSheets.Count To 2 Step -1
        wkb.WorkSheets(i).Delete
    Next
    wkb.WorkSheets(1).Name = "tmpSheet"
     
    ' Ouverture du document XML contenant les données du dataset à sauvegarder
    Set dom = CreateObject(MSXML_GUID)
    dom.Load filename
     
    ' Recherche du tag de description des DataTables
    Set declaration = dom.DocumentElement.SelectNodes("xs:schema/xs:element/xs:complexType/xs:choice/xs:element" )
     
    ' C'est parti !
    For Each table In declaration
        tabName = GetAttributeByName(table, "name" )
        Set sht = wkb.WorkSheets.Add()
        sht.Name = tabName
 
        ReDim arrColonnes(1)
        i = 0
        For Each colonne In table.SelectNodes("xs:complexType/xs:sequence/xs:element" )
            i = i + 1
            ReDim Preserve arrColonnes(i)
            ' En-tête
            arrColonnes(i) = GetAttributeByName(colonne, "name" )
            sht.Cells(1, i).Value = GetAttributeByName(colonne, "name" )
            sht.Cells(1, i).Interior.ColorIndex = 36
            sht.Cells(1, i).Font.Bold = True
            ' Formattage du type de la colonne
            Select Case GetAttributeByName(colonne, "type" )
                Case "xs:string"
                    sht.Columns(i).NumberFormat = "@"
                Case "xs:decimal"
                    sht.Columns(i).NumberFormat = "0.00"
                Case Else
                    ' Ouais, ben désolé, moi je me sert que de string et decimal...
                    sht.Columns(i).Interior.ColorIndex = 3
                    MsgBox("Type inconnu : " & GetAttributeByName(colonne, "type" ))
            End Select
        Next
         
        ' Maintenant, on parcours l'ensemble des éléments correspondant au datatable en cours de lecture
        j = 1
        For Each ligne In dom.DocumentElement.SelectNodes(tabName)
            j = j + 1
            For i = 1 To UBound(arrColonnes)
                ' On recopie bêtement le contenu du tag portant le nom de la colonne désirée
                sht.Cells(j, i).Value = ligne.SelectSingleNode(arrColonnes(i)).Text
            Next
        Next
         
        ' Ca c'est pour faire joli (si faire se peut)
        sht.Columns.EntireColumn.AutoFit
    Next
     
    ' Vous vous rappelez de la sheet renommée ? Ben on la zigouille maintenant
    wkb.WorkSheets("tmpSheet" ).Delete
     
    ' On indique qu'on ferme l'espace de travail en enregistrant le document (une popup d'enregistrement apparaît)
'    wkb.Close(true)
     
    ' On quitte Excel
'    xls.Quit
    xls.Visible = True
End Sub
 
Function GetAttributeByName(node, attributeName)
    ' Impossible d'utiliser les collections nommées en VBS. Du coup on fait avec les moyens du bords...
    Dim tmpRet
    Dim att
 
    tmpRet = ""
 
    For Each att in node.attributes
        If att.Name = attributeName Then
            tmpRet = att.Value
            Exit For
        End If
    Next
     
    GetAttributeByName = tmpRet
End Function
 
' Démarrage du programme
Call Main()

mood
Publicité
Posté le 03-04-2007 à 17:51:36  profilanswer
 

n°1538065
Aquineas2
Damoiseau
Posté le 03-04-2007 à 18:29:28  profilanswer
 

aprilthe5ith a écrit :

Et ca, ca marche ?


 
Nan, ça ne marche pas, il comprends pas Workbooks.Add()
Quant à faire du VB directement dans excel je pense pas que ça marchera, car j'ai besoin de traiter sous excel les données obtenues par un programme complexe en VB.
 
 


Pour l'instant ça ne marche pas non plus, j'vais essayer de traffiquer dans tous les sens pour voir...
 
Merci pour votre aide en tous cas!
 


---------------
Le marketing aussi peut être solidaire. | La passion des p'tites images
n°1538172
kiki29
Posté le 04-04-2007 à 03:56:09  profilanswer
 


Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim AppExcel As Excel.Application
 
        AppExcel = New Excel.Application()
        AppExcel.Workbooks.Add()
        AppExcel.Visible = True
        ....
    End Sub
End Class

n°1538184
Aquineas2
Damoiseau
Posté le 04-04-2007 à 07:40:57  profilanswer
 

Nan j'ai toujours le même problème, pour la commande "   AppExcel.Workbooks.Add()", il me marque
 
"Ancien format ou bibliothèque de types non valide. (Exception de HRESULT : 0x80028018 (TYPE_E_INVDATAREAD))"
 
Donc j'me demande si c'est pas mon projet que j'ai mal parametré, mais j'vois pas ce qu'il manque...


---------------
Le marketing aussi peut être solidaire. | La passion des p'tites images
n°1538201
kiki29
Posté le 04-04-2007 à 09:23:11  profilanswer
 
n°1538217
tegu
Posté le 04-04-2007 à 09:47:41  profilanswer
 

J'ai du mal à imaginer quel genre de paramétrage pourrait amener ces symtômes.
La version d'Excel installée est-elle particulière ? installée dans un contexte particulier ? Y a-t-il eu des réinstallations de plusieurs versions successives ? Est-ce en environnement TSE/Citrix ou une plateforme non traditionnelle ? Quels autres logiciels Microsoft non Office sont installés ?
J'essaie de trouver d'autres orientations à nos recherches.

n°1538234
kiki29
Posté le 04-04-2007 à 10:10:19  profilanswer
 
n°1538513
Aquineas2
Damoiseau
Posté le 04-04-2007 à 17:22:23  profilanswer
 

Merci kiki29, ça marche. Le code :  
 
 Dim oApp As New Excel.Application()
        oApp.Visible = True
        oApp.UserControl = True
        Dim oBooks As Object = oApp.Workbooks
        Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US" )
        oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
 
Le problème vient de la localisation windows/excel enfait.  
 
Merci à tous!  :hello:


---------------
Le marketing aussi peut être solidaire. | La passion des p'tites images

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VB] Lancer excel à partir d'un programme VB [Résolu]

 

Sujets relatifs
[RESOLU] Erreur dans galerie en JavaScript.[html/css/js ??] script de screenshot [resolu]
[résolu] scriptaculous qui fonctionne sous IE mais pas firefox ?erreur de boucle with ? [résolu]
Exécution d'un programme C sur serveur Free [RESOLU]Contrôler une base SQL depuis Excel
VBA - Afficher image issue xls dans userform - Résolu.[VBS] [résolu]Pb avec fonction STRCOMP
[RESOLU] controler l'existance d'un répertoire 
Plus de sujets relatifs à : [VB] Lancer excel à partir d'un programme VB [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR