aide sur macro excel

D

DJE8269

Guest
bonjour a toi qui me lis!!!

mon probleme je pense est assez simple voila le contexte

jai un classeur excel d'ouvert avec plein de bouton dessus

en cliquant sur un des boutons je voudrais qu'il m'ouvre un programme en .exe disons la calculatrice par exemple jusque la ok.

mais si la calulatricee est deja ouverte qu'il me l'affiche est non qu'il me l'ouvre une deuxieme fois. encore un hic en fait la calculatrice je la ferme pas a chaque fois mais la reduit ,alors alors en premier plan je retourne sous mon classeur excel avec tous mes boutons.Quand je reclic sur le bouton il faudrait qu'il me reaffiche la calculatrice mais en la grandissant .
voila merci d'avance pour toute reponse
salutation

PS : si possible avec deux ou trois explication mais je veut pas paraitre chiant ;-)
 
D

DJE8269

Guest
Sub OuvreApp()
On Error GoTo AppOuvre
AppActivate "Calculatrice", False
End
AppOuvre:
Shell "c:\windows\calc.exe", vbNormalFocus
End Sub

ceci marche bien sauf que je n'arrive pas a afficher la calculatrice en grand elle est bien selectionner mais n'apparait pas car elle est reduit merci pour votre aide
 
@

@+Thierry

Guest
Bonsoir DJE, le Forum

Si on lit l'aide on peut se rendre compte de ceci qui est "Self-Explanatory" :

AppActivate, instruction
Active une fenêtre d'application.

Syntaxe
AppActivate title[, wait]

Remarques
L'instruction AppActivate rend active l'application ou la fenêtre nommée, mais ne l'agrandit ni ne la réduit. La fenêtre d'application cesse d'être active dès que l'utilisateur exécute une action qui entraîne la fermeture de la fenêtre ou l'activation d'une autre. Utilisez la fonction Shell pour démarrer une application et définir le style de la fenêtre.

Donc je ne vois q'une solution "bourrin" !!!

Sub OuvreApp()
On Error GoTo AppOuvre
AppActivate "Calculatrice", False
SendKeys "%{F4}", True
AppOuvre:
Shell "c:\windows\calc.exe", vbNormalFocus
End Sub

Bonne Soirée
@+Thierry
 
M

myDearFriend

Guest
Bonsoir DJE8269,
re @+Thierry,


Juste pour le fun... :)

Par les APIs Windaube :

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
Const SW_SHOWNORMAL = 1

Public Sub OuvreApp()
Dim hwnd As Long
hwnd = FindWindow(vbNullString, "Calculatrice")
If hwnd > 0 Then
ShowWindow hwnd, SW_SHOWNORMAL
Else
Shell "C:\WINDOWS\system32\calc.exe", vbNormalFocus
End If
End Sub


Permet d'ouvrir la Calculatrice et de la restaurer si elle a été effectivement réduite (par contre, cela ne permet pas de la remettre au premier niveau si un autre fenêtre se trouve devant).

A mon humble avis, la méthode "bourrin" reste encore la meilleure dans ce cas.

Cordialement,
Didier_mDF
 
M

myDearFriend

Guest
re- Tout le monde,


Finalement, voilà la solution pour forcer la calculatrice à revenir au premier plan dans tous les cas de figure :

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
Const SW_SHOWNORMAL = 1

Public Sub OuvreApp()
Dim hwnd As Long
hwnd = FindWindow(vbNullString, "Calculatrice")
If hwnd > 0 Then
BringWindowToTop hwnd
ShowWindow hwnd, SW_SHOWNORMAL
Else
Shell "C:\WINDOWS\system32\calc.exe", vbNormalFocus
End If
End Sub



Ben là, il est content le myDearFriend!
I'am "API"


Cordialement,
Didier_mDF
 
@

@+Thierry

Guest
Bonjour Didier, le Forum

I am API !!! lol.... on nous l'avait pas encore faite celle là !!!

Je vois que tu es resté jusqu'à 4:30 pour faire ce truc, et bien ! Tu as de la suite dans les idées Didier.

Ca fonctionne bien, mais chose surprenante, la fonction BringWindowToTop hwnd ne fonctionne pas sous VBE si on exécute le code directement depuis l'éditeur. Ce que j'ai fait à l'instant, mais ce n'est pas grave il faut juste lancer cette macro depuis Excel pour que celà fonctionne.

Bonne Journée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
314 135
Messages
2 106 249
Membres
109 546
dernier inscrit
gbbob