Lancer macro vba à partir de vb.net dans un classeur excel déjà ouvert .....

imran_6144 Messages postés 15 Date d'inscription jeudi 19 septembre 2019 Statut Membre Dernière intervention 29 septembre 2019 - 23 sept. 2019 à 17:34
imran_6144 Messages postés 15 Date d'inscription jeudi 19 septembre 2019 Statut Membre Dernière intervention 29 septembre 2019 - 29 sept. 2019 à 08:41
Bonjour,

Je travail avec vb.net.
Je lance à partir de vb.net en"run" une macro VBA dans 1 classeur fermé (nommé "PREMIERE"):

ApExcel.Run("PREMIERE.xlsm!Module1.ESSAI").

Ça fonctionne impeccable puisque la macro s’exécute (en ouvrant le classeur). C'est pourquoi il faut qu'il soit fermé avant. Si il n'est pas fermé avant, le code l'ouvre en lecture seule...

Or, je voudrais l’exécuter dans le classeur déjà ouvert!!!!!
(j'ai essayé un certain nombre de choses.........)

Précision:

Voilà comment j'ouvre et travaille dans ce classeur (avant....)

Dim ApExcel As New Excel.Application
Wk2 = ApExcel.Workbooks.Open("C:\Users\Machin\Documents\PREMIERE.xlsm")

Si une âme charitable prends peine, merci d'avance

1 réponse

cs_Le Pivert Messages postés 7822 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 16 septembre 2022 133
23 sept. 2019 à 18:30
0
imran_6144 Messages postés 15 Date d'inscription jeudi 19 septembre 2019 Statut Membre Dernière intervention 29 septembre 2019
23 sept. 2019 à 18:55
Merci,
Mais le code proposé ouvre également le classeur....donc en lecture seule aussi....
si il est déjà ouvert....

Je cherche le code qui ne ferait que lancer la macro....sans ouvrir le classeur.....
0
cs_Le Pivert Messages postés 7822 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 16 septembre 2022 133
Modifié le 24 sept. 2019 à 08:01
et si tu ne mets que cela:

 Dim ApExcel As New Excel.Application
       ApExcel.Run("PREMIERE.xlsm!Module1.ESSAI")
0
imran_6144 Messages postés 15 Date d'inscription jeudi 19 septembre 2019 Statut Membre Dernière intervention 29 septembre 2019
24 sept. 2019 à 11:22
Bonjour,
D'abord merci, mais le problème demeure.....

C'est exactement ce que je mets.
Mais c'est une ouverture de fichier, puisqu'il l'ouvre en lecture seule.

J'ouvre le fichier avant dans le "load" de mon form ainsi:
Wk2 = ApExcel.Workbooks.Open("C:\Users\Machin\Documents\PREMIERE.xlsm")

Peu importe la façon dont j'ouvre le fichier avant.

Une chose est sure, c'est que la ligne de commande que tu suggère et que j'utilise déjà:
ApExcel.Run("PREMIERE.xlsm!Module1.ESSAI")

Fonctionne parfaitement quand le fichier est fermé.
C'est mon drame du moment car je vais avoir d'autre sub VBA à piloter dans différents Evénements de mon code VB.NET.
Je ne peux pas les transcrire en VB.NET pour l'instant.

Je suis convaincu que si il lance bien la macro VBA dans le fichier fermé, il faut juste qu'il sache que le fichier est déjà ouvert.

Je sais que de sub vba à sub vba si tu fais un application.run, il ne cherche pas à réouvrir le classeur de destination.

Je vais faire des recherches vers le Get(objetcs,......

Si tu as quelque chose, je te congratule d'avance
0
cs_Le Pivert Messages postés 7822 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 16 septembre 2022 133
24 sept. 2019 à 16:17
Essaie cela:

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'Créer une instance de Excel
        Dim ApExcel As New Excel.Application
        Dim wbExcel As New Excel.Worksheet
        'Ouvrir un  classeur
        ApExcel.Workbooks.Open("C:\Users\LePivert\Documents\Classeur1.xlsm")'a adapter
        'rendre le classeur visible
        ApExcel.Visible = True
    End Sub
 Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        'Créer une instance de Excel
        Dim ApExcel As New Excel.Application
        Dim wbExcel As New Excel.Worksheet
        ApExcel.DisplayAlerts = False
        ApExcel.Workbooks.OpenText("C:\Users\LePivert\Documents\Classeur1.xlsm")'a adapter
        ApExcel.Run("Classeur1.xlsm!Module1.essai")'a adapter
        ApExcel.DisplayAlerts = True
        ApExcel.Workbooks.Close() 'on ferme le classeur
        ApExcel.Visible = False
        ApExcel.Quit() 'on ferme Excel
    End Sub


Voilà

@+ Le Pivert
0
imran_6144 Messages postés 15 Date d'inscription jeudi 19 septembre 2019 Statut Membre Dernière intervention 29 septembre 2019
24 sept. 2019 à 17:16
0