[Résolu][Calc] multi folderpicker ou passer des arguments à une fonction

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 !
cedric86fr
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 22 avr. 2022 13:28

[Résolu][Calc] multi folderpicker ou passer des arguments à une fonction

Message par cedric86fr »

Salut,

Suite au précédent post, je sais désormais utiliser la fonction folder picker et récupérer le résultat dans la procédure.

Cependant, dans mon programme, j'ai 2 répertoires que je souhaite personnalisé.

Après de nombreux tests, j'arrive à obtenir le résultat voulu avec ce code, mais ca me semble un peu lourd et pas nécessairement utile de faire 2 fonctions qui renvoient un folderpicker (Cf PJ)

Code : Tout sélectionner

REM  *****  BASIC  *****

Global RepPersoEdition as string
Global RepPersoSauvegarde as string

Sub TestRep

Dim PathEdition as String
Dim PathSauvegarde as String

If RepPersoEdition <> "" Then
PathEdition = RepPersoEdition
Else PathEdition = ConvertToURL("C:/Users/" & environ("USERNAME") & "/Downloads")
End if
Print "Le chemin du repertoire EDITION est " & PathEdition

If RepPersoSauvegarde <> "" Then
PathSauvegarde = RepPersoSauvegarde
Else PathSauvegarde = "c:\Temp"
End if
Print "Le chemin du repertoire SAUVEGARDE est " & PathSauvegarde

End sub

Function ChoixRepEdition
	Dim FP as object
	ChoixRepEdition = ""
	FP = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
	FP.DisplayDirectory = ConvertToURL("C:/Users/" & environ("USERNAME") & "/Downloads")
	FP.Description = "blabla"
	FP.Title = "Choisissez le répertoire"
	If FP.execute = _
		com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
	ChoixRepEdition = FP.Directory
End If
	RepPersoEdition = ChoixRepEdition
End Function

Function ChoixRepSauvegarde
	Dim FP as object
	ChoixRepSauvegarde = ""
	FP = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
	FP.DisplayDirectory = ConvertToURL("C:/Temp")
	FP.Description = "blabla"
	FP.Title = "Choisissez le répertoire"
	If FP.execute = _
		com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
	ChoixRepSauvegarde = FP.Directory
End If
	RepPersoSauvegarde = ChoixRepSauvegarde
End Function
En première intention, je souhaitais passer des arguments à la fonction ChoixRep() mais je n'ai pas réussi... J'ai regardé principalement :
https://wiki.openoffice.org/wiki/FR/Doc ... _Functions
et le chapitre 3.6.1 Arguments de Andrew Pitonyak

Est ce que cela est possible ?? si oui je suis preneur de pistes ou d'exemples.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par cedric86fr le 31 mai 2023 20:05, modifié 3 fois.
Libreoffice 7.2.7.2.M7 (x64) (obligation de version) sur Windows 10
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] multi folderpicker ou passer des arguments à une fonction

Message par Dude »

Salut,
cedric86fr a écrit : 23 mai 2023 15:37 je sais désormais utiliser la fonction folder picker et récupérer le résultat
Sauf que tu recommences avec la même erreur de logique où tu affectes à ta fonction, une variable du même nom. :fou:

cedric86fr a écrit : 23 mai 2023 15:37 passer des arguments à la fonction ChoixRep() mais je n'ai pas réussi
Tu déclares deux variables en portée globale, elles sont donc disponibles partout.
Maintenant passer une variable à une fonction se fait telle que :
capture.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
cedric86fr
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 22 avr. 2022 13:28

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par cedric86fr »

Dude a écrit : 24 mai 2023 06:19 Sauf que tu recommences avec la même erreur de logique où tu affectes à ta fonction, une variable du même nom. :fou:
Effectivement j'ai du loupé un truc parce que dans ma compréhension actuelle j'affecte :
la variable RepPersoEdition à la fonction ChoixRepEdition
et la variable RepPersoSauvegarde à la fonction ChoixRepSauvegarde
Qu'est ce qui est pas bon du coup ??

Merci pour ton exemple j'ai vais regarder ça.
Libreoffice 7.2.7.2.M7 (x64) (obligation de version) sur Windows 10
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] multi folderpicker ou passer des arguments à une fonction

Message par Dude »

cedric86fr a écrit : 24 mai 2023 08:39 Qu'est ce qui est pas bon du coup ??
On te l'a (déjà) dit plusieurs fois :
Dude a écrit : 24 mai 2023 06:19 tu affectes à ta fonction, une variable du même nom
capture.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1467
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par jeanmi2403 »

Bonjour,
J'ai modifié ton code, pour rendre la fonction indépendante.
Elle reçoit deux paramètres, le répertoire proposé et le titre de la boîte FolderPicker.
Elle peut donc fonctionner sur les deux dossiers que tu souhaites définir.

Code : Tout sélectionner

Dim RepPersoEdition as string
Dim RepPersoSauvegarde as string

Sub TestRep
Dim PathPropose as String

If RepPersoEdition = "" Then
	PathPropose = ConvertToURL("C:\Users\" & environ("USERNAME") & "\Downloads")
	RepPersoEdition = ChoixRep(PathPropose, "d'édition")
End if
Print "Le chemin du repertoire EDITION est " & convertFromURL(RepPersoEdition)

If RepPersoSauvegarde = "" Then
	PathPropose = ConvertToURL( "c:\Temp")
	RepPersoSauvegarde = ChoixRep(PathPropose,  "de sauvegarde")
End if
Print "Le chemin du repertoire SAUVEGARDE est " & convertFromURL( RepPersoSauvegarde)
End sub

Function ChoixRep(sRepertoire as String, sType as String) as String
	Dim FP as object

	FP = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
	FP.DisplayDirectory = sRepertoire ' répertoire proposé
	FP.Description = "blabla"
	FP.Title = "Choisissez le répertoire " & sType
	If FP.execute = 	com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
	ChoixRep = FP.Directory
End If
End Function
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
cedric86fr
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 22 avr. 2022 13:28

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par cedric86fr »

Merci Jeanmi, je passe en résolu :super:
Libreoffice 7.2.7.2.M7 (x64) (obligation de version) sur Windows 10
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4117
Inscription : 06 oct. 2008 08:03

Re: [Calc][Calc] multi folderpicker ou passer des arguments à une fonction

Message par Oukcha »

Plutôt que de dupliquer la balise [Calc], merci de mettre une balise [Résolu] en tête de titre.

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
cedric86fr
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 22 avr. 2022 13:28

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par cedric86fr »

Oukcha, finalement à l'usage il me reste quelques questions ;)

Jeanmi, j'ai repris ton code et ajouté un bouton pour paramétrer les répertoires et un second pour afficher le chemin des répertoires.

Je suis sous windows et FP.DisplayDirectory ne fonctionne pas (j'ai vu qu'il fallait prendre OfficeFolderPicker et SetDisplayDirectory mais bon c'est pas gênant de partir du dernier répertoire ouvert, j'ai donc commenté cette ligne ainsi que FP.description qui ne fonctionne pas non plus).

Il me reste trois problèmes que je n'arrive pas à solutionner :
- Si je clique en premier sur afficher les répertoires, ca devrait indiquer les répertoires par défaut contenu dans la variable PathPropose, mais le msgbox est vide.
- Ensuite quand je clique sur définir les répertoires et afficher les répertoires, cela fonctionne bien tant que le fichier est ouvert. Si j'enregistre le fichier, le ferme puis l'ouvre à nouveau les répertoires définis préalablement sont perdus.
- Question subsidiaire, je souhaiterais faire 2 boutons pour définir les répertoires. Comment passer les paramètres dans les propriétés du bouton "onglet événements" puis "exécuter l'action" ? je suis obligé de faire 2 procédures ?

NB : pour une raison que j'ignore je désactive le mode conception et enregistre le fichier, mais les boutons ne sont pas cliquables à l'ouverture...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libreoffice 7.2.7.2.M7 (x64) (obligation de version) sur Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1467
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par jeanmi2403 »

cedric86fr a écrit : 27 mai 2023 16:44 Je suis sous windows et FP.DisplayDirectory ne fonctionne pas (j'ai vu qu'il fallait prendre OfficeFolderPicker et SetDisplayDirectory
Effectivement, je viens de vérifier. Je n'avais pas vu, car j'utilise la boîte de dialogue LibreOffice (Outils,>Options>Général) ça me permet de définir tous mes répertoires favoris et de les mémoriser !
Effectivement , il vaut mieux utiliser la méthode plutôt que l'affectation directe du paramètre :

Code : Tout sélectionner

FP.SetDisplayDirectory(sRepertoire)
qui fonctionne avec les deux boîtes.
mais bon c'est pas gênant de partir du dernier répertoire ouvert,
Je ne comprends pas de quoi il est question.
- Si je clique en premier sur afficher les répertoires, ca devrait indiquer les répertoires par défaut contenu dans la variable PathPropose, mais le msgbox est vide.
Ben non, puisque cette variable n'est pas définie dans la procédure AfficherRep. Elle est même locale à la procédure ParametreRep
Ensuite quand je clique sur définir les répertoires et afficher les répertoires, cela fonctionne bien tant que le fichier est ouvert. Si j'enregistre le fichier, le ferme puis l'ouvre à nouveau les répertoires définis préalablement sont perdus.
Bien évidemment ! Les variables disparaissent à la fermeture de LibO.
Si tu veux les conserver, il faudra les écrire dans un fichier de paramètres. Mais c'est un autre sujet.
Question subsidiaire, je souhaiterais faire 2 boutons pour définir les répertoires. Comment passer les paramètres dans les propriétés du bouton "onglet événements" puis "exécuter l'action" ? je suis obligé de faire 2 procédures ?
Il suffit de tester quel est le bouton qui a appelé la macro.

Code : Tout sélectionner

Sub Bouton(oEvenement)
Dim sNomBouton as String
sNomBouton = oEvenement.Source.Model.Name
Select case sNomBouton
	Case "Bouton1" :
	' code pour le bouton 1
	Case "Bouton2"
	' Code pour le bouton 2
End Select
End Sub
Pour une raison que j'ignore je désactive le mode conception et enregistre le fichier, mais les boutons ne sont pas cliquables à l'ouverture...
Pas normal. Il doit y avoir un loup dans le fichier. Tout un tas d'actions accumulées ont dû corrompre le fichier.
Il vaut mieux repartir de zéro sur un fichier tout neuf.
 Ajout : J'ai oublié la question la plus importante : quel est le but final du projet ? Si c'est pour l'apprentissage, c'est bien. Sinon, il faut savoir quel est le but final pour ne pas mettre en place des solutions qui finiraient par être bancales à force de modifications. 
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
cedric86fr
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 22 avr. 2022 13:28

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par cedric86fr »

jeanmi2403 a écrit : 27 mai 2023 22:50 Je ne comprends pas de quoi il est question.
Set display directory permet de définir le répertoire par défaut affiché dans la fenêtre du folderpicker (positionnement initial dans l'arborescence), mais pas de définir un répertoire par défaut utilisé par la procédure de mon programme en l'absence de personnalisation du chemin par folderpicker!
Si tu veux les conserver, il faudra les écrire dans un fichier de paramètres. Mais c'est un autre sujet.
Je vais essayer de définir le chemin par défaut dans une cellule du fichier et écraser sa valeur par celle du folderpicker le cas échéant. Ce sera peut être plus simple.
Il suffit de tester quel est le bouton qui a appelé la macro.

Code : Tout sélectionner

Sub Bouton(oEvenement)
Dim sNomBouton as String
sNomBouton = oEvenement.Source.Model.Name
Select case sNomBouton
	Case "Bouton1" :
	' code pour le bouton 1
	Case "Bouton2"
	' Code pour le bouton 2
End Select
End Sub
Merci, je vais regarder ça.
 Ajout : J'ai oublié la question la plus importante : quel est le but final du projet ? Si c'est pour l'apprentissage, c'est bien. Sinon, il faut savoir quel est le but final pour ne pas mettre en place des solutions qui finiraient par être bancales à force de modifications. 
C'est effectivement pour apprendre en général mais j'en ai besoin pour un vrai projet.
J'ai fait un programme pour le boulot que je partage avec des collègues qui souhaitent pouvoir définir le répertoire "édition" et "sauvegarde".
Donc le but est d'utiliser les répertoires par défaut que j'ai définis dans la procédure ou de les remplacer par folderpicker si l'utilisateur veut personnaliser le programme.

Encore merci pour tes retours.
a+
Libreoffice 7.2.7.2.M7 (x64) (obligation de version) sur Windows 10
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] multi folderpicker ou passer des arguments à une fonction

Message par Dude »

mais pas de définir un répertoire par défaut utilisé par la procédure
Il faut te servir de l'instruction Optional

Il existe tout un tas de solutions pour stocker une variable dans un document.
On en a parlé ici : viewtopic.php?t=62203
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1467
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par jeanmi2403 »

Salut,
..J'ai fait un programme pour le boulot que je partage avec des collègues qui souhaitent pouvoir définir le répertoire "édition" et "sauvegarde".
Qui ne seront définis que pendant la durée du programme, donc la présence du document ouvert.
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
cedric86fr
Membre OOrganisé
Membre OOrganisé
Messages : 85
Inscription : 22 avr. 2022 13:28

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par cedric86fr »

J'arrive finalement à faire ce que je souhaite avec le fichier en PJ, c'est à dire utiliser un répertoire par défaut ou un répertoire personnalisé.

Je contourne le problème de la perte des paramètres personnalisés en enregistrant les urls dans une case du tableur.

Code : Tout sélectionner

Sub Test
Dim document as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

PathEditionDefaut = "C:/Users/" & environ("USERNAME") & "/Downloads"
PathEdition = thiscomponent.Sheets.getByName("Feuille1").GetCellRangeByName("A1").string
If PathEdition = "" Then
PathEdition = PathEditionDefaut
URLedition = ConvertToURL(Pathedition)
msgbox "Le chemin du repertoire EDITION est " & URLedition
Else if PathEdition <> "" Then
URLedition = ConvertToURL(Pathedition)
msgbox "Le chemin du repertoire EDITION est " & URLedition
End If
End If

PathSauvegardeDefaut = "C:/Users/" & environ("USERNAME") & "/Desktop"
PathSauvegarde = thiscomponent.Sheets.getByName("Feuille1").GetCellRangeByName("A2").string
If PathSauvegarde = "" Then
PathSauvegarde = PathSauvegardeDefaut
URLsauvegarde = ConvertToURL(PathSauvegarde)
msgbox "Le chemin du repertoire EDITION est " & URLsauvegarde
Else If PathSauvegarde <> "" Then
URLsauvegarde = ConvertToURL(PathSauvegarde)
msgbox "Le chemin du repertoire EDITION est " & URLsauvegarde
End If
End if


'dim args45(1) as new com.sun.star.beans.PropertyValue
'args45(0).Name = "URL"
'args45(0).Value = URLsauvegarde & "/" & "test13" & ".ods"
'args45(1).Name = "FilterName"
'args45(1).Value = "calc8"

'dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args45()

End sub
Encore merci à tous les deux pour vos conseils, j'ai pas nécessairement tout compris pour le moment mais je vais continuer d'essayer de comprendre !

Je passe en résolu.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libreoffice 7.2.7.2.M7 (x64) (obligation de version) sur Windows 10
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1467
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] multi folderpicker ou passer des arguments à une fonction

Message par jeanmi2403 »

Bonsoir,
cedric86fr a écrit : 31 mai 2023 20:04 Je contourne le problème de la perte des paramètres personnalisés en enregistrant les urls dans une case du tableur.
C'est aussi comme ça que j'ai procédé quand j'en ai eu besoin. Je regarderai plus précisément ta solution la semaine prochaine, car je crois qu' il y a des choses à optimiser.
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
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] multi folderpicker ou passer des arguments à une fonction

Message par Dude »

cedric86fr a écrit : 31 mai 2023 20:04 Je contourne le problème de la perte des paramètres personnalisés en enregistrant les urls dans une case du tableur.
En appliquant ce que je t'ai proposé (stockage dans les propriétés du document) :
test repertoires - Copie.ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.