Lire un excel fermé depuis SolidWorks en VBA (SW 2016)

Salut,

J'aimerais alimenter la liste d'une ComboBox par un Excel sans ouvrir l'Excel en question (ma ComboBox se trouvant dans une macro SolidWorks).

Il me faut donc réussir à lire depuis SolidWorks, des cellules dans un Excel Fermé.

 

Dans Excel, pour lire une cellule dans un autre Excel fermé, on utilise le code VBA suivant :

'Lecture de la cellule A1 dans la Feuil1 du classeur fermé				
MsgBox ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R1C1") 

Quand j'essaye d'utiliser ce code dans SolidWorks, j'ai une erreur de compilation qui dit que la fonction ExecuteExcel4Macri n'est pas définie.

 

Quelqu'un aurait une solution ?       Merci d'avance pour votre aide.

voir ce lien 

https://www.developpez.net/forums/d1388072/logiciels/microsoft-office/excel/macros-vba-excel/macro-copier-plage-d-fichier-excel-ferme/

@+

3 « J'aime »

Bonjour,

Je pense, comme expliqué dans le lien donné par gt22, qu'il te sera plus facile de travailler sur un fichier Excel ouvert. Tu peux ouvrir ce fichier Excel, le manipuler, l'enregistrer puis le refermer par programmation dans ta macro sans afficher la fenêtre Excel donc de manière transparente pour l'utilisateur.

Cordialement,

2 « J'aime »

il faut surtout enregistrer le fichier excel cible

C'était tout bête ...je récupère le chemin complet avec ActiveWorkbook.Path et ça marche impec maintenant...La seule condition est que mes fichiers sources soient dans le même dossier ou un sous-dossier du classeur...pas grave...Merci encore! J'ai bêtement perdu quelques jours

sous le meme dossier ou sous dossier  pour que les liens fonctionne bien

d'apres ce que j'ai compris ;-(

@+

1 « J'aime »

Si vraiment tu veux le faire sur un Excel fermé, voir : http://silkyroad.developpez.com/VBA/ClasseursFermes/ mais il y a l'air d'y avoir pas mal de restrictions sur les possibilités ...

2 « J'aime »

Il ne vous manquerait pas les références Microsoft.Interop.Office et Microsoft.Interop.Excel par hasard?

Si ces référence ne sont pas activées, vous ne pouvez pas utiliser la fonction ExecuteExcel4Macro() puisque elle n'existe dans aucun assembly référencé.

3 « J'aime »

Merci Yves.T,

Il me maquait la référence "Microsoft Excel XX.X Object library".

Comment fait-on pour savoir quelles références sont nécessaires pour quel code ??

 

Sinon, pour alimenter ma Combobox j'ai utilisé le code suivant : 

Private Sub UserForm_Initialize()
Dim i As Byte
Dim e As String

i = 1
Do
    ComboBox1.AddItem ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R" & i & "C1")
    i = i + 1
    e = ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R" & i & "C1")

Loop While Len(e) > 1

End Sub

Pensez-vous que l'on peut faire un code plus simple ?

Pourquoi pas en utilisant un "ComboBox1.RowSource" que je n'ai pas réussi à combiner avec le ExecuteExcel4Macro() ?

C'est pas compliqué :

Si vous utilisez une procédure ou une fonction que vous avez créé, il n'y a pas de référence à ajouter.

Si vous utilisez une procédure ou une fonction que vous n'avez pas créé, il faut ajouter une référence.

Appuyer sur F1 quand le curseur est sur une instruction permet d'ouvrir l'aide sur cette fonction / procédure. Son assembly est indiqué dans l'aide.

Plus généralement, si vous devez utiliser excel, il faut la référence vers Office (qui fournit les objets de base pour les applications Office) et une référence vers Excel (pour avoir accès aux objets, procédures et fonctions spécifiques d'Excel)

Si vous utilisez Word, il faut la référence vers Office et Word.

Pour simplifier votre macro, mis à par si l'on peut passer en paramètre à la fonction ExecuteExcel4Macro() une plage, elle devrait retourner un tableau de String. Il ne reste qu'à binder le tableau à la propriété RowSource du combobox. (A vérifier que la valeur retournée par la macro est bien un tableau de String sinon, le convertir)

Il est aussi possible de faire comme dans le lien proposé par d.roger.

Utiliser ADO pour ça, c'est un peu comme utiliser une arme nucléaire pour tuer un moustique mais c'est largement fesable. (du moment que l'on comprend le principe d'ADO)

Pour faire simple, ADO est un ensemble d'outils permettant d'accéder à des données que ce soit une base de données SQL ou Access, un fichier Excel, ...

Il utilise un moteur de base de données, des requêtes SQL et un pointeur pour aller chercher les données. On ouvre une connection en spécifiant le moteur de base de données à utiliser et le fichier, on pose une question au moteur de base de données (la requête SQL) et on parcours le résultat de la requête avec le pointeur.

2 « J'aime »

OK merci pour ces informations Yves.T,

Pour la méthode ADO, c'est ce que je voulais éviter d'utiliser : méthode inadéquate (trop puissante pour le simple truc que je veux faire).

Du coup je vais rester sur la fonction ExecuteExcel4Macro().