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
>