[Résolu][Calc] Double clic qui modifie un contenu de 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 !
Doudou74
NOOuvel adepte
NOOuvel adepte
Messages : 10
Inscription : 27 janv. 2020 17:07

[Résolu][Calc] Double clic qui modifie un contenu de cellule

Message par Doudou74 »

Bonsoir à toutes et tous
Ma première demande sur ce forum qui m'a déjà appris beaucoup de choses.
Pour effectuer un pointage des présences, je voudrais qu'un double click sur une cellule change le contenu et les couleurs de cette cellule.
La routine ci-dessous fonctionne bien par le bouton de test, mais au double click la cellule passe en mode édition (c'est normal) même à la sortie de macro, si bien qu'un nouveau double click sur la même cellule donne des résultats erronés si on n'a pas fait échap ou click sur une autre cellule.
Comment faire pour que la cellule soit validée automatiquement?

Code : Tout sélectionner

sub PointePresence
'Modifie texte et couleurs de la celleule sur laquelle on fait un double click
	dim doc as object, feuilles as object,feuille as object,cellule as object
	dim nom as string,couleurfond as long,couleurpolice as long
	dim ligne as long,colonne as long,texte as string
	doc=thiscomponent
	feuilles=doc.sheets
	feuille=doc.CurrentController.ActiveSheet
	cellule=doc.getcurrentselection
	Ligne =Cellule.CellAddress.row
	Colonne =Cellule.CellAddress.column
 	texte=cellule.string
 	if colonne<>2 or ligne<2 or ligne>8 then exit sub
 	select case texte
 	case =""
 		Cellule.cellbackcolor=&h13eddd
		cellule.string="Prévu"
		'pour sortir du mode edition de la cellule
		'selectionne cellule suivante
		cellule=feuille.getcellbyposition(colonne,ligne+1)
		ThisComponent.CurrentController.Select(Cellule)
		'puis revient à la cellule active
		cellule=feuille.getcellbyposition(colonne,ligne)
		ThisComponent.CurrentController.Select(Cellule)	
		
	case="Prévu"	 
		Cellule.cellbackcolor= &h48ed13
		cellule.string="Présent"
		'pour sortir du mode edition de la cellule
		'selectionne cellule suivante
		cellule=feuille.getcellbyposition(colonne,ligne+1)
		ThisComponent.CurrentController.Select(Cellule)
		'puis revient à la cellule active
		cellule=feuille.getcellbyposition(colonne,ligne)
		ThisComponent.CurrentController.Select(Cellule)	

	case="Présent"	
	
		Cellule.cellbackcolor= &hffc600
		cellule.string="Excusé"
		'pour sortir du mode edition de la cellule
		'selectionne cellule suivante
		cellule=feuille.getcellbyposition(colonne,ligne+1)
		ThisComponent.CurrentController.Select(Cellule)
		'puis revient à la cellule active
		cellule=feuille.getcellbyposition(colonne,ligne)
		ThisComponent.CurrentController.Select(Cellule)	

	case="Excusé"	
		Cellule.cellbackcolor= &hed1329
		cellule.string="Absent"
		'pour sortir du mode edition de la cellule
		'selectionne cellule suivante
		cellule=feuille.getcellbyposition(colonne,ligne+1)
		ThisComponent.CurrentController.Select(Cellule)
		'puis revient à la cellule active
		cellule=feuille.getcellbyposition(colonne,ligne)
		ThisComponent.CurrentController.Select(Cellule)	

	case="Absent"	
		Cellule.cellbackcolor= &hffffff
		cellule.string=""
		'pour sortir du mode edition de la cellule
		'selectionne cellule suivante
		cellule=feuille.getcellbyposition(colonne,ligne+1)
		ThisComponent.CurrentController.Select(Cellule)
		'puis revient à la cellule active
		cellule=feuille.getcellbyposition(colonne,ligne)
		ThisComponent.CurrentController.Select(Cellule)	

	end select

end sub
Plein d'espoir, j'ai testé les lignes suivantes, mais ça ne fonctionne pas mieux.

Code : Tout sélectionner

'pour sortir du mode edition de la cellule
'selectionne cellule suivante
cellule=feuille.getcellbyposition(colonne,ligne+1)
ThisComponent.CurrentController.Select(Cellule)
'puis revient à la cellule active
cellule=feuille.getcellbyposition(colonne,ligne)
ThisComponent.CurrentController.Select(Cellule)	
D'autre part, plutôt que de faire le test sur lignes et colonnes pour ne dérouler la macro que pour certaines cellules, j'aimerais utiliser les cellules nommées.
Comment faire pour récupérer dans une variable le nom de la cellule "cliquée"?
Merci pour votre aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Doudou74 le 30 janv. 2020 09:50, modifié 1 fois.
LibreOffice 6.3.5 sur Linux Mint 18.3 Sylva
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Double click dans cellule pour modifier son conten

Message par Dude »

Salut,

Problème XY
Pour changer la couleur, il y a d'autres moyens comme le formatage conditionnel et/ou l'utilisation de style.
Même chose pour la modification de contenu où on peut agir par formule ou par liste de validité.
Doudou74
NOOuvel adepte
NOOuvel adepte
Messages : 10
Inscription : 27 janv. 2020 17:07

Re: [Calc]Double click dans cellule pour modifier son conten

Message par Doudou74 »

Salut,
Merci pour ta réponse, mais la solution du double click me séduit assez, elle me semble simple et rapide car destinée à des utilisateurs peu familiers de l'informatique.
J'y tiens donc et j'espère qu'il existe une solution à mon problème. :D
LibreOffice 6.3.5 sur Linux Mint 18.3 Sylva
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc]Double click dans cellule pour modifier son conten

