[Résolu] [Calc] Sauvegarder dans un dossier particulier

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 !
Dje
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 19 janv. 2008 09:44

[Résolu] [Calc] Sauvegarder dans un dossier particulier

Message par Dje »

Bonjour à tous,

Mon interrogation s'articule en deux temps :

1) Créer un nouveau dossier dont le nom est constitué d’informations récupérées dans des cellules de mon classeur (ce dossier devant être créé dans le dossier parent où se trouve le fichier original) (je suis clair :?: ) ;

2) Enregistrer une nouvelle version du fichier original à partir d'informations récupérées dans des cellules de mon classeur à l’intérieur de ce nouveau répertoire ;

Pour illustrer mes propos voici le code utilisé sous VB pour cette opération :

Code : Tout sélectionner

REM Détermination des variables
Dim Chemin$, Reference$, Client$, Fichier$
'
Chemin = ActiveWorkbook.Path 'Récupération URL Dossier Parent
ChDir Chemin
'
Reference = Range("D6")'Récupération info cellule D6
Client = Range("DdePC!Z21")'Récupération info cellule Z21 de la feuille nommée "DdePC"
'
Fichier = Reference & " - " & Client & " etude" & ".xls"'Détermination du nom du futur fichier
'
If Dir(Reference & Client, 16) = "" Then MkDir Reference & " - " & Client 'Création du répértoire
'
ActiveWorkbook.SaveAs Reference & " - " & Client & Fichier'Enregistrement du nouveau fichier dans le nouveau répertoire
End If
Voici maintenant le code Basic que j'ai tenté de mettre en place. Ce dernier fonctionne mais enregistre simplement le fichier avec un nouveau nom, celui récupéré dans les cellules du classeur.

Code : Tout sélectionner

Sub Save()
'
dim document as object 
dim dispatcher as object
'
document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
'
Nom= thisComponent.Sheets.getByName("Iden_R").getCellRangeByName("D6").String & " - " & thisComponent.Sheets.getByName("DdePC").getCellRangeByName("Z21").String & " etude" & ".ods" 
'
dim args1(2) as new com.sun.star.beans.PropertyValue 
args1(0).Name = "URL" 
args1(0).Value = "file:///D:/" & Nom & ".ods" 
args1(1).Name = "FilterName" 
args1(1).Value = "calc8" 
args1(2).Name = "SelectionOnly" 
args1(2).Value = true 
'
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1()) 
'
end sub
Ainsi, ce code me permet d'enregistrer le fichier ouvert avec un nom différent sous "D:" (instruction

Code : Tout sélectionner

args1(0).Value
).

Mes questions seraient donc de savoir comment, d'une part créer un répertoire qui serait nommé par la variable "Nom" et, d’autre part, d'enregistrer, comme le fait la procédure ci-dessus, le nouveau fichier nommé "Nom" à l'intérieur du répertoire fraîchement créé.

Toutes les pistes et suggestions sont les bienvenues,


Merci de votre attention,
Dernière modification par Dje le 17 févr. 2008 12:53, modifié 1 fois.
OpenOffice 2.3.1 sous Windows XP
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

Pour ce qui est de la gestion des répertoires : Aide > onglet Contenu > Macros et programmation > Aide mémoire des commandes > Run-time Functions > Fonctions d'entrée/sortie de fichiers
Dernière modification par Pierre-Yves Samyn le 17 févr. 2008 13:11, modifié 1 fois.
Nicolas
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 30 nov. 2006 13:28
Localisation : Chambéry (73)

Message par Nicolas »

Hello,
ci joint un ex. à adapter à tes besoins.

Tu as une 1ère macro, qui se charge de récupérer le dossier en cours de ton doc, puis une autre Save, qui récupère les infos dans chaque cellule, et enregistre ton doc.
ce qui donne :
http://user.services.openoffice.org/fr/ ... 013004.ods
@+
Nicolas.
OoO 3.0.1 XP home SP3
Dje
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 19 janv. 2008 09:44

Message par Dje »

Merci Nicolas, c'est parfait, exactement le code que je rechechais, je vais pouvoir, en plus de l'utiliser, l'étudier pour tenter de le comprendre et avancer.

Encore mille merci Nicolas,


PS : Excuse-moi Pierre-Yves mais si je fais appel au Forum c'est que j'ai quand même déjà regardé l'aide OpenOffice et également fait le tour des forums pour essayer de trouver une solution ou une piste.

C'est la même chose que pour mon post précédent (http://user.services.openoffice.org/fr/ ... c8767.html) où tu as laissé une réponse, la question était effectivement de savoir si la procèdure était correcte (réponse que tu m'as apporté en me confirmant une syntaxe exacte, et je vous en remercie) mais également au final de savoir pourquoi le bout de code laissé sur le forum ne marchait pas (pour ce cas précis une erreur de casse sur le nom du controle).

D'ailleurs depuis ce matin j'avais un peu avancé puisque par le biais de ThisComponent.URL ou ThisComponent.Location j'arrivai à créer dans le répertoire courant un répertoire avec les informations issues des feuilles du classeur mais avec au début le nom du fichier initial.

Etant débutant sous OOo et pas un spécialiste du codage (même si sous VB j'ai réussit à créer un utilitaire complet selon mes besoins) vous comprendrez que l'on puisse buter sur des petits riens. merci de votre comprehension.
OpenOffice 2.3.1 sous Windows XP
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Dje a écrit :si je fais appel au Forum c'est que j'ai quand même déjà regardé l'aide OpenOffice et également fait le tour des forums pour essayer de trouver une solution ou une piste.
Ce n'est semble-t-il (hélas...) pas le cas de tout le monde :).

Tu ne précisais pas dans ta question que tu connaissais la fonction MkDir, ni savais où trouver des exemples.

Il me semblait utile de fournir cette information ainsi que le moyen de trouver ultérieurement la réponse à d'autres questions.
Dje a écrit :C'est la même chose que pour mon post précédent
...au final de savoir pourquoi le bout de code laissé sur le forum ne marchait pas (pour ce cas précis une erreur de casse sur le nom du controle)
...
puisse buter sur des petits riens. merci de votre comprehension.
C'est un des cas où fournir simplement un extrait de son code ne suffit pas : le contrôle sur les noms "utilisateur" est impossible.

Merci également de ta compréhension :)
Dje
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 19 janv. 2008 09:44

Merci pour vos réponses

Message par Dje »

Bonsoir,

Je suis d'accord avec toi Pierre-Yves et honnêtement ce qui m'intéresse sur le forum c'est de pouvoir trouver des solutions et éventuellement des contacts fiables mais et pas de polémiquer.

Il n'empêche que tu avoueras, au regard de la question posée, que Nicolas par son exemple sur mesure vient de m'enlever une grosse épine du pied.

Je pense que permettre à des gens comme moi (novice en Basic, avec de bonnes notions de codes html, php ou Visual Basic, mais sans être informaticien) de trouver des bouts de code fonctionnels qui pourront être apprivoisés plus tard, mais opérationnels tout de suite est très important et me confortent dans l'utilisatin de OpenOffice.

Pour résumer, des codes opérationnels et adaptables sont très important mais je te remercie pour tes réponses et espère pouvoir continuer à avancer grasse au forum comme aujourd’hui.

Cordialement,

Djé
OpenOffice 2.3.1 sous Windows XP