Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

copier une donne dans un autre programme et revenir collé dans excel

26 réponses
Avatar
pellet15
Bonjour =E0 tous

Je voudrait corriger la proc=E9dure suivante:
a la premier ligne j'ouvre un programme qui me permet de r=E9cup=E9rer la d=
onn=E9 GPS=20
mais je voudrait l'ouvrire plus t=F4t a l'ouverture de EXCEL (parce que il =
prend un peut de temps pour capter les satellite,3=E05 min)

Pr=E9sentement il ouvre un autre a chaque fois que je l'ex=E9cute.

Pour le reste de la proc=E9dure =E7a fonctionne mais il y a que=20
je pr=E9f=E9rerais revenir a Excel et ne pas voire le tableau du programme =
(g7towin.exe)a l'avant plan.
Il y a t'il une autre fa=E7ons que Alt_Tal et Ctrl-P
ou que cela s=92ex=E9cute en arri=E8re plan.

Sub Ouvrir_g7()
MyAppID =3D Shell("C:\g7towinwithhelp\g7towin.exe", 1)
Application.Wait (Now + TimeValue("00:00:02"))
SendKeys "^p", True ' ----copie la longitude et la latitude----
Application.Wait (Now + TimeValue("00:00:01"))
SendKeys "%{tab}", True ' ---retourne a EXCEL ---
Dim Presspp As New DataObject
Set Pressp =3D New DataObject
Presspp.GetFromClipboard
Sheets("Donne").Select
Range("AY1").Select
ActiveSheet.Paste ' ----colle la donn=E9 longitude et la latitude----
End Sub

Merci

10 réponses

1 2 3
Avatar
Gloops
pellet15 a écrit, le 25/03/2012 18:13 :
MyAppID = Shell("C:g7towinwithhelpg7towin.exe", 1)
Application.Wait (Now + TimeValue("00:00:02"))
SendKeys "^p", True ' ----copie la longitude et la latitude----
Application.Wait (Now + TimeValue("00:00:01"))
SendKeys "%{tab}", True ' ---retourne a EXCEL ---

ActiveSheet.Paste ' ----colle la donné longitude et la latitude- ---



Bonjour,

Pour la communication entre applications, certes il y a les émulations
de touches mais c'est très sensible aux actions de l'utilisateur, si un e
autre application est sélectionnée c'est elle qui reçoit les touche s.

Il y a eu DDE, maintenant il y a Automation.

Avoir déclaré l'application externe est un bon début.
D'ailleurs, si l'application est déjà ouverte il faudrait plutôt la
déclarer par GetObject.

