Yo

Effectivement, je n'ai pas testé les références liées à de la plage nommée.
Il m'aurait semblé que le définition de la plage, même erronée le temps du 
unmerge/merge, serait restée en l'état.
Il est possible que nos codeurs aient jugé bon d'actualiser en live... Ou qu'il 
s'agit d'une "fonctionnalité non documentée". ^^

La manip sur l'étendue du merge n'implique pas nécessairement d'automatiser une 
redéfinition de la zone nommée. 
J'aurai même tendance à penser que ce n'est pas plus mal de la laisser en 
l'état, même si le premier automatisme peut se défendre.

Ce qui ramène à l'aspect pratique de l'utilisation du dispacher : on ne touche 
à rien = on n'a rien à sauvegarder pour une restauration ultérieure ==> on se 
contente de se déplacer.

Par contre, la perte de la référence complète du RangeAddress est à mon sens 
une régression.
Je ne sais pas trop où elle a commencé avec LO, si tant est de LO ait renvoyé 
une RangeAddress complet dans une version (ce qui ne fait pas partie des essais 
que je peux faire, croyant naïvement que c'est une chose bouclée qui peut 
difficilement évoluer en mal...)
De plus, rapidement les essais m'ont conduit à attendre patiemment la 4.1.1.  
Comprendre : je ne teste, sur LO, que ponctuellement ^^

Les compteurs ayant commencé à défiler en 4.0.x, les 4.1.x vont "viendre"... ^^

;)


> Date: Thu, 22 Aug 2013 08:21:38 +0200
> From: [email protected]
> CC: [email protected]
> Subject: Re:     RE: [fr-users] Re:     RE: [fr-users] Calc macro - Trouver 
> plage associée à une cellule fusionnée
> 
> Bonjour,
> 
> J'ai juste testé sur un classeur vierge. j'ai fusionné quelques 
> cellules. j'ai nommé cette plage "toto" et j'ai lancé la macro.
> 
> Quant à refusionner, moi je ne fais rien puisque dans la macro, il est 
> noté "et on refait la fusion, autant remettre en l'état, isn't ?
>  oPlage.Merge(True)"
> 
> Et quand la macro a été exécutée une fois je me retrouve avec aucune 
> cellule fusionnée et la plage "toto" fait référence à la première 
> cellule de l'ancienne plage fusionnée.
> 
> Claude
> 
> -------- Message original --------
> Sujet : [INTERNET]   RE: [fr-users] Re:     RE: [fr-users] Calc macro - 
> Trouver plage associée à une cellule fusionnée
> De : VEDEL Patrice <[email protected]>
> Pour : claude <[email protected]>, 'libreoffice' 
> <[email protected]>
> Date : 21/08/2013 03:44
> > Tu me surprends un peu : [mais cela ne fonctionne qu'une fois et cela 
> > ne donne que la dernière ligne de fusion mais la colonne mais si on  
> > recommence les cellules sont dé-fusionnées]
> > Cela fonctionne une fois normalement ? ou à plus ou moins une fois ?
> > Les cellules non fusionnées, c'est AMHA moins grave : où est comment 
> > tu refusionnes.? Selon le cas, il suffit de resélectionner à partir de 
> > oRange avant de lancer la fusion.
> >
> > Donc, si ton fichier n'a rien de confidentiel, ce serait bien de le 
> > joindre et, s'il l'est, tu peux toujours effacer les contenus 
> > sensibles : le truc c'est de voir ton contexte, pas le contenu du fichier.
> >
> >
> > > Date: Tue, 20 Aug 2013 17:15:35 +0200
> > > From: [email protected]
> > > To: [email protected]
> > > Subject: Re: RE: [fr-users] Re: RE: [fr-users] Calc macro - Trouver 
> > plage associée à une cellule fusionnée
> > >
> > > Encore une fois, merci d'essayer mais cela ne fonctionne qu'une fois et
> > > cela ne donne que la dernière ligne de fusion mais la colonne mais 
> > si on
> > > recommence les cellules sont dé-fusionnées.
> > >
> > > Désolée
> > >
> > > Bonne soirée
> > >
> > > Claude
> > >
> > > -------- Message original --------
> > > Sujet : [INTERNET] RE: [fr-users] Re: RE: [fr-users] Calc macro -
> > > Trouver plage associée à une cellule fusionnée
> > > De : VEDEL Patrice <[email protected]>
> > > Pour : claude <[email protected]>, 'libreoffice'
> > > <[email protected]>
> > > Date : 20/08/2013 16:39
> > > > 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: [email protected]
> > > > > To: [email protected]
> > > > > 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 <[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
> > > > >
> > >
> > >
> > >
> > > --
> > > 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
> 
                                          
-- 
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 à