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 <[email protected]>
Pour : Michel Rudelle <[email protected]>, 'claude' <[email protected]>, 'libreoffice' <[email protected]>
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: [email protected]
> To: [email protected]; [email protected]
> 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:[email protected]]
> 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:[email protected]]
> 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:[email protected]>
> <[email protected]>
> Pour : 'claude' <mailto:[email protected]>
> <[email protected]>, 'libreoffice'
> <mailto:[email protected]> <[email protected]>
> Date : 12/08/2013 17:57
>
> Bonjour,
>
>
>
> De : claude [mailto:[email protected]]
> 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 à [email protected] 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 à [email protected] 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

Répondre à