Après, il faudrait vérifier dans sa documentation si elle assure le
support d'Automation. Une commande comme MyAppId.Copy, ou peut-être
MyAppId.GetCoord (à trouver dans la doc plutôt qu'à inventer, nous
sommes bien d'accord), aurait l'avantage d'être fiable, et de pouvoir
fonctionner même si à ce moment-là l'utilisateur regarde ses mails.

A défaut, on doit pouvoir envoyer une simulation de touches à une
application par SendMessage, ça garde l'avantage d'être insensible au
focus, c'est-à-dire à la sélection d'une autre application. Si des
commandes spécifiques existent, il reste préférable de les trouver,
d'abord parce que ça donne un code plus lisible, et peut-être surtout
parce que pour passer les bons arguments à SendMessage, il faut quand
même s'accrocher quelque peu.

Est-ce que g7towin n'a pas une commande, à passer en argument sur la
ligne de commandes par exemple, pour écrire les coordonnées dans un
fichier texte ? Le fichier texte serait facile à lire dans Excel, et ç a
serait très largement plus facile à mettre en oeuvre que tout ce que je
viens de dire.
Avatar
pellet15
Le lundi 26 mars 2012 03:12:07 UTC-4, Gloops a écrit :
pellet15 a écrit, le 25/03/2012 18:13 :
> MyAppID = Shell("C:g7towinwithhelpg7towin.exe", 1)
> Application.Wait (Now + TimeValue("00:00:02"))
> SendKeys "^p", True ' ----copie la longitude et la latitude----
> Application.Wait (Now + TimeValue("00:00:01"))
> SendKeys "%{tab}", True ' ---retourne a EXCEL ---

> ActiveSheet.Paste ' ----colle la donné longitude et la latitude- ---

Bonjour,

Pour la communication entre applications, certes il y a les émulations
de touches mais c'est très sensible aux actions de l'utilisateur, si un e
autre application est sélectionnée c'est elle qui reçoit les touche s.

Il y a eu DDE, maintenant il y a Automation.

Avoir déclaré l'application externe est un bon début.
D'ailleurs, si l'application est déjà ouverte il faudrait plutôt la
déclarer par GetObject.

Après, il faudrait vérifier dans sa documentation si elle assure le
support d'Automation. Une commande comme MyAppId.Copy, ou peut-être
MyAppId.GetCoord (à trouver dans la doc plutôt qu'à inventer, nous
sommes bien d'accord), aurait l'avantage d'être fiable, et de pouvoir
fonctionner même si à ce moment-là l'utilisateur regarde ses mails.

A défaut, on doit pouvoir envoyer une simulation de touches à une
application par SendMessage, ça garde l'avantage d'être insensible au
focus, c'est-à-dire à la sélection d'une autre application. Si des
commandes spécifiques existent, il reste préférable de les trouver,
d'abord parce que ça donne un code plus lisible, et peut-être surtout
parce que pour passer les bons arguments à SendMessage, il faut quand
même s'accrocher quelque peu.

Est-ce que g7towin n'a pas une commande, à passer en argument sur la
ligne de commandes par exemple, pour écrire les coordonnées dans un
fichier texte ? Le fichier texte serait facile à lire dans Excel, et ça
serait très largement plus facile à mettre en oeuvre que tout ce que je
viens de dire.



Bonjour Gloops

Le programme g7towin a la fonction que CTRL-P copie la coordonné dans un tableau et la conserve dans le CLIPBOARD, de ce fait après lorsque je fai t collé dans EXCEL j’obtiens la donné.

Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter CTRL-P et revenir en avant plan avec EXCEL.

Merci
Avatar
MichD
Bonjour,

Voici un exemple. Cette procédure ouvre un fichier .txt dans NotePad et copie le contenu de ce dernier dans Excel.

À adapter...

'-----------------------------------------------
Sub Exemple()
Dim Appt As Long, Fichier As String

Fichier = "c:MonFichierTexte.txt"

'La séquence des touches "SendKeys" copie tout le
'fichier NotePad dans le presse-papier
SendKeys "^a"
SendKeys "^C"
'Ouverture du fichier "NotePad"
Appt = Shell("c:windowsNotepad.exe " & Fichier, vbMaximizedFocus)

'Rend ce classeur comme application active
AppActivate Application.Name
'J'ai supposé que la feuille active était la bonne
'et que tu voulais copier le résultat en B5
Range("B5").PasteSpecial xlPasteAll
End Sub
'-----------------------------------------------


MichD
------------------------------------------
Avatar
Gloops
pellet15 a écrit, le 26/03/2012 17:22 :
Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter CTR L-P et revenir en avant plan avec EXCEL.



Tu pourrais avoir besoin de ça pour connaître le numéro de la fenê tre :
http://allapi.mentalis.org/apilist/FindWindow.shtml

puis ça pour la sélectionner :
http://allapi.mentalis.org/apilist/SetFocus.shtml

à noter qu'il existe aussi SetActiveWindow, et SetForegroundWindow, et
qu'il m'arrive souvent d'utiliser les trois d'affilée sur le même num éro
de fenêtre pour être sûr d'arriver à bien la sélectionner (peut -être
pourrait-on trouver que ça manque de rigueur).

Une fois que c'est fait tu peux effectivement envoyer un SendKeys.
Comme je disais, le SendKeys c'est si vraiment on ne veut pas chercher
le reste ... C'est vrai que ça va plus vite à programmer :)
Avatar
pellet15
Le lundi 26 mars 2012 12:14:34 UTC-5, MichD a écrit :
Bonjour,

Voici un exemple. Cette procédure ouvre un fichier .txt dans NotePad et copie le contenu de ce dernier dans Excel.

À adapter...

'-----------------------------------------------
Sub Exemple()
Dim Appt As Long, Fichier As String

Fichier = "c:MonFichierTexte.txt"

'La séquence des touches "SendKeys" copie tout le
'fichier NotePad dans le presse-papier
SendKeys "^a"
SendKeys "^C"
'Ouverture du fichier "NotePad"
Appt = Shell("c:windowsNotepad.exe " & Fichier, vbMaximizedFocus)

'Rend ce classeur comme application active
AppActivate Application.Name
'J'ai supposé que la feuille active était la bonne
'et que tu voulais copier le résultat en B5
Range("B5").PasteSpecial xlPasteAll
End Sub
'-----------------------------------------------


MichD
------------------------------------------



Bonjour MichD

le programme est déjà ouvert, je veut le laisser ouvert car il doit cap ter les satellites.

ci je l'ouvre a chaque fois il n'a pas le temps de capter les satellites et ne me donne pas une bonne coordoné.
il doit être en arriéré plan.

Merci
Avatar
pellet15
Le lundi 26 mars 2012 12:21:25 UTC-5, Gloops a écrit :
pellet15 a écrit, le 26/03/2012 17:22 :
> Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter CTR L-P et revenir en avant plan avec EXCEL.

Tu pourrais avoir besoin de ça pour connaître le numéro de la fen être :
http://allapi.mentalis.org/apilist/FindWindow.shtml

puis ça pour la sélectionner :
http://allapi.mentalis.org/apilist/SetFocus.shtml

à noter qu'il existe aussi SetActiveWindow, et SetForegroundWindow, et
qu'il m'arrive souvent d'utiliser les trois d'affilée sur le même num éro
de fenêtre pour être sûr d'arriver à bien la sélectionner (peut -être
pourrait-on trouver que ça manque de rigueur).

