IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

insérer dans une variable le nom d'un champ de la fiche active afin d'ouvrir un dossier de ce nom [LibreOffice][Base de données]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut insérer dans une variable le nom d'un champ de la fiche active afin d'ouvrir un dossier de ce nom
    Bonjour,
    J'ai une base de données qui liste des évènements et dont chaque fiche donne un nom de dossier contenant des photos.
    Je souhaite récuperer dans ma procédure 'libreoffice basic' le nom de ce dossier afin de l'ouvrir - ici dans nautilus.

    je souhaite récupérer la valeur du champ 'Dossier image' de la fiche en cours dans la variable 'filename' de l'exemple

    (j'accède à cette procédure via un bouton sur la fiche en cours)

    Pour l'instant, j'insère un nom fixe (voir exemple :"home/felix/Images/2013/11/08/IMGP0995.JPG") qui ouvre nautilus sur le dossier recherché.
    J'ai beau chercher dans les forums, je ne trouve rien (du style GET ou autre) qui traite de cette question.
    Pourriez vous m'éclairer ? Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Sub boitefilename
    dim filename as string
    dim NextFile As String
    dim AllFiles As String
    dim dirname  As String
    filename= "home/felix/Images/2013/11/08/IMGP0995.JPG"
    dirname= "home/felix/Images/2013/11/08/" 
    AllFiles = ""
     
     
     If FileExists(dirname) Then
    	If MsgBox ("Voulez-vous ouvrir ce répertoire ?"+ dirname,292, "Dossier Photos") = 6 Then
    	   	Shell("/usr/bin/nautilus", 1, "Images/2013/11/08/")
    	Else
     		MsgBox ("Vous avez choisi d'abandonner, on regarde les répertoires" , 16, "Dossier Photos")
     		ShowDirs()
    	End IF
    Else 
     	MsgBox "Désolé ce fichier est inexistant"
    End IF
    End Sub

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Salut,

    Voici une fonction qui te permettra de faire ce que tu veux :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test
        dim val as string
        val = "home/felix/Images/2013/11/08/IMGP0995.JPG"
        msgbox getChemin(val)
    End Sub
     
    Function getChemin(URLChemin As String) As String
    Dim nChemin As Variant
       nChemin = split(URLChemin, "/")
       nChemin(UBound(nChemin())) = ""
       getChemin = join(nChemin, "/")
    End Function

    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut merci merci
    merci de ta réponse, je vais voir cela dès demain

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut juste une précision...
    Je te remercie ZOOM, cette routine tombe à pic, car elle m'éclaire sur des besoins ultérieurs...
    Ici ta routine extrait le nom d'un dossier un dossier à partir d'un emplacement complet, mais ce que je souhaite, c'est extraire la valeur (val = valeur du champ 'dossier image' de la fiche en cours d'affichage). Donc je dont j'ai besoin, c'est l'étage au dessus ou val contient cette valeur.
    le champ "Dossier image" de ma base "Liste pour rando.obd contient une valeur qui est le chemin que je veux passer (par exemple 2012/02/xxx.jpg qui est affiché dans cette fiche active)
    Le bouton doit extraire la valeur (l'exemple était 2012/02/xxx.jpg) depuis le champ "Dossier image" de cette fiche.
    Donc je souhaite que val soit égal à ce champ c'est a dire 2012/02/xxx, afin que je puisse la repasser au container d'appel de nautilus. Si tu as une solution, tu serais béni des dieux de libreoffice....

  5. #5
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Si ton répertoire est toujours le même, il te suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test
        dim val as string
        val = "home/felix/Images/2013/11/08/IMGP0995.JPG"
        val = replace(val,"home/felix/Images/", "")
        msgbox getChemin(val)
    End Sub
     
    Function getChemin(URLChemin As String) As String
    Dim nChemin As Variant
       nChemin = split(URLChemin, "/")
       nChemin(UBound(nChemin())) = ""
       getChemin = join(nChemin, "/")
    End Function
    @+.
    
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut merci deux fois!!
    Mon souci n'est pas le passage de la variable, je souhaite récupérer la valeur inscrite dans un champ de la fiche BASE/obd en cours de lecture, peu importe lequel (ici c'est une chaine de caractère)
    ce peut être le nom, le prénom, n'importe quoi, il se trouve ici que c'est une chaine de caractères que je passe comme tu l'as compris vers nautilus parce que c'est un emplacement qui correspond à un dossier.
    Le champ peut contenir n'importe quelle valeur - string-, pas forcement pour ouvrir un dossier...
    Si le champ NOM de la fiche à l'écran est MARTIN, sais-tu comment récupérer la chaine 'MARTIN' pour la stocker dans la variable 'var' ? Avec paradox, c'était super simple et je pense qu'avec base, ce doit-être également super facile.
    J'espère que je ne te perturbe pas trop avec ce problème.... merci de ta gentillesse. felix

  7. #7
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Je ne comprends pas, où se trouve ton champ : dans un formulaire, dans une table, etc.

    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut suite..
    le champ est un champ de table qui est affiché dans un formulaire d'une table nommée 'Liste pour rando.odb'

    ID
    Nom
    Prénom
    Date
    Lieu
    Dossier image ( ici je rentre le fameux nom de dossier)
    etc...
    sur la fiche de ce formulaire, il y a un bouton qui donne accès à la macro qui doit récupérer la chaine contenu dans le champ 'Dossier image' et l'envoyer à nautilus, aussi bien il pourrait récupérer nom, ou prenom ou n'importe quoi... ce que je ne sais pas faire, c'est récuperer la valeur contenu dans le champ de ce formulaire.
    Voilà, c'est pas trop compliqué ? c'est pas simple d'expliquer... excuses moi.
    a ++

  9. #9
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Avec quelque chose comme cela :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oForm = oEv.Source.Model.Parent
    valChamp = oForm.getbyname("Champ1").CurrentValue

    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  10. #10
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 612
    Points
    58 612
    Billets dans le blog
    11
    Par défaut
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    monDoc = ThisComponent
    unForm = monDoc.DrawPAge.Forms.getByName("Form1")
    valCtrl = unForm.getByName("Controle")
    val = valCtrl.getByName("Champ")
    @+.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut Merci j'essaye
    Merci, je crois que cette fois tu as compris mes explications difficiles... Je vais essayer
    A+++

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut Toujours des erreurs
    Bonjour scoop,
    J'ai essayé tes deux solutions, et les deux me renvoient des messages d'erreurs soit de

    variables mal définies, soit
    Erreur d'exécution BASIC.

    Une exception s'est produite :
    Type: com.sun.star.container.NoSuchElementException
    Message: .

    la seule possibilité dans 'monDoc.DrawPAge.Forms.getByName' est 'MainForm', sinon il renvoie un message d'erreur (Form1)
    La valeur 'Copains' est le nom du champ qui contient la viable à récupérer, mais la procédure s'arrète ici avec le message d'erreur du dessus au niveau de valCtrl = unForm.....
    dans cette commande, j'ai changé 'contrôle' par MainForm' pour voir... mais ca n'est encore pas cela il renvoie toujours le même message.
    Aurais-tu une autre idée, car cela dépasse largement ma connaissance dans ce domaine. merci à +++ felix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub test
        dim val as String
        dim monDoc As Object
        dim unForm As Object
        dim valCtrl As Object
     
        monDoc = ThisComponent
        unForm = monDoc.DrawPAge.Forms.getByName("MainForm")
        valCtrl= unForm.getByName("MainForm")        
        val = valCtrl.getByName("Copains")
     
     
        'val = "home/felix/Images/2013/11/08/IMGP0995.JPG"
        'msgbox getChemin(val)
    End Sub

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut voici une image de la base
    J'essaye beaucoup de méthodes avec les outils sur internet rien ne fonctionne et les doc sont limite notemment pour les containers.
    je te mets deux copies d'écran qui te donne une idée de cette base
    Tu peux voir sur l'image verte le champ que je cherche à extraire...

    Nom : baseshot1.jpg
