[Résolu][Calc] Copie de feuille avec des événements de feuille connectés

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

[Résolu][Calc] Copie de feuille avec des événements de feuille connectés

Message par BERNO »

Bonjour

J'ai une feuille avec une macro qui met en majuscule le contenu de certaines colonnes. Par contre quand je rajoute une feuille en la copiant, la macro sur la feuille copiée ne fonctionne plus (en effet l'évènement de la feuille n'a pas été conservé).
Existe t il une solution pour conserver cette macro sur toutes les feuilles qui seraient copiées ?

Je joins le petit fichier test....

Merci d'avance

No
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Lynx le 15 mai 2023 23:45, modifié 1 fois.
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Bonjour,
BERNO a écrit : 10 mai 2023 19:24 Existe t il une solution pour conserver cette macro sur toutes les feuilles qui seraient copiées ?
Le titre de ton sujet ne reflète pas la demande exposée : Affecter une macro à un événement de feuille après copie d'une feuille modèle

Sujet déjà passé :[Résolu][Calc]Assigner une macro à un évènement de feuille

Après l'idéal dans ton cas serait de créer une macro pour copier la feuille modèle et dans la foulée lui demander de créer l'affectation. Les exemple de copie son nombreux dans cette section.

@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Bonjour
Merci pour le retour ...
Donc si j'ai bien compris, lorsque que je copie une feuille d'un classeur, la macro de la feuille copiée n'est pas conservée et c'est normal.
La seule solution est de créer une autre macro ?

Cdlt
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Bonjour,
BERNO a écrit : 11 mai 2023 07:31 Donc si j'ai bien compris, lorsque que je copie une feuille d'un classeur, la macro de la feuille copiée n'est pas conservée et c'est normal.
La seule solution est de créer une autre macro ?
Alors non ! D'abord c'est ton fichier qui contient une macro dans un lieu de stockage dédié et non ta feuille. Ensuite ce que tu perds lors de la copie de ta feuille n'est pas la macro proprement dite mais son affectation à un événement de ta feuille nouvellement copiée/créée. La même macro peut servir plusieurs feuilles donc.

Pour copier ta feuille, tu effectues un clic droit sur l'onglet puis dans le menu contextuel tu sélectionnes Déplacer/Copier la feuille. Dans ce même menu contextuel, une autre entrée nommée Événement de la feuille te permet de connecter ta macro à un événement particulier de ta feuille. Tu peux donc très bien te passer de macro pour faire ça sauf si tu dois copier ta feuille toutes les 30 secondes :marto:

@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Re Bonjour et à nouveau merci pour ce retour.
Pour être certain d'avoir tout compris ...
Après avoir fait une copie de la feuille... je vais sur événement de la feuille, puis contenu modifié puis Macro, module etc etc pour que le code soit affecté sur cette nouvelle feuille ?

