[Résolu] Insertion automatique nom de fichier

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 !
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

[Résolu] Insertion automatique nom de fichier

Message par krusty »

Bonjour,

Je recherche un moyen d'afficher le nom d'un fichier automatiquement dans la case nom de la boite de dialogue "enregistrer sous", elle même ouverte grçace à une macro.

Le nom du fichier serait composé d'une partie fixe et d'une année récupérée dans une variable appellée année.

Voici le script que j'ai commencé à faire (il marche jusqu'à l'ouverture de la boite de dialogue mais n'affiche pas le nom de fichier ) :

Code : Tout sélectionner

Sub nvelle_annee

dim Annee as string
dim document as Object 
dim dispatcher as Object 
dim args1(0) as new com.sun.star.beans.PropertyValue
 
	document   = ThisComponent.CurrentController.Frame 
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

	dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

	Annee = InputBox("Entrez la nouvelle année de récolte")
          
  
   	args1(0).Name = "FilterName" 
  	args1(0).Value = "GestionParcelle" + Annee + "OO2.ods" 
      
   	dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1()) 

End Sub
Je remercie d'avance toute personne qui vont essayer de trouver un remède à mon problème
Dernière modification par krusty le 20 juin 2006 18:01, modifié 3 fois.
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Mon conseil :

:arrow: Edite ton message et place des balises [ Code ]

:arrow: Fais une recherche sur "saveas" car le sujet est déjà passé

:arrow: N'oublie pas la balise [ Résolu ] dans le titre



8)
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

Merci pour les indications mais je n'ai pas trouvé de réelle solution dans les sujets déjà traités, d'où la nécessité pour moi de poser un nouveau sujet.

Par conséquent, le problème reste encore à résoudre, mais merci quand même.
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

krusty a écrit :Merci pour les indications mais je n'ai pas trouvé de réelle solution dans les sujets déjà traités
As-tu au moins fait une recherche et lu le sujet qui parle de "saveas" ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

oui, mais cela ne fonctionne pas pour ce que j'ai besoin de faire, cela n'indique pas le nom du fichier automatiquement.

De plus d'après l'exemple, il faut saisir l'url du fichier et moi je ne peux le faire puisque c'est un fichier qui sera sur plusieurs pc différents et dont le répertoire où est stocké le fichier n'est pas situé au même endroit.

Par conséquent je dois pouvoir juste avoir à sélectionner le répertoire et cliquer sur enregistrer lorsque la boite s'ouvre.

Le problème est donc qu'elle s'ouvre mais il n'y a ni le nom fixe ni la partie stockée dans la variable qui s'affichent.

En somme, mon problème n'est pas résolu et les sujets existants ne répondent pas à ma question...
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Message par Dude »

Dans ce cas, tu ne dois pas utiliser la boîte "Enregistrer sous" mais plutôt le sélectionneur de répertoire.

Relis le fil et utilise FilePicker :
http://forum-openoffice.org/forum/viewtopic.php?t=299
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

http://user.services.openoffice.org/fr/ ... ight=#8142

je t'avais proposé cette solution dans ce sujet...

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

Merci cris59,

J'ai étudié ta solution, mais il rest etoujours un problème : il faut indiquer un répertoire où stocker le fichier.

Mon problème est que le fichier comprenant la macro ne restera pas sur un seul pc mais sera sur plusieurs pc, par conséquent l'adresse URL qui sera spécifiée n'existera probablement pas sur les autres pc, c'est pour cela que je veux que la boite de dialogue enregistrer sous s'ouvre avec le nom de fichier préinscrit, et que l'utilisateur final du fichier puisse indiquer lui même le répertoire dans lequel il veut enregistrer le fichier.

Il me faut donc une solution où l'on ne prédéfinit pas l'URL mais juste un nom de fichier.

Merci quand même d'y avoir pensé...
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Dans la solution que Dude ou moi nous te proposons, c'est l'utilisateur qui choisit le répertoire....

on récupère ce choix et on crée l'URL avec le nom qui convient ...

