Le 04/02/12 19:08, Michel Rudelle nous a écrit :
Bonsoir,
De : lutch [mailto:lutch@free.fr]
Envoyé : samedi 4 février 2012 18:52
[...]
Par curiosité, j'ai inséré la formule sans le signe "=",
le temps d'exécution descend à 0,519s
Puis-je en déduire que Calc recalculant la formule à chaque insertion
par la macro, c'est ce qui ralentit le tout ?
Suspendre le recalcul en début de macro et le réactiver à la fin
apporterait un gain, mais est-ce bien là que réside le problème ?
Je ne sais pas -encore- faire ceci, mais ça viendra…
C_Lucien
Je l'ai déjà utilisé et ça m'a fait gagner beaucoup de temps dans une macro
travaillant sur un classeur avec un très grand nombre de calculs.
Pour inhiber le recalcul automatique:
Nom_du_Classeur.enableAutomaticCalculation(False)
Pour autoriser le recalcul automatique après avoir tout recalculé
Nom_du_Classeur.CalculateAll
Nom_du_Classeur.enableAutomaticCalculation(True)
Ceci à condition de ne pas avoir besoin de valeurs calculées entre temps ...
Bonne soirée,
Michel
en effet ! Merci.
Temps d'exécution 0,506s
À toutes fins utiles, voici la macro modifiée
Function show_number(ByVal nr As Integer,ByVal empty As Boolean) As String
show_number = ""
If Not empty Then
show_number = Trim(Str(nr))+ "."
End If
End Function
'********************
Sub test
Const END_ROW As Integer = 199
Dim document As Object
Dim dispatcher As Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim oDoc As Object
Dim oSheet As Object
Dim oRange As Object
Dim oCell As Object
oDoc = ThisComponent
oSheet = oDoc.getCurrentController.ActiveSheet
oDoc.enableAutomaticCalculation(False)
' Select and clean the test cell range
oRange = oSheet.getCellRangeByPosition(0, 0, 1, END_ROW)
oDoc.CurrentController.select(oRange)
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())
Dim fun As String
fun = "=show_number(ROW(); isblank(indirect(""B"" & ROW())))"
Dim start_time As Long
start_time = GetSystemTicks()
' Fill the test cell range:
' column 1: formula for displaying the row number
' column 2: a constant string
Dim row As Integer
For row = 0 To END_ROW
oRange = oSheet.getCellRangeByPosition(0, row, 0, row)
oDoc.CurrentController.select(oRange)
oCell = oSheet.getCellByPosition(0, row)
oCell.setFormula(fun)
oCell = oSheet.getCellByPosition(1, row)
oCell.String = "abc"
Next row
oRange = oSheet.getCellRangeByPosition(0, 0, 0, 0)
oDoc.CurrentController.select(oRange)
oRange = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
oDoc.CurrentController.select(oRange)
Print "Test executed in " + (GetSystemTicks() - start_time)/1000 + " s"
oDoc.enableAutomaticCalculation(true)
End Sub
J'ai appris quelque chose ce soir…
C_Lucien
--
--
Envoyez un mail à users+help@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être
supprimés
Context
Re: [fr-users] Piètres performances en exécution macro Calc de LibreOffice · lutch
Re: [fr-users] Piètres performances en exécution macro Calc de LibreOffice · Marc Romano
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.