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 .
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
[Résolu][Calc] Evènement déclenché 4 fois (au lieu d'un)
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Fraîchement OOthentifié
- Messages : 2
- Inscription : 16 mai 2019 16:01
[Résolu][Calc] Evènement déclenché 4 fois (au lieu d'un)
Libreoffice 6.2.2.2
Windows 7 SP1
Windows 7 SP1
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Evènement déclenché 4 fois (aulieu d'un)
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:
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à) 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+
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
sauf si tu n'utilise pas la souris mais uniquement les touches de direction.la macro est en fait lancée 4 fois .
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à) 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
AOO
LibreOffice
Debian 10 et 11
-
- Fraîchement OOthentifié
- Messages : 2
- Inscription : 16 mai 2019 16:01
Re: [Calc] Evènement déclenché 4 fois (aulieu d'un)
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.
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...
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
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
Windows 7 SP1
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Evènement déclenché 4 fois (aulieu d'un)
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.
A+
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.
en principe, en Basic on teste avec :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.
Code : Tout sélectionner
if oEvt.supportsService("com.sun.star.table.Cell") Then
La procédure est ici : https://forum.openoffice.org/fr/forum/v ... =1&t=10246Johnsdoeuf a écrit :Je voulais joindre mon fichier expurgé pour montrer le comportement mais je n'ai pas trouvé le trombone.
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11