Calculer l'adresse d'une cellule à partir de ses numéros de ligne / colonne

Bonjour,

Dans une macro, j'avais besoin de la fonction décrite en titre.
Je n'ai pas trouvé, alors j'ai écrit cela.
Si cela peut servir à d'autres...

Function ConvertRowColumn(aRow As Long, aColumn As Long) As String
' Return cell address corresponding to aRow And aColumn
  Dim remain As Long
  Dim value As Long
  Dim result As String
  
  result = aRow
  value = aColumn
  While value > 0
    remain = value mod 26
    value = value \ 26
    If remain = 0 Then
      result = "Z" & result
      value = value - 1
    else
      result = chr(remain + 64) & result
    end If
  Wend
  
  ConvertRowColumn = result
End Function

Bonjour

Merci pour ce partage.

En complément je précise que cette procédure "attend" les numéros
de colonne/ligne de l'interface : 1, 1 pour A1 par exemple, contrairement
à l'usage habituel des collections en programmation (0, 0 pour A1).

Les cellules disposent aussi de la propriété AbsoluteName

oCell = thiscomponent.sheets(0).getCellByPosition(15, 2310)
print oCell.AbsoluteName

Le résultat serait ici : $Feuille1.$P$2311

Si on veut l'adresse sans nom de feuille on peut faire:

dim oCell as object
dim sAdresse() as string
oCell = thiscomponent.sheets(0).getCellByPosition(15, 2310)
sAdresse() = split(oCell.AbsoluteName, ".")
print sAdresse(1)

Cordialement
Pierre-Yves

Bonsoir,

Je ne résiste pas au plaisir de vous présenter un bout de code extrait d'un Paolo_Mantovani_InSide :

Sub RetrieveTheActiveCell()

  Dim oActiveCell 'The current active cell

  Dim oConv 'The cell address conversion service

  Dim oDoc

  oDoc = ThisComponent

  oActiveCell = oDoc.CurrentSelection

  oConv = oDoc.createInstance("com.sun.star.table.CellAddressConversion")

  oConv.Address = oActiveCell.getCellAddress

  Print oConv.UserInterfaceRepresentation

  print oConv.PersistentRepresentation

End Sub

Le sub traite la cellule active, mais il est simple de passer en
paramètre ligne et colonne pour adapter le code au taitement d'une
cellule x,y.

Je n'utilise pas trop, préférant passer par AbsoluteName, mais j'adore....

:wink:

Arghhh, en 2 lignes ! J'ai honte :wink:

Bonjour,

Pourquoi ne pas passer par les API
ce qui donnerait quelque chose comme ceci :

Function AbsoluteNameRowColumn( aRow As Long, aColumn As Long ) As String

     Dim oSheet As Object, sAdresse
     oSheet = ThisComponent.getSheets().getByName( "Feuille1" )

     sAdresse = Split(oSheet.getCellByPosition( aRow, aColumn ).AbsoluteName, "." )
     AbsoluteNameRowColumn = sAdresse( uBound( sAdresse ) )

End Function

Francois GATTO

En une ligne :

     print thiscomponent.sheets(0).getCellByPosition(15, 2310).AbsoluteName

A noter d'une part que cela renvoie la cellule P2311 et non O2310 (sujet classique de la numérotation à partir de zéro).
A noter d'autre part que cela renvoie la cellule sous la forme « $Feuille1.$P$2311 ».

Bonjour

Rafael Laville wrote

En une ligne :

     print thiscomponent.sheets(0).getCellByPosition(15,
2310).AbsoluteName

En l'occurrence mon conseil ne serait pas celui-là: l'adresse est sans doute
recherchée... pour "faire quelque chose" avec/sur la cellule.

Il est donc vraisemblablement utile de disposer d'une variable pour cette
dernière.

cf.
http://nabble.documentfoundation.org/Calculer-l-adresse-d-une-cellule-a-partir-de-ses-numeros-de-ligne-colonne-tp4045509p4045529.html

Cordialement
Pierre-Yves