Page 1 sur 1

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

MessagePublié: 20 Avr 2007 10: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   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 !

MessagePublié: 21 Avr 2007 10: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   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

MessagePublié: 22 Avr 2007 17:06
par ero-baka
merci, j'vai tester ça^^

MessagePublié: 14 Mai 2007 14: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   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é.