Code pour simuler un clic de souris en un point donné.

Word, PowerPoint, Outlook, Access et tous les autres logiciels de la suite Office (sauf Excel)
W
Willyfan2bibi
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 24 octobre 2014
Version d'Excel : 2012 FR

Message par Willyfan2bibi » 5 mai 2016, 20:02

Bonsoir à tous,

J'aurais besoin d'un code qui permette de simuler un clic de souris en un point donné de l'écran (voire de mon 2ème écran, lorsque je suis en mode d'affichage "Etendre ces affichages").

Il existe un code tout fait qui circule sur le web, mais il ne semble à adapté à Office. Connaîtriez-vous un tel code fonctionnant sur Excel/Powerpoint ?

Merci et bonne soirée.
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 946
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 6 mai 2016, 00:50

Bonjour,

Tu veux simuler un clic sur quoi? Une page Web, un logiciel spécifique?
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
W
Willyfan2bibi
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 24 octobre 2014
Version d'Excel : 2012 FR

Message par Willyfan2bibi » 6 mai 2016, 10:02

Bonjour,

Mon but est d'avoir 2 PPT qui tournent en même temps, chacun en mode "Lecture".
Il me faut un bouton de commande sur le PPT 1 qui simule un clic en un point donné du PPT 2.
Sachant que le PPT 1 doit être affiché sur un 1er écran, et le PPT 2 sur un 2e écran, le tout en mode de résolution "Etendre ces affichages".

Merci d'avance !
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 946
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 6 mai 2016, 10:26

Tu as donc au final 2 instances de powerpoint (une part fichier) ou une seule instance pour laquelle l'écran est scindé en deux?

Pour la première hypothèse, il faudra légèrement ruser avec un code de ce type
Sub developpement()
Dim pptApp As PowerPoint.Application
Set pptApp = GetObject("c:\mypath\fichier.ppt").Application
End Sub
Pour la seconde hypothèse, inutile de ruser!
Dans les deux cas, il faudra préciser où tu veux cliquer sur ton powerpoint! (un graphe, un objet, changer de page etc....)
Le fait de cliquer n'a aucune importance, c'est les actions consécutives à ce clic qui comptent =)
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
W
Willyfan2bibi
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 24 octobre 2014
Version d'Excel : 2012 FR

Message par Willyfan2bibi » 6 mai 2016, 11:20

Bonne question de ta part : j'ai fait l'essai d'une instance unique coupée en deux et que j'étends ensuite sur mes 2 écrans.
Le résultat est correct, mais je préférais avoir 2 fichiers séparés donc 2 instances tournant en même temps, une instance (PPT 1) permettant de contrôler l'autre (PPT 2).
Si je comprends bien, le code que tu proposes permet "d'aller" au fichier souhaité (donc mon PPT 2) via le fichier de contrôle (PPT 1) ?
En revanche, comme préciser ensuite que je souhaite simuler un clic sur une forme déclencheuse (trigger shape) donnée pour déclencher une animation (l'animation et sa forme déclencheuse étant toutes 2 déjà présentes sur le PPT 2) ?

Merci d'avance !
W
Willyfan2bibi
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 24 octobre 2014
Version d'Excel : 2012 FR

Message par Willyfan2bibi » 8 mai 2016, 14:28

Bonjour,

J'ai finalement trouvé pourquoi le code proposé un peu partout sur internet ne fonctionnait pas chez moi.
Le lien vers le code tout d'abord :
http://excelhelphq.com/how-to-move-and- ... se-in-vba/

Et la manière dont j'ai pu finir par le faire fonctionner, si ça peut en aider d'autres :

1) Il faut placer la première partie du code (= les déclarations) dans le module 1 de votre PPT de contrôle (dans mon cas, le PPT1) via Visual Basic, et non dans le code de votre diapo 1, 2, 3...
Cette portion de code se retrouve donc impérativement dans le module 1 :
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
2) Voici ensuite les codes servant à simuler, respectivement : un simple clic, un double clic et un clic droit. Ces codes sont à placer dans les pages de codes de vos diapos (par exemple dans "Slide1") :
'Modèle Simple Clic :
Private Sub SingleClick()
SetCursorPos 100, 100 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
'Modèle double clic :
Private Sub DoubleClick()
'Double click as a quick series of two clicks
SetCursorPos 100, 100 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
'Modèle Clic droit :
Private Sub RightClick()
'Right click
SetCursorPos 200, 200 'x and y position
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub
J'aurai ensuite une autre question pour aller un peu + loin, je bute sur quelque chose. Je vous mets ça dans un message suivant pour plus de clareté. ;-)
W
Willyfan2bibi
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 24 octobre 2014
Version d'Excel : 2012 FR

