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: Remplacer ThisComponent.CurrentController


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut Macro: Remplacer ThisComponent.CurrentController
    Bonjour,

    J'ai les deux fonctions ci-dessous.

    Je voudrais pouvoir passer en paramètre, une feuille du document et les autres paramètres nécessaires.
    Le seul problème est que pour pouvoir exécuter ces fonctions il faut que j'utilise:
    • ThisComponent.CurrentController


    A la place de ThisComponent.CurrentController , j'ai essayé de passer une feuille en tant qu'objet en faisant comme ceci:
    Pour la fonction de tri: document = Feuille (en tant qu'objet)
    Pour la fonction d'enregistrement: document = Feuille (en tant qu'objet)
    Mais ca n'a pas fonctionné.

    Est-ce que quelqu'un sait comment faire pour remplacer ThisComponent.CurrentController par la feuille que je désire?

    Fonction de trie de la feuille active. Je voudrais pouvoir trier une feuille sans avoir à lactiver.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    sub tri (colonne as integer)
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     
    rem ----------------------------------------------------------------------
    dim args1(7) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "ByRows"
    args1(0).Value = true
    args1(1).Name = "HasHeader"
    args1(1).Value = true
    args1(2).Name = "CaseSensitive"
    args1(2).Value = false
    args1(3).Name = "NaturalSort"
    args1(3).Value = false
    args1(4).Name = "IncludeAttribs"
    args1(4).Value = true
    args1(5).Name = "UserDefIndex"
    args1(5).Value = 0
    args1(6).Name = "Col1"
    args1(6).Value = colonne
    args1(7).Name = "Ascending1"
    args1(7).Value = true
     
    dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args1())
    end sub
    Fonction de sauvegarde de la feuille "NonFeuille". Je voudrais éviter d'avoir à activer la feuille pour la sauvegarde.
    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
    23
    sub EnregistrementFichier (SaveFile as string, NomFeuille as object, FeuilleOrigine as object)
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    'dim dispatcher as object
    Dim sURL as string
    rem ----------------------------------------------------------------------
    rem get access to the document
    document = ThisComponent
    ThisComponent.CurrentController.ActiveSheet = NomFeuille
     
    sURL = ConvertToURL(SaveFile)
    rem ----------------------------------------------------------------------
    dim args1(1) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "FilterName"
    args1(0).Value = "Text - txt - csv (StarCalc)"
    args1(1).Name = "FilterOptions"
    args1(1).Value = "59,34,76,1,,0,false,true,true"
     
    document.storeToURL(sURL, args1)
    ThisComponent.CurrentController.ActiveSheet = FeuilleOrigine
     
    end sub
    Cordialement,
    Vandman

  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,

    Je ne sais pas si j'ai bien compris la problématique, mais pourquoi ne pas utiliser le code suivant pour sélectionner la feuille ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ChangementFeuille(nomFeuille as String)
        monDocument = ThisComponent
       lesFeuilles = monDocument.Sheets
       uneFeuille = lesFeuilles.getByName(nomFeuille)
    End Sub
    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
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour Zoom61,

    Il me semble deja avoir essaye cette solution, cf discussion que nous avons deja eu ensemble
    J avais essaye de passer l objet feuille en parametre pour eviter d avoir a refaire toute les declarations, comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub macroALancer
       Dim uneFeuille as o
       monDocument = ThisComponent
       lesFeuilles = monDocument.Sheets
       uneFeuille = lesFeuilles.getByName(nomFeuille)
       `appele de la fonction
       ChangementFeuille(uneFeuille)
    end sub
     
    Sub ChangementFeuille(nomFeuille as object)
    Dim FeuilleATrier as object   
    FeuilleATrier = nomFeuille `l egalite ici est superflux, mais c est pour l exemple
    End Sub
    Je pense que c est assez similaire au code que tu poposes. n est ce pas?

    ca n a pas fonctionne.

    j essayerai tout de meme en redeclarant tout comme tu le suggeres, pour voir si ca passe.

    Cordialement,
    vandman

  4. #4
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,
    Ça ne fonctionne pas.

    Pour faire simple, j'ai deux feuille, Feuille 1 et Feuille 2.

    Je suis sur la feuille 1. Pour mon traitement, j'ai besoin de trier la feuille 1 et 2 selon les critères de colonne, exécuter un traitement sur la feuille 2 et l'enregistrer au format CSV.
    Ceci sans avoir a passer de la feuille 1 à la feuille 2, puis revenir à la feuille 1.

    Le problème est que cette commande: dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")et celle ci: ThisComponent.CurrentController.ActiveSheet = NomFeuillene fonctionne que sur une feuille active.
    Je ne veux pas activer les feuille sur lesquelles je fait mes traitements. Comment faire pour trier une feuille non active et enregistrer un feuille non active au format CSV et encodé en UTF8?

    Cordialement,
    Vandman

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    hello,
    voici un exemple de tri sans utiliser le DispatchHelper

    fonction de tri avec comme paramètre le nom de la feuille à trier et la plage de cellules sur laquelle effectuer le tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SortRange(Nomfeuille as string, Plage as String)
      Dim oSheetDSC,oDSCRange  As Object
      Dim aSortFields(0) As New com.sun.star.util.SortField
      Dim aSortDesc(0) As New com.sun.star.beans.PropertyValue
      oSheetDSC = ThisComponent.Sheets.getByName(NomFeuille) '
      oDSCRange = oSheetDSC.getCellRangeByName(Plage)
      aSortFields(0).Field = 0 ' première colonne
      aSortFields(0).SortAscending = FALSE ' tri décroissant
      aSortDesc(0).Name = "SortFields"
      aSortDesc(0).Value = aSortFields()
      oDSCRange.Sort(aSortDesc())
    End Sub
    appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub Tri()
    SortRange("Personnes","A1:C25")
    End Sub
    A voir si cela est suffisant pour le tri que tu veux faire sachant que l'on peut ajuster le tri avec des aSortFields.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. [OpenOffice][Texte] [MACRO] Remplacer texte par une image
    Par Ry_Yo dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 24/10/2011, 10h59
  2. [XL-2007] macro remplacer référence
    Par ozaland dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/06/2011, 14h47
  3. [XL-2003] Macro remplace "false" par "FAUX"
    Par gmsfrederic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2010, 17h05
  4. Macro Remplacer automatiquement
    Par FlorianBreizh dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/05/2008, 13h29
  5. Macro Remplacer tabulation
    Par liop49 dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/04/2007, 11h54

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