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
Sub pour fermer le classeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 valider ou non l'enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Sub ferme_fenetre() nom_fenetre = "Classeur1 - Excel" PostMessage cherche_fenetre(vbNullString, nom_fenetre), 16, 0, 0 End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager