macro

Bonjour

Voici une nouvelle question envoyée à l'aide du formulaire de demande d'aide (http://fr.libreoffice.org/get-help/poser-une-question/).
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que le demandeur reçoive une copie de votre réponse.

Email:: circonvallation@gmail.com
Sujet:: macro
Question:: Bonjour,
je cherche à suspendre la fonction recalcul automatique de calc par macro en vain.
Cordialement
PS : de très nombreux recalculs ralentissent le traitement lors de déplacements dans la feuille principale

Bonjour,

je cherche à suspendre la fonction recalcul automatique de calc par
macro en vain. Cordialement PS : de très nombreux recalculs
ralentissent le traitement lors de déplacements dans la feuille
principale

C'est peut-être possible autrement, mais voici une solution via le Dispatcher.

Sachant que le menu dans lequel se trouve l'option est
Données > Calculer > Calculer automatiquement
(c'est une bascule)

Et que, pour UNO, la commande correspondante est ".uno:AutomaticCalculation"

Alors, le sous-programme suivant (qui fait appel au dispatcher) devrait convenir. Ce sous-programme permet d'exécuter des commandes UNO correspondant à des menus.

Le commentaire dans le sous-programme indique où trouver l'ensemble des commandes kivonbien... Pour Calc spécifiquement, j'ai regardé dans
répertoire d'installation LibreOffice, ss-rép /share/config/soffice.cfg/modules/scalc/menubar
Par ex. dans mon Linux, c'est
/opt/libreoffice5.3/share/config/soffice.cfg/modules/scalc/menubar

8< ---------------------------------------------------------

Sub _UNOCommand(ByRef pUnoCmd As String, Optional pArgs() As Variant)
'runs any UNO menu command, in pUnoCmd.
'The optional pArgs() allows to add command arguments.
'There is no control on the command passed.
'
'The common menu commands are available in the menubar.xml file, available in
'LibreOffice install directory, subdir /share/config/soffice.cfg/modules/sglobal/menubar

Dim lo_Frame As Variant
Dim lo_Dispatch As Object
Dim l_Args() As Variant
  
If Not IsMissing(pArgs) Then l_Args() = pArgs()

lo_Frame = ThisComponent.CurrentController.Frame
lo_Dispatch = createUnoService("com.sun.star.frame.DispatchHelper")
  
lo_Dispatch.executeDispatch(lo_Frame, ".uno:" & pUnoCmd, "", 0, l_Args())

End Sub '_UNOCommand

--------------------------------------------------------- >8

Dans votre cas, l'appel serait ainsi :

_UNOCommand("AutomaticCalculation")

Le 1er appel désactive, le second re-active.

Dans ce cas, il n'est pas utile de passer d'autres paramètres. Certaines entrées de menu peuvent cependant le nécessiter. Par exemple, pour afficher (ou masquer) le volet latéral ("Sidebar" en anglais), il faudrait écrire ceci :

Dim l_Args(0) As New com.sun.star.beans.PropertyValue

l_Args(0).Name = "Sidebar"
l_Args(0).Value = True 'pour afficher / False pour masquer

_UNOCommand("Sidebar", l_Args())

En espérant avoir aidé.

Si vous répondez, merci de penser à utiliser la fonction "répondre à
tous" de votre logiciel de courrier électronique de façon que la liste
reçoive une copie de votre réponse.

Bien cordialement,

Bonjour,

Ci-dessous le code que j'utilise pour recalculer et réactualiser les liens externes puis re-désactive le recalcul automatique

Claude

option explicit

Sub recalcul
Dim calcul as boolean
Dim debut as variant
Dim I as integer
if not thisComponent.isAutomaticCalculationEnabled() then

         If MsgBox ("Attention calcul automatique désactivé !" _
&chr(13) &" Voulez-vous recalculer maintenant",292, now()) = 6 Then
             debut=now()
            MajLiens(monCalc.DDELinks)
            MajLiens(monCalc.AreaLinks)
            'MajLiens(monCalc.SheetLinks)

            for i = 0 to thisComponent.externaldoclinks.count
                thisComponent.ExternalDocLinks.refresh
            next i
             thisComponent.enableAutomaticCalculation(true)
             thisComponent.calculate 'mise à jour des formules modifiées
             thisComponent.calculateAll
             thisComponent.enableAutomaticCalculation(false)
             msgbox ("Recalcul terminé," & chr(10) & "debut : " & debut _
& " fin : " & now() & chr(10) & "le recalcul automatique a été désactivé ",16,now())

         End IF
     endif
end sub

-------- Message original --------
*Sujet: *[INTERNET] [fr-users] macro
*Pour : *users@fr.libreoffice.org