[Résolu][Calc] Evènement déclenché 4 fois (au lieu d'un)

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Calc] Evènement déclenché 4 fois (au lieu d'un)

Messagepar Johnsdoeuf » 16 Mai 2019 17:21

bonjour à tous,

J'ai associé une macro à l'évènement "sélection modifiée" d'une feuille de calcul.
Quelle ne fut pas ma surprise quand j'ai fini par comprendre que la macro est en fait lancée 4 fois :tesfou: .

Forcément ma macro n'est pas prévue pour être lancée plusieurs fois simultanément et me pose des problèmes.
Est-ce un comportement normal ?
Y a t il une méthode simple pour ignorer tous les appels redondants ?

Cordialement
Libreoffice 6.2.2.2
Windows 7 SP1
Johnsdoeuf
Fraîchement OOthentifié
 
Message(s) : 2
Inscrit le : 16 Mai 2019 17:01

Re: [Calc] Evènement déclenché 4 fois (aulieu d'un)

Messagepar OOotremer971 » 17 Mai 2019 04:02

Bonjour,

J'ai toujours rencontré des difficultés avec cet événement de feuille Sélection modifiée quelque soit les méthodes utilisées. Or aujourd'hui je découvre que l'on peux facilement discriminer les zones à traiter en utilisant Select Case:
Code : Tout sélectionner   AgrandirRéduire
Sub Main(oEvt)
Select Case oEvt.AbsoluteName
   case "$Feuille1.$D$5:$G$12"
      msgBox "Vous avez sélectionné la zone jaune"
   case "$Feuille1.$B$19:$E$26"
      msgbox "Vous avez sélectionné la zone rouge"
end select
End Sub

la macro est en fait lancée 4 fois :tesfou: .

sauf si tu n'utilise pas la souris mais uniquement les touches de direction.
Il se peut aussi que cet événement soit destiné à gérer des sélections automatiques générées par un appareil connecté à l'ordinateur., (j'opterai d'ailleurs plus facilement pour cette option là) :idea: Mais bon après ça ne reste qu'une opinion personnelle.

Un fichier pour tester le principe du Select Case et l'utilisation de la souris
Là pour l'exemple j'ai utilisé un Select Case sur le nom de la zone sélectionnée pour y effectuer un traitement, mais en fonction de ce que tu dois faire, tu peux utiliser Select Case oEvt.String pour agir en fonction d'un contenu texte ou Select Case oEvt.Value pour un contenu numérique etc...

A+
Pièces jointes
Test_SelectionModifiée.ods
(8.33 Kio) Téléchargé 12 fois
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Ubuntu
OpenSuse Leap
Avatar de l’utilisateur
OOotremer971
HédOOniste
HédOOniste
 
Message(s) : 2142
Inscrit le : 16 Avr 2010 14:31

Re: [Calc] Evènement déclenché 4 fois (aulieu d'un)

Messagepar Johnsdoeuf » 20 Mai 2019 13:13

Merci beaucoup pour ta réponse

Je confirme que l'exemple fonctionne correctement (sans répétition) mais il utilise aussi l'évènement "Sélection Modifiée"
oEvt passé à main est un objet plage de la nouvelle sélection. Ensuite, tu testes la plage avec select case.
Mon test est un peu différent, il teste que la sélection concerne une seul cellule et dans la bonne colonne.

Code : Tout sélectionner   AgrandirRéduire
If  Target.Columns.Count = 1 and Target.Rows.Count = 1 and Target.RangeAddress.StartColumn = 8 Then


La différence tient donc principalement dans l'utilisation de select Case ou de if.
Pour moi ces deux méthodes sont très proches et ne justifie pas la différence de comportement
J'ai vérifié: tous les appels se font avec le même AbsoluteName. La différence ne se situe pas là

Je voulais joindre mon fichier expurgé pour montrer le comportement mais je n'ai pas trouvé le trombone.

Je continue à investiguer...
Libreoffice 6.2.2.2
Windows 7 SP1
Johnsdoeuf
Fraîchement OOthentifié
 
Message(s) : 2
Inscrit le : 16 Mai 2019 17:01

Re: [Calc] Evènement déclenché 4 fois (aulieu d'un)

Messagepar OOotremer971 » 20 Mai 2019 13:32

Bonjour,
Quitte à me répéter, ça ne fonctionne pas avec la souris il faut utiliser les touches de directions lorsqu'il s'agit de sélectionner une seule cellule.

Pour les autres cas, il faut que la sélection soit en surbrillance pour être considérée comme une sélection. Ça fonctionne, mais très mal avec une seule cellule et la souris, en maintenant la touche Ctrl enfoncée lors du clic.
Johnsdoeuf a écrit:Mon test est un peu différent, il teste que la sélection concerne une seul cellule et dans la bonne colonne.

en principe, en Basic on teste avec :
Code : Tout sélectionner   AgrandirRéduire
if oEvt.supportsService("com.sun.star.table.Cell") Then

Johnsdoeuf a écrit:Je voulais joindre mon fichier expurgé pour montrer le comportement mais je n'ai pas trouvé le trombone.

La procédure est ici : https://forum.openoffice.org/fr/forum/viewtopic.php?f=1&t=10246
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Ubuntu
OpenSuse Leap
Avatar de l’utilisateur
OOotremer971
HédOOniste
HédOOniste
 
Message(s) : 2142
Inscrit le : 16 Avr 2010 14:31


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 4 invité(s)