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

Discussions et questions sur tout ce qui concerne la programmation sous StarOffice NeoOffice ou OpenOffice.org tous langages et tous modules confondus.

Modérateur: Vilains modOOos

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 !

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

Messagepar ero-baka » 20 Avr 2007 10:36

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   AgrandirRéduire
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 édition par ero-baka le 14 Mai 2007 14:57, édité 1 fois au total.
windows XP sp2, OOo 2.2
ero-baka
Fraîchement OOothentifié
 
Messages: 9
Inscrit le: 19 Avr 2007 10:02

Messagepar Pierre-Yves Samyn » 21 Avr 2007 10:11

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   AgrandirRéduire
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
OOo 3.1.1 windows XP

A lire avant tout !
Pierre-Yves Samyn
GourOOou
GourOOou
 
Messages: 7426
Inscrit le: 02 Mai 2006 10:42

Messagepar ero-baka » 22 Avr 2007 17:06

merci, j'vai tester ça^^
windows XP sp2, OOo 2.2
ero-baka
Fraîchement OOothentifié
 
Messages: 9
Inscrit le: 19 Avr 2007 10:02

Messagepar ero-baka » 14 Mai 2007 14:56

merci beacoup pour ton aide, j'ai retouché le code que tu m'as fournis et j'ai obtenu ceci:
Code: Tout sélectionner   AgrandirRéduire
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
ero-baka
Fraîchement OOothentifié
 
Messages: 9
Inscrit le: 19 Avr 2007 10:02


Retour vers Macros et API

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 5 invités