[Résolu][Calc] Enregistrer une copie à la fermeture

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 !
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

[Résolu][Calc] Enregistrer une copie à la fermeture

Message par hudssan »

Bonjour à toutes et tous,
J'ai un tableau qui se trouve dans un dossier accessible qu'à certaines personnes de mon entreprise.
J'aimerai que lorsque je ferme ce fichier, une copie se créée automatiquement dans un autre dossier accessible à tout le monde.

L'option de sauvegarde automatique ne m'intéresse pas, puisque je ne veux sauvegarder que ce fichier.
J'ai donc pensé à une macro qui se déclencherait au moment où je ferme mon fichier.
Malheureusement, je ne sais pas programmer une telle macro. De plus, est ce que cela écraserait automatiquement l'ancienne copie ?

Merci pour votre aide.
Dernière modification par micmac le 09 nov. 2024 10:09, modifié 2 fois.
Raison : Ajout de la balise [Résolu]. La coche verte seule ne suffit pas.
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer une copie à la fermeture

Message par Dude »

Salut,
hudssan a écrit : 07 nov. 2024 00:10 J'ai un tableau qui se trouve dans un dossier accessible qu'à certaines personnes de mon entreprise.
Renseigne toi d'abord auprès de ton service informatique pour savoir si l'exécution de macro est autorisée sur les disques réseau.

Ensuite s'il s'agit de conserver l'original du fichier, il n'y a pas besoin de codage.
Il suffit d'enregistrer le document comme modèle (OTS).
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Calc] Enregistrer une copie à la fermeture

Message par hudssan »

Merci pour cette réponse.
Le modèle OTS ne fonctionnera pas de manière naturelle, car s'agissant d'un tableau de congés, l'original évolue à chaque fois qu'on y ajoute des choses. A moins que je ne connaisse pas un manip' spécifique, il faudrait donc ouvrir le fichier, le modifier, le sauvegarder une première fois en tant que modèle, puis une seconde fois comme fichier ''normal''.
En plus, comme je ne suis pas le seul à avoir la main dessus tout le monde ne jouera pas le jeu !

C'est ok pour l'usage de macros.
J'aimerai donc automatiser la tâche, svp
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer une copie à la fermeture

Message par Dude »

Tu peux déjà te servir de la fonction SaveAs du dispatcher comme indiqué ici : viewtopic.php?t=16128
Il faudra d'abord s'assurer que le nom du document est unique et n'existe pas déjà dans le répertoire.
Pour faire cela à la fermeture du document, brancher la macro sur l'événement qui va bien dans le menu Outils > Personnaliser :
capture.png
hudssan a écrit : 07 nov. 2024 08:07 car s'agissant d'un tableau de congés
A noter que le tableur n'est pas un outil de planning
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Calc] Enregistrer une copie à la fermeture

Message par hudssan »

De nouveau, merci pour cette réponse.
J'ai regardé le lien que tu donnes. Je vais me dépatouiller avec ça ^^
Je pense que c'est la fonction que je cherchais.

Pour ta note sur le fait qu'un tableur n'est pas un outil de planning, je suis entièrement d'accord avec toi.
Mais chez nous, il est difficile, voir quasi impossible de faire changer les mentalités, et la règle la plus importante est ''dis moi de quoi tu as besoin, je te dirais comment t'en passer !''... du coup, on s'adapte. (après c'est pas trop compliqué, c'est juste indiquer les jours où les collègues doivent bosser ou pas, et si ils ont posé ou pas. En gros, un calendrier avec les présents et les absents.)
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Enregistrer une copie à la fermeture

Message par jeanmi2403 »

Bonsoir,
A mon sens, il vaut mieux faire une copie qu'une sauvegarde pour éviter de changer le nom du fichier. Le fichier original ne serait plus enregistré, et ça risquerait de faire le bazar !!
De plus il faudra gérer l'erreur dans le cas où le fichier destination est ouvert par quelqu'un :( Je peux proposer quelque chose dans ce sens demain soir.
Bonne soirée,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Calc] Enregistrer une copie à la fermeture

Message par hudssan »

@jeanmi2403 Merci pour ta réponse.
Je n'ai pas compris le sens de ta phrase : ''il vaut mieux faire une copie qu'une sauvegarde''
En fait, ce que je cherche c'est qu'au moment où j'enregistre mon fichier original, une macro en copie un autre identique dans un autre répertoire en même temps.
Ce n'est pas ça qu'il faut faire ?
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer une copie à la fermeture

Message par Dude »

jeanmi2403 a écrit : 07 nov. 2024 17:35 A mon sens, il vaut mieux faire une copie qu'une sauvegarde pour éviter de changer le nom du fichier. Le fichier original ne serait plus enregistré, et ça risquerait de faire le bazar !!
Aucune importance puisque la macro s'exécute sur la fermeture du document.

Code : Tout sélectionner

Sub SauveMoi
	GlobalScope.BasicLibraries.loadLibrary("Tools")
	'récupération des infos pour le nouveau nom
	oDoc = ThisComponent()
	sURL = oDoc.URL
	sDoc = GetFileNameWithoutExtension(sURL)
	sTampon = Year(now())& _
		Format(Month(now()),"00")& _
		Format(Day(now()),"00") & "-" & _
		Format(Hour(now()),"00") & _
		Format(Minute(now()),"00") & _ 
		Format(Second(now()),"00")
	sCopie = sDoc & "_" & sTampon & ".ods"
	
	document = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	rem ----------------------------------------------------------------------
	rem Enregistrement du nouveau fichier
	rem ----------------------------------------------------------------------
	dim args1(1) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "URL"
	args1(0).Value = sCopie
	args1(1).Name = "FilterName"
	args1(1).Value = "calc8"
	
	dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Calc] Enregistrer une copie à la fermeture

