Aide sur la récupération d?événement de souris API ou autre - VBA Excel

laurent1475 Messages postés 7 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 18 février 2007 - 18 févr. 2007 à 16:58
laurent1475 Messages postés 7 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 18 février 2007 - 18 févr. 2007 à 20:01
Bonjour à tous



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




J’ai une application Excel qui communique avec un serveur OPC (Tout fonction bien, stable)


J’ai une procédure qui ai appelée par événement à chaque fois (qu’une variable abonné) a changée de valeur.



 




Le problème ai que si la fonction n’ai pas terminé ET qu’un événement souris se produit par exemple : clique gauche sur la feuille  et bien un message d’erreur se produit ????? (Un clique droit ne crée pas d’erreur)



 




Quelqu’un pourrait il me donner un code qui permet de capturer l’événement de souris clique gauche en VBA sous excel. Avec API de Windows ou autre ?


J’ai cherché dans le forum mais je n’arrive pas a compilé les programmes trouvés.



 




Merci d’avance de votre aide


laurent

9 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 févr. 2007 à 17:15
Salut,

tu as peut-être un autre évènement qui se déclenche lors d'un clique gauche de la souris (selection_change, beforedblclick, etc..) qui rentre en conflit avec ta Sub.

Essai ceci (sans garanti) :

Private Sub TA_PROCEDURE()
    Application.EnableEvents = False
    '             ici tout ton code
    Application.EnableEvents = True
End Sub

Ca neutralise pendant l'exécution de ta Sub les évènements d'Excel.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
laurent1475 Messages postés 7 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 18 février 2007
18 févr. 2007 à 17:34
Merci de t’a réponse 647037 mortalino mais j’ai déjà essayé (Application.EnableEvents = False) et sa change rien !!


(selection_change, beforedblclick, etc..) font que l’événement de la souris arrive a Excel et déclenche le problème



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Je crois qu’il faut un programme qui récupère l’événement avant qu’elle arrive à <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la feuille Excel">la feuille Excel</st1:personname> (et il n'existe pas d’événement click gauche !!).




Meci d'avance de votre aide
Laurent
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 févr. 2007 à 17:46
Tu dis
J'ai une procédure qui ai appelée par événement à chaque fois (qu'une variable abonné) a changée de valeur.

Quel évènement ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
18 févr. 2007 à 18:00
Bonsoir,
En faisant du subclassing, voir résultat recherche
(Jamais essayé dans excel)

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 févr. 2007 à 18:28
Saut Willy,

je viens d'essayer le subclassing en partant de l'exemple de Manu, n'ayant pas de Handle dans excel, j'ai récupéré celui de l'application, aïe aïe, j'ai planté Excel, donc en VBA ça risque d'être difficile...

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
18 févr. 2007 à 18:34
Mortalino, il semblerait qu'excel soit long à capturer les événements. http://www.pcreview.co.uk/forums/thread-1008964.php
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 févr. 2007 à 18:37
bah ça plante plus mais ça ne fonctionne pas vraiment.
Avec le curseur qui bouge dans excel au-dessus d'une ComboBox Excel (une vraie, par exemple, pour choisir la taille ou la police), j'ai le caption qui se rafraichit en boucle dans la barre de titre de VBA, mais rien ne se passe (debug.Print inopérant, avec du texte)

Le VBA d'Excel est particulier, et bien différent de VB, hélas, il n'y pas pas le meilleur des deux. Mais bon, c'est lié au tableur avant tout.

Notre ami devra se tourner vers une autre solution.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 févr. 2007 à 18:42
Arf, post croisé.


Désolé Willy, mais moi et mon anglais... Par contre ça m'a permis de savoir que :

Application.Hwnd existe !!!

Ne l'ayant pas avec les UserForm, je suis parti du principe que pour
excel, on ne pouvait le déterminer via la fonction interne.  On le
saura maintenant (on ça m'évitera un FindWindow)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
laurent1475 Messages postés 7 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 18 février 2007
18 févr. 2007 à 20:01
Pour répondre a la question de 647037 mortalino


( J'ai une procédure qui ai appelée par événement à chaque fois (qu'une variable abonné) a changée de valeur. Quel évènement ?)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>




 






Voila la procédure qui est appelé : A chaque fois qu’une variable a changé d’état






 






Sub GroupeReadWriteOnly_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)






    ' We don't have error handling here since this is an event called from the OPC interface





On Error GoTo Err_GroupeReadWriteOnly_DataChange






    Dim i As Integer






   








    If Not EnAction Then ' 1 test  peut etre enlevé






     








      EnAction = True






      For i = 1 To NumItems






       r = r + i






       Worksheets("Feuil1").Range("B" & r).Value = ItemValues(i)

ß


 

Cette ligne plante










 




      Next i






      EnAction = False






    End If






 







    GoTo SkipErr_GroupeReadWriteOnly_DataChange





Err_GroupeReadWriteOnly_DataChange:






   
MsgBox Err.Description + vbCrLf + "Erreur produite dans le programme: GroupeReadWriteOnly_DataChange"



   
EnAction = False





SkipErr_GroupeReadWriteOnly_DataChange:




End Sub



 




J’ai l’impression que le problème vient de la sélection crée par le clique droit. C’est a dire qu’on demande d’écrire une valeur à la sélection donnée (Worksheets("Feuil1").Range("B" & r).Value = ItemValues(i)) et que le clique droit crée a Excel une autre sélection contradictoire !!



 




Voila je n’en sait pas plus. Pour empêché se problème soit :


- On « déplacement » l’événement souris (je ne sais pas faire)


- Il existe une fonction dans Excel qui enlève se conflit ?



 




laurent
0
Rejoignez-nous