[Résolu][Calc] Cacher controles case à cocher

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
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 21:12

[Résolu][Calc] Cacher controles case à cocher

Message par Roby68 »

Bonjour le Forum

Pour faire suite à la lecture sur Wiki de la gestion des contrôles et tout particulièrement des "Cases à Cocher",
https://wiki.openoffice.org/wiki/FR/Doc ... ment_Forms

Je ne parviens pas à écrire le code correspondant à mon sujet suivant :
Exemple :
J'ai 5 cases à cocher et lorsque je clique sur une, toutes les autres devraient se masquer. Si aucune n'est sélectionnée elles sont toutes visibles.

Merci d'avance pour votre aide ou piste

Roby
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Roby68 le 02 nov. 2019 07:10, modifié 2 fois.
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Cacher controles case à cocher

Message par OOotremer971 »

Bonjour,

Avant toutes choses, de grâce utilise Xray sans aucune modération :evil:

A tester :

Code : Tout sélectionner

Sub MasquerLesAutres(oEv as Object)
leNomDuControleActif = oev.Source.Model.Name
lesControles = oEv.Source.Context.Controls	
for i = LBound(lesControles) to UBound(lesControles)
	if lesControles(i).Model.Name <> leNomDuControleActif then
		if oev.Selected = 1 then
			lesControles(i).Visible = False
		else
			lesControles(i).Visible = True
		end if
	end if	
next
end Sub
Il est préférable de connecter ta Sub à l'événement Statut de l'élément modifié au lieu de Exécuter l'action cela permet de récupérer de suite le statut de la case à cocher par oev.Selected
Roby68.png
Note que dans le fichier que tu as joint, une seules des cases à cocher (la première) est connectée à ta Sub. Je te laisse le soin de faire les autres.
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
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 21:12

Re: [Calc] Cacher controles case à cocher

Message par Roby68 »

Bonsoir le Forum, OOotremer971,

Merci pour cette piste, mais dans mon cas, la feuille comprend plusieurs Case à cocher autre que dans l'exemple épuré et qui n'ont rien a voir avec ses 5 précisément.

Peut-on dans ce cas faire le "tri" avec les noms exemple : ChxParagraphe1 2 3 4 5 etc et ChxCorpsTxt1 2 3 4 5 etc ou plus basiquement 1 2 3 4 5 …. en prenant que des créneaux 3 à 7 par exemple.

Merci

Pour ce qui est de Xray, je regarde comment l'installer et l'utiliser.

bonne soirée Roby
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Cacher controles case à cocher

Message par OOotremer971 »

Si je comprends bien, tu veux discriminer les autres contrôle de la feuille pour n'agir que sur ceux dont tu détermineras le nom par exemple ?

Essaye avec ça :

Code : Tout sélectionner

Sub MasquerLesAutres(oEv as Object)
leNomDuControleActif = oev.Source.Model.Name
lesControles = oEv.Source.Context.Controls	
lesControlesConcernes = array("Case à cocher 1","Case à cocher 2","Case à cocher 3")	
for i = LBound(lesControles) to UBound(lesControles)
	for j = LBound(lesControlesConcernes) to UBound(lesControlesConcernes)
		if lesControlesConcernes(j) = lesControles(i).Model.Name Then	
			if lesControles(i).Model.Name <> leNomDuControleActif then
				if oev.Selected = 1 then
					lesControles(i).Visible = False
				else
					lesControles(i).Visible = True
				end if
			end if
		end if	
	next j
next i
end Sub
Tu donnes la listes des contrôles concerné par le masquage :

Code : Tout sélectionner

lesControlesConcernes = array("Case à cocher1","Case à cocher 2","Case à cocher 3")
et tu compares avec le nom des autres contrôles pour savoir s'ils sont concernés.
Tu constateras que les contrôles 4 et 5 ne sont pas masqués puisqu'ils ne sont pas dans la liste. Il en sera donc de même avec les autres contrôles de ta feuilles tant qu'il n'apparaîtrons pas dans la liste des contrôles concernés.
 Ajout : fichier remplacé pour correction d'une faute de frappe. Espace manquant dans Case à cocher1==>Case à cocher 1 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par OOotremer971 le 01 nov. 2019 20:04, modifié 1 fois.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 21:12

Re: [Calc] Cacher controles case à cocher

Message par Roby68 »

Bonsoir le Forum, OOotremer971,

On avance, pourquoi le 1er contrôle ne se masque pas si je coche le 2 ou le 3, est ce voulu

