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


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    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èse

  2. #2
    Membre habitué
    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: 6.4.6.2 (x64)
    Windows 10

  3. #3
    Membre à l'essai
    Merci
    Merci pour ce retour rapide.

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

  4. #4
    Membre à l'essai
    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 habitué
    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: 6.4.6.2 (x64)
    Windows 10

  6. #6
    Membre habitué
    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



    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  7. #7
    Membre à l'essai
    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

###raw>template_hook.ano_emploi###