Aide sur la récupération d?événement de souris API ou autre - VBA Excel
laurent1475
Messages postés7Date d'inscriptiondimanche 17 décembre 2006StatutMembreDernière intervention18 février 2007
-
18 févr. 2007 à 16:58
laurent1475
Messages postés7Date d'inscriptiondimanche 17 décembre 2006StatutMembreDernière intervention18 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
A voir également:
Aide sur la récupération d?événement de souris API ou autre - VBA Excel
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--
laurent1475
Messages postés7Date d'inscriptiondimanche 17 décembre 2006StatutMembreDernière intervention18 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 !!).
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--
( 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
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 ?