[Résolu] [Calc] Interrompre un évènement de personnalisation

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 !
Olive9
Fraîchement OOthentifié
Messages : 5
Inscription : 06 juin 2013 08:23

[Résolu] [Calc] Interrompre un évènement de personnalisation

Message par Olive9 »

Bonjour

Dans un calc, je veux faire un contrôle avant enregistrement par macro du contenu de la feuille. J'ai donc affecté une macro à l'évènement 'Enregistrement le document'.

Si l'information n'est pas correcte, je voudrais que la sauvegarde ne se fasse pas. Comment peut-on arrêter l'évènement ?

Par avance, merci
Dernière modification par lawrence le 05 juil. 2013 01:20, modifié 1 fois.
Raison : Ajout de la Balise [Résolu] et de la coche verte
OpenOffice 3.3 windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Interrompre un évènement de personnalisation

Message par Dude »

Salut,

L'instruction Exit est ton amie.
Regarde l'aide F1 sur le sujet et les exemples sur le forum.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Olive9
Fraîchement OOthentifié
Messages : 5
Inscription : 06 juin 2013 08:23

Re: [Calc] Interrompre un évènement de personnalisation

Message par Olive9 »

Merci pour la réponse et désolé pour la balise.

J'ai mis Exit dans ma macro, mais l'évènement d'enregistrement s'effectue quand même.
OpenOffice 3.3 windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Interrompre un évènement de personnalisation

Message par Dude »

Effectivement, l'événement lance la macro puis exécute l'action.
Il faut donc intercepter l'enregistrement au niveau du Dispatcher.
Mais là, c'est une autre paire de manche.

Quelques ressources en anglais : http://wiki.openoffice.org/wiki/Documen ... terception
Une traduction est la bienvenue qui sera à publier ensuite dans la partie Enrichissez la documentation
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Interrompre un évènement de personnalisation

Message par alhazred »

Bonjour,

Houla... Je pense avoir un bon niveau en anglais et en informatique, mais je dois reconnaître que là, je suis un peu dépassé :lol:

Il serait plus évident, pour le fichier en question (pas pour Calc bien sûr :aie: ), de rediriger les commandes d'enregistrement normales (menus, raccourcis et boutons) vers une macro qui ferait la vérification et, selon le cas, l'enregistrement. Ou carrément les inhiber/supprimer et déclencher la macro par un bouton.
 Ajout : Précision, les raccourcis ne peuvent pas être commodément modifiés au niveau du document... 
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Olive9
Fraîchement OOthentifié
Messages : 5
Inscription : 06 juin 2013 08:23

Re: [Calc] Interrompre un évènement de personnalisation

Message par Olive9 »

Bonjour,

Merci pour vos réponses. Je vois donc qu'il n'y a pas de solution simple.

J'avais bien pensé à la sulotion proposé par alhazred, mais il reste le problème de la fermeture par la croix. Si l'utilisateur choisit enregistrer sur le message affiché, la sauvegarde classique va se faire sans passer par la macro.
OpenOffice 3.3 windows 7
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Interrompre un évènement de personnalisation

Message par joel275 »

Bonjour,

ayant une grade habitude de rencontrer des obstacles incontournables pour moi, je propose de le contourner en rechargeant l'ancienne version si la vérification n'est pas satisfaisante. Il suffit pour cela de:

Code : Tout sélectionner

