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.
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 :
'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.
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 ... ce qui justifie le fait de refuser de breveter du code informatique.
Cordialement,
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.
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.