Problème d?évènement entre une fonction et un évènement souris.

laurent1475 Messages postés 7 Date d'inscription dimanche 17 décembre 2006 Statut Membre Dernière intervention 18 février 2007 - 17 févr. 2007 à 17:37
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:46
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) 




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


Voici l’erreur :



<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??>
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
<v:stroke joinstyle="miter">
</v:stroke>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0">
</v:f>
<v:f eqn="sum @0 1 0">
</v:f>
<v:f eqn="sum 0 0 @1">
</v:f>
<v:f eqn="prod @2 1 2">
</v:f>
<v:f eqn="prod @3 21600 pixelWidth">
</v:f>
<v:f eqn="prod @3 21600 pixelHeight">
</v:f>
<v:f eqn="sum @0 0 1">
</v:f>
<v:f eqn="prod @6 1 2">
</v:f>
<v:f eqn="prod @7 21600 pixelWidth">
</v:f>
<v:f eqn="sum @8 21600 0">
</v:f>
<v:f eqn="prod @7 21600 pixelHeight">
</v:f>
<v:f eqn="sum @10 21600 0">
</v:f>
</v:formulas>
<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
</v:path>
<o:lock aspectratio="t" v:ext="edit">
</o:lock>
</v:shapetype>
<v:shape id="_x0000_i1025" style="WIDTH: 277.5pt; HEIGHT: 155.25pt" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\DOCUME~1\Houha\LOCALS~1\Temp\msohtml1\04\clip_image001.png">
</v:imagedata>
</v:shape>


Erreur d’exécution’50290’


Erreur définie par l’application ou par l’objet



 





Voici la fonction :





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






 







    For i = 1 To NumItems





    
Worksheets("Feuil1").Range("B" & ClientHandles(i)).Value = ItemValues(i) <--- L’erreur se produit ici losqu’on a fait un clique gauche sur la feuille



   
Next i






   








    GoTo SkipErr_GroupeReadWriteOnly_DataChange




Err_GroupeReadWriteOnly_DataChange:



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


SkipErr_GroupeReadWriteOnly_DataChange:



End Sub




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



 




Pourquoi et comment résoudre se problème ?



 




Merci beaucoup de votre aide


Bonne journée


Laurent


 

3 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 févr. 2007 à 18:04
Tu pourrais mettre une variable booléenne (déclarée globale) en début d'exécution et en fin d'exécution
Au début, tu la changes à True. À la fin, tu la remets à False

ex:
Public EnAction as boolean

Sub MaSub()
    If not EnAction then
        EnAction = True
        ...Code
    end if
    En Action = False
End sub

MPi
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 févr. 2007 à 18:06
Ou plutôt comme ceci, avec le EnAction = False dans le IF, à la fin de l'action.

Sub MaSub()
    If not EnAction then
        EnAction = True
        ...Code
        En Action = False

    end if
End sub

MPi
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 à 16:46
Merci de ta réponse MPi



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




J’ai fait le test mais rien n’est résolut toujours le même problème. De toute façon qui commande <?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??><st1:personname w:st="on" productid="la variable EnAction">la variable EnAction</st1:personname> ?


Mais le problème n’ai pas un conflit entres mes fonctions (qu’il faudrait synchronisé) mais un problème entre la fonction à("Feuil1").Range("B" & ClientHandles(i)).Value = ItemValues(i) et la sélection de la souris.



 




Ce que tu préconise c'est de mettre EnAction = True dans l’événement de la souris ? Pour ne pas exécuté l’autre fonction ? (Je perdrais la lecture de l’événement)



Ou une autre manière, (qui serais mieux) sa serai de stopper l’événement de la souris pendant l’exécution de ma fonction (avec ta variable EnAction)







Comment
récupères tu l’évènement
de la souris avec API windows dans Excel ?





 




A+


laurent


 
0
Rejoignez-nous