[Résolu][Calc] Formulaire non connecté et valeur à récupérer

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 !
carabao
Membre OOrganisé
Membre OOrganisé
Messages : 59
Inscription : 05 juil. 2008 14:35

[Résolu][Calc] Formulaire non connecté et valeur à récupérer

Message par carabao »

Bonjour à tous


Je cherche le moyen d'utiliser les valeurs de deux champs de formulaire dans une macro sans passer par une base de donnée. les données des deux champs ne doivent pas être sauvegardées.

J'ai un champ texte "pseudo" et une liste déroulante "NomSerie" (avec 6 noms) sur ma feuille

Le but est d'utiliser ces informations pour nommer un fichier csv par exemple SERIE-NomSerie-pseudo.csv

On parle beaucoup dans la documentation de formulaire attaché à une base de donnée mais dans mon cas, j'en ai pas spécialement besoin. Mais il vrai que je bute déjà sur l'ébauche de formulaire et je dois passer à côté de quelque chose, comment définit-on le nom pour la zone pour l'utiliser dans une macro .Par exemple pour la zone texte, "pseudo" .

En mode ébauche, j'ai bien "contrôle" nom, par défaut zone de texte 1. Je suppose que ce n'est pas le nom à utiliser dans une macro. Champ d'étiquette n'est pas sélectionnable.

Pouvez-vous m'aiguiller ?

Un très grand merci.



Merci
LibreOffice 7.5.3 ~ version community (imposé) ~ sous Fedora (kde-plasma) 38 x86_64 (cairo-wayland)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Formulaire sans base de donnée et valeurs à récup

Message par Dude »

Salut,

Image

Il faut utiliser :
  1. le navigateur de formulaire pour voir comment est son architecture
  2. l'outil XRay pour analyser le contenu des objets que tu récupères
carabao
Membre OOrganisé
Membre OOrganisé
Messages : 59
Inscription : 05 juil. 2008 14:35

Re: [Calc] Formulaire sans base de donnée et valeurs à récup

Message par carabao »

Bonjour,

Merci pour ton aide

Avec le navigateur de formulaire, j'obtiens

Formulaires -->
SyncroPert
avec un champ Liste "ListeSerie"
avec un champ texte "pseudo"

J'ai installé la librairie XRay, enfin je pense en suivant le tuto ici: http://www.openoffice.org/fr/Documentat ... l60_fr.odt
Elle apparaît bien dans le gestionnaire de macro

mais j'obtiens une erreur d’exécution lors du lancement de la macro

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

Sub Main
dim oDialog1 As object
dim PseudoVal As String
Xray PseudoVal oDialog1.getControl("pseudo").getText
print PseudoVal

End Sub

Me manque-t-il quelque chose ?

Merci



EDIT


Je ne sais pas si c'est la bonne solution, mais cela fonctionne.

j'ai simplement mis des cellules de références sur mes champs et je récupère les valeurs de ceux-ci dans les cellules de références.


Code : Tout sélectionner

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

Sub NomFichierPertModule
dim mondoc As Object
dim SerieDriver As string
dim pseudo As string
dim DateFichier As string
dim HeureFichier As string

mondoc = thisComponent.Sheets.getByName("Données brutes")
SerieDriver = mondoc.getCellRangeByName("AT4").string
pseudo = mondoc.getCellRangeByName("AU4").string

DateFichier = mondoc.getCellRangeByName("AU7").string
HeureFichier = mondoc.getCellRangeByName("AU9").string


NomFichierPert = "PERT ~ "+SerieDriver+" ~ "+pseudo+ " "+DateFichier+" - "+HeureFichier


End Sub



mon autre macro

Code : Tout sélectionner

Option Explicit

Sub SynchroCsvModule
Dim LibOClasseur AS object
Dim LibOFeuille As Object
Dim maxligne As Long

Dim oSheet AS Object, oCursor AS Object, sURL As String
Dim nRow AS Long, nCol AS Long, aPieces(), sCsv As String
dIM oUCB AS Object, oFlux AS Object, oTexte AS Object

call NomFichierPertModule(NomFichierPert)
	sURL = ThisComponent.URL : aPieces = Split(sURL, "/")
	'aPieces(UBound(aPieces)) = "Mon Fichier synchro PERT.csv" : sURL = Join(aPieces,"/")
		aPieces(UBound(aPieces)) = NomFichierPert +".csv" : sURL = Join(aPieces,"/")

	oTexte = createUnoService("com.sun.star.io.TextOutputStream")
	oUCB = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	IF oUCB.Exists(sURL) Then oUCB.Kill(sURL) 
	oFlux = oUCB.openFileWrite(sURL)
	oTexte.OutputStream = oFlux : oTexte.Encoding = "iso-8859-15"
	
	oSheet = thisComponent.CurrentController.ActiveSheet
	oCursor = oSheet.createCursor : oCursor.gotoEndOfUsedArea(True)
	
 
   LibOClasseur = thiscomponent 
	LibOFeuille = LibOClasseur.sheets.getByName("Sortie")

	maxligne=LibOFeuille.getCellByPosition(16,1).string

'	FOR nRow = 0 TO oCursor.RangeAddress.EndRow

		FOR nRow = 5 TO maxligne

	
	'	FOR nCol = 0 TO oCursor.RangeAddress.EndColumn
		FOR nCol = 1 TO 7
	
			IF oSheet.getCellByPosition(nCol, nRow).String <> "" Then
				sCsv = sCsv & oSheet.getCellByPosition(nCol, nRow).String & ","
		END IF
		NEXT nCol
		sCsv = sCsv & CHR(10)
		' Au-delà de 4096 octets, on sauvergarde la chaîne pour revenir à 0
		IF LEN(sCsv) > 2^12 Then
			oTexte.writeString(LEFT(sCsv,LEN(sCsv)-2))
			sCsv = ""
		 END IF
	NEXT nRow
	oTexte.writeString(LEFT(sCsv,LEN(sCsv)-2))
	
	oFlux.closeOutput : oTexte.closeOutput
End Sub

j'ai tenté de mettre cela

Code : Tout sélectionner

call NomFichierPertModule 

	sURL = ThisComponent.URL : aPieces = Split(sURL, "/")

' --------------------- mis en commentaire ------------------------------
	'aPieces(UBound(aPieces)) = "Mon Fichier synchro PERT.csv" : sURL = Join(aPieces,"/")
' -----------------------fin commentaire -------------------------------------

		aPieces(UBound(aPieces)) = NomFichierPert +".csv" : sURL = Join(aPieces,"/")


Pour récupérer la variable NomFichierPert mais sans succès

Avec xray, il me dit chaîne de caractère de longueur nulle donc la variable ne passe pas entre les deux macros. comment faire ?



EDIT 3

ça marche

J'ai mis comme déclaration de variable

public NomFichier Pert
en dehors de sub et and sub

dans la macro NomFichierPertModule
LibreOffice 7.5.3 ~ version community (imposé) ~ sous Fedora (kde-plasma) 38 x86_64 (cairo-wayland)