2 pièce(s) jointe(s)
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
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:
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:
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
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
1 pièce(s) jointe(s)
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:
Public oDocDest As Object, oFeuilleDest As Object
En fin de code juste avant le "End Sub" remplacer le code existant par celui-ci:
Code:
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:
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 |
Pièce jointe 577342