Une fois que c'est fait tu peux effectivement envoyer un SendKeys.
Comme je disais, le SendKeys c'est si vraiment on ne veut pas chercher
le reste ... C'est vrai que ça va plus vite à programmer :)





Le lundi 26 mars 2012 12:21:25 UTC-5, Gloops a écrit :
pellet15 a écrit, le 26/03/2012 17:22 :
> Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter CTR L-P et revenir en avant plan avec EXCEL.

Tu pourrais avoir besoin de ça pour connaître le numéro de la fen être :
http://allapi.mentalis.org/apilist/FindWindow.shtml

puis ça pour la sélectionner :
http://allapi.mentalis.org/apilist/SetFocus.shtml

à noter qu'il existe aussi SetActiveWindow, et SetForegroundWindow, et
qu'il m'arrive souvent d'utiliser les trois d'affilée sur le même num éro
de fenêtre pour être sûr d'arriver à bien la sélectionner (peut -être
pourrait-on trouver que ça manque de rigueur).

Une fois que c'est fait tu peux effectivement envoyer un SendKeys.
Comme je disais, le SendKeys c'est si vraiment on ne veut pas chercher
le reste ... C'est vrai que ça va plus vite à programmer :)



Je ne comprend pas très bien mais
comment intégrer cela a la procédure suivante:

Sub Ouvrir_g7()
MyAppID = Shell("C:g7towinwithhelpg7towin.exe", 1)
SendKeys "^p", True
SendKeys "%{tab}", True
Dim Presspp As New DataObject
Set Pressp = New DataObject
Presspp.GetFromClipboard
Sheets("Donne").Select
Range("AY1").Select
ActiveSheet.Paste
End Sub

Merci
Avatar
pellet15
Le lundi 26 mars 2012 12:21:25 UTC-5, Gloops a écrit :
pellet15 a écrit, le 26/03/2012 17:22 :
> Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter CTR L-P et revenir en avant plan avec EXCEL.

Tu pourrais avoir besoin de ça pour connaître le numéro de la fen être :
http://allapi.mentalis.org/apilist/FindWindow.shtml

puis ça pour la sélectionner :
http://allapi.mentalis.org/apilist/SetFocus.shtml

à noter qu'il existe aussi SetActiveWindow, et SetForegroundWindow, et
qu'il m'arrive souvent d'utiliser les trois d'affilée sur le même num éro
de fenêtre pour être sûr d'arriver à bien la sélectionner (peut -être
pourrait-on trouver que ça manque de rigueur).

Une fois que c'est fait tu peux effectivement envoyer un SendKeys.
Comme je disais, le SendKeys c'est si vraiment on ne veut pas chercher
le reste ... C'est vrai que ça va plus vite à programmer :)



Bonjour Gloops

Je ne comprend pas très bien , comment intégrer ça dans ma procédur e:

Sub Ouvrir_g7()
MyAppID = Shell("C:g7towinwithhelpg7towin.exe", 1)
SendKeys "^p", True
SendKeys "%{tab}", True
Dim Presspp As New DataObject
Set Pressp = New DataObject
Presspp.GetFromClipboard
Sheets("Donne").Select
Range("AY1").Select
ActiveSheet.Paste
End Sub

ces la ligne suivant qui ne va pas :
MyAppID = Shell("C:g7towinwithhelpg7towin.exe", 1)

je ne veut pas l'ouvrir mais juste l'activer durent que je copie (CTRL-P).

Merci
Avatar
Gloops
MichD a écrit, le 26/03/2012 19:14 :
Bonjour,

Voici un exemple. Cette procédure ouvre un fichier .txt dans NotePad et copie le contenu de ce dernier dans Excel.



Parmi les pistes j'ai effectivement proposé que le programme source
inscrive les informations dans un fichier texte, qui serait ensuite
largement plus facile à intégrer (voir fin de ma première intervent ion
dans ce fil).

