[Résolu] [Calc] Sélection et copie des cellules visibles

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 !
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 16:30

[Résolu] [Calc] Sélection et copie des cellules visibles

Message par jjk »

Bonjour à tous
Dans la section Calc ici, fiche cherche à copier des sous-totaux.
jeanmimi a trouvé une solution subtile, mais qui à mon avis n'est pas satisfaisante.
Malheureusement on est loin de ce que permet Excel. Lorsqu'une plage est filtrée, Excel sélectionne automatiquement seulement les cellules visibles. Calc le fait également. Pour les filtres, pas de problème donc.
Mais d'une façon générale Excel permet de sélectionner les cellules visibles seulement, que les lignes/colonnes soient tout simplement masquées (hauteur ou largeur nulle), ou qu'elles soient cachées dans le cas d'un plan, ce qui permet alors de copier seulement les sous-totaux.
A ma connaissance, Calc ne permet pas de sélectionner les cellules visibles seulement. Dans le cas où on a peu de lignes, on peut sélectionner les lignes visibles une par une en maintenant la touche Ctrl enfoncée, ce qui donne une sélection multiple. Mais Calc (tout comme Excel d'ailleurs) ne sait pas copier des sélections multiples. On tourne donc en rond.
Coolmicro avait déjà exposé ce problème ici sans avoir de réponse.

Je me permets néanmoins de demander si quelqu'un connaitrait une macro qui permettrait cela.
Merci d'avance.
Dernière modification par MrPropre le 02 août 2009 12:28, modifié 2 fois.
Raison : Pose coche
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 14:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Calc] Sélection et copie des cellules visibles

Message par Alain de La Chaume »

Bonsoir à tous, bonsoir jjk.
Calc ne permet pas de sélectionner les cellules visibles seulement
Avez-vous essayé en appliquant la méthode queryVisibleCells à un range ?
(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)
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 16:30

Re: [Calc] Sélection et copie des cellules visibles

Message par jjk »

Merci Alain de la piste que tu soulignes et que je ne connaissais pas. Ces jours-ci je n'ai pas le temps de l'explorer à fond. Mais il me semble qu'elle ouvre bien des possibilités du genre :

Code : Tout sélectionner

oRange = ThisComponent.Sheets(0).getCellRangeByPosition(x0,y0,x1,y1)
o_Enum = oRange.queryVisibleCells().getCells().CreateEnumeration()

while (o_Enum.hasMoreElements())
   o_Item = oCell_Enum.nextElement()
   ' ici faire traitement pour chaque cellule visible
   ' par exemple récupérer le n° relatif de sa ligne et de sa colonne (en les rendant consécutifs)
   ' puis pour chaque ligne, boucler sur chaque colonne
   ' puis écrire sa formule ou valeur dans une Array(c, l)
   ' enfin coller la Array dans la cellule choisie par l'utilisateur
wend 
Cela dit, si une bonne âme veut bien écrire ce code, je suis preneur. :)
L'idée c'est de coller à un endroit désigné par l'utilisateur, les cellules visibles d'une plage.
Ou plus généralement un code paramétré qui crée la Array des adresses, ou des valeurs ou formules des cellules visibles d'une plage donnée.
Une autre application directe de cela serait de pouvoir sélectionner automatiquement seulement les cellules visibles afin par exemple d'appliquer un certain style à ces seules cellules.

En tout cas, merci d'avance à ceux qui voudraient bien "se prendre la tête" avec ça.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 14:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Calc] Sélection et copie des cellules visibles

Message par Alain de La Chaume »

Bonjour à tous.
jjk le 08 Mai 2009 à 21:00 a écrit :
Cela dit, si une bonne âme veut bien écrire ce code, je suis preneur. :)
Ben voyons... ! Encore un qui voudrait le beurre, l'argent du beurre et le... sourire de la crèmière ! :lol:

