Page 1 sur 1

[Résolu] [Calc] parcourir une ligne et supprimer une colonne

Publié : 20 avr. 2007 08:36
par ero-baka
Bonjour,
après avoir (très) longuement cherché des informations sur internet et revenant bredouille de cette chasse, je m'en remet à vous en espérant que vous puissiez m'aider.
je souhaiterai réaliser une macro qui fonctionnerait comme ceci:

Parcourir la ligne 'ex: on veut parcourir la ligne 3
si la cellule de la ligne est vide alors 'on veut tester le contenu de la case A3
supprimer la colonne correspondante à la cellule 'si A3 est vide on supprime la colonne A
sinon
continuer de parcourir la liste 'on décalle d'une colonne, on se retrouve en B3.

pour l'instant j'ai un morceau de macro que j'ai créée grâce à l'enregistreur de macro qui me permet de supprimer une colonne:

Code : Tout sélectionner

sub suppr_colonnes
rem define variables
dim document   as object
dim dispatcher as object
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
end sub
j'ai vraiment du mal avec les macro OOo pour moi qui ai appri le BASIC sous Excel.

En espérant que je sois assé clair; merci d'avance.
modérateur a écrit :Bonjour, merci de mettre la balise code !

Publié : 21 avr. 2007 08:11
par Pierre-Yves Samyn
Bonjour


Puisque tu souhaites parcourir les lignes je suppose dans l'exemple suivant que tu ne souhaites pas supprimer la colonne mais la cellule.

Code : Tout sélectionner

option explicit

sub PysRazCell

const NbLig = 10, NbCol = 5									'A adapter à la plage à traiter

dim PysClass as object, PysFeuille as object, PysCell as object, PysQuery as object, PysEnum as object
dim PysLigEnCours as long, PysColEnCours as integer

PysClass = thiscomponent									'Le classeur courant
PysFeuille = PysClass.sheets.getByname("Bilan")				'Dans ce classeur accès à une feuille par son nom

for PysLigEnCours  = NbLig	to 0 step -1							'Boucle sur les lignes et colonnes
	for PysColEnCours  = NbCol to 0 step -1 
		PysCell = PysFeuille.getCellByPosition(PysColEnCours, PysLigEnCours)	'Accès à la cellule

		if PysCell.Type =  com.sun.star.table.CellContentType.EMPTY then		'Si la cellule est vide
			PysFeuille.removeRange(PysCell.RangeAddress, com.sun.star.sheet.CellDeleteMode.LEFT)		'Suppression en décalant vers la gauche
		end if
		
	next PysColEnCours
next PysLigEnCours 

end sub
Nota : au lieu de travailler sur une plage connue à l'avance tu pourrais adapter cette procédure en fonction de la plage utilisée dans la feuille. Cette question a déjà été abordée plusieurs fois. Faire une recherche sur GotoEndOfUsedArea

Publié : 22 avr. 2007 15:06
par ero-baka
merci, j'vai tester ça^^

Publié : 14 mai 2007 12:56
par ero-baka
merci beacoup pour ton aide, j'ai retouché le code que tu m'as fournis et j'ai obtenu ceci:

Code : Tout sélectionner

option explicit

sub suppr_colonnes

const NbCol = 20                           'Largeur du tableau da base

dim oDoc as object, oFeuille as object, oCell as object, oColEnCours as integer

oDoc = thiscomponent   		'Le classeur en cours              
oFeuille = oDoc.sheets.getByname("Feuille2")            'Dans ce classeur accès à une feuille par son nom
   for oColEnCours  = NbCol to 0 step -1  			'Boucle sur les colonnes pour les effacer une par une
      oCell = oFeuille.getCellByPosition(oColEnCours, 1)   'Accès à la cellule

      if oCell.Type =  com.sun.star.table.CellContentType.EMPTY then      'Si la cellule est vide

      oFeuille.removeRange(oCell.RangeAddress, com.sun.star.sheet.CellDeleteMode.COLUMNS)      'Suppression de la colonne entière, la colonne de droite se décalle à gauche
      end if
      
   next oColEnCours			'On passe à la colonne suivante

end sub

je n'ai pas retouché grand chose si ce n'est que ce n'est plus une cellule qui est supprimer mais c'est tout la colonne. Dans ma macro je n'avai pas besoin de parcourir toute les lignes, j'ai donc aussi enlevé une boucle FOR.
merci de m'avoir aidé.