Il n'y a guère eu d'écho.
Avatar
Gloops
pellet15 a écrit, le 26/03/2012 22:04 :
Le lundi 26 mars 2012 12:21:25 UTC-5, Gloops a écrit :
pellet15 a écrit, le 26/03/2012 17:22 :
Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter C TRL-P et revenir en avant plan avec EXCEL.



Tu pourrais avoir besoin de ça pour connaître le numéro de la fe nêtre :
http://allapi.mentalis.org/apilist/FindWindow.shtml

puis ça pour la sélectionner :
http://allapi.mentalis.org/apilist/SetFocus.shtml

à noter qu'il existe aussi SetActiveWindow, et SetForegroundWindow, et
qu'il m'arrive souvent d'utiliser les trois d'affilée sur le même numéro
de fenêtre pour être sûr d'arriver à bien la sélectionner (p eut-être
pourrait-on trouver que ça manque de rigueur).

Une fois que c'est fait tu peux effectivement envoyer un SendKeys.
Comme je disais, le SendKeys c'est si vraiment on ne veut pas chercher
le reste ... C'est vrai que ça va plus vite à programmer :)





Le lundi 26 mars 2012 12:21:25 UTC-5, Gloops a écrit :
pellet15 a écrit, le 26/03/2012 17:22 :
Mais comment faire pour basculer de EXCEL vers "g7towin" exécuter C TRL-P et revenir en avant plan avec EXCEL.



Tu pourrais avoir besoin de ça pour connaître le numéro de la fe nêtre :
http://allapi.mentalis.org/apilist/FindWindow.shtml

puis ça pour la sélectionner :
http://allapi.mentalis.org/apilist/SetFocus.shtml

à noter qu'il existe aussi SetActiveWindow, et SetForegroundWindow, et
qu'il m'arrive souvent d'utiliser les trois d'affilée sur le même numéro
de fenêtre pour être sûr d'arriver à bien la sélectionner (p eut-être
pourrait-on trouver que ça manque de rigueur).

Une fois que c'est fait tu peux effectivement envoyer un SendKeys.
Comme je disais, le SendKeys c'est si vraiment on ne veut pas chercher
le reste ... C'est vrai que ça va plus vite à programmer :)



Je ne comprend pas très bien mais
comment intégrer cela a la procédure suivante:



Je proposais d'utiliser les API à la place de la première ligne.
Le programme source est supposé ouvert avant de lancer Excel, comme ç a
il n'y a pas à attendre son ouverture.

Pour le reste, j'imagine que la récupération du contenu du presse-pap ier
fonctionne, je n'ai pas détaillé trop, si jamais ça coince il faudr a dire.

De toute manière c'est simple, une fois que tu as réussi à envoyer ton
Ctrl P au programme, tu ouvres un bloc-notes pour coller le résultat
dedans : si tu as bien les infos voulues c'est que cette partie est
réussie, après il reste à vérifier l'intégration du presse-papi ers à
Windows.

ça diverge de ce que je proposais au début, mais c'est vrai que c'est
plus rapide à assimiler.

Que le site soit en Anglais t'aurait-il posé problème ? Il y a des li ens
sur des exemples à la fin.
Avatar
Gloops
pellet15 a écrit, le 26/03/2012 22:16 :
ces la ligne suivant qui ne va pas :
MyAppID = Shell("C:g7towinwithhelpg7towin.exe", 1)

je ne veut pas l'ouvrir mais juste l'activer durent que je copie (CTRL- P).

Merci



Oui, j'ai bien lu la question : comme je dis dans mon autre réponse,
c'est bien cette ligne que je propose de remplacer par FindWindow puis
SetFocus et ActivateWindow.

ça sélectionne la fenêtre, dont il faut impérativement que tu fou rnisses
le titre sans faute de frappe.

Ensuite, si rien ne vient interférer sur la sélection de la fenêtre au
moment de l'exécution, il ne reste plus qu'à envoyer le Ctrl P, et
récupérer le résultat dans le presse-papiers, si je ne m'abuse c'es t
bien ce que fait la suite de ta procédure.

Comme je disais, FindWindow, avec le titre de la fenêtre en paramètre ,
retourne le numéro de la fenêtre. C'est ce numéro (qu'on appelle hW nd)
qu'il faut passer en argument de SetFocus et ActivateWindow.

Pour que ça marche, il faut placer en tête de module les signatures d es
API, et bien respecter la syntaxe d'appel. Le mieux est de bien
s'inspirer des exemples fournis sur allapi.mentalis.org (les liens vers
les pages d'exemples sont en bas des pages de descriptions).
1 2 3