C'est ce que j'utilise pour que mes utilisateurs enregistrent leur copie de sauvegarde (je ne sais pas par avance ce qu'ils vont choisir, en général un autre DD ou un autre poste)

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2

http://www.cpserv.net/
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

Alors merci, excuse moi je n'avais pas compris comment cela fonctionnait

Mon problème se transforme donc en comment on utilise le FolderPicker pour que l'utilisateur entre son url et voit le nom du fichier apparaitre?
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

J'ai essayé le FolderPicker mais le problème est que l'affichage de la sélection du chemin est très différente de la boite enregistrer sous et cela risque de troubler les utilisateurs finaux (déjà perdus dès que l'on change la place d'une icône sur le bureau) car ceux-ci sont habitués au résultat de la macro existante en version VBA sous excel.

Le fait est que si je ne remets pas la même interface graphique, il va y avoir une forte augmentation de l'encombrement du service informatique de l'entreprise seulement pour dire et expliquer (pas toujours facile quand le récepteur n'est pas très réceptif) que le résultat est le même mais qu'il faut changer les petites habitudes (il y a environ 50 postes touchés), d'où la nécessité de passer par enregistrer sous.

Voilà le code vba si cela peut aider quelqu'un à trouver une solution :

Code : Tout sélectionner

Sub ChangerDeCampagne()
	ActiveWorkbook.Save
 	On Error GoTo ChangerDeCampagne_erreur
     	année = InputBox("Entrez la nouvelle année de récolte") 'la variable est année
     
     	If année = "" Then Exit Sub ' vérifie si l'entrée est vide ou si on annule
     		If année < 1900 Or année > 2030 Then
    		MsgBox (année & " n'est pas une année valide")
    		ChangerDeCampagne
    		Else
     		monfichier = Application.GetSaveAsFilename(initialfilename:="GestionParcelles" + année, fileFilter:="Classeur Excel (*.xls), *.xls")         	If monfichier <> False Then
         		ActiveWorkbook.SaveAs Filename:=monfichier
         		Range("F4:F53").Copy
         		Range("E4").PasteSpecial Paste:=xlValues
         		Range("F4:F53").Select
         		Selection.ClearContents
        		Range("E2") = année
        		Sheets("Intrants-Résultats").Select
        		Range("N23:N30").Copy
        		Range("K23").PasteSpecial Paste:=xlValues
         		Range("M51:M65").Copy
         		Range("J51").PasteSpecial Paste:=xlValues
         		Range("M70:M75").Copy
         		Range("J70").PasteSpecial Paste:=xlValues
         		Range("I80:I109").Copy
         		Range("F80").PasteSpecial Paste:=xlValues
         		Range("I114:I143").Copy
         		Range("F114").PasteSpecial Paste:=xlValues
         		Range("I148:I162").Copy
        		Range("F148").PasteSpecial Paste:=xlValues
        		Range("I167:I176").Copy
        		Range("F167").PasteSpecial Paste:=xlValues
         		Range("I180:I184").Copy
      		Range("F180").PasteSpecial Paste:=xlValues
        		Range("I189:I198").Copy
        		Range("F189").PasteSpecial Paste:=xlValues
         Range("L23:N30,K51:M65,K70:M75,G80:I109,G114:I143,G148:I162,G167:I176,G180:I184,G189:I198").ClearContents
        		Range("C4").Select
         		For Each parcelle In Range("Nom_actuel")
         		Sheets(parcelle.Text).Select
	         Range("N5,B7:N15,B20:E20,G20:L20,B23:E25,G23:L25,B29:E31,G29:L31,B35:E37,G35:L37,B44:I46,N43,A52:I61").ClearContents
       	Range("B65:E68,G65:G68,I65:L68,E72:L74,B77:E83,B88:E90,G88:G90,B94:E107,G94:L107,B110:E117,G110:L117,
B120:E123,G120:L123,B126:E130,G126:L130,B133:E138,G133:L138,D141,B144,D144:H144").ClearContents
		Range("B7").Select
         		Next
         		Sheets("Intrants-Résultats").Select
         		MajConsoParcelles
         		Sheets("Parcelles").Select
         		Range("récolte").Select
        		ActiveWorkbook.Save
    		End If
	End If
	ChangerDeCampagne_erreur:

End Sub
Voilà, en fait ce que j'ai à traduire sous OO c'est cette partie du code :
monfichier = Application.GetSaveAsFilename(initialfilename:="GestionParcelles" + année, fileFilter:="Classeur Excel (*.xls), *.xls")
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Choix d'un répertoire et affichage du nom de fichier

Message par Pierre-Yves Samyn »

Bonjour

Il me semble que les réponses données pas Dude et Cris59 répondent en fait complètement.

Si j'ai bien compris
Le nom du fichier serait composé d'une partie fixe et d'une année récupérée dans une variable appellée année.
et
il n'y a ni le nom fixe ni la partie stockée dans la variable qui s'affichent.
Le FolderPicker dispose des propriétés Title et Description qui sont modifiables. Il te suffit des les utiliser comme dans l'exemple suivant pour que le nom "calculé" du fichier s'affiche (soit dans le titre cf. ci-dessous, soit dans la description) :

Code : Tout sélectionner

Sub choisir_Et_Ouvrir_Repertoire
Dim Fichier As Object
Dim Valeur As Integer
Dim NomFichier as string
NomFichier = "Exemple" & year(now)

Fichier = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
Fichier.SetDisplayDirectory("C:\")
Fichier.Title="Enregistrement du fichier " & NomFichier 
Fichier.description="Choisir le répertoire dans lequel sera enregistré ce fichier"
Valeur = Fichier.Execute()
If Valeur = 1 Then
	msgbox  Fichier.getDirectory()
End If
End Sub
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

Voilà j'ai trouvé une solution avec la boîte de dialogue enregistrer sous (livre Programmation OpenOffice .org2 page 555 - 556)

Le problème est qu'il manque à la fin l'instruction qui permet d'enregistrer le fichier, voilà le code :

Code : Tout sélectionner

sub Enregfich()
Dim FP as object, lesfichiers() as string
Dim FPtype(0) as Integer
dim Annee as string
dim document as Object

document   =  ThisComponent.CurrentController.Frame

Annee = InputBox("Entrez la nouvelle année de récolte")

FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")

FPtype(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE

With FP
	.initialize(FPtype())
	.DisplayDirectory = ConvertToURL("C:\")
	.DefaultName = "GestionParcelles" & Annee & "OO2.ods"
	.appendFilter("Classeur OpenDocument", ".ods")
	.appendFilter("Modèle Classeur OpenDocument", ".ots")
	.appendFilter("Classeur Excel", ".xls")
	.appendFilter("Modèle Classeur Excel", ".xlt")
	.CurrentFilter = "Classeur OpenDocument"

	if .Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
		lesfichiers() = .Files
		document.storeAsURL(".DisplayDirectory", array()) 'cette ligne ne fonctionne pas
	end if
	
	.dispose
	
	end with
	
end sub		 
Si quelqu'un peut me donner la ligne qui manque, je le remercie d'avance...
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

AsUrl

Message par Pierre-Yves Samyn »

Bonjour
Ci-dessous les corrections :

StoreAsUrl est une méthode d'un objet "document" . Donc :

Code : Tout sélectionner

document   =  ThisComponent
Le résultat de la sélection est donné par .Files sous la forme d'un tableau.
D'ailleurs tu affectes le résultat à une variable tableau :

Code : Tout sélectionner

      lesfichiers() = .Files
Le premier argument de StoreAsURl est donc l'url du fichier à enregistrer qui est dans le premier élément du tableau. Donc :

Code : Tout sélectionner

      document.storeAsURL(lesfichiers(0), array() )
Ce qui nous donne au total :

Code : Tout sélectionner

sub Enregfich()
Dim FP as object, lesfichiers() as string
Dim FPtype(0) as Integer
dim Annee as string
dim document as Object
document   =  ThisComponent

Annee = InputBox("Entrez la nouvelle année de récolte")

FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")

FPtype(0) = com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE

With FP
   .initialize(FPtype())
   .DisplayDirectory = ConvertToURL("C:\")
   .DefaultName = "GestionParcelles" & Annee & "OO2.ods"
   .appendFilter("Classeur OpenDocument", ".ods")
   .appendFilter("Modèle Classeur OpenDocument", ".ots")
   .appendFilter("Classeur Excel", ".xls")
   .appendFilter("Modèle Classeur Excel", ".xlt")
   .CurrentFilter = "Classeur OpenDocument"

   if .Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
      lesfichiers() = .Files
      document.storeAsURL(lesfichiers(0), array() ) 'cette ligne devrait fonctionner
   end if
   
   .dispose
   
   end with
   
end sub      
Cela dit je suis têtu :lol: je pense que la solution du FolderPicker en affichant en titre ou description le nom du fichier est meilleure car avec le "enregistrer sous" l'utilisateur peut non seulement sélectionner le répertoire mais aussi modifier le nom du fichier mis par défaut. Donc, à voir si c'est bien ce que tu veux ?
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 08:20

Message par krusty »

Merci pour la solution finale au problème.

En fait comme je l'ai dit plus tôt, le problème est que dans l'entreprise dans laquelle je travaille, les utilisateurs finaux sont perdus dès l'instant où le moindre changement est effectué donc si je change la présentation du résultat de la macro excel, ça va devenir la galère le temps qu'ils utilisent tous le fichier au moins une fois (47 pc). de plus cette solution permet de choisir le répertoire d'enregistrement ainsi que le nom du fichier s'il le veulent puisque le nom qui s'affiche est un nom par défaut, et donc par définition il est modifiable.

En clair, dans mon cas précis c'était la seule solution pratique utilisable sans avoir deréactions des salariés.

Encore une fois merci pour m'avoir aidé.
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10