[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 !
Johnsdoeuf
Fraîchement OOthentifié
Messages : 2
Inscription : 16 mai 2019 16:01

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

Message par Johnsdoeuf »

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
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

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

Message par OOotremer971 »

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

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+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Johnsdoeuf
Fraîchement OOthentifié
Messages : 2
Inscription : 16 mai 2019 16:01

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

Message par Johnsdoeuf »

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

 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
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

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

Message par OOotremer971 »

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

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/v ... =1&t=10246
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11