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
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,......
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
Désolé l'image est partie avant le texte, que j'ai bien évidemment perdu!
Pour faire court:
J'ai reconduit ta syntaxe (très intéressante) à l'identique.
Le problème persiste.
L'idée est bonne mais le ApExcel.DisplayAlerts = False occulte l'ouverture (malgré tout) en lecture seule...
La macro ne s’exécute pas....
Le point positif c'est qu'il n'y a pas de message d'erreur VB.NET...à la fin.
Perso, j'ai choisi de ne pas fermer le classeur, mais cela ne change rien puisque le job n'est pas fait, et de toute façon je doit pouvoir continuer à travailler dedans avec d'autres codes
Je t'ai joint une piste que j'ai commencer à explorer avec le:
.....Excel.application=Marshal.GetActiveObject......
J'ai trouvé une solution qui n'en est pas une. Je m'explique:
En partageant le classeur cela fonctionne, mais car il y a un mais on n'a plus accès aux macros, il faut enlever le Partage.
Essaie vois si cela te convient. Je doute que l'on puisse faire cela par macro: Partager et enlever le Partage
Encore une fois merci, mais cette solution ne vas pas vers le résultat souhaité.
Je pense que la seule solution pour l'instant est d'agir sur un classeur au préalable fermé...
Encore une fois merci.
En effet ça ne règle pas le problème puisque l'objectif premier est de pouvoir lancer une macro.
Je pense que la seule solution pour l'instant est d'agir sur un classeur fermé au préalable.
Je ne renonce pas.
Je te tiens au courant si j'obtiens quelque chose.
Bonjour,
Voilà un exemple avec le Partage, j'ai tout automatisé. Si tu ne trouves pas une autre manière de lancer des macros sur un classeur ouvert. J'ai fait un exemple avec 2 macros, tu peux en mettre le nombre que tu veux. Elle prennent effet à la fermeture du classeur.
Encore une fois merci, mais cette solution ne vas pas vers le résultat souhaité.
Je pense que la seule solution pour l'instant est d'agir sur un classeur au préalable fermé...
Je n'abdique pas pour autant.
Si j'y arrive, je te tiens au courant.
A bientôt
Encore une fois merci.
En effet ça ne règle pas le problème puisque l'objectif premier est de pouvoir lancer une macro.
Je pense que la seule solution pour l'instant est d'agir sur un classeur fermé au préalable.
Je ne renonce pas.
Je te tiens au courant si j'obtiens quelque chose.
A bientôt
Voilà un exemple avec le Partage, j'ai tout automatisé. Si tu ne trouves pas une autre manière de lancer des macros sur un classeur ouvert. J'ai fait un exemple avec 2 macros, tu peux en mettre le nombre que tu veux. Elle prennent effet à la fermeture du classeur.
https://www.cjoint.com/c/IIAj3BTphZQ
@+ Le Pivert
Je vais regarder ça.
Je n'ai pas encore regarder ta solution.
Bien entendu, je te ferai un retour dès que.
A+