Nouvelle édition (10/05, 17:27) :
Ci-joint un petit exercice perso sur le sujet, de la part d'une bonne âme.
Pièces jointes
cellsVisibles_.ods
(15.28 Kio) Téléchargé 664 fois
(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
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 21:02
Localisation : Liège, Belgique

Re: [Calc] Sélection et copie des cellules visibles

Message par spYre »

Bonjour à tous,

Le sujet m'ayant aussi inspiré, j'ai occupé une partie de mon dimanche à la question :D .
Je me permets donc d'en livrer le résultat, même si Alain de la Chaume a déjà fourni un bel exemple.

Dans le fichier joint, la macro CopieCellVisibles mémorise les cellules visibles de la sélection en cours et la macro ColleCellVisibles les colle dans la sélection courante.
L'idée étant de les utiliser avec des raccourcis clavier, par exemple Ctrl+Maj+C et Ctrl+Maj+W.

Bon travail à jjk avec tout ça !
Pièces jointes
Collage cellules visible.ods
(14.51 Kio) Téléchargé 816 fois
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 16:30

Re: [Calc] Sélection et copie des cellules visibles

Message par jjk »

Merci Alain et Spyre.
Je viens de tomber sur vos oeuvres.
Je regarderai cela demain avec gourmandise ;)

Edit : je n'ai pas pu attendre. J'ai pris un quart d'heure pour regarder.
Ca me semble pas mal du tout. En tout cas je suis sûr que cela servira à beaucoup de monde, et à moi le premier.
Alain et Spyre, la prochaine fois que vous vous sentez inspirés, vous me le dites, je trouverai bien un petit sujet pour exciter votre codomanie, je veux dire votre ingéniosité.
Merci encore. :D
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: [Calc] Sélection et copie des cellules visibles

Message par Pierre-Yves Samyn »

Bonjour

Et as-tu testé la solution proposée... dans le fil que tu cites http://user.services.openoffice.org/fr/ ... 080#p91080 ?
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 16:30

Re: [Calc] Sélection et copie des cellules visibles

Message par jjk »

Et as-tu testé la solution proposée... dans le fil que tu cites
Oui, cette solution est extrêmement simple et efficace. Il fallait y penser, au collage Html.
Cependant ma demande est plus générale. Elle vise à effectuer un traitement quelconque sur seulement les cellules visibles d'une plage, lorsqu'on sélectionne l'ensemble de la plage.
Les 2 macros de Alain et spYre sont un excellent début et de très bon exemples à étudier. Je les ai testés sur leurs propres exemples, mais je n'ai pas encore eu le temps de les disséquer.
Un exemple de ce que je voudrais faire, c'est appliquer un format commun quelconque aux cellules visibles, alors que la macro d'Alain ne propose qu'un choix limité de formatages, à choisir dans une boîte de dialogue.
Je me demande s'il ne serait pas possible d'obtenir en fin de macro un ensemble de cellules discontigües, à laquelle, une fois sorti de la macro, on pourrait appliquer un style par exemple, sans que ce style s'applique aux cellules non visibles.
Autre amélioration que je verrais bien : c'est conserver les formats d'origine voire les formules, après collage, alors qu'actuellement les 2 macros fournies semblent ne coller que les valeurs.
Voilà, j'ai du travail devant moi, mais ce ne sera pas pour les tout prochains jours.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 21:02
Localisation : Liège, Belgique

Re: [Calc] Sélection et copie des cellules visibles

Message par spYre »

jjk a écrit :Autre amélioration que je verrais bien : c'est conserver les formats d'origine voire les formules, après collage, alors qu'actuellement les 2 macros fournies semblent ne coller que les valeurs.
Bonjour jjk,

L'exemple suivant, qui utilise la méthode copyRange, conserve formules et formats.
En revanche, le temps d'exécution pour les plages très morcelées est plus lent, puisque chaque plage visible est copiée séparément.

Code : Tout sélectionner

Global a(), b(), ra()

REM *******************
REM Récupère, sous forme de deux matrices a() et b(), le nombre de
REM lignes et de colonnes des plages visibles de la sélection en cours.
REM *******************

