Utilisation de l'api windows pour fermer un classeur Excel
Bonjour,
Voici le sujet qui me préoccupe. J'ai un classeur Excel qui traite des données récupéré directement via un autre classeur est généré par un logiciel de communication modbus.
Ce classeur généré n'est pas enregistré et je ne souhaite pas l'enregistrer. Je suis donc passé par l'api de windows pour le fermer. J'arrive à donner l'ordre de fermer le fichier ,par contre celui-ci me demande de fermer en sauvegardant ou pas ( normal !! ). Et la je n'arrive pas à gérer via l'api, la commande "TAB" et "Entrer" pour passer le curseur sur "NE PAS SAUVEGARDER" et valider. Pourtant ces commandes fonctionnent sur la page excel mais du coup, pas sur la box de validation de la sauvegarde.
Je m'en remet donc à vous pour résoudre ce soucis.
Déclaration des ddl
Code:
1 2 3 4 5 6 7 8
| Declare Function cherche_fenetre Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Const VK_RETURN = &H9
Public Const WM_KEYDOWN = &H100 |
Sub pour fermer le classeur
Code:
1 2 3 4 5 6
| Sub ferme_fenetre()
nom_fenetre = "Classeur1 - Excel"
PostMessage cherche_fenetre(vbNullString, nom_fenetre), 16, 0, 0
End Sub |
Sub pour valider ou non l'enregistrement.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Sub nePasEnregistrerClasseur1()
'envoyer un message sur notepad
nom_fenetre = "Classeur1 - Excel"
notepad = FindWindowA(vbNullString, nom_fenetre)
SetForegroundWindow (notepad)
'notepad = GetWindow(notepad, 5) 'se placer dans la fenetre du texte
'txt = "BONJOUR TOUT LE MONDE"
'For num = 1 To Len(txt)
PostMessage notepad, VK_RETURN, 0, 0
'Next
'PostMessage notepad, WM_KEYDOWN, VK_RETURN, 0 'enter
'SetForegroundWindow (notepad)
End Sub |