[Résolu][Calc] Listener sur changement de colonne

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 !
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

[Résolu][Calc] Listener sur changement de colonne

Message par Lio2609 »

Bonjour,
Voici un code sensé appeler une macro dès qu'un changement intervient dans la colonne M mais il ne se passe rien, voyez-vous une erreur (ou plusieurs :D )?

Code : Tout sélectionner

Option Explicit



Global oListener As Object  
Global range As Object  
  
  
Sub lancement_GestionEvenement() 

Xray ThisComponent
  'Objet pour gérer l'événement Change dans le Range de la feuille "base"
  Dim feuilles as object, laFeuille as object, range as object
  
 
  feuilles = ThisComponent.Sheets
  laFeuille = feuilles("base")
  range = Lafeuille.GetCellRangeByName("M2:M30000")
  
  oListener = CreateUnoListener( "Classeur_" , "com.sun.star.util.XModifyListener" )  
  range.addmodifylistener(olistener)  
  
End Sub  
  
  
Sub Classeur_Modified() 
     
	call DoublonsNoms ()     'ma macro à éxecuter lorsque Range change

End Sub 
  
  
Sub Classeur_Disposing() 
 
End Sub
Merci d'avance.
Dernière modification par Lio2609 le 20 mars 2023 00:31, modifié 1 fois.
Libre Office 7.4.7.2 sous Windows 10 64bit
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12222
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Listener

Message par Bidouille »

Bonjour,

Merci de veiller à trouver un titre explicite.
Ce n'est pas pour vous mais pour ceux qui feront ensuite des recherches dans ce forum.
A ce jour Calc listener retourne plus de 400 résultats. Autant dire que ce n'est pas pertinent.

Corrigé à votre place pour cette fois.
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Listener sur changement de colonne

Message par joel275 »

Bonjour,
as-tu regardé le lien suivant viewtopic.php?p=315366#p315366?

A plus.
A jour de LibreOffice et de Ubuntu
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener

Message par Lio2609 »

Bidouille a écrit : 19 mars 2023 08:12 Bonjour,

Merci de veiller à trouver un titre explicite.
Ce n'est pas pour vous mais pour ceux qui feront ensuite des recherches dans ce forum.
A ce jour Calc listener retourne plus de 400 résultats. Autant dire que ce n'est pas pertinent.

Corrigé à votre place pour cette fois.
Désolé pour le titre, je le saurai pour la prochaine fois :super:
Libre Office 7.4.7.2 sous Windows 10 64bit
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

joel275 a écrit : 19 mars 2023 08:30 Bonjour,
as-tu regardé le lien suivant viewtopic.php?p=315366#p315366?

A plus.
Merci pour la réponse,
Je ne vois pas ce qui pourrait m'aider dans ce sujet, peux-tu me l'indiquer?
J'essaye aussi de trouver de la documentation sur le fonctionnement de XModifyListener mais je ne trouve rien de clair, sais-tu où je pourrais trouver ça?
C'est ma première tentative de code, désolé si des questions paraissent idiotes.

J'ai oublié de dire que j'avais un code ressemblant à celui-ci qui fonctionnait très bien avant l'enregistrement du fichier en mode excel (puisqu'il vient de là et contient des macros en VBA) et qu'il a disparu à la réouverture :fou: maintenant je le sais... Mais je n'arrive pas à retrouver où j'ai été le pécher :roll:

merci.
Dernière modification par Lio2609 le 19 mars 2023 11:40, modifié 1 fois.
Libre Office 7.4.7.2 sous Windows 10 64bit
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Listener sur changement de colonne

Message par joel275 »

