[Résolu] Evénement sur modification du contenu d'une cellule

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 !
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

[Résolu] Evénement sur modification du contenu d'une cellule

Message par cris59 »

Je cherche à intercepter le changement de contenu d'une cellule qui contient une liste de validité...

J'ai pensé à PropertiesChangeListener, mais je n'arrive pas à paramétrer correctement...

cris59
Dernière modification par cris59 le 29 avr. 2006 08:22, modifié 2 fois.
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Par contenu d'une cellule, tu parles de Calc ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Oui, de Calc... j'ai oublié de préciser !

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Une interception de touche peut être :

Code : Tout sélectionner

Sub RegisterKeyHandler
     Doc = ThisComponent.getCurrentController
     oKeyHandler = createUnoListener("MyApp_", "com.sun.star.awt.XKeyHandler")
     Doc.addKeyHandler(oKeyHandler) 
End Sub

Sub UnregisterKeyHandler
     Doc.removeKeyHandler(oKeyHandler)
End Sub

Function MyApp_KeyPressed(oEvt) As Boolean
   Doc = ThisComponent.getCurrentController            
   Cell = Doc.getselection()   
   MsgBox ("Code touche : " + oEvt.Keycode)     
End Function  
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

Dans le panneau de validité, onglet Message d'erreur:
Contenu : Action = macro, puis Parcourir
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Non Dude, une interception de touche ne convient pas

Non bm92, ce serait pour récupérer la valeur sélectionnée dans la liste (cela ne génère pas d'erreur)... et donc quand cette valeur change de lancer une macro de récupération

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Code : Tout sélectionner

Sub LanceEcoute
	dim document as object
	oDoc = StarDesktop.CurrentComponent
	oSheets = oDoc.getSheets()
	oSheet = oSheets.getByName("Feuille1")
	oCell = oSheet.getCellRangeByName("A1")
	oListener = CreateUnoListener( "LS_", "com.sun.star.chart.XChartDataChangeEventListener" )
	oCell.addChartDataChangeEventListener(oListener)
	MsgBox "Module d'écoute OK !"
End Sub

Sub LS_ChartDataChanged
	oDoc = StarDesktop.CurrentComponent
	oSheets = oDoc.getSheets()
	oSheet = oSheets.getByName("Feuille1")
	oCell = oSheet.getCellRangeByName("A1")
	
	MsgBox "A1 a changé"
End Sub 
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Merci Dude, cela fonctionne ...

mais c'est relativement lent (1 grosse seconde entre le clic de sélection et l'affichage du message), c'est normal?

XPropertiesChangeListener ne pouvait pas être utilisé ?

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

cris59 a écrit :mais c'est relativement lent (1 grosse seconde entre le clic de sélection et l'affichage du message), c'est normal?
Ca me le fait aussi chez moi. On dirait que l'info a dû mal à remonter au listener.
Pas d'autre idée pour le moment, désolé.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Merci beaucoup

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

Trouvé :lol:

Code : Tout sélectionner

Option Explicit

Global oListener as object, oCell as object

Sub LanceEcoute 
dim oDoc as object, oSheets as object, oSheet as object 
oDoc = thisComponent 
oSheets = oDoc.getSheets() 
oSheet = oSheets.getByName("Feuille1") 
oCell = oSheet.getCellRangeByName("C5")
oListener = CreateUnoListener( "LS_", "com.sun.star.util.XModifyListener" ) 
oCell.addModifyListener(oListener)
MsgBox "Module d'écoute ouvert !" 
End Sub


Sub FermeEcoute
oCell.removeModifyListener(oListener)
MsgBox "Module d'écoute fermé !" 
End Sub

Sub LS_modified(evt as object)
dim oCell as object
oCell = evt.Source
print oCell.Value, oCell.String
End Sub


Sub LS_disposing(evt as object)
' routine lancée à la fermeture du document
End Sub
Il faut déclarer en Global non seulement l'objet Listener mais aussi l'objet cellule, afin de les récupérer pour fermer le listener.
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Effectivement c'est beaucoup plus rapide... la gestion des événements, ce n'est pas évident !

Merci bm92

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/