Cdlt
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Oui c'est exactement ça. Après, comme nous ignorons toujours l'objectif que tu souhaites atteindre avec ton fichier, c'est difficile de te proposer la solution la plus pertinente pour l'utilisation que tu en feras.
zeguedon a écrit : 10 mai 2023 23:19 serait de créer une macro pour copier la feuille modèle et dans la foulée lui demander de créer l'affectation.
@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Merci à nouveau pour ce retour
L'objectif était de copier une feuille par journée sur une quinzaine ou vingtaine de jours....pour moi pas de soucis pour affecter l'évènement .....par contre pour d'autres utilisateurs c'est un peu trop complexe......copier une feuille oui , lui affecter un évènement :roll:
A la création du fichier, je ne savais pas qu'en copiant la feuille elle perdait son évènement....j'étais persuadé que tout suivait :(
7.3.6.2 libre Office Community Mac OS 12.6.5
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Copier une feuille de classeur

Message par Dude »

Salut,
BERNO a écrit : 11 mai 2023 17:25L'objectif était de copier une feuille par journée sur une quinzaine ou vingtaine de jours....
:roll: Là encore, recopier des informations en plusieurs fois laisse entendre au fonctionnement d'une base de données relationnelles.
Si c'est pour cumuler avec ton autre question, tu vas te retrouver avec 15 ou 20 feuilles contenant des MFC qui se recopient suite à des déplacements.
Usine à gaz et plantage assuré.

BERNO a écrit : 11 mai 2023 17:25 copier une feuille oui , lui affecter un évènement
zeguedon te donne un fil contenant justement une macro faisant cette opération. L'as-tu suivi ?
Il te suffit d'ajouter la création de feuille et d'en faire un bouton pour l'exécution.

Rien de bien compliqué si on se donne la peine d'étudier...
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Bonjour
Oui en effet j'ai une base de données où je puise des informations que je renvoie sur des feuilles ....qui sont recopiées avec des MFC....mais je n 'ai pas trouvé d'autres solutions....raison pour laquelle je pensais intégrer des macros en pensant qu'elles se reporteraient en copiant les feuilles...
J'ai suivi le fil de Zeguedon....qui est certainement pas très compliqué à mettre en place ...mais tout cela dépend du niveau des connaissances.
J'étudie mais je galère :roll:
7.3.6.2 libre Office Community Mac OS 12.6.5
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1047
Inscription : 19 août 2018 05:20

Re: [Calc]Copier une feuille de classeur

Message par Dolev »

Bonsoir,
BERNO a écrit : 12 mai 2023 22:34Oui en effet j'ai une base de données ....mais je n 'ai pas trouvé d'autres solutions....
La solution serait d'utiliser... Base :)
Open Office 4.1.15 sous Windows 11
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Bjr
Base ??
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Bonjour,
BERNO a écrit : 13 mai 2023 10:14 Bjr
Base ??
La suite bureautique que nous utilisons ici est composée de plusieurs modules, chacun ayant une vocation propre dont entre autres :
Writer = traitement de texte
Calc = tableur (synonyme de chiffrier)
Base = base de données ayant vocation à stocker et traiter de l'information. Doté de formulaires de saisie, il permet la gestion de stock, affectation de personnel approfondie et bien plus encore.

Manifestement tu t'obstines absolument à conserver secret l'objectif à atteindre. De fait tu cherches des solution à tâtons sans savoir ce que tu fais pensant pouvoir y parvenir = problème XY !
Sans plus de précisions ce sera sans moi désormais. Désolé.

@+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Bonjour
Je construis pas à pas un simple fichier, et en fonction des difficultés rencontrées je demande de l’aide….
Au départ une feuille de données avec des recherches de doublons, et un code VBA pour que les lettres soient toujours en majuscule.
Je ne savais qu’en copiant cette feuille…le code VBA ne suivait pas d’où ma demande avec mon fichier test
Il n’y a aucun secret et encore moins d’obstination…
7.3.6.2 libre Office Community Mac OS 12.6.5
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1047
Inscription : 19 août 2018 05:20

Re: [Calc]Copier une feuille de classeur

Message par Dolev »

Re,
BERNO a écrit : 12 mai 2023 22:34 J'ai suivi le fil de Zeguedon....qui est certainement pas très compliqué à mettre en place ...mais tout cela dépend du niveau des connaissances.
J'étudie mais je galère
Je ne vois pas de difficulté à utiliser la macro de ThierryM
Donnez donc un document et précisez où se trouve le blocage ?
Open Office 4.1.15 sous Windows 11
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Bonjour
J'ai mis la macro de ThierryM dans un module, mais je ne trouve pas l'évènement"OnChange".Je l'ai mis à l'évènement "la création de la copie du doc " mais ça ne fonctionne pas ....surement parce que ce n'est pas la copie de la feuille ..... :roll:
Sur mon fichier lorsque je copie ma feuille "bonjour", je perds la mise en majuscule ....
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
7.3.6.2 libre Office Community Mac OS 12.6.5
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1047
Inscription : 19 août 2018 05:20

Re: [Calc]Copier une feuille de classeur

Message par Dolev »

A quoi sert de lancer la macro sur l'événement "Double clic".
Chaque fois qu'il y a double-clic, vous l'exécutez. :shock:
capture.png
Et votre macro ne branchera rien si vous ne déclarez pas la feuille.

Code : Tout sélectionner

Sub Main
'Affecte la macro "Mettre en majuscule" à l'évènement "Sélection modifiée" de la feuille nouvFeuille
 	oDoc = ThisComponent
 	oFeuil = oDoc.Sheets.getByName("bonjour_2")
     Events = oFeuil.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.Matieres.RetrouverMatiereContenuPrecedent?language=Basic&location=document"
    Events.replaceByName("OnChange", props())
    
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 4.1.15 sous Windows 11
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Bonjour,

En complément :

Code : Tout sélectionner

Option Explicit

Global bool As Boolean
Const nomFeuilleModele = "Modele_A_Copier"
Const nomFeuilleCible = "Copie_"
Const bool = True

Sub CopierFeuilleModele
Dim sheetName As String
Dim oDoc As Object
Dim oSheets As Object
Dim oSheet As Object
Dim index As Integer
Dim feuilleCible As Object

oDoc = Thiscomponent
oSheets = oDoc.Sheets
index = oSheets.Count
sheetName = nomFeuilleModele
oSheet = oSheets.GetByName(sheetName)

'xray oSheets
'Méthode : copyByName(aName as string, aCopy as string, nDestination as short)
oSheets.copyByName(sheetName, nomFeuilleCible & index, index)
'écrire fonction pour incrémenter le nom de feuille
if AffectationEvents(oSheet,oSheets(index)) Then msgBox("Feuille copiée avec succès",,"Terminé")
oDoc.CurrentController.ActiveSheet =  oSheets(index)

End Sub

Function AffectationEvents(oSheet,target)
Dim props(1) as new com.sun.star.beans.PropertyValue
Dim events As Object
Dim affectation() As variant
Dim eventsNames As Variant
Dim elem As String
Dim eventType As String
Dim script AS String

eventsNames = oSheet.Events.getElementNames
for each elem in eventsNames
	affectation() = oSheet.Events.GetByName(elem)
	if not isEmpty(affectation) then
		'xray affectation()
		'(0) | Structure : com.sun.star.beans.PropertyValue --> EventType | "Script" 
		'(1) | Structure : com.sun.star.beans.PropertyValue --> Script    | "vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document" 
		eventType = affectation(0).Value
		script = affectation(1).Value
		events = target.Events		
    	props(0).Name = "EventType"
    	props(0).Value = eventType
    	props(1).Name = "Script"
    	props(1).Value = script
    	events.replaceByName(elem, props())
	end if
next
AffectationEvents = True
End Function
Pour exécuter la macro : Menu Outils>Macro>Exécuter la macro développer l’arborescence à gauche pour sélectionner le module GestionFeuille et sélectionner à droite CopierFeuilleModele. Appuyer sur le bouton [Exécuter].
Capture d’écran du 2023-05-14 15-17-22.png
Il est possible d'utiliser un raccourci clavier si c'est trop compliquer la tâches des futurs utilisateurs.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Capture d’écran 2023-05-14 235210.png
Bonjour
Tout d'abord , grand merci pour les retours
Concernant le raccourci ou un bouton je n'arrive pas à aller plus loin que "sélecteur de macro" et je dois poursuivre manuellement, est ce normal où ai je fait une erreur ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Il faut cliquer sur le petit + en regard du nom du fichier puis encore pour afficher les modules
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Oui ,j 'avais bien compris ....mais ma question était de savoir si le raccourci ou le bouton que je pourrais créer s'arrêtait à cette étape et que la suite se faisait manuellement.... ou j'avais fait une erreur car la raccourci
ou le bouton copie la feuille ?
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Un peu de lecture s'impose :
Assigner une macro à un bouton
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc]Copier une feuille de classeur