Message par hudssan »

Bon, tu m'as maché le travail. Merci !
Je regarde ça ce week-end pour comprendre fonctionne cette macro, et je reviens vers toi si je n'arrive pas à la mettre en place (il faut que je vois comment on vise le répertoire souhaité).

Merci beaucoup pour votre aide.
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Enregistrer une copie à la fermeture

Message par jeanmi2403 »

Bonsoir,
Comme promis, une solution (sans le Dispatcher) où tu peux définir le dossier de destination.
Le fichier de destination porte le même nom que l'original.
On enregistre le fichier s'il ne l'a pas encore été, pour être sûr que les dernières modifications sont bien dans le fichier destination.

Code : Tout sélectionner

Sub CopieFermeture
	Dim oDoc as Object
	Dim sNomDocSource as String
	Dim sNomDocDestination as String, sURLDestination as String

	
	GlobalScope.BasicLibraries.loadLibrary("Tools")
	sDossierDestination = "D:\Exemples\"
	oDoc = ThisComponent
	' Enregistrement du fichier original si ce n'est pas encore fait
	If oDoc.IsModified Then
		oDoc.Store
	EndIf	
	' Extraire le nom du document
	sNomDocSource =  FileNameoutofPath( oDoc.URL , "/")
	' Créer le nom complet  du fichier destination
	sURLDestination =  ConvertToURL(sDossierDestination & sNomDocSource)

	FileCopy (oDoc.URL, sURLDestination)
End Sub
Bonne soirée
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Calc] Enregistrer une copie à la fermeture

Message par hudssan »

Bonjour à tous,
tout d'abord, encore un grand merci pour votre aide.
J'ai opté pour la solution de @jeanmi2403 qui est plus compréhensible pour moi, et qui fait parfaitement le boulot.

Vous êtes au top et très réactifs. C'est super agréables.
Je passe en ''résolu''
Merci mille fois.
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25964
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Enregistrer une copie à la fermeture

Message par Dude »

hudssan a écrit : 09 nov. 2024 09:20 J'ai opté pour la solution de @jeanmi2403 qui est plus compréhensible pour moi, et qui fait parfaitement le boulot.
Cette macro sauvegarde le document même si l'utilisateur ferme sans vouloir garder ses modifications.

Et franchement, je me demande si tu as réellement testé car je constate que tu n'as même pas pris la peine de télécharger le classeur. :evil:
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Résolu][Calc] Enregistrer une copie à la fermeture

Message par hudssan »

Salut Dude,
Je ne voulais pas te froisser, et je n'ai jamais dit que ta macro ne fonctionnait pas !
Dans la mesure du possible, j'essaie de comprendre un minimum ce que j'utilise.
Je ne suis pas informaticien, et mes connaissances sont assez basiques.
Dans ta macro, je ne comprends absolument pas comment je choisis où la copie du fichier va s'enregistrer.
N'ayant pour le moment pas le temps de reprendre toute ta macro et de l'analyser ligne par ligne en effectuant les recherches sur internet pour apprendre chaque fonction, j'ai opté pour celle de jeanmi20403 qui fait le job.

Mais je te remercie grandement pour le temps et l'aide que tu m'as tout de même apporté.
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Enregistrer une copie à la fermeture

Message par jeanmi2403 »

Salut,
Dude a écrit : 09 nov. 2024 10:25 Cette macro sauvegarde le document même si l'utilisateur ferme sans vouloir garder ses modifications.
C'est juste un "bonus". Il y aura trois lignes (faciles à identifier) à retirer si cela ne lui convient pas.
De plus ta macro ne répond pas au "cahier des charges" :
hudssan a écrit : une copie se créée automatiquement dans un autre dossier
car elle copie le fichier sous un autre nom dans le même dossier.
Et je n'aime pas utiliser le dispatcher quand je peux faire autrement, c'est plus compréhensible(à mon sens) pour les personnes qu'on aide.

Je rajoute un truc, car il n'est pas possible d'écrire le fichier si la destination est ouverte par un autre.
Voici donc les dernières lignes à rajouter en fin de procédure (remplacent la dernière ligne)

Code : Tout sélectionner

	On Error Goto TraiteErreur
	FileCopy (oDoc.URL, sURLDestination)
	MsgBox ("Fichier copié", MB_ICONINFORMATION, "Copie")
	Exit Sub
	TraiteErreur:
	MsgBox  ("Fichier occupé ou chemin introuvable", MB_ICONSTOP,"Copie")
A plus,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX
hudssan
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 17 nov. 2022 16:40

Re: [Résolu][Calc] Enregistrer une copie à la fermeture

Message par hudssan »

Ok, merci.
Je remplace la dernière ligne de la macro pour le block entier ?
à la place de

Code : Tout sélectionner

FileCopy (oDoc.URL, sURLDestination)
?
LibreOffice 7.1.3.2 - Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1480
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Résolu][Calc] Enregistrer une copie à la fermeture

Message par jeanmi2403 »

hudssan a écrit : 09 nov. 2024 20:57 Je remplace la dernière ligne de la macro pour le block entier ?
à la place de

Code : Tout sélectionner

FileCopy (oDoc.URL, sURLDestination)
Exact.
C'est pour le cas où l'instruction filecopy échoue, le message est personnalisé et la macro ne plante pas.
Good night,
Jean-Michel
LibO 24.2 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 24.8 sur OpenSuse & Linux MX