Récupérer le focus Excel
Résolu
1Globule
Messages postés
62
Date d'inscription
Statut
Membre
Dernière intervention
-
1Globule -
1Globule -
A voir également:
- Récupérer le focus Excel
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, je doute que ton analyse soit correcte.
et si tu mets "msgbox", cela s'exécute-t'"il?
et si tu mets "msgbox", cela s'exécute-t'"il?
S'il y a toujours quelqu'un sur le forum, j'ai essayé ce matin suite à la piste évoquée par yg_be d'utiliser un
Mais toujours impossible de détecter un "Ctrl+V" dans une autre application.
Le
Quelqu'un pourrait-il me venir en aide ?
Workbook_open, il me semblait que c'était une bonne solution pour que le Vba "surveille" le clavier.
Mais toujours impossible de détecter un "Ctrl+V" dans une autre application.
Le
Application.OnKey "^V"ne détecte rien si je ne suis pas dans Excel...
Quelqu'un pourrait-il me venir en aide ?
je pense que ton code VBA doit continuer à travailler une fois les données récupérées, et se mettre à observer quelque chose qui lui permettra de savoir que Excel doit reprendre le focus.
par exemple, il est possible, en VBA, de surveiller les fenêtres des autres applications.
imagine que le code VBA soit un robot qui voit tout ce qui se passe dans l'ordi: comment pourrait-il détecter que tu as fini? à partir de cela, tu pourras peut-être trouver un moyen de faire le code VBA que tu souhaites. attention, le robot n'est ni très malin, ni très observateur.
le robot ne peut pas, je pense, détecter les interactions à l'intérieur des autres applications.
as-tu envisagé que la macro VBA fasse à ta place les actions dans l'autre application?
par exemple, il est possible, en VBA, de surveiller les fenêtres des autres applications.
imagine que le code VBA soit un robot qui voit tout ce qui se passe dans l'ordi: comment pourrait-il détecter que tu as fini? à partir de cela, tu pourras peut-être trouver un moyen de faire le code VBA que tu souhaites. attention, le robot n'est ni très malin, ni très observateur.
le robot ne peut pas, je pense, détecter les interactions à l'intérieur des autres applications.
as-tu envisagé que la macro VBA fasse à ta place les actions dans l'autre application?
Bonjour yg_be,
Je ne peux pas agir dans une application comptable sécurisée au moyen d'un code Vba. Ma première intention était d'ailleurs d'accéder directement à la base de données pour modifier les tables, mais bien sûr c'est impossible, je dois me contenter de passer par l'IHM, avec des copier-coller.
S'il est possible, en Vba, de surveiller les fenêtres des autres applications, peux-tu me dire plus précisément comment faire ? J'ai déjà cherché beaucoup sur ce sujet, je commence à me décourager.
Merci encore.
Je ne peux pas agir dans une application comptable sécurisée au moyen d'un code Vba. Ma première intention était d'ailleurs d'accéder directement à la base de données pour modifier les tables, mais bien sûr c'est impossible, je dois me contenter de passer par l'IHM, avec des copier-coller.
S'il est possible, en Vba, de surveiller les fenêtres des autres applications, peux-tu me dire plus précisément comment faire ? J'ai déjà cherché beaucoup sur ce sujet, je commence à me décourager.
Merci encore.
le VBA peut servir de robot qui se substitue à l'utilisateur (utilisation du clavier, ...), et de cette façon agir dans n'importe quelle application.
en ce qui concerne la surveillance des fenêtres, cela permet de surveiller les fenêtres ouvertes, leurs titres, surveiller laquelle est active, pas ce qui se passe à l'intérieur des fenêtres.
pour le moment, on cherche quoi faire, pas encore comment faire.
en ce qui concerne la surveillance des fenêtres, cela permet de surveiller les fenêtres ouvertes, leurs titres, surveiller laquelle est active, pas ce qui se passe à l'intérieur des fenêtres.
pour le moment, on cherche quoi faire, pas encore comment faire.
Bonjour,
avec le presse papier
voir ce post en VB.Net avec le programme issu de ce post en VBA en suivant le lien
https://codes-sources.commentcamarche.net/forum/affich-10085696-vb-sendkeys-probleme#4
https://codes-sources.commentcamarche.net/source/102695-extraire-texte-et-image-d-un-pdf
voir ceci en vba pour l'adapter
https://wordmvp.com/FAQs/MacrosVBA/ManipulateClipboard.htm
avec le presse papier
voir ce post en VB.Net avec le programme issu de ce post en VBA en suivant le lien
https://codes-sources.commentcamarche.net/forum/affich-10085696-vb-sendkeys-probleme#4
https://codes-sources.commentcamarche.net/source/102695-extraire-texte-et-image-d-un-pdf
voir ceci en vba pour l'adapter
https://wordmvp.com/FAQs/MacrosVBA/ManipulateClipboard.htm
Avec le presse-papier c'est une bonne solution.
Si je peux détecter qu'il se vide, comme il semble que ce soit le cas ici :
Sauf que... Même en activant "Microsoft Forms 2.0 Object Library", il ne se passe rien...
Si je peux détecter qu'il se vide, comme il semble que ce soit le cas ici :
If Not Clipboard.GetImage Is Nothing Then, alors je pourrais faire réactiver le workbook Excel.
Sauf que... Même en activant "Microsoft Forms 2.0 Object Library", il ne se passe rien...
Essaie ceci à adapter a ton environnement:
Option Explicit Private Declare Function CountClipboardFormats Lib "user32" () As Long Private Declare Function OpenClipboard Lib "User32.dll" _ (ByVal hWndNewOwner As Long) As Long Private Declare Function EmptyClipboard Lib "User32.dll" () As Long Private Declare Function CloseClipboard Lib "User32.dll" () As Long Public Sub ClearClipboard() 'vide le presse papier Dim Ret Ret = OpenClipboard(0&) If Ret <> 0 Then Ret = EmptyClipboard CloseClipboard End Sub Sub Sample() If (CountClipboardFormats() = 0) = True Then MsgBox "Presse-papiers est vide" Else MsgBox "Presse-papiers n'est pas vide" End If End Sub Private Sub CommandButton1_Click() Sample End Sub Private Sub CommandButton2_Click() ClearClipboard 'vide le presse papier End Sub
Merci beaucoup pour ton aide.
Je bloque toujours sur un point : A ce stade, mes données sont dans Excel mais aucune macro ne tourne plus.
Je ne fais plus que des "Copier", rien qui ne puisse activer ton code (l'évènement "AfterCopy" n'existe pas...).
Comment faire pour que le Vba reste actif et détecte les actions du presse-papier ?
Je bloque toujours sur un point : A ce stade, mes données sont dans Excel mais aucune macro ne tourne plus.
Je ne fais plus que des "Copier", rien qui ne puisse activer ton code (l'évènement "AfterCopy" n'existe pas...).
Comment faire pour que le Vba reste actif et détecte les actions du presse-papier ?
A mettre dans la feuille active
Option Explicit Sub recupererTextePressePapier() 'nécéssite d'activer la référence "Microsoft Forms 2.0 Object Library." pour avoir accès insérer une UserForm Dim Resultat As String With New dataObject .GetFromClipboard Resultat = .GetText(1) End With Application.Visible = True ActiveWorkbook.Activate 'MsgBox Resultat End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) recupererTextePressePapier End Sub
Je pense que tu ne veux pas afficher la fenêtre Excel manuellement (cela ne pose aucun problème), mais par code!
Donc mettre un Timer (ajuster au temps des copier-coller) à la fin de ta macro qui lancera la macro suivante comma ceci:
voilà
Bon WE
Donc mettre un Timer (ajuster au temps des copier-coller) à la fin de ta macro qui lancera la macro suivante comma ceci:
Option Explicit Sub attente() Dim PauseTime, Start, Finish, TotalTime PauseTime = 10 ' Set duration secondes a adapter Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop Finish = Timer ' Set end time. TotalTime = Finish - Start ' Calculate total time. test 'lance la macro End Sub Sub test() MsgBox "ceci est un test" End Sub
voilà
Bon WE
Comment écrirais-tu le code ?
peut-être le code VBA est-il bloqué sur une instruction qui ne se termine pas?
Ma macro se déclenche avec un bouton. Lorsque je clique, elle va récupérer des données. Une fois ces données récupérées, elle s'arrête, elle est terminée.
C'est à ce moment-là que je commence, à la main, à recopier les données dans un autre logiciel. J'utilise des simples "copier / coller", et pour l'instant je n'ai rien trouvé pour rendre le focus à Excel une fois que j'ai collé une cellule dans l'autre logiciel.
C'est ici que j'ai besoin d'aide : Est-il possible de détecter un "coller" par Vba quand Excel n'est pas l'application active ?
J'espère avoir été plus clair. Merci encore !