Re,
je pense qu'il te faut une variable globale nommée Classeur comme indiqué dans le début du post que je t'ai indiqué.
De plus les macros Excel ne sont pas compatibles avec AOo-LOo :(

A plus.
A jour de LibreOffice et de Ubuntu
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

joel275 a écrit : 19 mars 2023 11:32 Re,
je pense qu'il te faut une variable globale nommée Classeur comme indiqué dans le début du post que je t'ai indiqué.
De plus les macros Excel ne sont pas compatibles avec AOo-LOo :(

A plus.
Haaaa, oui, tu as raison, ça marche ! Sauf qu'il ne prend pas en compte le range de cellule et que la macro se lance peu importe la colonne dans laquelle je clic :?

Un autre petit problème, j'ai l’impression qu'il appelle plusieurs fois le sub DoublonsNoms() car j'ai 2 x voir 3 x ou 4 x la réponse... D'où est ce que ça peut venir?

Je sais pour les macros excel mais j'avais besoin du fichier et bizarrement, à la première ouverture elles ont toute fonctionné :marto:

Je vous remet le code modifié :

Code : Tout sélectionner

Option Explicit

Global rangeToBeListened As Object
Global oListener As Object   
  
  
Sub lancement_GestionEvenement() 

  'Objet pour gérer l'événement Change dans le Range de la feuille "base"
  
  oListener = CreateUnoListener( "Classeur_" , "com.sun.star.util.XModifyListener" )  
       
  rangeToBeListened = ThisComponent.Sheets("base").GetCellRangeByName("M2:M30000")
  rangeToBeListened.addModifyListener(Olistener)

  
End Sub  
  
  
Sub Classeur_Modified() 
     
	call DoublonsNoms ()     'ma macro à éxecuter lorsque Range change

End Sub 
  
  
Sub Classeur_Disposing() 
 
End Sub
Libre Office 7.4.7.2 sous Windows 10 64bit
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 945
Inscription : 19 août 2018 05:20

Re: [Calc] Listener sur changement de colonne

Message par Dolev »

Bonjour,

zeguedon dans votre autre question, vous recommande d'utiliser l'événement de feuille.

joel275 vous indique un lien qui mène à un rapport de bug. Il y a un document à télécharger qui montre son usage.
Open Office 4.1.15 sous Windows 11
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

Dolev a écrit : 19 mars 2023 14:34 Bonjour,

zeguedon dans votre autre question, vous recommande d'utiliser l'événement de feuille.

joel275 vous indique un lien qui mène à un rapport de bug. Il y a un document à télécharger qui montre son usage.
Merci pour votre réponse,
J'ai bien trouvé le document et c'est plus clair pour moi, merci.

Concernant l’évènement feuille, ce qui me pose problème c'est que ça appel la macro peu importe l'adresse de la cellule modifiée. Comment faire pour limiter l'appel aux cellules de la colonne M?
Libre Office 7.4.7.2 sous Windows 10 64bit
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Listener sur changement de colonne

Message par joel275 »

Re,
il te faut récupérer l'évènement

Code : Tout sélectionner

Sub Classeur_Modified(evt) 
puis remonter à la cellule qui l'a déclenché (il y a des exemples sur le forum ou bien utilise XRay) et vérifier que celle-ci est bien dans la bonne zone)
A plus.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 945
Inscription : 19 août 2018 05:20

Re: [Calc] Listener sur changement de colonne

Message par Dolev »

La macro du document limite à la plage de cellules A1:B2 avec la propriété CellAddress.
Il suffit d'extrapoler pour la colonne M
Open Office 4.1.15 sous Windows 11
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

joel275 a écrit : 19 mars 2023 15:52 Re,
il te faut récupérer l'évènement

Code : Tout sélectionner

Sub Classeur_Modified(evt) 
puis remonter à la cellule qui l'a déclenché (il y a des exemples sur le forum ou bien utilise XRay) et vérifier que celle-ci est bien dans la bonne zone)
A plus.
Ok, donc si j'ai bien compris il faudrait ceci?

Code : Tout sélectionner

Sub Classeur_Modified(evt As Object) 
En ce qui conerne Xray je suis completement perdu, je vais lire le manuel d'utilisation.
Merci.
Libre Office 7.4.7.2 sous Windows 10 64bit
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

Dolev a écrit : 19 mars 2023 15:56 La macro du document limite à la plage de cellules A1:B2 avec la propriété CellAddress.
Il suffit d'extrapoler pour la colonne M
Si je comprend bien quand on lie l'évènement modifier de la feuille à la macro seules les cellules de A1 à B2 peuvent la déclencher et il faudrait changer ça grace à CellAddress.

Je dois faire ça à quel endroit et comment?
Libre Office 7.4.7.2 sous Windows 10 64bit
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 945
Inscription : 19 août 2018 05:20

Re: [Calc] Listener sur changement de colonne

Message par Dolev »

Colonne M = index 12

Code : Tout sélectionner

oAddress = oSel.getCellAddress()
	With oAddress
		if .Column = 12 then _ 
			msgbox "Cell in " & oSel.AbsoluteName & " has changed"
	End With
Et vous faciliteriez le travail de réponse en fournissant dés le départ un document sur lequel travailler.
Open Office 4.1.15 sous Windows 11
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

Lio2609 a écrit : 19 mars 2023 16:34
joel275 a écrit : 19 mars 2023 15:52 Re,
il te faut récupérer l'évènement

Code : Tout sélectionner

Sub Classeur_Modified(evt) 
puis remonter à la cellule qui l'a déclenché (il y a des exemples sur le forum ou bien utilise XRay) et vérifier que celle-ci est bien dans la bonne zone)
A plus.
Ok, donc si j'ai bien compris il faudrait ceci?

Code : Tout sélectionner

Sub Classeur_Modified(evt As Object) 
En ce qui conerne Xray je suis completement perdu, je vais lire le manuel d'utilisation.
Merci.

Edit: J'ai lu et je suis encore plus perdu, ça sera donc pour plus tard
Libre Office 7.4.7.2 sous Windows 10 64bit
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

Dolev a écrit : 19 mars 2023 16:49 Colonne M = index 12

Code : Tout sélectionner

oAddress = oSel.getCellAddress()
	With oAddress
		if .Column = 12 then _ 
			msgbox "Cell in " & oSel.AbsoluteName & " has changed"
	End With
Et vous faciliteriez le travail de réponse en fournissant dés le départ un document sur lequel travailler.
Je ne suis pas autorisé à partager le document sinon ce serait déjà fait.
Merci pour votre réponse.
Libre Office 7.4.7.2 sous Windows 10 64bit
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

Re,
Je me suis donc servi du document de rapport de bug et ai affecté les différents subs aux évènements du doc comme décrit dans le code.
La macro se déclenche bien maintenant uniquement dans la colonne M :!: :D

j'ai malheureusement toujours plusieurs réponses en boucle de la macro appelée "DoublonsNoms" mais une seule fois
"Cellules dans la zone 'M2:M30000' de la Feuille 'Base' modifiées!"
Ce qui me fait dire que le problème vient de la fonction "DoublonsNoms". Dite moi si vous avez une autre idée sinon je passe ce thread en résolu.

Code : Tout sélectionner

Option Explicit

Global oListener as object, oCells as object

Sub LanceEcoute 'procédure à assigner à l'évènement ouverture du document Outils-Personnaliser-Evènement (dans le doc)
 dim oDoc as object, oSheets as object, oSheet as object
 oDoc = thisComponent
 oSheets = oDoc.getSheets()
 oSheet = oSheets.getByName("Base")
 oCells = thisComponent.getSheets.getByname("Base").getCellRangeByName("M2:M30000")
 oListener = CreateUnoListener( "LS_", "com.sun.star.util.XModifyListener" )
 oCells.addModifyListener(oListener)
 MsgBox "Module d'écoute ouvert !"
End Sub

Sub FermeEcoute 'procédure à assigner à l'évènement fermeture DE document Outils-Personnaliser-Evènement (dans le doc)
 oCells.removeModifyListener(oListener)
 MsgBox "Module d'écoute fermé !"
End Sub

Sub LS_modified(evt as object) 'Macro qui se déclenche dès que l'événement est détecté (changement dans les cellules)
 MsgBox "Cellules dans la zone 'M2:M30000' de la Feuille 'Base' modifiées!"
 call DoublonsNoms
End Sub

Sub LS_disposing'(evt as object)
' routine lancée à la fermeture du document
End Sub
Edit : J'ai parlé trop vite, la ligne de code ci-dessous me met "Erreur d'exécution BASIC.Variable d'objet non définie." pourtant elle est bien déclarée en Global, je ne comprends pas

Code : Tout sélectionner

oCells.removeModifyListener(oListener)
Merci :super:
Libre Office 7.4.7.2 sous Windows 10 64bit
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Listener sur changement de colonne

Message par zeguedon »

Bonjour,
Lio2609 a écrit : 19 mars 2023 18:14 j'ai malheureusement toujours plusieurs réponses en boucle de la macro appelée "DoublonsNoms"
On voit dans ton code deux fois la même instruction Print :
Capture d’écran du 2023-03-19 14-21-46.png
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 945
Inscription : 19 août 2018 05:20

Re: [Calc] Listener sur changement de colonne

Message par Dolev »

Lio2609 a écrit : 19 mars 2023 17:01 Je ne suis pas autorisé à partager le document sinon ce serait déjà fait.
On est habitué à avoir ce genre de réponse.
Lire comment dépersonnaliser le document :roll:
Open Office 4.1.15 sous Windows 11
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

zeguedon a écrit : 19 mars 2023 18:23 Bonjour,
Lio2609 a écrit : 19 mars 2023 18:14 j'ai malheureusement toujours plusieurs réponses en boucle de la macro appelée "DoublonsNoms"
On voit dans ton code deux fois la même instruction Print :
Capture d’écran du 2023-03-19 14-21-46.png

@+
Rhooo, mon dieu, j'ai honte... :oops: merci beaucoup.

La modération vous a écrit: Veillez à ne pas citer l'intégralité du message auquel vous répondez.
Surtout si c'est pour répéter vos propres propos. Cela alourdit inutilement la lecture.

Libre Office 7.4.7.2 sous Windows 10 64bit
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »

Dolev a écrit : 19 mars 2023 18:40
Lio2609 a écrit : 19 mars 2023 17:01 Je ne suis pas autorisé à partager le document sinon ce serait déjà fait.
On est habitué à avoir ce genre de réponse.
Lire comment dépersonnaliser le document :roll:
Je suis nouveau, il y a 1 mois je n'avais jamais ouvert un document calc.
Le document a 12 pages, des formules, boutons et macros, les coordonnées de plus de 3000 personnes.
J'ai bien compris que vous étiez habitué à tout ...
En ce qui me concerne, j'apprends et je suis loin d’être assez à l'aise pour "nettoyer" un document pareil sans savoir si je ne vais pas supprimer certaines choses indispensables au bon fonctionnement de la macro.
J'ai demandé de l'aide, je vous fourni ce que je peux, et si c'est insuffisant je le comprendrai sans peine.
Merci pour votre aide.
Libre Office 7.4.7.2 sous Windows 10 64bit
Lio2609
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 18 mars 2023 22:58

Re: [Calc] Listener sur changement de colonne

Message par Lio2609 »


La modération vous a écrit: Veillez à ne pas citer l'intégralité du message auquel vous répondez.
Surtout si c'est pour répéter vos propres propos. Cela alourdit inutilement la lecture.

Pas de problème :super:
Libre Office 7.4.7.2 sous Windows 10 64bit