VBA, lancer une action en fonction du nombre de fenetre active dans windows

Aquhydro

XLDnaute Nouveau
Bonjour,

Je travail sous VBA, sous excel, et je teste des simulations les unes à la suite des autres, sachant qu'on peu en lancer 5 à la fois et qu'il faut qu'a la fin j'en ai fait 700. Je voulais savoir si il existait une possibilité pour dire dans mon macro : Si il y a 7 fênetres actives (sous windows, type: 2 dossier, la feuille excel, un autre fichier et 3 simulations) tu en lance une supplémentaire, si il y à 9 fenetres actives, tu attends 5 minutes, etc... Si oui, quels sont les paramètres pour cela?

Ca sert à rien que je vous poste mon code actuel puisque je demande quelque chose de général, qui pourrais s'intégrer dans ma démarche actuelle comme dans une démarche future, je veux juste les formules pour que le logiciel check le nombre de fenetre et agisse en fonction, si c'est possible...

Est il également possible (mais là je pense que j'en demande beaucoup), si mon logiciel excel lance une application, et que cette application me met une notification type : La simulation est finie, voulez vous la fermer?
Oui
Non,
sous la forme d'une fenêtre classique (pas sous excel), est il possible d'integrer a Excel une réponse automatique?

merci beaucoup!



Aquhydro
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Bonjour le fil, bonjour le forum,

Je me suis, comme toi Job, penché sur le problème aquatique de Aqhydro. Je n'ai pas trouvé la solution et je pense que ton code ne le résout pas non plus. Là tu comptes les fenêtres ouvertes par l'application Excel et il faudrait, si je ne m'abuse, compter les fenêtres dans la barre de tâche du système d'exploitation...
 

job75

XLDnaute Barbatruc
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Re, salut Robert :)

Tu as parfaitement raison, Windows.Count ne compte que les fenêtres Excel.

Pour répondre depuis Excel à une invite d'une autre application, ça dépend de l'application.

On peut lui envoyer par exemple des touches :

Code:
SendKeys "o" 'bouton Oui, "y" version anglaise
Code:
SendKeys "%{F4}" 'fermeture
A+
 

job75

XLDnaute Barbatruc
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Bonjour Aquhydro, le forum,

Il existe une formule pour dire dans quelle fenetre je me situe?

Pour lancer un code VBA sur Excel il faut, sauf erreur, qu'Excel soit l'application active.

Et même en plus qu'on soit sur la session Excel où se trouve la macro.

Donc à partir d'Excel on peut seulement déterminer la fenêtre active d'Excel :

Code:
Dim aw As String
aw = ActiveWindow.Caption
MsgBox aw
A+
 

Staple1600

XLDnaute Barbatruc
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Re

Glané sur le net

Code:
Private Const GW_HWNDNEXT = 2
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd 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 GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Sub ListWins(Optional Title = "*", Optional Class = "*")
    Dim hWndThis As Long
    hWndThis = FindWindow(vbNullString, vbNullString)
    While hWndThis
        Dim sTitle As String, sClass As String
        sTitle = Space$(255)
        sTitle = Left$(sTitle, GetWindowText(hWndThis, sTitle, Len(sTitle)))
        sClass = Space$(255)
        sClass = Left$(sClass, GetClassName(hWndThis, sClass, Len(sClass)))
        If sTitle Like Title And sClass Like Class Then
            Debug.Print sTitle, sClass
        End If
        hWndThis = GetWindow(hWndThis, GW_HWNDNEXT)
    Wend
End Sub
Code:
Sub test()
ListWins "*.xls"
End Sub

Test OK ici

J'obtiens la liste de tous les fichiers Excel ouvert
 

Aquhydro

XLDnaute Nouveau
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Merci beaucoup, dans ce cas là, il faudrait que je fasse count.listwins "*.exe" pour obtenir le nombre de simulations lancées?
Et pour fermer automatiquement la fenetre en question, y'a t'il une possibilité?
 

job75

XLDnaute Barbatruc
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Re, salut Staple,

Pour obtenir la liste des fenêtres Excel d'une même session Excel, cette fonction dans un Module standard :

Code:
Function WIN()
Dim T() As String, i As Integer
ReDim T(1 To Windows.Count)
For i = 1 To UBound(T)
  T(i) = Windows(i).Caption
Next
WIN = T
End Function
On l'exploitera en entrant cette formule en A1, à tirer vers le bas :

Code:
=INDEX(WIN();LIGNES(A$1:A1))
A+
 

Aquhydro

XLDnaute Nouveau
Re : VBA, lancer une action en fonction du nombre de fenetre active dans windows

Re,
Merci pour le conseil par rapport à Internet, et je suis plutot d'accord avec toi, c'est assez lassant ces gens qui demandent sans être aller sur le net... Maintenant voilà, même si je prend désormais gout à cette petite machine à automatisme qu'est le VBA, il y a 6 jours, je ne savais pas ce que c'était, et j'ai cherché sur internet, je ne voulais pas venir remplir ces forums d'un tas de choses inutiles, j'ai trouvé comment créer un compte à rebour tout seul, j'ai trouvé un tas de choses tout seul... par contre il y a des choses pour lesquels je n'ai, manifestement, vu que tu les trouve, pas le bon vocabulaire, ou la bonne technique pour faire mes recherches, et, pour ce qui est de trouver comment fermer une fenetre, je ne sais même pas comment appeler ma fenetre en question, dans laquelle j'ai mon choix de oui ou non.

Comprend tu que j'ai du mal, par conséquant, à faire une recherche fructueuse?
Je m'excuse de t'avoir fait perdre tu temps, sache que pour moi il fut précieux le temps gagné, même si je suis toujours bloqué, tu a résolu la moitié de mon problème et je t'en remercie.

Maintenant, si quelqu'un pouvais m'éclairer sur la technique pour fermer ces fenetres, ça m'aiderais, car même si mon code arrive à compter le nombre de fenetre, si il ne peu pas les fermer, il sera alors bloqué, puisque qu'a partir de 5 je lui dirais de ne plus lancer de simulations...
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 300
Membres
103 173
dernier inscrit
Cerba95