[Résolu][Calc]Décocher le calcul automatique à l'ouverture

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Calc]Décocher le calcul automatique à l'ouverture

Messagepar arthaxeres » 11 Avr 2014 10:57

Bonjour,

Avec l'aide de la communauté, je peux utiliser une macro qui fusionne n fichier ODS homogènes en un seul (https://forum.openoffice.org/fr/forum/v ... =8&t=42767)

Avec quelques adaptations, la macro fonctionne bien. Cependant, j'ai noté que la vitesse d’exécution était très lente.

Comme je pense que -pour le moment- ce sont aux machines de filer vite pour les humains :wink: je me suis lancé dans divers tests qui m'on permis d'identifier le Calcul Automatique comme une source importante de lenteur. En effet, les n fichiers sources comportent bcp de formules et il y a des calculs qui doivent se dérouler pendant l’exécution de la macro. En effet, en désactivant "Calculer automatiquement" (Alt+ONC) l'execution de la macro se réduit d'un facteur 7 !!

En enregistrement de macro, en désactivant "Calculer automatiquement" j'obtiens une macro qui fonctionne, mais pour le document depuis lequel on exécute la macro, pas pour les documents que la macro ouvre (code ci-dessous).

Idéalement, je voudrais que, lorsque la macro accède à un document, qu'elle désactive le calcul automatique et qu'elle le réactive en le fermant. Puisque cela augmente la vitesse d’exécution, elle pourrait le faire sur le document

Code : Tout sélectionner   AgrandirRéduire
sub Main
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(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "AutomaticCalculation"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:AutomaticCalculation", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
end sub


Pour rappel, je vous mets le code de la macro qui fonctionne (lentement)

Code : Tout sélectionner   AgrandirRéduire
Sub Collect
   path = "C:\Test\Fusion\"
   
   fileName = Dir(path+"*.ods")
   row% = 2 'la première ligne est déjà remplie
   Do While fileName<>""
      AddLines(path+fileName,row)
      fileName = Dir
   Loop   
End Sub

Sub AddLines(filePath, byRef destRow)
   destSheet = ThisComponent.sheets.GetByName("Fusion")
   file = StarDesktop.LoadComponentFromURL(ConvertToURL(filePath),"_blank",0,Array())
   sourceSheet = file.sheets.GetByName("page_de_saisie")
   sourceRow% = 2 'la première ligne est ignorée
   Do
      data = sourceSheet.GetCellRangeByName("A"+sourceRow+":I"+sourceRow).dataArray
      sourceRow = sourceRow+1
      If data(0)(1)="" Then Exit Do 'Fin si la colonne B est vide (2)
      If data(0)(8)<>"" Then 'On retient les lignes où la colonne I est remplie (8)
         destSheet.GetCellRangeByName("A"+destRow+":I"+destRow).dataArray = data
         destRow = destRow+1
      End If      
   Loop
   file.close(true)
End Sub


Merci par avance pour votre aide
Dernière édition par arthaxeres le 14 Avr 2014 09:36, édité 2 fois.
OpenOffice 4.0.1 sous Windows 7
arthaxeres
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 31 Mars 2014 15:25

Re: [Calc] Ouvrir un document - Décocher calcul automatique

Messagepar Piaf » 11 Avr 2014 11:54

Bonjour
Teste
Code : Tout sélectionner   AgrandirRéduire
file = StarDesktop.LoadComponentFromURL(ConvertToURL(filePath),"_blank",0,Array())
file.enableAutomaticCalculation(false)
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc]Décocher le calcul automatique à l'ouverture

Messagepar arthaxeres » 11 Avr 2014 12:42

3 heures de recherches + une question sur le forum = une réponse en une ligne de code !

Merci beaucoup Piaf ! :D

En ajoutant la ligne je passe d'un facteur 7,2 à 1,8. Quatre fois plus rapide donc ! :bravo:
J'explique l'écart de temps au fait que l'ouverture des documents avec calcul automatique prend plus de temps. N'est il pas possible d’accéder au doc sans calcul automatique ?

Question subsidiaire concernant l'enregistreur de macro : pourquoi passer par des com.sun.star.beans.PropertyValue ?
OpenOffice 4.0.1 sous Windows 7
arthaxeres
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 31 Mars 2014 15:25

Re: [Calc]Décocher le calcul automatique à l'ouverture

Messagepar Oukcha » 11 Avr 2014 16:54

Bonjour,

  • arthaxeres a écrit:Question subsidiaire
    Nous vous rappelons que la règle n° 7 stipule qu'il ne faut mettre qu'une question par fil : http://user.services.openoffice.org/fr/forum/ftopic1.html

    Afin que nous puissions avoir une base de connaissance efficace lors d'une recherche sur un seul de vos problèmes, nous vous prions de créer autant de fil que de questions.


  • Il semble que votre question ait trouvé une solution. Il est alors de bon ton d'ajouter dans le titre du premier message la balise [Résolu]. Ceci augmente la lisibilité du forum.

    Merci de respecter la syntaxe [Résolu] : entre crochets, avec un R majuscule et un é. Cette balise est à placer au début du titre. Il faut également cocher la case de l'icône de sujet (le V vert).

    Suivez ce sujet pour savoir comment procéder : http://user.services.openoffice.org/fr/forum/ftopic3299.html

Merci de votre participation.
                                        
:arrow: A lire avant tout ! Image
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
 
Message(s) : 3153
Inscrit le : 06 Oct 2008 09:03


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Platon1 et 2 invité(s)