Application.ScreenUpdating est sans effet
Bonjour,
Je dispose d'un classeur Excel qui doit pouvoir être également exploité sous OO calc.
Un macro exécute des opérations sur différentes feuilles et dans Excel la cde vba Application.ScreenUpdating =False évite l'affichage successif de ces feuilles.
Cette macro exécutée sur OOcalc ouvre successivement toutes feuilles...
Sous OOC la commande en question est-elle autre ou doit-elle être complétée ?
Merci de vos éclaircissements
Cordialement
JL
Ps ce n'est pas d'OpenO, mais de LibreOffice dont je parle, d'ailleurs, si s'était le cas il ya t-il la aussi une différence ?
Application.ScreenUpdating est sans effet
Bonjour,
Effectivement l'appel à ThisComponent.lockControllers n'a aucun effet.
J'ai créé mon propre classeur LibreOffice et simulé la même chose que toi : sélection de zone dans les feuilles et traitement. Et là aussi LockControllers n'a aucun effet. Je pense que cette fonction ne soit pas complètement efficace. J'avais d'ailleurs remarqué ce problème dans le passé pour mes propres macros (notamment sur la sélection de zone).
D'ailleurs ce problème est régulièrement évoquer sur plusieurs forums.
Un moyen de contourner ce problème: avant de traiter toutes les feuilles , il suffit de les cacher (sauf la première) et de les ré-afficher en fin de traitement.
Code:
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 28 29 30 31 32
| '______________________________________________________________________________
Sub Ventilation
Dim oFeuille As Object
Dim i As Integer
'Je cache toutes les feuilles avant traitement sauf la première
For i = 1 to ThisComponent.Sheets.Count-1
ThisComponent.Sheets(i).IsVisible = False
Next i
'Traitement
oFeuille = ThisComponent.getSheets.getByName("Feuille2")
Macro1(oFeuille)
oFeuille = ThisComponent.getSheets.getByName("Feuille3")
Macro1(oFeuille)
oFeuille = ThisComponent.getSheets.getByName("Feuille4")
Macro1(oFeuille)
'J'affiche toutes les feuilles après traitement
For i = 1 to ThisComponent.Sheets.Count-1
ThisComponent.Sheets(i).IsVisible = true
Next i
End Sub
'_________________________________________________________________________________
'Simulation de traitement
Sub Macro1(oFeuille As Object)
ThisComponent.CurrentController.Select( oFeuille.getCellRangeByName("A5:F5") )
End Sub |
J'ai essayé sur ton fichier et cela fonctionne. Juste un petit problème de clignotement chez moi.
Code:
1 2 3
| For i = 1 to Mydoc.Sheets.Count-1
Mydoc.Sheets(i).IsVisible = False
Next i |
Et à la fin
Code:
1 2 3
| For i = 1 to Mydoc.Sheets.Count-1
Mydoc.Sheets(i).IsVisible = True
Next i |
Cordialement
Application.ScreenUpdating est sans effet
Bonjour,
Toujours pour améliorer car malgré le masquage des feuilles on voit tout de même le clignotements des sélections sur les entêtes de ligne et colonnes.
Donc pour éviter cet effet de clignotement désagréable il suffit de cacher la barre "entête" et de figer la fenêtre active ce qui donne au total :
- Avant traitement :
Code:
1 2 3 4 5 6 7 8
| 'Appel de la routine pour cacher la barre entêtes (lignes et colonnes)
AfficheCacheBarreEntete(False)
'Je bloque la fenêtre courante (feuille "Enregistrements")
thisComponent.CurrentController.Frame.ContainerWindow.Enable = False
'Je cache toutes les feuilles avant traitement sauf la première(Enregistrements)
For i = 1 to Mydoc.Sheets.Count-1
Mydoc.Sheets(i).IsVisible = False
Next i |
- Fin de traitement :
Code:
1 2 3 4 5 6 7 8
| 'Je ré-affiche toutes les feuilles après traitement
For i = 1 to Mydoc.Sheets.Count-1
Mydoc.Sheets(i).IsVisible = True
Next i
'Je débloque la fenêtre courante (feuille "Enregistrements")
thisComponent.CurrentController.Frame.ContainerWindow.Enable = True
'Appel de la routine pour ré-afficher la barre entêtes (lignes et colonnes)
AfficheCacheBarreEntete(true) |
Et la routine qui va bien :
Code:
1 2 3 4 5 6 7 8 9
| Sub AfficheCacheBarreEntete(bAffiche As Boolean)
Dim oDispatcher, oFrame as object
Dim args(0) as new com.sun.star.beans.PropertyValue
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oFrame = thisComponent.CurrentController.Frame
args(0).Name = "ViewRowColumnHeaders" 'Entete de lignes et de colonnes
args(0).Value = bAffiche
oDispatcher.executeDispatch(oFrame, ".uno:ViewRowColumnHeaders", "", 0, args())
End sub |
Cordialement
Application.ScreenUpdating est sans effet
Effectivement
Citation:
Tout ce code ne marchera pas sous MS-Excel
Je n'avais pas compris que cette macro devait fonctionner sous Libre Office et MS Excel et vice versa.
Pour ce qui est du masquage de la barre outil c'est sur que çà va coincer.:arf:
Pour ce qui est du masquage des feuilles, cela pourra être facilement transposer en VBA et compris par Libre Office (normalement).
Je ne programme plus en VBA depuis 2004, année où j'ai quitté le monde Microsoft pour la suite Open et Libre Office.
Mais normalement cela devrait le faire. Je vais y regarder.
Cordialement
Après recherche :
Code VBA à appliquer et compris par Libre Office :
- Masquage feuilles :
Code:
1 2 3
| For i = 1 to Mydoc.Sheets.Count-1
Sheets(i).Visible = 2
Next i |
- Affichage des feuilles:
Code:
1 2 3
| For i = 1 to Mydoc.Sheets.Count-1
Sheets(i).Visible = -1
Next i |