Merci encore, cela me va très bien.

Oui j'ai trouvé, une faute de frappe dans les noms concernés.

Bonne soirée et bon Week End à tous

Roby
Dernière modification par Roby68 le 01 nov. 2019 20:05, modifié 1 fois.
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc] Cacher controles case à cocher

Message par OOotremer971 »

regarde mon ajout dans mon précédent message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 21:12

Re: [Résolu][Calc] Cacher controles case à cocher

Message par Roby68 »

Re bonsoir,

Je viens de m'apercevoir également que mes cases à cocher étaient liées à des cellules avec comme valeurs 1 pour Coché et 0 non coché.
Cela me facilitait pour remettre toutes les cases à cocher à vide en passant par une macro .

Cela ne se fait pas du fait que l'on part sur une sélection. Peut on y remédier malgré tout sans trop changer le code.
Merci encore une fois

Bonne soirée Roby
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Résolu][Calc] Cacher controles case à cocher

Message par OOotremer971 »

Roby68 a écrit :Je viens de m'apercevoir également que mes cases à cocher étaient liées à des cellules avec comme valeurs 1 pour Coché et 0 non coché.
Certainement pas dans l'exemple que tu as joint.
Roby68 a écrit :Cela me facilitait pour remettre toutes les cases à cocher à vide en passant par une macro .
et qu'est-ce qui t'empêche de continuer à faire pareil ?
Roby68 a écrit :Cela ne se fait pas du fait que l'on part sur une sélection.
j'aimerai bien que tu montres ce qui ne se fait pas et avec quel code et aussi ce qui devrait se faire avec le code que tu utilisais déjà :) .


Merci
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 21:12

Re: [Résolu][Calc] Cacher controles case à cocher

Message par Roby68 »

Re

Oui, en effet, le fichier joint à 23:22 (ce n'est qu'une partie du fichier final), il indique en E4 à E6 pour l'exemple, les cellules liées aux cases à cocher C4 à C6.

Mise à jour avec un bouton de réinitialisation, les cellules E4 à E6 sont à 0 donc non sélectionnées. mais tous les contrôles ne sont pas visibles de ce fait.

Roby
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Résolu][Calc] Cacher controles case à cocher

Message par OOotremer971 »

Pour moi il y a une bogue car la macro est connectée à l’événement Statut de l'élément modifié or le fait de modifier le contenu de la cellule liée engendre une modification du statut mais la macro n'est pas exécutée.

à la fin de ta sub qui remet les cellules à zéro, ajoute ce bout de code pour rendre tous les contrôles visibles :

Code : Tout sélectionner

oControleur = Thiscomponent.CurrentController
lesControles = Thiscomponent.Sheets(0).DrawPage.Forms.GetByIndex(0).ControlModels
for i = Lbound(lesControles) to Ubound(lesControles)
	unControle = lesControles(i)
	oControleur.getControl(unControle).Visible = True
next
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Roby68
Membre OOrganisé
Membre OOrganisé
Messages : 66
Inscription : 09 oct. 2013 21:12

Re: [Résolu][Calc] Cacher controles case à cocher

Message par Roby68 »

Bonjour le Forum, OOotremer971

La parade de remettre tous les contrôles visibles fonctionne très bien mais lorsque je coche le 4ème ou le 5ème contrôle, les deux qui normalement sont indépendant, cache les 3 premiers. Je ne sais pas si tu avais fait le test. Le fichier le montre.
version 6.2
J'ai deux versions de Libre Office la 6.2 et la 5.3, la dernière est installée au bureau, j'ai eu mais pas tout le temps un message d'erreur ( je ne sais pas pourquoi peut-être liée à la version ) : Erreur d'exécution BASIC. Variable d'objet non définie.
En tout cas merci encore pour le temps passé.

Bon Week End à tous

Roby
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.2.6.2 / LibreOffice 5.3 ( au Bureau ) "Par obligation de version".
Win 7 Pro

LibreOffice 6.2.5.2 ( Maison )
Win 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Résolu][Calc] Cacher controles case à cocher

Message par OOotremer971 »

Roby68 a écrit :mais lorsque je coche le 4ème ou le 5ème contrôle, les deux qui normalement sont indépendant, cache les 3 premiers
C'est normal, les cases à cocher du deuxième groupe sont connectées à la sub qui gère les cases à cocher 1,2 et 3.
Il faut faire une sub différente pour chaque groupe en donnant à chaque fois la liste des contrôles qu'elle doit gérer.

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11