sub CopieCellVisibles
dim i%, j%

	ra() = thisComponent.currentSelection._
			queryVisibleCells.rangeAddresses			' enregistre les plages visibles

	j = 0
	for i = 0 to uBound(ra())							' parcourt les plages visibles pour :

		if ra(i).startColumn = ra(0).startColumn then
		   redim preserve a(i)
		   a(i) = ra(i).endRow-ra(i).startRow+1			' 1. enregistrer le nombre de lignes
		endif											'    par plage visible

		if ra(i).startRow = ra(0).startRow then
		   redim preserve b(j)
		   b(j) = ra(i).endColumn-ra(i).startColumn+1	' 2. enregistrer le nombre de colonnes
		   j = j+1										'    par plage visible
		endif
	next i

end Sub


REM *******************
REM Copie les plages visibles, enregistrées dans 'ra()', à partir de la première cellule de la sélection
REM en cours puis en positionnant chaque plage sur base des infos récupérées dans a() et b().
REM *******************

sub ColleCellVisibles
dim f as object, selra as object, cdest as object
dim i%, j%, k%

	f = thisComponent.currentController.activeSheet
	selra = thisComponent.currentSelection.rangeAddress
	cDest = f.getCellByPosition(selra.startColumn,selra.startRow).cellAddress

	k =0
	for i = 0 to uBound(b())				' pour chaque colonne de plages visibles,
		for j = 0 to uBound(a())			
			f.copyRange(cDest,ra(k))		' copie les plages visibles
			cDest.row = cDest.row+a(j)		' en décalant chaque fois du nombre de lignes requis
			k = k+1
		next j
		cDest.row = selra.startRow			' puis retour à la ligne de départ
		cDest.column = cDest.column+b(i)	' pour recommencer sur la colonne suivante
	next i

end Sub
Cordialement.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 14:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Calc] Sélection et copie des cellules visibles

Message par Alain de La Chaume »

Bonjour.
de jjk, le 11 Mai 2009 à 23:03 :
Les 2 macros de Alain et spYre sont un excellent début et de très bon exemples [...]
la macro d'Alain ne propose qu'un choix limité de formatages [...]
Mille sabords ! Mais il me ferait sortir de mes gonds... ce marin d'eau douce ! Effectivement ce n'est qu'un exemple. Pour les costards "sur mesure", c'est plus cher ! :lol:
(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)
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 16:30

Re: [Calc] Sélection et copie des cellules visibles

Message par jjk »

Bonsoir Spyre et Alain,
Désolé si ce que j'ai dit dans mon précédent post a pu vous froisser. Mais je crois quand même que vous faites semblant...
En tout cas dans ce post je répondais à Pierre-Yves et je voulais signaler que les macros que vous avez imaginées ouvrent beaucoup d'horizons et de possibilités au OOo-basiqueur que je suis. Et les pistes d'amélioration que je décrivais, je ne demandais à personne de les réaliser, c'était plutôt un pense-bête pour moi pour le jour où je serai capable de me débrouiller tout seul.
Mais pour le moment je n'ai pas les connaissances nécessaires pour aller plus loin. Par exemple les listeners sont encore mystérieux pour moi, j'ai beaucoup de mal à appréhender la logique du modèle objet, etc.
Cependant j'espère m'améliorer bientôt et contribuer aussi à la section Macros, autrement que par des demandes.

Encore merci.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
Messages : 1527
Inscription : 28 sept. 2008 14:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ

Re: [Calc] Sélection et copie des cellules visibles

Message par Alain de La Chaume »

Bonjour jjk.
Cette question n'est toujours pas résolue ? ... Ou tombée dans l'oubli ?
(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)
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 16:30

Re: [Calc] Sélection et copie des cellules visibles

Message par jjk »

Bonjour Alain et merci de me relancer

On passe à autre chose et après on oublie alors que c'est de la politesse élémentaire.
Voilà, j'ai réparé mon oubli et je remercie encore ceux qui m'ont répondu.

A bientôt
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Verrouillé