[prog] Déterminer les plages fusionnées ?

2005-06-03 Par sujet Bitouzé Denis
Bonjour,

je cherche à écrire une macro pour Calc dont l'entrée est une plage
rectangulaire de cellules (notée oRange) et dont une des missions est de
déterminer les adresses des plages fusionnées horizontalement de oRange
(on suppose pour simplifier que les plages fusionnées dans oRange ne
comportent qu'une ligne).

Mon point de départ est le pseudo-code suivant (où :
  oCellule + 1 désigne la translatée à droite de oCellule et
  oCellule - 1 désigne la translatée à gauche de oCellule) :

1  Pour chaque ligne visible oRow de oRange
2Pour chaque cellule visible oCell de oRow
3  Si oCell débute une plage fusionnée alors
4oCellBis = oCell + 1
5Faire tant que la plage oCell:oCellBis est fusionnée
6  oCellBis = oCellBis + 1
7Boucle
8oCellFin = oCellBis - 1
9PlageFusionnée = oCell:oCellFin
10 Fin si
11   Prochaine oCell en partant de oCellFin + 1
12 Prochaine oRow

Pour les lignes 1 et 2, pas de problème.

Pour la ligne 3, OK : If oCell.isMerged() Then

Pour la ligne 4, euh, c'est quoi la syntaxe pour ce genre de chose ? Je
n'arrive pas à trouver un document synthétique fournissant ces
renseignements quand on en a besoin. Auriez-vous des pistes ?

Pour la ligne 5, c'est bien là qu'est le problème ! J'ai bien tenté
d'utiliser getIsMerged() mais, par exemple, si (seule) A1:B1 est fusionnée :
   -- A1:A1 est déclarée fusionnée : OK
   -- A1:B1 est déclarée fusionnée : OK
   -- A1:C1 est déclarée fusionnée : PAS OK !
   -- A1:D1 est déclarée fusionnée : PAS OK !
   -- etc.
En fait, il semble que si la cellule de gauche de la plage testée est la
première d'une plage fusionnée, quelque soit la cellule de droite de la
plage testée (même sur une autre ligne !), cette plage testée est
déclarée fusionnée ! J'ai cherché dans les archives de plusieurs forums,
dont « OpenOffice.org Macros and API », mais je n'ai rien trouvé de
concluant. Auriez-vous une suggestion à me fournir ?

Merci d'avance pour toute aide...
-- 
Denis


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[prog] RE: Pb avec LockControllers

2005-06-03 Par sujet Jean-Claude . David2
Idem avec Ooo 1.9.100

>  -Message d'origine-
> Bonjour,
> J'ai une application qui fonctionne très bien si je ne fige pas le
> rafraichissement. 
> Mais quand je le fige (pour faire plus rapide et plus joli), j'ai divers
> soucis, notamment avec GotoEndOfUsedArea(True) qui ne retourne pas la
> dernière cellule "actuelle" de la feuille, mais celle "d'avant le blocage
> du rafraichissement".
> 
> Quelqu'un a déjà rencontré le problème, est-ce connu ?
> 
> Jean-Claude
> Ooo 1.1.3 sous Windows
> 

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[prog] Pb avec LockControllers

2005-06-03 Par sujet Jean-Claude . David2
Bonjour,
J'ai une application qui fonctionne très bien si je ne fige pas le
rafraichissement. 
Mais quand je le fige (pour faire plus rapide et plus joli), j'ai divers
soucis, notamment avec GotoEndOfUsedArea(True) qui ne retourne pas la
dernière cellule "actuelle" de la feuille, mais celle "d'avant le blocage du
rafraichissement".

Quelqu'un a déjà rencontré le problème, est-ce connu ?

Jean-Claude
Ooo 1.1.3 sous Windows


Dim oCurseur As Object
ThisComponent.Sheets.getByName("Résultat").getCellByPosition( 10,
10).String = "X"
oCurseur = ThisComponent.Sheets.getByName("Résultat").createCursor
'Crée un curseur
oCurseur.GotoEndOfUsedArea(True) 'Recherche de la dernière cellule
utilisée
Print oCurseur.getRangeAddress.EndRow 'Dernière Ligne : Affiche 10,
normal
ThisComponent.LockControllers
ThisComponent.Sheets.getByName("Résultat").getCellByPosition( 10,
10).String = ""
ThisComponent.Sheets.getByName("Résultat").getCellByPosition( 8,
8).String = "X"
oCurseur = ThisComponent.Sheets.getByName("Résultat").createCursor
'Crée un curseur
oCurseur.GotoEndOfUsedArea(True) 'Recherche de la dernière cellule
utilisée
Print oCurseur.getRangeAddress.EndRow 'Dernière Ligne : Affiche
aussi 10, pas normal

ThisComponent.unLockControllers 
oCurseur = ThisComponent.Sheets.getByName("Résultat").createCursor
'Crée un curseur
oCurseur.GotoEndOfUsedArea(True) 'Recherche de la dernière cellule
utilisée
Print oCurseur.getRangeAddress.EndRow 'Dernière Ligne : Affiche 8,
normal

ThisComponent.Sheets.getByName("Résultat").getCellByPosition( 8,
8).String = ""

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]