Message par BERNO »

Bonjour
J'ai lu attentivement mais je n'ai pas trouvé réponse à ma question....
Créer un bouton je sais faire, lui affecter une macro aussi mais ce que je comprends pas c'est pourquoi quand je clique sur le bouton j'arrive à la page "sélecteur de macro" ce qui m'oblige à poursuivre des manipulations alors que lors de l'enregistrement de la la macro je suis arrivé jusqu'à la création de la feuille ...
Est ce donc impossible de cliquer et d'obtenir directement une copie avec les majuscules ?
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc]Copier une feuille de classeur

Message par zeguedon »

Alors là franchement chapeau ! Joins ton fichier tel qu'il est afin d'obtenir la vrai raison. Merci
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc] Copier une feuille avec des événements de feuille connectés

Message par BERNO »

Bonjour
Voilà le fichier...avec le bouton pour lancer la copie de la feuille :roll:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
7.3.6.2 libre Office Community Mac OS 12.6.5
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Copier une feuille avec des événements de feuille connectés

Message par Dude »

C'est sûr qu'en faisant n'importe quoi, ça ne fonctionnera pas.
Qu'est ce qu'exécute ton bouton, une macro COPIERMODELE qui contient :

Code : Tout sélectionner

sub COPIERMODELE
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:RunMacro", "", 0, Array())


