Bonjour,
Effectivement j'ai trouvé une version AOO avec laquelle cela ne
fonctionne pas. :(
Donc on reprend le schmilblick avec une autre approche :
Sub essaiToto3
Dim oSheet as Object, oPlage As Object, oRange As Object
oSheet = Thiscomponent.Sheets.getByName("Feuille1")
oPlage = oSheet.getCellRangeByName("Toto")
IF oPlage.isMerged Then
' On annule la fusion des cellules et...
' ô miracle la sélection porte sur la plage anciennement
fusionnée ;)
oPlage.Merge(False)
' On récupère donc le RangeAddress
oRange = ThisComponent.CurrentSelection.RangeAddress
' et on refait la fusion, autant remettre en l'état, isn't ?
oPlage.Merge(True)
End If
MsgBox "Feuille : " & oRange.Sheet & chr(10) & _
"Haut Gauche : " & oRange.StartColumn & "," &
oRange.StartRow & chr(10) & _
"Bas Droite : " & oRange.EndColumn & "," &
oRange.EndRow, 64, "Index de la plage fusionnée"
End Sub
Cordialement
Date: Tue, 20 Aug 2013 09:02:39 +0200
From: pref-open-office@haute-garonne.gouv.fr
To: users@fr.libreoffice.org
Subject: [fr-users] Re: RE: [fr-users] Calc macro - Trouver plage
associée à une cellule fusionnée
Bonjour,
Merci à tous mais pour moi il n'y a que la méthode avec le dispatcher
qui fonctionne.
La macro de Patrice ne me renvoie que la première cellule de la plage
fusionnée
Claude
-------- Message original --------
Sujet : [INTERNET] RE: [fr-users] Calc macro - Trouver plage associée
à une cellule fusionnée
De : VEDEL Patrice <patvedel@hotmail.com>
Pour : Michel Rudelle <rudelle.michel@gmail.com>, 'claude'
<pref-open-office@haute-garonne.gouv.fr>, 'libreoffice'
<users@fr.libreoffice.org>
Date : 13/08/2013 16:47
En me relisant, je me dis que je ne suis pas très explicite. Donc un
bout de code (compact) pour illustrer le propos :
Sub essaiToto
Dim sPlage as String, oPlage As Object, oRange As Object
sPlage =
Thiscomponent.Sheets.getByName("Feuille1").getCellRangeByName("Toto").AbsoluteName
oPlage =
Thiscomponent.Sheets.getByName("Feuille1").getCellRangeByName(sPlage)
oRange = oPlage.RangeAddress
MsgBox "Feuille : " & oRange.Sheet & chr(10) & _
"Haut Gauche : " & oRange.StartColumn & "," &
oRange.StartRow & chr(10) & _
"Bas Droite : " & oRange.EndColumn & "," & oRange.EndRow,
64, "Index de la plage fusionnée"
End Sub
Pour l'utilisation directe de .AbsoluteName, c'est 2 splits avec
variables intermédiaires ou 3 splits en mode compact (sans variables
intermédiaires)... Version 2 splits :
Sub essaiToto2
Dim oSheet As Object, sPlage As String
oSheet = Thiscomponent.Sheets.getByName("Feuille1")
sPlage = oSheet.getCellRangeByName("Toto").AbsoluteName
Dim aInfosF() As String, aInfosCell() As String, sFeuille As String
Dim sHautGauche As String, sBasDroite As String
aInfosF = split(sPlage, ".") : sFeuille = aInfosF(0)
aInfosCell = split(aInfosF(1), ":")
sHautGauche = aInfosCell(0) : sBasDroite = aInfosCell(1)
MsgBox sFeuille & chr(10) & sHautGauche & chr(10) & sBasDroite
End Sub
Je vous laisse la version 3 splits sans variables en devoir de
vacances...
^^
From: rudelle.michel@gmail.com
To: pref-open-office@haute-garonne.gouv.fr; users@fr.libreoffice.org
Subject: RE: [fr-users] Calc macro - Trouver plage associée à une
cellule fusionnée
Date: Tue, 13 Aug 2013 12:17:41 +0200
… suite
Voici ce que j’ai trouvé avec l’aide de l’enregistreur de macro à
partir de
l’idée du forum OOo, pas très élégant mais ça marche, à adapter
bien
sûr au
contexte (je ne sais pas pourquoi il est dit dans le forum que
ça ne
marche
pas)
Le principe : j’ai une plage fusionnée : E17:K21. J’utilise le
dispatcher
pour me positionner sur la première cellule E17, puis en me
déplaçant
toujours grâce au dispatcher un coup en bas et un coup à droite, je
trouve
les deux adresses des cellules adjacentes à la plage :
adresseDessous = $Feuille1.$E$22
adresseAdroite = $Feuille1.$L$17
A partir de là, on peut aisément déduire que la dernière cellule de
la plage
est K21
Sub cherchePlage
Dim document as Object, dispatcher as Object, adresseDessous As
String,
adresseAdroite As String
dim args1(0) as new com.sun.star.beans.PropertyValue
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
'rechercher cellule dessous
args1(0).Name = "ToPoint"
args1(0).Value = "$E$17"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0,
args1())
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0,
Array())
adresseDessous = thiscomponent.currentSelection.AbsoluteName
'rechercher cellule à droite
args1(0).Name = "ToPoint"
args1(0).Value = "$E$17"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0,
args1())
dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "By"
args3(0).Value = 1
args3(1).Name = "Sel"
args3(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args3())
adresseAdroite = thiscomponent.currentSelection.AbsoluteName
End Sub
Bonne journée,
Michel
_____
De : Michel Rudelle [mailto:rudelle.michel@gmail.com]
Envoyé : mardi 13 août 2013 11:11
À : 'claude'; 'libreoffice'
Objet : RE: [fr-users] Calc macro - Trouver plage associée à une
cellule
fusionnée
Bonjour,
Ce n’est pas un problème de version et ma réponse était idiote :(
En effet, elle contenait la réponse, car j’avais défini toto nommée
comme
E17:K21 (cellules effectivement fusionnées)
La même chose en définissant le nom toto uniquement sur la première
E17 ne
permet pas de connaître l’étendue de la plage fusionnée et en
effet,
je ne
trouve pas de méthode.
J’ai une idée qui me trotte derrière la tête, je vais essayer
dans la
journée, on ne sait jamais …
Bonne journée,
Michel
_____
De : claude [mailto:pref-open-office@haute-garonne.gouv.fr]
Envoyé : mardi 13 août 2013 08:07
À : Michel Rudelle
Cc : 'claude'; 'libreoffice'
Objet : Re: RE: [fr-users] Calc macro - Trouver plage associée à
une
cellule
fusionnée
-------- Message original --------
Sujet : [INTERNET] RE: [fr-users] Calc macro - Trouver plage
associée à
une cellule fusionnée
De : Michel Rudelle <mailto:rudelle.michel@gmail.com>
<rudelle.michel@gmail.com>
Pour : 'claude' <mailto:pref-open-office@haute-garonne.gouv.fr>
<pref-open-office@haute-garonne.gouv.fr>, 'libreoffice'
<mailto:users@fr.libreoffice.org> <users@fr.libreoffice.org>
Date : 12/08/2013 17:57
Bonjour,
De : claude [mailto:pref-open-office@haute-garonne.gouv.fr]
Envoyé : lundi 12 août 2013 17:24
Je n'arrive pas à trouver dans les propriétés d'une cellule
fusionnée la
plage associée qui me donnerait la première et la dernière cellule
concernée par cette fusion .
J'ai juste trouvé la propriété "merged" ou pas !!!
Essai rapide:
Sub essaiToto
Dim cellule As Object, objetAdresse As Object, plage as String
cellule =
Thiscomponent.Sheets.getByName("Feuille1").getCellRangeByName("toto")
objetAdresse = cellule.RangeAddress
plage = cellule.AbsoluteName
End Sub
toto est une plage nommée fusionnée (5x7) dans ma Feuille1
objetAdresse est l'objet qui décrit la plage
et plage donne directement la chaîne (par ex: $Feuille1.$D$17:$J$21)
Est-ce que ça répond ?
Bonne soirée,
Michel
Désolée mais moi çà me donne que l'adresse de la première cellule
Peut être un roblème de version ? Je suis en LibreOffice 3.5.7.2
MIMO
Merci quand même
Claude
--
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir
comment vous désinscrire
Les archives de la liste sont disponibles à
http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés
publiquement et ne pourront pas être supprimés
--
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir
comment vous désinscrire
Les archives de la liste sont disponibles à
http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés
publiquement et ne pourront pas être supprimés