[Calc] Copier une feuille en incluant un évènement de feuille

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 11:29
Localisation : Les Corbières

[Calc] Copier une feuille en incluant un évènement de feuille

Message par ThierryM »

Adieu a totes,
Lorsqu'on copie une feuille d'un classeur avec la fonction CopyByName, si on avait un évènement de feuille attaché à la feuille de départ, celui-ci n'est pas copié.
Par exemple, vous venez de copier une feuille "nouvFeuille" à partir d'une feuille d'origine qui contient la macro "Macro1" (contenue dans le module "Module1") associée à l'évènement de feuille "Contenu modifié". Voici un code vous permettant d'associer cette macro à la nouvelle feuille :

Code : Tout sélectionner

'Affecte la macro "Macro1" à l'évènement "Contenu modifié" de la feuille "nouvFeuille"
    Evenements = nouvFeuille.Events
    Dim props(1) as new com.sun.star.beans.PropertyValue
    props(0).Name = "EventType"
    props(0).Value = "Script"
    props(1).Name = "Script"
    props(1).Value = "vnd.sun.star.script:Standard.Module1.Macro1?language=Basic&location=document"
    Evenements.replaceByName("OnChange", props())
Remarque : Il est tout à fait possible d'utiliser ce code pour affecter un évènement de feuille à des feuilles déjà existantes. Il ne se limite pas à la copie d'une feuille même si c'est l'usage le plus courant.

Cordialement,

Thierry
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 951
Inscription : 19 août 2018 05:20

Re: [Calc] Copier une feuille en incluant un évènement de feuille

Message par Dolev »

Bonjour,

Sans vouloir revendiquer du code, l'exemple ressemble beaucoup à celui que j'ai publié ici :
viewtopic.php?p=373206#p373206
Open Office 4.1.15 sous Windows 11
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 11:29
Localisation : Les Corbières

Re: [Calc] Copier une feuille en incluant un évènement de feuille

Message par ThierryM »

Adieu Dolev,

Désolé si vous pensez avoir été "plagié" mais je n'ai pas du tout voulu m'attribuer un code ne venant pas de moi. Je cite systématiquement mes sources quand je les reproduis (vous pouvez le vérifier dans les différents outils contenant des macro que je partage sur ce forum où je l'indique en commentaire).
Pensant que ça pouvait être utile à d'autres, j'ai choisi de publier ici le fruit de mes recherches (surtout faites sur des forums anglophones où j'ai adapté à partir de différents codes qui n'étaient d'ailleurs pas basés sur l'évènement "OnChange") justement pour éviter que des personnes ne perdent du temps comme moi à le faire (si j'avais trouvé votre fil, je n'aurais pas pris la peine de le mettre ici).
Après, il n'y a pas non plus 50 façons différentes de faire pour arriver au résultat :wink: ... ce qui justifie le fait de refuser de breveter du code informatique.
Cordialement,

Thierry
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 951
Inscription : 19 août 2018 05:20

Re: [Calc] Copier une feuille en incluant un évènement de feuille

Message par Dolev »

Et bien adieu aussi :?
Open Office 4.1.15 sous Windows 11
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 11:29
Localisation : Les Corbières

Re: [Calc] Copier une feuille en incluant un évènement de feuille

Message par ThierryM »

"Adieu" ou "Adiu" selon les graphies = "Salut", "Bonjour" amical en occitan :D .
Cordialement.

PS : je vous aurais bien contacté via un message privé mais ce n'est pas possible apparemment.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 951
Inscription : 19 août 2018 05:20

Re: [Calc] Copier une feuille en incluant un évènement de feuille

Message par Dolev »

Comme je trouve que l'exemple n'est pas complet et pas réellement exploitable, je mets en ligne un classeur.
Le code permet d'analyser les événements existants et de les copier dans la nouvelle feuille.

Code : Tout sélectionner

Sub Main
	oDoc = ThisComponent
	oCurrentController = oDoc.getCurrentController()
	oActiveSheet = oCurrentController.getActiveSheet()
	sNomFeuille = oActiveSheet.Name
	oSheets = oDoc.Sheets
	nCpt = oSheets.Count
	oEvents = oActiveSheet.getEvents()
	Dim aEvt(6) 'va contenir les 7 événements
	for each sEvt in oEvents.ElementNames
		oEvt = oEvents.getByName(sEvt)
		aEvt(i) = array(sEvt, oEvt)
		i = i+1
	next
	oSheets.copyByName(sNomFeuille, sNomFeuille & "_" & nCpt, nCpt)
	oFeuil = oSheets.getByName(sNomFeuille & "_" & nCpt)
    oNewEvents = oFeuil.Events
    for i = 0 to 6
		oNewEvents.replaceByName( aEvt(i)(0), aEvt(i)(1))
	next
	
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 4.1.15 sous Windows 11