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

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 !
ero-baka
Fraîchement OOthentifié
Messages : 9
Inscription : 19 avr. 2007 10:02

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

Message 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 !
Dernière modification par Don Corleone le 23 nov. 2011 16:40, modifié 2 fois.
Raison : Coche
windows XP sp2, OOo 2.2
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Message 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
ero-baka
Fraîchement OOthentifié
Messages : 9
Inscription : 19 avr. 2007 10:02

Message par ero-baka »

merci, j'vai tester ça^^
windows XP sp2, OOo 2.2
ero-baka
Fraîchement OOthentifié
Messages : 9
Inscription : 19 avr. 2007 10:02

Message 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é.
windows XP sp2, OOo 2.2
Répondre