Affichages : 1163
Taille : 130,7 Ko
    Nom : baseshot2.jpg
Affichages : 1870
Taille : 260,3 Ko

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut Macro pour Sauvegarder un classeur ods sous un autre nom
    J'ai réalisé un classeur de suivi d'activité santé en 2019. Le code est maintenant pratiquement terminé. Il se trouve qu'à chaque nouvelle année, je peux nettoyer la feuille de l'année précedente et actualiser les dates nouvelles. le fichier est donc vierge, excepté tout ce qui concerne l'utilisateur (traitements, secu, vaccins et j'en passe)
    Ce que je n'arrive pas à faire, c'est enregistrer le document nettoyé sous un nouveau nom (le nom est déjà prédéfini).

    j'ai essayé en vain plusieurs solutions... mais cela depasse mes compétences (ou mon entendement...). Si, parmi vous, quelqu'un à une routine qui fonctionne pour sauvegarder mon classeur sous son nouveau nom je serais vraiment preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub SauvegardeDirecte(NouveauNom)
    dim doc as object
    dim FileProperties() as New com.sun.star.beans.PropertyValues
    dim Url As String
     
     
    Url="/home/ordidubas/ODS_feuilles_de_calcul/" & NouveauNom
    	If MsgBox ("Le fichier va être sauvegardé sous :"+Url,4,"Ecriture Disque")=6 then
    	Url="/home/ordidubas/ODS_feuilles_de_calcul/" & NouveauNom
    	FileProperties().Name="Url"
    	FileProperties().Value="/home/ordidubas/ODS_feuilles_de_calcul/" & NouveauNom
    	'FileProperties().Name="Overwrite"
    	'FileProperties().Value=True
    	Doc.storeAsURL(Url, FileProperties())
    	End if
    End Sub

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Points : 31
    Points
    31
    Par défaut resolu
    Citation Envoyé par felixltx Voir le message
    J'ai réalisé un classeur de suivi d'activité santé en 2019. Le code est maintenant pratiquement terminé. Il se trouve qu'à chaque nouvelle année, je peux nettoyer la feuille de l'année précedente et actualiser les dates nouvelles. le fichier est donc vierge, excepté tout ce qui concerne l'utilisateur (traitements, secu, vaccins et j'en passe)
    Ce que je n'arrive pas à faire, c'est enregistrer le document nettoyé sous un nouveau nom (le nom est déjà prédéfini).


    Au final je met la procédure qui fonctionne afin que cela serve à d'autres développeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub Sauvegardesave(NouveauNom)
    Dim monDoc as Object
    Dim LeDossier as String, Url as String, monFichier as String 
     
    	monDoc = ThisComponent
     
    	leDossier ="/home/ordidubas/ODS_feuilles_de_calcul/" 'ici on peut aussi demander directement le nom du dossier actuel
    	Url = leDossier & NouveauNom
    	monFichier = ".ods"
     
    	If Dir(Url,16) = "" Then 'si le répertoire n'existe pas, on le crée
    		MkDir Url
    	End If
     
    	Url = ConvertToURL(Url &" ")			' & monFichier )
    	if MsgBox ("Travailler sur ce nouveau fichier "& leDossier & NouveauNom &" ?",4,"Enregistrement")=6 then
    		monDoc.storeAsUrl(Url, Array())'Soit on enregistre et travaille sous le nouveau fichier
    	else
    		monDoc.storeToUrl(Url, Array())'Soit on enregistre et continue à travailler sur le fichier source	
    	End if	
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Attribut dont le nom est stocké dans une variable ?
    Par Xfennec dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/03/2006, 11h20
  2. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45
  3. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56
  4. Réponses: 7
    Dernier message: 25/10/2005, 15h19
  5. insérer les recordset d'un while dans une variable
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo