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 pour activer un classeur ouvert en fonction d'une cellule [OpenOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Macro pour activer un classeur ouvert en fonction d'une cellule
    Bonjour

    Je travaille avec OO Calc (Apache open office 4.1.2) que j'ai au bureau.
    Dans le cadre de mon travail, je récupère des documents PDF et je dois annoter des tableaux avec des mentions trouvées dans ce PDF.
    J'ai décidé d'automatiser la lecture de ces documents en faisant l'extraction des mentions obligatoires que je dois noter dans mes tableaux.

    Je colle dans la colonne A du fichier extract.ods, onglet copie, le contenu du fichier PDF.
    Dans les colonnes B à E, j'extrais les mentions que je recopie ensuite dans la ligne G4K4.
    Je souhaite coller ces cellules G4K4 dans un autre fichier, déjà ouvert, dont le nom commence toujours par 2019_ (E10) et dans l'onglet qui correspond à la date du jour extraite en E11 .

    Je joins 2 extraits de fichiers avec des annotations (j'espère assez claires), ma macro s'exécute du fichier extract.ods jusqu'à la copie,
    mais impossible d'activer le classeur ouvert "2019_*" dont le nom correspond à la cellule E10.
    J'ai trouvé la syntaxe pour aller sur le bon onglet, mais pas pour activer le classeur.

    Je n'utilise pas libre office car les formules EQUIV de la colonne B de l'onglet copie ne fonctionne pas et je ne sais pas pourquoi.

    Si vous pouvez m'aider à débloquer cette situation, ma macro n'est pas top, j'ai fait un mix entre des macros excel et OO.https://www.developpez.net/forums/im...milies/aie.gif

    Merci d'avance.https://www.developpez.net/forums/im...lies/merci.png
    Bien cordialement
    ThérèsePièce jointe 577247Pièce jointe 577248
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut Macro pour activer un classeur ouvert en fonction d'une cellule
    Bonjour,
    Effectivement un mix entre Basic de chez Microsoft, et du Basic provenant de l'enregistreur de macros d'OO n'est pas top mais si çà fonctionne...
    Pour ce qui est de l'activation du document et si j'ai bien compris, voici le code :

    A mettre dans la macro "enrichi_tableau" à la fin du code juste avant le "End Sub"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim oFeuille As Object 
    Dim sFic As String
    'Je désigne la feuille concernée 
    oFeuille = ThisComponent.getSheets.getByName("copie")
    'Je récupère le nom du document dans la cellule E10
    sFic = oFeuille.getCellRangeByName("E10").String 
    'Appelle de la fonction pour activer ce document
    ActiveDoc(sFic)
    Et ajouter cette nouvelle fonction :
    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
      '_____________________________________________________________________________
      'Boucle sur les documents ouverts et active celui recherché.
      Function ActiveDoc(sTitreDoc As String)
        Dim oTousDoc as object
        Dim oDoc as object
        On error resume next
       'Créer une énumération des documents ouverts   
        oTousDoc = starDesktop.components.createEnumeration
        Do while oTousDoc.hasMoreElements
           oDoc = oTousDoc.nextElement
           If (oDoc.title = sTitreDoc) then
             'Activer la fenêtre de ce doc
              oDoc.currentController.frame.getContainerWindow.setFocus
               Exit do
           End if
        Loop
      End function
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Merci
    Merci pour ce retour rapide.

    je fais un test dans la soirée.
    A plus tard

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 10
    Points
    10
    Par défaut ajustement
    Bonjour

    le code fonctionne très bien et active bien le fichier désigné dans la cellule E10.
    Je pensais ajouter à suivre, mon code pour activer le bon onglet de ce fichier désigné dans le cellule E11,
    mais ça ne marche pas.
    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
     
    Dim oFeuille As Object 
    Dim sFic As String
    'Je désigne la feuille concernée 
    oFeuille = ThisComponent.getSheets.getByName("copie")
    'Je récupère le nom du document dans la cellule E10
    sFic = oFeuille.getCellRangeByName("E10").String 
    'Appelle de la fonction pour activer ce document
    ActiveDoc(sFic)
     
    'Onglet
         Dim z$
         For Each o In Worksheets("copie").Range("A3:A" & Cells(65535, 1).End(xlUp).Row)
         z = o.Value
         If ISWs(z) Then
     
    'j'ai tenté de déplacer ActiveDoc(sFic) ???     
    'ActiveDoc(sFic)
        With Sheets(z)
            .Activate
    		.Range("E" & Rows.Count).End(xlUp).Offset(1).Select
     
        End With
     
    End If
     
    Next
    le but final est d'activer le classeur sur le bon onglet pour copier les infos dans mon tableau.
    Si c'est possible de m'aider.
    MERCI

  5. #5
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut Macro pour activer un classeur ouvert en fonction d'une cellule
    Bonjour,
    Pas de souci je vais t'envoyer le code.
    Par ailleurs je te joindrai un fichier qui reprend toutes les informations à traiter et sans passer par des formules et autres le tout en langage Open Office ou Libre Office.
    Cette macro effectuera la copie dans le fichier en question et dans le bon onglet.
    En fin d'après midi ou au plus tard demain matin.
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  6. #6
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut Macro pour activer un classeur ouvert en fonction d'une cellule
    Bonjour :

    Ci dessous je te met le code modifié pour ton fichier.
    Et aussi j'ai joint un nouveau fichier extractV2.ods qui reprend toutes les opérations à faire et uniquement en code Basic pour OO ou LO. (plus de formules ou opérations intermédiaires). A condition que j'ai bien compris. N'hésites pas à le tester et si çà t'intéresse on peut l'améliorer.

    Voici le nouveau code à mettre dans ton fichier actuel.
    En tout début de code et au dessus de "sub enrichi_tableau", mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public oDocDest As Object, oFeuilleDest As Object
    En fin de code juste avant le "End Sub" remplacer le code existant par celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim oFeuille As Object 
    Dim sFic As String, sOnglet As String
    'Je désigne la feuille concernée 
    oFeuille = ThisComponent.getSheets.getByName("copie")
    'Je récupère le nom du document dans la cellule E10
    sFic = oFeuille.getCellRangeByName("E10").String 
    'Je récupère l'onglet en question
    sOnglet = oFeuille.getCellRangeByName("E11").String 
    'Appelle de la fonction pour activer ce document
    ActiveDoc(sFic)
    oFeuilleDest = oDocDest.getSheets.getByName(sOnglet)
    oDocDest.CurrentController.ActiveSheet = oFeuilleDest
    Remplacer la fonction "ActiveDoc" par celle-ci :
    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
      '_____________________________________________________________________________
      'Boucle sur les documents ouverts et active celui recherché.
      Function ActiveDoc(sTitreDoc As String)
        Dim oTousDoc as object
        Dim oDoc as object
        On error resume next
       'Créer une énumération des documents ouverts   
        oTousDoc = starDesktop.components.createEnumeration
        Do while oTousDoc.hasMoreElements
           oDoc = oTousDoc.nextElement
           If (oDoc.title = sTitreDoc) then
             'Activer la fenêtre de ce doc
              oDoc.currentController.frame.getContainerWindow.setFocus
              oDocDest = oDoc
               Exit do
           End if
        Loop
      End function

    extractV2.ods
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Merci
    Bonsoir Mobydick_62

    Merci beaucoup.
    je regarde seulement ce soir la réponse et j'ai testé le 1er code. ça fonctionne super.
    Puis j'ai ouvert le fichier extractV2-1.ods et là, ouah, Quelle belle surprise
    c'est trop top.
    Merci beaucoup, j'en ai rêvé, et tu l'as fait.
    Très cordialement

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

Discussions similaires

  1. [XL-2010] Macro pour changer le nom d'un chemin dans une cellule
    Par erwanlec dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2018, 15h01
  2. Réponses: 4
    Dernier message: 26/02/2018, 12h14
  3. Macro pour activer une formule excel
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 19/03/2010, 09h42
  4. [XL-2003] macro pour ouvrir un classeur sur lotus et recup données
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/11/2009, 10h24
  5. macro pour un objet puis passage dans fonction
    Par jbarreau-mainson dans le forum C
    Réponses: 9
    Dernier message: 28/05/2009, 16h19

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