Message par Willyfan2bibi » 8 mai 2016, 14:46

Voici donc mon problème suivant. Une image tout d'abord :
160508024628667557.png
Mon but est de pouvoir cliquer (réellement) sur le CommandButton2 du PPT de gauche (PPT 1) pour simuler un double clic sur la position "1000, 200" (PPT 2) afin de déclencher une animation via une trigger shape située à cette position (= mon ovale bleu). Jusque là, ça fonctionne, grâce à ce code (en ayant bien sûr pris soin de mettre les déclarations requises dans le module 1 du PPT 1) :
SetCursorPos 1000, 200
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Mais je voudrais qu'après ce double clic sur le PPT2, ma souris revienne toute seule sur le PPT 1 et clique dessus, en position "100, 200". Je pensais donc pouvoir simplement ajouter, à la suite de mon 1er code, le 2nd code suivant :
SetCursorPos 100, 200
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Ma souris revient alors bien sur le PPT 1 en position 100, 200, mais mon animation n'est pas déclenchée (comme si le 1er double clic sur ma trigger shape du PPT 2 "n'avait pas eu le temps de se faire").

Qu'en pensez-vous ?
Faudrait-il ajouter une notion de délai entre le 1er et le 2nd code ?
Merci d'avance !

--------------------------------------------------------------------------------

ÉDITION : J'ai trouvé un moyen de faire indirectement ce que je voulais.

Il faut pour cela :

1) Un bouton de commande (ou une forme à laquelle vous assignez le code suivant via Insertion > Action > Macro) qui déclenche le code suivant :
Sub DoubleClicPPT2()
SetCursorPos 1000, 200
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End sub
Le curseur est alors placé sur mon PPT 2 (celui de droite), un premier clic s'effectue pour activer la fenêtre de ce PPT, puis un second clic immédiatement après qui clique sur mon ovale bleu (trigger shape). L'animation s'effectue.

2) Un code dont vous assignerez le déclenchement à la forme qui déclenchait déjà votre animation. Dans mon cas, c'est l'ovale bleu, qui va donc à la fois déclencher mon animation ET renvoyer ma souris sur le PPT 1 (à gauche) en position 100, 200 puis activer ce PPT.
Sub Animation+RenvoiAuPPT1()
SetCursorPos 100, 200
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
On est alors libre de cliquer sur un autre bouton du PPT 1. ;-)
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 946
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 8 mai 2016, 17:30

Je reste persuadé que ma méthode par pointeurs est préférable. Cependant chez moi il est impossible de lancer 2 instances distinctes de Powerpoint.... (Excel je peux mais Powerpoint impossible!!) donc je ne peux faire aucun test ni nouvelle proposition.
Quelqu'un a une astuce pour lancer ces 2 instances? (Office 2007 + W7)
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
W
Willyfan2bibi
Jeune membre
Jeune membre
Messages : 26
Inscrit le : 24 octobre 2014
Version d'Excel : 2012 FR

Message par Willyfan2bibi » 8 mai 2016, 18:18

En fait je n'ai pas compris comment, avec ta méthode, tu voudrais faire pour cliquer sur tel ou tel élément une fois la fonction GetObject exécutée. Je peux essayer si tu développes ton idée.

Avec ce que je propose, il suffit d'avoir 2 .pptm lancés en même temps en mode Lecture (ou "window").
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 946
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 9 mai 2016, 16:18

Supposons que tu ai un bouton sur lequel tu veux cliquer:
Sub procedureDansPremierPPT()
Dim appPPT As PowerPoint.Application
Set appPPT = GetObject("C:\*********\secondPPT.pptm").Application

Dim maSlide As Slide

'Le bouton est stocké dans la première slide, et s'appelle CommandButton
uneSlide = appPPT.Windows(1).CommandButton1.Click
End Sub
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message