ThisComponent.setModified(False)     ' pour éviter une demande de confirmation
        Dispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")
	Dispatcher.ExecuteDispatch(oFrame, ".uno:Reload, "", 0, Array())	
on peut peut-être aussi utiliser un modèle qui, justement, permet d'éviter les modifications malencontreuses (mais alors, on aurait quelque(s) document(s) inutile(s) encombrant le disque dur).

Pas le temps de tester tout ça ce dimanche soir.

Par ailleurs, Spyre m'avait indiqué il y a quelques temps déjà, la façon de modifier les raccourcis pour seulement le document en cours. je ne retrouve pas son message, mais je peux fournir ma version de ses indications à tout demandeur.

A plus, Joël
A jour de LibreOffice et de Ubuntu
Olive9
Fraîchement OOthentifié
Messages : 5
Inscription : 06 juin 2013 08:23

Re: [Calc] Interrompre un évènement de personnalisation

Message par Olive9 »

Bonjour

Merci Joël, mais ta solution me parait un peu radical, car on perd toutes les modifs depuis le dernier enregistrement. Je pense que je vais faire une croix sur cette option.

Par contre Joël, la fonction de modifier les raccourcis pour seulement le document en cours pourrait m'intéresser. Peux-tu me fournir la version comme tu l'as proposé ? Par avance, merci.
OpenOffice 3.3 windows 7
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Interrompre un évènement de personnalisation

Message par joel275 »

Bonjour,

ma solution n'est pas si radicale que cela: 1) on sauvegarde la version modifiée 2) on recharge la version précédente 3) on remet la version modifiée (et on fait le ménage sur le disque dur) 4) on laisse le processus initié par l'utilisateur suivre son cours: mais là, c'est vraiment du bidouillage!

Pour l'affectation de nouvelles touches de raccourcis pour le document en cours, je joins le code comme convenu

Code : Tout sélectionner

' Code très largement inspiré d'une réponse faite par Spyre sur le forum, réponse que je ne retrouve plus!
oDocShortCutMgr = ThisComponent.getUIConfigurationManager.getShortCutManager		'raccourcis au niveau document
For I = 0 To UBound(jdMacros)
			jdMacros(I) = "vnd.sun.star.script:JDMath.MetMath." & jdMacros(I) & "?language=Basic&location=application"
'jdMacros(I) contient la macro à déclencher par raccourci
'jdLettres(I) contient le code de la touche affectée au raccourci
'par exemple jdLettres(0) = com.sun.star.awt.Key.A pour la lettre "A"
			With aKeyEvent
				.KeyCode = jdLettres(I)
			End With
			On Error Resume Next			' CommandByKeyEvent renvoie une erreur si aKeyEvent n'est pas affectée
				sLocCommand = oDocShortCutMgr.getCommandByKeyEvent(aKeyEvent)
			On Error GoTo 0
			Select Case sLocCommand
				Case  ""
					oDocShortCutMgr.setKeyEvent(aKeyEvent, jdMacros(I))
				Case  jdMacros(I) 		' aKeyEvent est déjà affectée à notre commande
				Case Else 				' aKeyEvent est déjà affectée à une autre commande
					oDocShortCutMgr.removeKeyEvent(aKeyEvent)
					oDocShortCutMgr.setKeyEvent(aKeyEvent, jdMacros(I))
			End Select
			sLocCommand = ""		' ne se remet pas toujours à "" à cause du On Error
		Next
Toutefois, je me demande s'il ne vaudrait pas mieux ouvrir un nouveau fil puisque ce code n'a pas de rapport avec le titre de la question.
 Ajout : la modification des raccourcis n'est pas enregistrée avec le document: il faut donc les réaffecter à chaque ouverture du documet 
 Ajout : à 17h12: j'ai ajouté une ligne au code pour définir la variable objet oDocShortCutMgr malheureusement zapée dans le copier-coller 
A plus, Joël
Dernière modification par joel275 le 10 juin 2013 15:14, modifié 1 fois.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Interrompre un évènement de personnalisation

Message par Dude »

Sur la base du travail de ms777 qui l'a lui-même piqué à Paolo Montavi sur le forum anglophone.

Le classeur ci-dessous empêche la sauvegarde tant qu'une cellule n'a pas la bonne valeur.
zInterceptor.ods
A utiliser avec prudence car tous les cas ne sont pas gérés et on a vite de se retrouver avec un logiciel hors de contrôle.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Interrompre un évènement de personnalisation

Message par joel275 »

Bonjour,

Super!! Mais, euh!, comment dire? Sans vouloir abuser, quelques commentaires explicatifs (même beaucoup) seraient les bienvenus.

A plus, Joël
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Interrompre un évènement de personnalisation

Message par Dude »

joel275 a écrit :Sans vouloir abuser, quelques commentaires explicatifs (même beaucoup) seraient les bienvenus.
Oui, je l'ai mentionné plus haut, une francisation de la documentation du Wiki est à faire.
Le travail est en cours : http://forum.openoffice.org/fr/forum/vi ... 37&t=39081
Olive9
Fraîchement OOthentifié
Messages : 5
Inscription : 06 juin 2013 08:23

Re: [Calc] Interrompre un évènement de personnalisation

Message par Olive9 »

Merci à Joël, pour son extrait de code et merci à Dude pour le fichier d'exemple. Je vais étudié tout ça tranquillement.
OpenOffice 3.3 windows 7