[Résolu][Calc] Sélection multiple de cellules

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
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

[Résolu][Calc] Sélection multiple de cellules

Message par Churay »

Bonsoir

L'idée : gérer si une ou plusieurs cellules a/ont été sélectionnée(s).

Grâce à XRay, je sais distinguer ce sur quoi je vais me baser pour gérer les différents cas :
- 1 - 1 seule cellule : accéder à CellAdress ou RangeAdress.
- 2 - 2 cellules contigües : accéder à RangeAdress
- 3 - 2 cellules non contigües : via Count accéder à RangeAdress
- 4 - x cellules dont certaines sont contigües, d'autres non : RangeAdresses & RangeAdressesAsString sont accessibles

Tout semble limpide, à ceci près qu'il faut s'assurer du cas de figure...

Code : Tout sélectionner

	If ThisComponent.CurrentController.Selection.supportsService("com.sun.star.table.Cell")  Then	
permet de savoir qu'une seule cellule a été sélectionnée, mais...

Je n'ai pas trouvé comment déterminer si je suis dans les cas 2, 3 ou 4...

Des lacunes, vous dis-je....

Merci d'avance ;)

[Edit]J'ai peut-être jeté l'éponge un peu vite, je viens de trouver :

Code : Tout sélectionner

		If oCible.Selection.supportsService("com.sun.star.sheet.SheetCellRanges")  Then
qui me dit que je suis dans le cas multiple avec des non contigües.
Reste à savoir, si je sais gérér un mix de contigües/non contigües. J'y planche...

[Edit 2]
Il me reste à trouver comment avoir la certitude du cas multiple contigüe...
Et comment récupérer les CellRange
Help...!!!
Dernière modification par Churay le 10 juin 2010 09:49, modifié 1 fois.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Calc] Sélection multiple de cellules

Message par Alain de La Chaume »

Bonsoir à tous, bonsoir Churay.

Compte tenu de l'heure, c'est en diagonale que j'ai parcouru ce fil.
Il m'en rappelle un autre : [Calc] agir sur une sélection multiple non continue
Mais comme celui-ci ne semble pas avoir été résolu, j'ajoute un truc que j'avais fait à cette époque sur le même sujet...
cellulesSelectionnees_Lister.ods
Sur mon poste, je lance mes macros par un raccourci clavier, mais pour vous j'ai ajouté un bouton à cliquer, après avoir fait une sélection multiple bien entendu.

Nouvelle édition, le 10 à 10 h 30 :
Désolé ! Le code du fichier que j'ai posté est resté en plan il y a plus d'un an.
Il est incomplet et mal ficelé. Je vais le revoir dès que possible.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Calc] Sélection multiple de cellules

Message par Pierre-Yves Samyn »

Bonjour

Pour dire et faire les choses simplement...

Les services "supportés" permettent déjà de faire la différence entre :
  • com.sun.star.sheet.SheetCell
  • com.sun.star.sheet.SheetCellRange
  • com.sun.star.sheet.SheetCellRanges
Par ailleurs une sélection multiple renvoie un tableau et il suffit de parcourir les éléments.

Ci-dessous un exemple de gestion de notes pour la sélection courante. Pour la tester il faut sélectionner une cellule, ou une plage de cellules, ou plusieurs plages et lancer "à la main" la procédure PysAnnotationPlage.

Un conseil : pour que les étapes du code soient "visibles" j'ai laissé les "msgbox" donc, pour le test de plages, il ne faut pas sélectionner trop de cellules :)
Ou bien, enlever les msgbox...

Code : Tout sélectionner

option explicit 

private  PysFeuille as object, PysAnnotations as object, PysUneCellule as object

sub PysAnnotationPlage

dim PysSelCourante as object
dim PysAdresseCell as object

dim PysNbPlages as integer
dim PysNbCol as integer
dim PysNbLig as integer

