Solidworks API : Création d'un fichier Excel

Set xlApplication = CreateObject("Excel.Application")
    xlApplication.Visible = True
    DoEvents
    Set xlWorkBook = xlApplication.Workbooks
    xlWorkBook.Add
    Set xlFeuilEnse = xlApplication.ActiveSheet
    DoEvents
    
    'Création et renommage des feuilles
    
    Set xlFeuilMeca = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))
    Set xlFeuilComm = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))
    xlFeuilEnse.Name = "ENSEMBLES"
    xlFeuilMeca.Name = "PIECES MECANIQUES"
    xlFeuilComm.Name = "ELEMENTS DU COMMERCE"

Bonjour,

 

Je suis entrain de réaliser une macro afin de créer un fichier excel et de lui ajouter des informations. J'ai un souci sur la création du fichier excel.

Macro marche 1 fois sur 2 et 1 fois sur 2 strictement. C'est dans ma création de mon fichier que je pense il y a un souci mais j'ai regardé sur le net et j'ai rien trouvé.

 

Quelqu'un peut-il m'aider ?

Voici mon bout de code pour la création du fichier excel :

 

 

 

J'ai peu être eu le même problème récemment, regarde les processus, après l'utilisation de ta macro si excel es toujours en cours d'utilisation c'est que tu ne ferme pas complètement le process et il se met en erreur au deuxième lancement

https://www.lynkoa.com/forum/solidworks/probl%C3%A8me-s%C3%A9lection-fichier-api

 

par exemple a la fin de ta macro : 

Sub FermetureExcel()

    Set xlFeuilMeca = Nothing
    Set xlFeuilComm = Nothing

    'Fermeture du classeur et de Excel
    oXL.DisplayAlerts = False
    oXL.Workbooks.Close
    oXL.Quit
    oXL.DisplayAlerts = True
    'Désallocation de la mémoire
    Set oSH = Nothing
    Set oWB = Nothing
    Set oXL = Nothing
End Sub

 

Cordialement,

2 « J'aime »

Bonjour,

Comme l'a dit mandragore, et comme signalé sur le lien auquel il renvoi :

" ça sent la ressource Excel qui n'est pas libérée !!! "

Cordialement,

Bonjour,

 

Merci pour ta réponse. C'est ça mais le souci c'est qu'à la fin de ma macro je ne veux pas fermer excel. Je veux qu'il reste ouvert.

 

Cordialement,

J'ai essayé de rajouter à la fin de ma macro :

Set xlSheet = nothing

Set xlWB = nothing

Set xlApp = nothing

Mais rien n'y fait.

Peut on libérer la ressource Excel sans fermer excel ?

 

D'avance merci,

Si tu relance la macro et que c'est toujours sur le même fichier il ne peu pas crée deux fois la page 'ENSEMBLES', 'PIECES MECANIQUES' et 'ELEMENTS DU COMMERCE'

 

Met une condition, si les page n'existe pas elle sont crée.

Ta macro rempli ton fichier excel a chaque fois que tu clic suivant l'assemblage qui es ouvert, tu crée/ouvre un nouveau fichier excel a chaque fois ou tu stock toutes les informations sur un seul et même fichier ?

Je crée un fichier excel à chaque fois que je lance ma macro.

Je sais que c'est un problème de ressource excel non libérée. J'ai essayé de fermer mon fichier excel via excel lorsque ma macro est terminée et de relancer ma macro mais j'ai toujours le même problème.

Existe-t-il un test qui permet de savoir si la ressource est libérée et si elle n'est pas libérée de la libérer ?

essaye avec :

Set xlWorkBook = Nothing

Set xlFeuilEnse = Nothing

Set xlFeuilMeca = Nothing 

Set xlFeuilComm = Nothing

 

Il faut remettre a zéro tous ce que tu définie plus haut.

Il faut regarder dans les processus, une fois que tu a fermer les excel va dans ton gestionnaire de taches (Ctrl + MAj + Echap) -> Processus    et vérifie qu'il ne reste pas de EXCEL.EXE

J'ai déjà essayé.

Je l'ai mis à la fin de ma macro... Mais ne marche pas.

J'ai essayé de déclarer mon application excel comme une nouvelle application excel mais marche pas non plus :

Dim xlApplication as New Excel.Application

J'ai bien un processus Excel qui est présent. Et je pensais que le processus s'arrêtait lorsque je fermais manuellement excel mais apparemment pas. 

Peut-être que c'est mon ajout qui est mauvais ?

Set xlFeuilMeca = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))
Set xlFeuilComm = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))

Bonjour

 

J'ai déjà eu ce problème également.

La seule solution que j'ai trouvé jusqu'alors est de tuer le processus Excel à la fin du traitement.

Sinon il est comme perdu entre les deux process Excel présents et ne sais pas dans lequel tourner et prend de manière indifférente le bon ou le mauvais.

Seule explication que j'ai trouvé avec mes quelques connaissances VB.

Cordialement

 

A. Mendes

 

 

 

Ca dépend comment sont déclarées tes variables :

Dim xlFeuilMeca As ...

Dim xlFeuilComm As ...

Es-tu aller voir l'avant dernier post du lien que ta mis mandragore, tu y trouveras quelques informations utiles ...

Tu peux aussi aller voir ICI, il y a pas mal d'infos sur la méthode à utiliser.

Cordialement,

Elles sont déclarées comme ça :

Dim xlFeuilMeca                                             As Excel.Worksheet
Dim xlFeuilComm                                             As Excel.Worksheet
Dim xlFeuilEnse                                             As Excel.Worksheet

J'ai changé ma manière de créer mes feuilles comme ceci :

    xlApplication.Sheets.Add
    xlApplication.Sheets.Add
    Set xlFeuilEnse = xlApplication.ActiveSheet
    xlFeuilEnse.Name = "ENSEMBLES"
    Set xlFeuilMeca = xlApplication.Sheets(2)
    xlFeuilMeca.Name = "PIECES MECANIQUES"
    Set xlFeuilComm = xlApplication.Sheets(3)
    xlFeuilComm.Name = "ELEMENTS DU COMMERCE"

 

Je n'ai plus de bug à cet endroit mais j'en ai un sur la mise en forme de mon tableur à cette ligne :

xlFeuilMeca.ListObjects.Add(xlSrcRange, Range(xlFeuilMeca.Cells(5, 1), xlFeuilMeca.Cells(i - 1, 7)), , xlYes).Name = "Tableau1"

 

Etant donné que le problème est que sur de la mise en forme et que mon excel est correctement rempli on va dire que ce problème est "acceptable"...

Je pense avoir trouvé le problème : mon IMPATIENCE

Apparemment je relançais la macro trop vite ce qui ne laissait pas le temps au processus de s'arrêtait.