Mettre Excel au premier plan via macro
4 participants
Page 1 sur 1
Mettre Excel au premier plan via macro
Re-bonjour !
J'ai plein de questions, j'espère ne pas trop spammer...
En fait, je travaille sur un outil qui switch entre Excel et CATIA.
Sous Excel VBA, j'arrive à passer sur CATIA et à manipuler les paramètres, etc. Mais l'inverse, je n'ai aucune idée de comment procéder...
Pour info, pour passer la fenêtre CATIA V5 au-dessus d'une fenêtre via macro Excel est :
Je l'appelle ainsi :
Du coup, mon intuition est de faire comme sur Excel VBA:
Questions:
D'avance merci, ce forum est une perle !
J'ai plein de questions, j'espère ne pas trop spammer...
En fait, je travaille sur un outil qui switch entre Excel et CATIA.
Sous Excel VBA, j'arrive à passer sur CATIA et à manipuler les paramètres, etc. Mais l'inverse, je n'ai aucune idée de comment procéder...
Pour info, pour passer la fenêtre CATIA V5 au-dessus d'une fenêtre via macro Excel est :
- Code:
Option Explicit
Private Declare Function BringWindowToTop Lib "user32" _
(ByVal Hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" _
(ByVal Hwnd As Long, ByVal nCmdShow As Long) As Long
'Remarque importante:
'La procédure ne doit pas être déclenchée depuis l'éditeur de macros /!\
'
Sub ApplicationPremierPlan()
Dim Hwnd As Long
'Récupère le Handle d'une fenêtre
'Le Handle est un nombre entier unique généré par Windows afin d'identifier les fenêtres.
Hwnd = FindWindow(vbNullString, "CATIA V5")
If Hwnd > 0 Then 'Si CATIA déjà ouvert
'Ramène CATIA au premier plan
BringWindowToTop Hwnd
'Affiche en mode "Normal"
ShowWindow Hwnd, 1
Else
MsgBox "coucou"
'Si vous souhaitez ouvrir une session CATIA, utilisez la fonction Shell avec le chemin vers l'application de lancement du logiciel !
End If
End Sub
Je l'appelle ainsi :
- Code:
Private Declare Function SetForegroundWindow Lib "user32" (ByVal Hwnd As Long) As Long
Private Declare Function BringWindowToTop Lib "user32" (ByVal Hwnd As Long) As Long
Sub CATIA_Foreground
Set CATIA = GetObject(, "CATIA.Application")
SetForegroundWindow (Excel.Application.Hwnd)
Call ApplicationPremierPlan
Interaction.AppActivate "CATIA"
Set windows1 = CATIA.Windows
windows1.Arrange catArrangeTiledHorizontal
End Sub
Du coup, mon intuition est de faire comme sur Excel VBA:
- Code:
Sub main()
Set excel = GetObject(, "Excel.Application")
SetForegroundWindow (CATIA.Application.Hwnd)
Call ApplicationPremierPlan /* Je l'adapte à Excel*/
Interaction.AppActivate "excel"
End Sub
Questions:
- Est-ce possible de faire une telle procédure qui mettrait Excel en premier plan?
- Où se trouvent les librairies auquelles je fais appel (BringWindowToTop, etc)? Tout d'abord, existent-elle sur CATVB?
- S'il est possible de faire une telle procédure, est-il possible de l'affecter à un bouton "OK" comme sous Excel VBA ?
D'avance merci, ce forum est une perle !
Dernière édition par StagiaireEnMousse le Mar 14 Avr 2015 - 13:50, édité 1 fois
StagiaireEnMousse- actif
- Messages : 23
Date d'inscription : 09/04/2015
Localisation : Ile-De-France
Re: Mettre Excel au premier plan via macro
Bonjour
directement en VBscript executable par CATIA cela me semble difficille, je ne connais pas de CATIA VB commande qui permette cela.
Par contre il y a peut être des solutions de contournement.
solution 1:
-utiliser la commande CATIA.SystemService.ExecuteBackgroundProcessus qui lancerai un programme .vbs par exemple.
-developper un script vbs qui ferait le getobjet excel et à partir de là piloter excel via le vbs qui appelle une macro dans le fichier excel
solution 2:
-Porter toute l'application en dotnet vb ou python ou autres langages , dans ce cas l'application dotnet/pyhton/... pilote CATIA et excel.
Ci joint un exemple dotnet pour lancer un CATIAscript il suffirait de rajouter les commandes excel à la suite :
Pour info j'ai utilisé cet outil qui est gratuit :
directement en VBscript executable par CATIA cela me semble difficille, je ne connais pas de CATIA VB commande qui permette cela.
Par contre il y a peut être des solutions de contournement.
solution 1:
-utiliser la commande CATIA.SystemService.ExecuteBackgroundProcessus qui lancerai un programme .vbs par exemple.
-developper un script vbs qui ferait le getobjet excel et à partir de là piloter excel via le vbs qui appelle une macro dans le fichier excel
solution 2:
-Porter toute l'application en dotnet vb ou python ou autres langages , dans ce cas l'application dotnet/pyhton/... pilote CATIA et excel.
Ci joint un exemple dotnet pour lancer un CATIAscript il suffirait de rajouter les commandes excel à la suite :
- Code:
Module LaunchCATIAScript
Sub Main()
Dim aParams(0)
Dim sPath As String
Dim sPathFile As String
Dim CATIA As Object
Dim sScriptName As String
sScriptName = "test.CATScript"
' le catscript est dans le même directory que l'exe dotnet
sPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
sPath = sPath.Replace("file:\", "")
sPathFile = Path.Combine(sPath, sScriptName)
If File.Exists(sPathFile) = False Then
MsgBox("missing CATScript file : " & sPathFile)
Exit Sub
End If
On Error Resume Next
CATIA = GetObject(, "CATIA.Application")
If Err.Number <> 0 Then
MsgBox("The CATIA application shall be launched before to use the macro")
Exit Sub
End If
On Error GoTo 0
aParams(0) = sPath
CATIA.SystemService.ExecuteScript(sPath, 1, "test.CATScript", "CATMain", aParams)
'rajouter le code excel juste après
'excel= GetObject(, "excel.Application")
'excel......
End Sub
End Module
Pour info j'ai utilisé cet outil qui est gratuit :
Invité- Invité
Re: Mettre Excel au premier plan via macro
Bonjour,
As tu essayé ce code?
Windows(nom_fichier).Activate
ce qui active la fenêtre excel que tu as besoin.
Dans mon cas je l'utilise pour du transfert de donner en sélectionnant dans une fenêtre et dans l'autre pour faire du copier coller de plage complété.
il peut être associe à :
nom_fichier = ThisWorkbook.Name 'pour récupérer le nom du fichier excel
chemin = Workbooks(ActiveWorkbook.Name).Path 'donne le chemin complet du fichier excel active
bon courage
As tu essayé ce code?
Windows(nom_fichier).Activate
ce qui active la fenêtre excel que tu as besoin.
Dans mon cas je l'utilise pour du transfert de donner en sélectionnant dans une fenêtre et dans l'autre pour faire du copier coller de plage complété.
il peut être associe à :
nom_fichier = ThisWorkbook.Name 'pour récupérer le nom du fichier excel
chemin = Workbooks(ActiveWorkbook.Name).Path 'donne le chemin complet du fichier excel active
bon courage
raphael_59240- actif
- Messages : 127
Date d'inscription : 28/03/2015
Age : 53
Localisation : dunkerque
Re: Mettre Excel au premier plan via macro
Bonjour .
Essaye cette commande
AppActivate ("Microsoft Excel")
ou
AppActivate ("Catia")
chez moi ça fonctionne en VBA Excel ou dans une procédure catvba catscript ..
Essaye cette commande
AppActivate ("Microsoft Excel")
ou
AppActivate ("Catia")
chez moi ça fonctionne en VBA Excel ou dans une procédure catvba catscript ..
des_urgences- timide
- Messages : 10
Date d'inscription : 12/06/2013
Localisation : Le plus loin possible
Re: Mettre Excel au premier plan via macro
Bonjour
il me semble qu' en CATIA vb windows n'existe pas . Il faut utiliser catia.windows : mais dans ce cas on ne voit que les fenetres ouvertes dans CATIA.
voir l'aide en ligne pour windows : A collection of all the Window objects currently managed by the application.
cordialement
raphael_59240 a écrit:
Windows(nom_fichier).Activate
il me semble qu' en CATIA vb windows n'existe pas . Il faut utiliser catia.windows : mais dans ce cas on ne voit que les fenetres ouvertes dans CATIA.
- Code:
Sub CATMain()
Set oWindows = CATIA.Windows
End Sub
voir l'aide en ligne pour windows : A collection of all the Window objects currently managed by the application.
cordialement
Invité- Invité
Re: Mettre Excel au premier plan via macro
Bonjour
Il me semble que la commande AppActivate n'existe pas dans l'aide en ligne "CAA V5 visual basic", donc on ne doit pas pouvoir l'executer dans CATIA.
Cette commande existe dans la documentation du "Visual Basic reference" , mais visiblement ce n'est pas disponible depuis CATIA (catscript ou catvba) => voir ci-dessous :
This error can also occur if an attempt is made to call a procedure that isn't valid on the current platform. For example, some procedures may only be valid for Microsoft Windows, or for the Macintosh, and so on.
Depuis excel cette commande fonctionne car excel est compatible vb à 100%.
cordialement
des_urgences a écrit:
AppActivate ("Microsoft Excel")
ou
AppActivate ("Catia")
Il me semble que la commande AppActivate n'existe pas dans l'aide en ligne "CAA V5 visual basic", donc on ne doit pas pouvoir l'executer dans CATIA.
Cette commande existe dans la documentation du "Visual Basic reference" , mais visiblement ce n'est pas disponible depuis CATIA (catscript ou catvba) => voir ci-dessous :
- Code:
Sub CATMain()
AppActivate "Microsoft Word"
End Sub
This error can also occur if an attempt is made to call a procedure that isn't valid on the current platform. For example, some procedures may only be valid for Microsoft Windows, or for the Macintosh, and so on.
Depuis excel cette commande fonctionne car excel est compatible vb à 100%.
cordialement
Invité- Invité
Re: Mettre Excel au premier plan via macro
ça doit activer suivant le nom de la fenêtre, non ?
Du coup avec AppActivate ("CATIA V5") ça marche pas mieux ?
Sinon dans catia, j'utilise une fonction de la librairie user32
Du coup avec AppActivate ("CATIA V5") ça marche pas mieux ?
Sinon dans catia, j'utilise une fonction de la librairie user32
- Code:
Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
- Code:
Dim win
win = Excel.hwnd
BringWindowToTop (win)
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mettre Excel au premier plan via macro
Bonjour .
CATIA V5 R20 SP3 et office 2010 .
AppActivate ("Microsoft Excel") ou AppActivate ("Catia")
fonctionne en Macro VBA EXCEL et en Catvba .
pas en Catvbs ou en catscript
il faut avoir excel actif et catia Actif .
AppActivate (CATIA) ne fonctionne pas ..
Run time error '438' Object doesn't support this property or method .
CATIA V5 R20 SP3 et office 2010 .
AppActivate ("Microsoft Excel") ou AppActivate ("Catia")
fonctionne en Macro VBA EXCEL et en Catvba .
pas en Catvbs ou en catscript
il faut avoir excel actif et catia Actif .
AppActivate (CATIA) ne fonctionne pas ..
Run time error '438' Object doesn't support this property or method .
des_urgences- timide
- Messages : 10
Date d'inscription : 12/06/2013
Localisation : Le plus loin possible
Re: Mettre Excel au premier plan via macro
pour plus d'info sur AppActivate()
https://msdn.microsoft.com/fr-fr/library/dyz95fhy%28v=vs.90%29.aspx
Il faut lui donner une chaîne de caractère correspondant à la fenêtre ou à l'application en cours de fonctionnement
AppActivate (CATIA) ne fonctionne pas, c'est normale, dans ce cas, CATIA est pris comme une variable du coup suivant le code avant je ne sais pas ce que vaut cette variable, mais ne contient surement pas ce qu'attend la fonction AppActivate ()
Par contre si tu écris :
https://msdn.microsoft.com/fr-fr/library/dyz95fhy%28v=vs.90%29.aspx
Il faut lui donner une chaîne de caractère correspondant à la fenêtre ou à l'application en cours de fonctionnement
AppActivate (CATIA) ne fonctionne pas, c'est normale, dans ce cas, CATIA est pris comme une variable du coup suivant le code avant je ne sais pas ce que vaut cette variable, mais ne contient surement pas ce qu'attend la fonction AppActivate ()
Par contre si tu écris :
- Code:
CATIA= "catia" 'on définie la variable CATIA comme étant une chaine de caractère contenant "catia"
AppActivate (CATIA) 'on lance la fonction AppActivate () et avec la valeur contenu dans la variable CATIA
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mettre Excel au premier plan via macro
Bonjour à tous !
Merci beaucoup pour toutes vos réponses.
@PhilippeC : Je n'ai pas testé votre idée du Visual Basic. En fait, je travaille sur un outil qui va passer entre les mains de différents utilisateurs, avec différents ordinateurs. Donc, je voudrais éviter de forcer l'utilisateur à télécherger de multiples logiciels (surtout que tout le monde n'aura pas forcément les droits d'admin pour le faire )
Mais merci pour le tuyau
@raphael_59240 & des_urgences : Chez moi, la fonction AppActivate("Microsoft Excel") de CATVb fonctionne ! Mais ce n'est pas ce que je veux faire. Ce que je souhaite faire, c'est vraiment physiquement avoir la fenêtre Excel au premier plan, devant toutes les autres fenêtres.
@Guss : Comme toujours, merci Guss ! Je ne pensais pas que cela fonctionnerait en CATVb ! Mais l'API BringWindowToTop existe ici aussi ! Donc en fait, il faut reprendre exactement le même code que sur Excel, et l'adapter :
Encore merci à tous !
Merci beaucoup pour toutes vos réponses.
@PhilippeC : Je n'ai pas testé votre idée du Visual Basic. En fait, je travaille sur un outil qui va passer entre les mains de différents utilisateurs, avec différents ordinateurs. Donc, je voudrais éviter de forcer l'utilisateur à télécherger de multiples logiciels (surtout que tout le monde n'aura pas forcément les droits d'admin pour le faire )
Mais merci pour le tuyau
@raphael_59240 & des_urgences : Chez moi, la fonction AppActivate("Microsoft Excel") de CATVb fonctionne ! Mais ce n'est pas ce que je veux faire. Ce que je souhaite faire, c'est vraiment physiquement avoir la fenêtre Excel au premier plan, devant toutes les autres fenêtres.
@Guss : Comme toujours, merci Guss ! Je ne pensais pas que cela fonctionnerait en CATVb ! Mais l'API BringWindowToTop existe ici aussi ! Donc en fait, il faut reprendre exactement le même code que sur Excel, et l'adapter :
- Code:
Private Declare Function BringWindowToTop Lib "User32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "User32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "User32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Sub Excel_Top()
Dim hwnd As Long
'Récupère le Handle d'une fenêtre
'Le Handle est un nombre entier unique généré par Windows afin d'identifier les fenêtres.
hwnd = FindWindow(vbNullString, "Microsoft Excel")
If hwnd > 0 Then
BringWindowToTop hwnd
'Affiche en mode "Normal"
ShowWindow hwnd, 1
End If
End Sub
Encore merci à tous !
Dernière édition par StagiaireEnMousse le Mar 14 Avr 2015 - 16:15, édité 1 fois
StagiaireEnMousse- actif
- Messages : 23
Date d'inscription : 09/04/2015
Localisation : Ile-De-France
Re: Mettre Excel au premier plan via macro
L'API BringWindowToTop existe puis qu'elle est dans la librairie "User32" et qu'on l'appel cette librairie avec Lib "User32"
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mettre Excel au premier plan via macro
Je suis digne de mon titre de novice en Catvba !
Mais je pense qu'une fois que j'aurais bien baigné dedans, je serai plus à l'aise et je poserai moins de questions bêtes !
Encore merci !
Mais je pense qu'une fois que j'aurais bien baigné dedans, je serai plus à l'aise et je poserai moins de questions bêtes !
Encore merci !
StagiaireEnMousse- actif
- Messages : 23
Date d'inscription : 09/04/2015
Localisation : Ile-De-France
Sujets similaires
» Macro pilote tableau catia via excel
» Macro Excel Catia
» Macro CATIA vers Excel
» Macro export cartouche dans Excel
» Macro Excel: Problème avec GetCoordinates
» Macro Excel Catia
» Macro CATIA vers Excel
» Macro export cartouche dans Excel
» Macro Excel: Problème avec GetCoordinates
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|