PysFeuille = thisComponent.CurrentController.ActiveSheet
PysAnnotations = PysFeuille.Annotations

PysSelCourante = ThisComponent.CurrentSelection

if PysSelCourante.supportsService("com.sun.star.sheet.SheetCell") then
	PysUneCellule = PysSelCourante
	PysAdresseCell = PysSelCourante.CellAddress
	PysAnnotationPlageSuite(PysAdresseCell)
elseif PysSelCourante.supportsService("com.sun.star.sheet.SheetCellRange") then
	with PysSelCourante.RangeAddress
		for PysNbCol = .StartColumn to .EndColumn
			for PysNbLig = .StartRow to .EndRow
				PysUneCellule = PysFeuille.getCellByPosition(PysNbCol, PysNbLig)
				PysAnnotationPlageSuite(PysUneCellule.CellAddress)
			next PysNbLig
		next PysNbCol
	end with
elseif PysSelCourante.supportsService("com.sun.star.sheet.SheetCellRanges") then
	for PysNbPlages = 0 to ubound(PysSelCourante.RangeAddresses)
		with PysSelCourante.RangeAddresses(PysNbPlages)
			for PysNbCol = .StartColumn to .EndColumn
				for PysNbLig = .StartRow to .EndRow
					PysUneCellule = PysFeuille.getCellByPosition(PysNbCol, PysNbLig)
					PysAnnotationPlageSuite(PysUneCellule.CellAddress)
				next PysNbLig
			next PysNbCol
		end with
	next PysNbPlages 
else
	msgbox "la sélection doit être soit une cellule, soit une, soit plusieurs plages de cellules"
end if
end sub

sub PysAnnotationPlageSuite(PysAdresseCell)
dim PysNum as integer

PysAnnotations.insertNew PysAdresseCell, "Nouvelle annotation" 

print "annotation créée"

with PysUneCellule.Annotation
	.setstring("texte modifié")
	print "texte annotation modifié"
	.isvisible=true
end with

print "annotation visible"


end sub
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] Sélection multiple de cellules

Message par Churay »

Bonjour

@Alain
J'ai regardé le sujet et bien évidemment récupéré ton ods.

Un rapide survol m'a permis de présager que tu m'offrrais la solution avec :

Code : Tout sélectionner

	if (strcomp(sSelectionType, "ScCellObj") = 0) then
	elseif (strcomp(sSelectionType, "ScCellRangeObj") = 0) then
	elseif (strcomp(sSelectionType, "ScCellRangesObj") = 0) then
Un test tordu de sélection sur ta feuille me le confirme. ;)
L'adaptation à mon besoin aussi :super:

@Pys
Autre méthode, celle que j'avais pressentie...
Ton code adapté à mon besoin marche bien évidemment... :super:

En fait il y a juste une nuance : mon code avant votre passage ne marche pas, après c'est magique... :lol:

Un grand merci à tous les deux.

[NB]Je vous soumettrai le .ods qui intègre le PYS_Inside & AdLC_Inside.
Tous les emprunts seront bien évidemment référencés.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 12:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Résolu][Calc] Sélection multiple de cellules

Message par Alain de La Chaume »

Bonjour à tous.

Je vois que ce sujet est résolu mais, comme promis dans mon message précédent, j'ai refait le paquet et changé la ficelle. :P
La correction m'imposait d'apporter ces petits correctifs pour ne pas laisser sur le forum un machin même pas fonctionnel. Et puis, comme dit quelqu'un de bien : "Tout ce qui n'est pas donné est perdu !". :wink:
cellulesSelectionnees_Lister_2.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Résolu][Calc] Sélection multiple de cellules

Message par Churay »

Re bonjour Alain

L'application que j'en fait ne concernant qu'une seule Feuille, c'était totalement fonctionnel pour moi ;)

Mais je note la perfection et sauvegarde la nouvelle version fonctionnelle :lol:

Merci
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...