end sub
Et la macro fait ce que tu lui demandes : exécuter une macro. :marto:
Donc utilise la bonne routine, celle que t'a fournie zeguedon.
BERNO
Membre OOrganisé
Membre OOrganisé
Messages : 72
Inscription : 09 mai 2022 19:33

Re: [Calc] Copier une feuille avec des événements de feuille connectés

Message par BERNO »

Désolé mais pour moi , je ne fais pas n'importe quoi !!!!
Je fais au départ les manoeuvres qu'il faut pour copier une feuille :
je déclenche "enregistrer une macro", exécuter, copier feuille modele, standard, gestion feuille , copier feuille modele...feuille copier avec succès OK et je termine l'enregistrement .....et j'ai une feuille supplémentaire
Je nomme la macro et la place sur le bouton....
7.3.6.2 libre Office Community Mac OS 12.6.5
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Copier une feuille avec des événements de feuille connectés

Message par zeguedon »

Alors si ! tu fais n'importe quoi !

il faut que tu retires de ton fichier la macro que tu as faite avec l'enregistreur de macro car elle n'a absolument pas lieu d'être. Et j'insiste (même si tu persiste à croire que tu as raison et que tu fais bien).

Il faut connecter à ton bouton la macro CopierFeuilleModele et c'est tout. Et arrête avec ce p*t**n d'enregistreur de macro que tu n'utilises pas à bon escient. Merci.
 Ajout : En complément : la solution du bouton n'est pas la meilleure sauf si le bouton est sur une autre feuille que celle qui doit-être copiée car il sera copié lui aussi à chaque fois. L’idéal est le raccourci clavier.  
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 692
Inscription : 20 déc. 2017 14:45

Re: [Calc] Copier une feuille avec des événements de feuille connectés

Message par rollmops »

Bonjour,

En attendant que BERNO revienne nous dire ce qu'il en est :)
zeguedon a écrit : 16 mai 2023 21:47 L’idéal est le raccourci clavier.
+1
Oui et avec le bouton placé dans une barre d'outils dédiée.
Lire viewtopic.php?t=40146
OpenOffice 4.1.15 - Windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12457
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Copier une feuille avec des événements de feuille connectés

Message par Bidouille »

Dernière visite : 16 mai 2023 23:57
Deux mois plus tard, plus aucune nouvelle.
Je clôture à sa place.

Un remerciement fait aussi plaisir aux bénévoles qui vous ont consacré de leur temps.
La courtoisie fait également partie de la philosophie du logiciel libre.
En cas d'erreur, veuillez lire ce sujet pour une éventuelle réouverture de votre question :
ftopic52748-reouverture-de-question-fermee.html