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
[Résolu][Calc] Formulaire non connecté et valeur à récupérer
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Membre OOrganisé
- Messages : 59
- Inscription : 05 juil. 2008 14:35
[Résolu][Calc] Formulaire non connecté et valeur à récupérer
LibreOffice 7.5.3 ~ version community (imposé) ~ sous Fedora (kde-plasma) 38 x86_64 (cairo-wayland)
-
- IdOOle de la suite
- Messages : 25181
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
-
- Membre OOrganisé
- Messages : 59
- Inscription : 05 juil. 2008 14:35
Re: [Calc] Formulaire sans base de donnée et valeurs à récup
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.
mon autre macro
j'ai tenté de mettre cela
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
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)