Message par OOotremer971 »

Bonjour,

Est-ce que tu peux tester :

Code : Tout sélectionner

sub PointePresence
oDoc = Thiscomponent
selection = oDoc.CurrentSelection
if selection.supportsService("com.sun.star.table.Cell") Then
	wait 300
end if
oPlagRef = oDoc.NamedRanges.GetByName("presence")
If selection.queryIntersection(oPlagRef.ReferredCells.RangeAddress).Count = 0 Then exit sub
	
select case selection.String

	case "" 
		selection.cellbackcolor = &h13eddd
		selection.SetString("Prévu")
			
	case "Prévu"	 
		selection.cellbackcolor = &h48ed13
		selection.SetString("Présent")
			
	case "Présent"
		selection.cellbackcolor = &hffc600
		selection.SetString("Excusé")
			
	case "Excusé"	
		selection.cellbackcolor = &hed1329
		selection.SetString("Absent")
			
	case "Absent"	
		selection.cellbackcolor= &hffffff
		selection.SetString("")
	end Select

end Sub
Wait 300 avec ma configuration a pour effet d'inhiber le clignotement du curseur (pas sûr que cela fonctionne sous toutes les configurations).
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
Doudou74
NOOuvel adepte
NOOuvel adepte
Messages : 10
Inscription : 27 janv. 2020 17:07

Re: [Calc]Double click dans cellule pour modifier son conten

Message par Doudou74 »

Un grand merci OOotremer971
Testé sur mon MINT ça fonctionne parfaitement.
Il me reste à tester sous win10.
Je passe résolu dès que j'ai fait ce dernier test.
Par contre, je ne vois pas bien pourquoi ça fonctionne... Aurais une une mini explication?
Pour la récupération du nom de cellule, j'aurais dû trouver tout seul... :mrgreen:
Encore merci et bonne soirée
LibreOffice 6.3.5 sur Linux Mint 18.3 Sylva
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Calc]Double click dans cellule pour modifier son conten

Message par OOotremer971 »

Doudou74 a écrit :Par contre, je ne vois pas bien pourquoi ça fonctionne... Aurais une une mini explication?
Pas la moindre :?

J'ai constaté que lors du double-clic, nous seulement la cellule passait en mode édition, mais aussi que le texte et la couleur de la cellule changeaient très rapidement trois fois de suite. Du coup l'ordre des pointages n'était pas respecté. C'est là que m'est venue l'idée de mettre un wait pour calmer un peu son excitation et comme par enchantement, mon seulement l'ordre était respecté, et le clignotement du mode édition avait disparu.

A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Doudou74
NOOuvel adepte
NOOuvel adepte
Messages : 10
Inscription : 27 janv. 2020 17:07

Re: [Calc]Double click dans cellule pour modifier son conten

Message par Doudou74 »

Salut,
Bravo pour l'intuition.
Test sur win10 positif, je passe donc en résolu.
Merci
LibreOffice 6.3.5 sur Linux Mint 18.3 Sylva