[CALC] définir zone dynamique par macro

Bonjour,

la macro actuelle

Sub ActuNomZone
  Dim v_Nom As Object
  Dim v_CellAdress As New com.sun.star.table.CellAddress
  Dim v_DataZone As New com.sun.star.table.CellAddress

  '--------------
  'La procédure renvoie une erreur si le nom existe déjà
  'dans le classeur. On le supprime d'abord pour le recréer ensuite.
  '--------------

'v_DataZone=thiscomponent.cells
  v_Nom = ThisComponent.NamedRanges
  'Supprime puis nomme la plage dans la feuille Données
  'reste à trouver comment le faire de manière dynamique
  ' c'est-à-dire en définissant la zone avec les seules cellules occupées par des données
  'If ThisComponent.NamedRanges("data")=true Then
  ThisComponent.NamedRanges.removeByName("data")
' End If
  v_Nom.addNewByName( "data" , "$Données.$A$1:$H$800" , v_CellAdress , 0 )

End Sub

j'inscris les coordonnées de la zone à nommer "data" dans la macro. Elles sont larges, ce qui m'oblige à exclure manuellement les entrées vides dans les Tables de pilote.
Et cela manque d'élégance, ce qui est aussi une bonne raison de faire mieux :wink:

Je souhaite que cette zone soit "dynamique", afin de l'étendre à mesure que j'entre des données dans les colonnes A à H.

Je n'y parviens pas, connaissant encore mal le nom des objets.
Comme écrire cette ligne ?

  v_Nom.addNewByName( "data" , "$Données.$A$1:$H$800" , v_CellAdress , 0 )

Un coup de pouce serait bienvenu.

Merci
Lucien

Bonjour,

je reviens avec une autre option.
Je construis une formule qui renvoie les coordonnées de la zone contenant mes données.
Cette formule stockée dans une variable, je voudrais l'utiliser dans la ligne qui définit les nouvelles coordonnées de la zone.
Or, elle provoque une erreur dans la macro, bien qu'elle fonctionne dans la feuille de calcul.

Sub ActuNomZone
  Dim v_Nom As Object
  Dim v_CellAdress As New com.sun.star.table.CellAddress
  Dim v_DataZone As New com.sun.star.table.CellAddress
  Dim v_Zones() As Object
  Dim v_Ref As object, v_test As string
  '--------------
  'La procédure renvoie une erreur si le nom existe déjà
  'dans le classeur. On le supprime d'abord pour le recréer ensuite.
  '--------------
v_Zones=ThisComponent.NamedRanges.ElementNames
v_test="NBVAL(INDEX(data;;1))"
v_Ref="$Données.$A$1:$h$"&NBVAL(INDEX(data;;1))"

le message d'erreur est "Erreur de syntaxe BASIC/Erreur de parenthèse"

  v_Nom = ThisComponent.NamedRanges
  ThisComponent.NamedRanges.removeByName("data")
  v_Nom.addNewByName("data", v_Ref,v_CellAdress,0)

End Sub

Toute aide est la bienvenue
Lucien

Sujet : [CALC] définir zone dynamique par macro
Pour : LibreOffice Users <users@fr.libreoffice.org>

Bonjour,

la macro actuelle

Sub ActuNomZone
  Dim v_Nom As Object
  Dim v_CellAdress As New com.sun.star.table.CellAddress
  Dim v_DataZone As New com.sun.star.table.CellAddress

  '--------------
  'La procédure renvoie une erreur si le nom existe déjà
  'dans le classeur. On le supprime d'abord pour le recréer ensuite.
  '--------------

'v_DataZone=thiscomponent.cells
  v_Nom = ThisComponent.NamedRanges
  'Supprime puis nomme la plage dans la feuille Données
  'reste à trouver comment le faire de manière dynamique
  ' c'est-à-dire en définissant la zone avec les seules cellules
occupées par des données
  'If ThisComponent.NamedRanges("data")=true Then
  ThisComponent.NamedRanges.removeByName("data")
' End If
  v_Nom.addNewByName( "data" , "$Données.$A$1:$H$800" , v_CellAdress , 0 )

End Sub

j'inscris les coordonnées de la zone à nommer "data" dans la macro.
Elles sont larges, ce qui m'oblige à exclure manuellement les entrées
vides dans les Tables de pilote.
Et cela manque d'élégance, ce qui est aussi une bonne raison de faire
mieux :wink:

Je souhaite que cette zone soit "dynamique", afin de l'étendre à mesure
que j'entre des données dans les colonnes A à H.

Je n'y parviens pas, connaissant encore mal le nom des objets.
Comme écrire cette ligne ?

  v_Nom.addNewByName( "data" , "$Données.$A$1:$H$800" , v_CellAdress , 0 )

Un coup de pouce serait bienvenu.

Merci
Lucien