Hello,
@danielc ce que vous cherchez à faire n'est pas très net je trouve.
J'ai interrogé l'IA et au bout de moultes relances elle a fini par me donner un code qui a l'air fonctionnel, mais pu***naise faut vraiment insister pour avoir qqchose de fonctionnel.
je copie/colle
Pour intercepter le changement d'application Windows (de n'importe où vers Excel), il faut faire appel aux API Windows (User32.dll) avec la fonction SetWinEventHook ou surveiller le focus de l'application via un timer OnTime.Voici la méthode la plus stable et légère, basée sur une boucle de vérification du focus Windows :
1.Ajouter les déclarations d'API dans un Module standard :Dans PERSONAL.XLSB.Dans l'éditeur VBA (Alt + F11), va dans Insertion > Module (dans PERSONAL.XLSB) et colle ce code
#If VBA7 Then
Private Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr
Private Declare PtrSafe Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As LongPtr, lpdwProcessId As Long) As Long
Private Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As Long
#Else
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
#End If
Public EstActive As Boolean
Sub DemarrerSurveillance()
Dim hwndActif As LongPtr
Dim pidActif As Long
hwndActif = GetForegroundWindow()
Call GetWindowThreadProcessId(hwndActif, pidActif)
' Vérifie si la fenêtre active appartient au processus Excel
If pidActif = GetCurrentProcessId() Then
If Not EstActive Then
EstActive = True
' --- TA MACRO ICI ---
MsgBox "Excel a repris le focus depuis Windows !"
' ---------------------
End If
Else
EstActive = False
End If
' Reboucle toutes les secondes
Application.OnTime Now + TimeValue("00:00:01"), "DemarrerSurveillance"
End Sub
Sub ArreterSurveillance()
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "DemarrerSurveillance", , False
End Sub
2.Lancer la surveillance au démarrage :Dans ThisWorkbook.Double-clique sur ThisWorkbook (dans PERSONAL.XLSB) et colle :
Private Sub Workbook_Open()
Call DemarrerSurveillance
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call ArreterSurveillance
End Sub
Comment vérifier :
Déclenche une première fois Workbook_Open (touche F5 dans le code) pour lancer la boucle.
Clique sur Firefox ou une autre application Windows.
Bascule à nouveau sur Excel : le message s'affiche immédiatement.