Bonjour à tous !
J'ai besoin de vos connaissances et expériences pour un cas d'utilisation un peu spécial d'une macro VBA sur Excel.
Avant tout, sachez que j'utilise les sendkeys par nécessité, est qu'aucune autre fonction ne peut-être employée dans mon cas.
Voici une rapide explication du principe :
Je dispose dans le cadre de mon travail, d'une base de donnée accessible via un software du type ERP (ou PGI pour les francophones, Progiciel de Gestion Intégré).
Celui-ci dispose de sécurités ne me permettant pas d'activer les .exe des différentes fonctions qu'il propose via une commande shell, ce qui me force à simuler mes touches pour me déplacer afin d'atteindre les fonctions intéressantes.
Jusqu'à présent tout fonctionne à merveille, j'arrive à changer le handle pour écrire avec sendkeys dans les champs à compléter et j'arrive également à détecter si la fenêtre que je souhaite activer dans mon ERP est ouverte ou non.
J'ai réussi à atteindre le but final de la macro, qui est tout simplement de copier coller des données dans un tableur avec une certaine mise en forme.
Et voici maintenant la raison de ce poste :
Est-t-il possible, dans un but purement ergonomique, de réduire une fenêtre de mon ERP dans la barre des taches, de lui donner mon handle puis de remplir ses champs sans avoir de visuel ?
Je m'explique :
Ci dessous, un code qui me permet via différentes fonction d'ouvrir la fenêtre désirée, de la réduire puis de lui donner le handle.
Par la suite, j'active les sendkeys pour remplir les champs, mais une fois la macro terminée, ceux-ci son désespérément vide lorsque je ré-agrandis ma fenêtre.
Ce n'est qu'un fragment.
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Sub MacroRedux() Call CloseWindow 'Ferme les précédentes session de l'ERP Call timerInterval8 'Timer pour éviter que les instructions ne s'exécutent sans que la fenêtre suivante soit chargée Dim Letsgo Letsgo = Shell("C:\Program Files (x86)\XXXXXXXXXXX.exe", 1) '.exe de base de l'ERP, sans protection donc accessible Call timerInterval8 m_hWnd = FindWindow(vbNullString, "Nom de la première fenêtre") 'Fonction permettant de trouver la fenêtre désirée parmi l'ensemble des fenêtres disponibles Call SetForegroundWindow(m_hWnd) 'Fonction pour passer la fenêtre au premier plan une fois que la fonction précédente l'a trouvé Call ENTER 'Sendkeys ENTER Call timerInterval3 m_hWnd = FindWindow(vbNullString, "Nom de la seconde fenêtre") Call SetForegroundWindow(m_hWnd) Call Redux 'Sendkeys "alt+espace+u", permettant de réduire la fenêtre active dans la barre des taches Call timerInterval3 m_hWnd = FindWindow(vbNullString, "Nom de la troisième fenêtre") Call SetForegroundWindow(m_hWnd) Call ID 'Sendkeys "N° d'identification" Call TABu 'Sendkeys "tabulation" Call PASS 'Sendkeys "Password" Call timerInterval3 If GetKeyState(VK_NUMLOCK) = 0 Then 'Ré-init du pad numérique (qui pour une mystérieuse raison s'active et se désactive aléatoirement durant la macro SendKeys "{NUMLOCK}", True End If End Sub
Je vous épargne la quarantaine de fonctions pour exécuter les différentes sendkeys tout en gardant un visuel potable du code (d'où tout ces Call).
Je reformule une dernière fois la question :
Est-t-il possible de remplir via la fonction sendkeys les champs d'une fenêtre active sous forme réduite (dans la barre des taches) ?
J'espère que quelqu'un pourra m'aider !
Merci pour votre compréhension !
PS : Je suis débutant, je m'excuse d'avance pour mon code d'une mocheté incomparable et mes soucis d'explication, je fais de mon mieux !
Cordialement !
Partager