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 :

[Macro] - Boite de dialog avec listBox chargé par plage nonnées


Sujet :

OpenOffice & LibreOffice

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de madvic
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Mai 2003
    Messages : 101
    Par défaut [Macro] - Boite de dialog avec listBox chargé par plage nonnées
    Bonjour,

    Je commence juste en macro libreoffice et je galère pas mal à trouver de la ressource pour mon cas.

    Je souhaite donc faire un formulaire avec des listBox chargées via les plages nommées :

    Une plage nommées : "fournisseur"
    | *code*| *nom station*| *propriété*| *fournisseur_id*|
    | station1| nom station 1| prop_stat_1| 1|
    | station2| nom station 2| prop_stat_2| 1|
    | station3| nom station 3| prop_stat_3| 2|
    | station4| nom station 4| prop_stat_4| 2|
    | station5| nom station 5| prop_stat_5| 3|
    | station6| nom station 6| prop_stat_6| 3|
    | station7| nom station 7| prop_stat_7| 4|
    | station8| nom station 8| prop_stat_8| 5|


    Une plage nommées : "station"
    | *ID*| *nom*| *propriété*|
    | 1| fourn1| propr1|
    | 2| fourn2| propr2|
    | 3| fourn3| propr3|
    | 4| fourn4| propr4|
    | 5| fourn5| propr5|



    Et un formulaire :
    http://imagik.fr/view-rl/127449
    Nom : 127449.png
Affichages : 1500
Taille : 5,3 Ko

    Lors du clic sur le fournisseur, je souhaite avoir les stations qui correspondent.

    Pour le moment, je teste ce genre de chose pour exploiter les plages nommées, mais impossible de récupérer ces plages... :
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub testPlage()
      Dim oPlage     ' La plage nommée.
      Dim sNom$      ' Nom de la plage nommée à créer.
      Dim oCell      ' Objet cellule.
     
     
      sNom$ = "fournisseur"
      oPlage = ThisComponent.NamedRanges.getByName(sNom$)
     
      oCell = oPlage.getElementNames()
      MsgBox oCell.getString()
    End Sub


    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    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 430
    Billets dans le blog
    11
    Par défaut
    Je ne comprends pas trop ou tu veux en venir

    Quelque chose qui devrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim monDocument As Object, lesFeuilles As Object
        Dim maFeuille As Object, mesCellules As Object
        Dim maZoneNom As Object, x As Long
        Const unNom = "toto"
        monDocument = ThisComponent
        lesFeuilles = monDocument.Sheets
        maFeuille = lesFeuilles.getByName("Feuille1")
        mesCellules = maFeuille.getCellRangeByName(unNom)
        lesZonesNom = monDocument.NamedRanges
        for x = 0 to lesZonesNom.Count -1
          maZoneNom = lesZonesNom(x)
          print "Zone n°" & x , maZoneNom.Name, "", maZoneNom.Content
        next

  3. #3
    Membre confirmé
    Avatar de madvic
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Mai 2003
    Messages : 101
    Par défaut explication
    J'essaye d'utiliser les plages nommées comme une table et exploiter les données comme une base donnée.
    Créer des fonction d’accès rapide pour faire mes jointures entre mes tables avec mes clés.
    je ne peux utiliser base pour mon projet. Et je voudrais simplifier un peu mon code avant de commencer.

    Récupérer une plage via son nom (plage nommé).
    Puis en les manipulant pour afficher les données, faire des critères de recherche comme des requêtes.

    Mais j'ai bien l'impression que c'est limité à ce niveau là.

    Cdlt

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    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 430
    Billets dans le blog
    11
    Par défaut
    Donc ce que tu veux serait plutôt ceci :
    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
    Sub testPlage()
        Dim monDocument As Object, lesFeuilles As Object
        Dim maFeuille As Object, mesCellules As Object
        Dim maZoneNom As Object, x As Long
        Const unNom = "toto"
        monDocument = ThisComponent
        lesFeuilles = monDocument.Sheets
        maFeuille = lesFeuilles.getByName("Feuille1")
        mesCellules = maFeuille.getCellRangeByName(unNom)
        Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")  
        Plages.insertByName("", mesCellules) 
        oEnum = Plages.Cells.CreateEnumeration  
     
          While oEnum.hasMoreElements  
        'Ne renvoie rien si la cellule est vide 
            Cellule = oEnum.NextElement  
            MsgBox Cellule.String  
          Wend  
     
    End Sub

  5. #5
    Membre confirmé
    Avatar de madvic
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Mai 2003
    Messages : 101
    Par défaut
    Merci c'est un peu cela.

    Sauf que j'ai quelques questions :
    - Pourquoi passer par la feuille ? Puisque j'ai le nom de la plage... Suffit de faire : ThisComponent.NamedRanges.hasByName(oNomPlage$), non ?
    - Pourquoi créer une instance de plage avec : Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") , nous n'obtenons nous pas l'objet puisqu'il existe ?
    - Quelle est la meilleur façon de manipuler une plage de cellule ? : Récupérer une colonne, une collone filtré, une/des ligne(s) via critères ? Je vois que vous utiliser enum pour l'affichage mais je ne crois pas que ce soit simple.

    merci de votre aide

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    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 430
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par madvic Voir le message
    Sauf que j'ai quelques questions :
    - Pourquoi passer par la feuille ? Puisque j'ai le nom de la plage... Suffit de faire : ThisComponent.NamedRanges.hasByName(oNomPlage$), non ?
    - Pourquoi créer une instance de plage avec : Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") , nous n'obtenons nous pas l'objet puisqu'il existe ?
    - Quelle est la meilleur façon de manipuler une plage de cellule ? : Récupérer une colonne, une collone filtré, une/des ligne(s) via critères ? Je vois que vous utiliser enum pour l'affichage mais je ne crois pas que ce soit simple.

    J'ai repris l'ancien code et je n'ai pas épure des commandes inutiles .
    La meilleur façon est la façon que tu maîtrises et que tu comprends, sauf si tu vas sur de gros volume de données.


Discussions similaires

  1. listbox chargée par source de donnée, refresh
    Par d4voisin dans le forum C#
    Réponses: 19
    Dernier message: 04/05/2011, 14h55
  2. Boite de dialog avec onglet
    Par bruman dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 06/04/2011, 07h53
  3. Boite de dialog avec setSingleChoiceItems
    Par JCMANSION dans le forum Composants graphiques
    Réponses: 8
    Dernier message: 21/01/2011, 12h42
  4. Réponses: 2
    Dernier message: 15/04/2010, 14h07
  5. problème avec la boite de dialog d'impression
    Par hrp dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/01/2005, 16h30

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