Mettre Excel au premier plan via macro

Voir le sujet précédent Voir le sujet suivant Aller en bas

R?solu Mettre Excel au premier plan via macro

Message par StagiaireEnMousse le Sam 11 Avr 2015 - 1:44

Re-bonjour !

J'ai plein de questions, j'espère ne pas trop spammer... silent

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? confused




  • 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 ! cheers


Dernière édition par StagiaireEnMousse le Mar 14 Avr 2015 - 23:50, édité 1 fois

StagiaireEnMousse
actif
actif

Messages : 23
Date d'inscription : 09/04/2015
Localisation : Ile-De-France

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par PhilippeC le Sam 11 Avr 2015 - 23:22

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 :

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 :

PhilippeC
timide
timide

Messages : 13
Date d'inscription : 05/04/2015
Age : 59
Localisation : toulouse

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par raphael_59240 le Lun 13 Avr 2015 - 18:33

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

Cool  Shocked
avatar
raphael_59240
actif
actif

Messages : 123
Date d'inscription : 28/03/2015
Age : 47
Localisation : dunkerque

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par des_urgences le Mar 14 Avr 2015 - 19:53

Bonjour .
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
timide

Messages : 8
Date d'inscription : 12/06/2013
Localisation : Le plus loin possible

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par PhilippeC le Mar 14 Avr 2015 - 20:32

Bonjour

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

PhilippeC
timide
timide

Messages : 13
Date d'inscription : 05/04/2015
Age : 59
Localisation : toulouse

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par PhilippeC le Mar 14 Avr 2015 - 20:46

Bonjour

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
Quand on l'execute dans CATIA on obtient une erreur 5 : Invalid procedure call or argument (Error 5)
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

PhilippeC
timide
timide

Messages : 13
Date d'inscription : 05/04/2015
Age : 59
Localisation : toulouse

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par Guss_ le Mar 14 Avr 2015 - 21:02

ç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
Code:

Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
et je l'utilise comme ça:

Code:

    Dim win
    win = Excel.hwnd
    BringWindowToTop (win)

Guss_
Fédérateur
Fédérateur

Messages : 503
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par des_urgences le Mar 14 Avr 2015 - 23:09

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 .

des_urgences
timide
timide

Messages : 8
Date d'inscription : 12/06/2013
Localisation : Le plus loin possible

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par Guss_ le Mar 14 Avr 2015 - 23:28

pour plus d'info sur AppActivate()   Wink

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_
Fédérateur
Fédérateur

Messages : 503
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par StagiaireEnMousse le Mar 14 Avr 2015 - 23:49

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 No )
Mais merci pour le tuyau Exclamation

@raphael_59240 & des_urgences : Chez moi, la fonction AppActivate("Microsoft Excel") de CATVb fonctionne ! cyclops  Mais ce n'est pas ce que je veux faire.  What a Face  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 Mer 15 Avr 2015 - 2:15, édité 1 fois

StagiaireEnMousse
actif
actif

Messages : 23
Date d'inscription : 09/04/2015
Localisation : Ile-De-France

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par Guss_ le Mer 15 Avr 2015 - 0:11

L'API BringWindowToTop existe puis qu'elle est dans la librairie "User32" et qu'on l'appel cette librairie avec Lib "User32" Wink


Guss_
Fédérateur
Fédérateur

Messages : 503
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par StagiaireEnMousse le Mer 15 Avr 2015 - 0:16

Je suis digne de mon titre de novice en Catvba ! jocolor
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 ! cheers

StagiaireEnMousse
actif
actif

Messages : 23
Date d'inscription : 09/04/2015
Localisation : Ile-De-France

Revenir en haut Aller en bas

R?solu Re: Mettre Excel au premier plan via macro

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum