[Calc] Créer un observateur d'événement de création d'onglet

Je souhaite créer un observateur d’événements sur la création des onglets dans un document calc.

Si un nouvel onglet est créé, lui ajouter une macro qui se déclenche à la sélection de l’onglet.

La macro reste très simple, écrire dans une cellule une partie du nom de l’onglet.

Sub Main

   Dim oDoc As Object , Feuille As Object 
   Dim Cellule As Object 
   Dim feuille_courante

feuille_courante = thiscomponent.currentController.activeSheet.name

Feuille = ThisComponent.getSheets.getByName(feuille_courante) 
  
Cellule = Feuille.getCellRangeByName("A1") 
Cellule.setValue( mid(feuille_courante,instr(feuille_courante," ")))


End Sub

J’ai besoin que cette macro soit automatiquement ajoutée au nouvel onglet créé et qu’elle se lance sur l’événement ‘Activer le document’

Merci d’avance pour votre aide

Bonjour,

J’avoue ne pas comprendre “ajout d’une macro à un onglet”; une macro n’est elle pas attachée à un document ?

Peut être cherches tu a ajouter une macro lors de l’ajout d’un onglet? ajouter une macro par macro ?

je surveille cette question intéressante.

Manuellement tu fais :

Onglet (clic droit) > Evenement de la feuille
Evénement : Activer le document
Action assignée : Standard.Module1.Main

Je souhaite mettre en place une macro qui tourne en tâche de fond et qui observe la création d’onglet. Lorsque nouvel onglet créé, je souhaite ajouter automatiquement à ce nouvel onglet le même comportement. C’est à dire assigner cette macro à l’événement (Activer le document) du nouvel onglet.

Bonjour @JeromeB51

Tout d’abord quelques remarques préalables…

  • Dans ta macro Main tu pourrais utiliser la propriété String au lieu de SetValue
  • Ton instruction mid... suppose que le nom de feuille comprend un espace ce qui entraînera un appel de procédure incorrect si ce n’est pas le cas.
  • Je préfère éviter de recourir le plus possible à ce type d’observateur d’événements, sauf éventuellement si le classeur ne doit pas “voyager” :
  • tu ne peux jamais être sûr que les macros seront autorisées sur le poste des utilisateurs
  • on finit assez souvent par bâtir des “usines à gaz”…

Cela dit, l’exemple joint montre comment obtenir le résultat par un XModifyListener qui surveille les modifications. Si le nombre de feuilles change, et si c’est un ajout :

  • on interrompt le listener (car on va lancer des modifications qui re-déclencheraient le listener)
  • on récupère le nom de la feuille ajoutée
  • on active la feuille concernée et on ajoute le nom en A1 (ici je reprends le nom entier cf. ma remarque préalable)
  • on redémarre le listener

La procédure à lancer pour initialiser est PysListenersAdd

ListenerClasseur.ods

Cordialement

Bonjour Pierre Yves et merci pour ta réponse qui me convient parfaitement. Ton analyse également. Ce fichier ne voyagera pas, pour l’espace effectivement je vais repenser la chose …