Extraction depuis excel

Bonjour,
depuis solidworks je lance une macro avec un usf qui doit afficher à l’ouverture des valeurs d’un classeur excel sans l’ouvrir

ce code fonctionne dans excel
récupère la cellule H2 de l’onglet ‹ Liste ›

sub Excel_test()
Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
Cells(1, 10) = ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée

end sub

depuis Solidworks j’ai cette erreur
Erreur d’exécution ‹ 1004 ›:
La méthode ‹ Range › de l’objet ‹ _Global › a échoué

Private Sub UserForm_Initialize()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks

Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
label3= ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée
end sub

si quelqu’un a une idée

Bonjour ;
Ne manquerait-il pas les déclaration/références pour Excel ?

`Dim xlApp As Excel.Application
Set xlApp = New Excel.Application`

Voir (pour plus d’informations) :

3 « J'aime »

j’ai rajouté

Dim xlApp As Excel.Application
Set xlApp = New Excel.Application`

cela ne fonctionne pas plus

Bonjour,

Sauf erreur de ma part, en VBA, il n’est pas possible d’accéder au contenu d’un fichier Excel sans l’ouvrir.
Si c’est pour un genre de « base de donnée » pour alimenter une liste déroulante par exemple, le plus simple est d’écrire ça dans un fichier texte et de le lire.

1 « J'aime »

je viens de tester c’est possible sur excel, je ne trouve pas la correspondance avec Solidworks

sub Excel_test()
Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
Cells(1, 10) = ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée

end sub

et en remplaçant

Cells(1, 10) = ExecuteExcel4Macro(.....

par

Set xlapp = CreateObject("Excel.application")
Label13 = xlapp.ExecuteExcel4Macro(.....

des pistes relativement identiques ici :

1 « J'aime »

Je viens de tester, donc ça fonctionne effectivement sur Excel mais sur SW non (erreur à la ligne range).
En première approche je pense que c’est un problème de compatibilité entre SW qui est en 64bit et Office en 32bit.

essayez avec
GetObject(« Excel.Application »)
à la place de
CreateObject(« Excel.Application »)
… il faut aussi penser à « tuer » tous les processus excel residuels :
shell « TASKKILL /F /IM Excel.exe », vbHide
A voir aussi :

mais aussi :

C’est pas tant la ligne ExecuteExcel4Macro qui plante mais l’appel à Range.

Le message d’erreur est le suivant, comme cité
La méthode ‹ Range › de l’objet ‹ _Global › a échoué

Bonjour,

La méthode range n’étant pas gérée via la version de vba intégrée à SW il reste deux solutions (pas testée la seconde à ce stade):

  1. Créer une boucle avec une fonction de récupération de chaque colonne/ligne souhaitées, voir ExecuteExcel4Macro - Communauté Microsoft

  2. Essayer les fonctions de type ADODB.Connection, voir Lire et écrire dans les classeurs Excel fermés (developpez.com)

Je n’ai donc testé que la première qui fonctionne correctement.

2 « J'aime »

peux tu mettre la macro adaptée, je n’y arrive pas avec la solution 1

Tu peux juste m’indiquer sur quelle plage tu veux récupérer les valeurs? (type A1:C2 par exemple)

voila mon code original qui ne fonctionne pas, H2

Private Sub UserForm_Initialize()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks

Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
label3= ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée
end sub

Pour bien comprendre, tu veux juste la cellule H2?

oui

Dans ce cas, beaucoup plus simple:

label3= ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & "R2C8") 'URL entrée
1 « J'aime »

super, ça fonctionne

voici un autre exemple pour ceux que ça intéresse

Label2 = ExecuteExcel4Macro("'" & url & "[" & Fichier_Excel & "]Liste'!" & "R11C8") & "\" & _
         ExecuteExcel4Macro("'" & url & "[" & Fichier_Excel & "]Liste'!" & "R11C7") & _
         "-STEP\"  'URL sortie
2 « J'aime »

C’est tout de même etrange que la fonction " ExecuteExcel4Macro" accepte des coordonnée de tableau type « Row »+« Column » mais pas le "Range…Les joies de l’informatique et ses mystères… :crazy_face:

1 « J'aime »

Comme je l’ai dit je pense que l’API SW est sur des fonctions 64 bit là où dans Excel c’est du 32.
Si Excel était en 64 je pense qu’il n’y aurait pas de problème.
J’ai le cas de certaines macros qui ne peuvent se lancer que depuis SW et sont en erreur si je les lancent depuis Excel

2 « J'aime »