#1 Le 31/08/2008, à 12:48
- Grojo
lenteur dans OO Calc
J'ai une macro Calc utilisant des conversions d'heures en décimal et des calculs avec des tableaux (dates, heures, etc...).
Avec deux boutons, par exemple, de conversion horaire--> décimal et décimal--> horaire.
Le problème? Plus je clique sur les boutons, plus l'exécution des macros est longue (ça passe de 1 seconde au début à 10 secondes au bout de 4 ou 5 fois pour la même commande).
Pour info: C'est une macro de carnet de vol
Exemple:
REM
REM Le format décimal est récupéré dans la cellule Q2
REM Le format horaire est récupéré dans la cellule R2
REM Il faut donc ces cellules dans toutes les feuilles!!!
REM
Option Explicit 'on doit déclarer toutes les variables!
'Variables communes au module
'Private
'------------------------------------------------------------------
Sub HoraireVersDecimal
'convertit les colonnes d'heures en format décimal
'déclarations
dim monDoc as object, laFeuilleActive as object, maCellule as object
dim i as long, NumFormatDec as long, NumFormatHor as long, DerEnr as long
'initialisations
monDoc=ThisComponent
laFeuilleActive=mondoc.currentController.activesheet
monDoc.lockControllers 'gèle l'affichage
NumFormatDec=LaFeuilleActive.getCellRangeByName("R2").NumberFormat
NumFormatHor=LaFeuilleActive.getCellRangeByName("Q2").NumberFormat
Select Case LaFeuilleActive.name 'selon la feuille active
case "Avion"
maCellule=LaFeuilleActive.getCellRangeByName("J2")
if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneDec(LaFeuilleActive,9,DerEnr)
ConvColonneDec(LaFeuilleActive,10,DerEnr)
ConvColonneDec(LaFeuilleActive,12,DerEnr)
case "Planeur"
maCellule=LaFeuilleActive.getCellRangeByName("I2")
if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneDec(LaFeuilleActive,8,DerEnr)
case "Simu"
maCellule=LaFeuilleActive.getCellRangeByName("E2")
if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneDec(LaFeuilleActive,4,DerEnr)
case "Helico"
maCellule=LaFeuilleActive.getCellRangeByName("H2")
if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneDec(LaFeuilleActive,7,DerEnr)
ConvColonneDec(LaFeuilleActive,8,DerEnr)
ConvColonneDec(LaFeuilleActive,10,DerEnr)
case "Para"
maCellule=LaFeuilleActive.getCellRangeByName("H2")
if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneDec(LaFeuilleActive,7,DerEnr)
ConvColonneDec(LaFeuilleActive,8,DerEnr)
end select
laSuite:
monDoc.unlockControllers 'dégèle l'affichage
End Sub
'------------------------------------------------------------------
Sub DecimalVersHoraire
'convertit les colonnes d'heures en format horaire
'déclarations
dim monDoc as object, laFeuilleActive as object, maCellule as object
dim i as long, NumFormatDec as long, NumFormatHor as long, DerEnr as long
'initialisations
monDoc=ThisComponent
laFeuilleActive=mondoc.currentController.activesheet
monDoc.lockControllers 'gèle l'affichage
NumFormatDec=LaFeuilleActive.getCellRangeByName("R2").NumberFormat
NumFormatHor=LaFeuilleActive.getCellRangeByName("Q2").NumberFormat
Select Case LaFeuilleActive.name 'selon la feuille active
case "Avion"
maCellule=LaFeuilleActive.getCellRangeByName("J2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en horaire
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(LaFeuilleActive,9,DerEnr)
ConvColonneHor(LaFeuilleActive,10,DerEnr)
ConvColonneHor(LaFeuilleActive,12,DerEnr)
case "Planeur"
maCellule=LaFeuilleActive.getCellRangeByName("I2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(LaFeuilleActive,8,DerEnr)
case "Simu"
maCellule=LaFeuilleActive.getCellRangeByName("E2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(LaFeuilleActive,4,DerEnr)
case "Helico"
maCellule=LaFeuilleActive.getCellRangeByName("H2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(LaFeuilleActive,7,DerEnr)
ConvColonneHor(LaFeuilleActive,8,DerEnr)
ConvColonneHor(LaFeuilleActive,10,DerEnr)
case "Para"
maCellule=LaFeuilleActive.getCellRangeByName("H2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(LaFeuilleActive,7,DerEnr)
ConvColonneHor(LaFeuilleActive,8,DerEnr)
end select
laSuite:
monDoc.unlockControllers 'dégèle l'affichage
End Sub
'------------------------------------------------------------------
Sub DecimalToHoraire(laFeuille as object, DerEnr as long)
'convertit les colonnes d'heures en format horaire de la feuille "laFeuille"
'déclarations
dim monDoc as object, maCellule as object
dim i as long, NumFormatDec as long, NumFormatHor as long
'initialisations
monDoc=ThisComponent
'monDoc.lockControllers 'gèle l'affichage
NumFormatDec=laFeuille.getCellRangeByName("R2").NumberFormat
NumFormatHor=laFeuille.getCellRangeByName("Q2").NumberFormat
Select Case laFeuille.name 'selon la feuille active
case "Avion"
maCellule=laFeuille.getCellRangeByName("J2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en horaire
' DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(laFeuille,9,DerEnr)
ConvColonneHor(laFeuille,10,DerEnr)
ConvColonneHor(laFeuille,12,DerEnr)
case "Planeur"
maCellule=laFeuille.getCellRangeByName("I2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
' DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(laFeuille,8,DerEnr)
case "Simu"
maCellule=laFeuille.getCellRangeByName("E2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
' DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(laFeuille,4,DerEnr)
case "Helico"
maCellule=laFeuille.getCellRangeByName("H2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
' DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(laFeuille,7,DerEnr)
ConvColonneHor(laFeuille,8,DerEnr)
ConvColonneHor(laFeuille,10,DerEnr)
case "Para"
maCellule=laFeuille.getCellRangeByName("H2")
if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
' DerEnr=DernierEnregistrement(LaFeuilleActive)
'on convertit les colonnes concernées
ConvColonneHor(laFeuille,7,DerEnr)
ConvColonneHor(laFeuille,8,DerEnr)
end select
laSuite:
'monDoc.unlockControllers 'dégèle l'affichage
End Sub
'------------------------------------------------------------------
Function DernierEnregistrement(LaFeuilleActive as Object) as long
'donne le rang du dernier enregistrement où il y a une date
dim n as long
dim OnContinue as Boolean
dim maCellule as object
'initialisations
n=1
OnContinue=True
While OnContinue 'tant que la cellule des dates n'est pas vide
macellule=LaFeuilleActive.getCellByPosition(0,n)
if macellule.type=com.sun.star.table.CellContentType.EMPTY then OnContinue=false
n=n+1
Wend
DernierEnregistrement=n-2
end Function
'------------------------------------------------------------------
Sub ConvColonneDec(LaFeuilleActive as object, NumColonne as Long, DerEnr as long)
'convertit la colonne NumColonne en format décimal
dim maCellule as object, maZone as Object
dim i as long, NumFormat as long
NumFormat=LaFeuilleActive.getCellRangeByName("R2").NumberFormat
maZone=LaFeuilleActive.getCellRangeByPosition(NumColonne,1,NumColonne,DerEnr)
maZone.NumberFormat=NumFormat
For i=1 to DerEnr
maCellule=LaFeuilleActive.getCellByPosition(NumColonne,i)
maCellule.value=maCellule.value*24
next i
'Ecrit la valeur de l'index format Decimal
LaFeuilleActive.getCellRangeByName("R3").value=NumFormat
End Sub
'------------------------------------------------------------------
Sub ConvColonneHor(LaFeuilleActive as object, NumColonne as Long, DerEnr as long)
'convertit la colonne NumColonne en format horaire
dim maCellule as object, maZone as Object
dim i as long, NumFormat as long
NumFormat=LaFeuilleActive.getCellRangeByName("Q2").NumberFormat
maZone=LaFeuilleActive.getCellRangeByPosition(NumColonne,1,NumColonne,DerEnr)
maZone.NumberFormat=NumFormat
For i=1 to DerEnr
maCellule=LaFeuilleActive.getCellByPosition(NumColonne,i)
maCellule.value=maCellule.value/24
next i
'Ecrit la valeur de l'index format Horaire
LaFeuilleActive.getCellRangeByName("Q3").value=NumFormat
End Sub
'------------------------------------------------------------------
les valeurs des colonnes corrspondes à des heures de vols...
Hors ligne
#2 Le 31/08/2008, à 14:16
- picolavela
Re : lenteur dans OO Calc
Bonjour,
Ayant installé ubuntu 8.04 Hardy Heron et disposant d'un clavier Belge 105 touches marque Trust, je n'arrive pas à faire fonctionner la touche Euro dans le clavier numérique.
Bien à vous et merci d'une réponse.
Hors ligne
#3 Le 01/09/2008, à 20:18
- Grojo
Re : lenteur dans OO Calc
Je ne vois pas bien la logique de la réponse précédente par rapport au sujet...
Hors ligne
#4 Le 01/09/2008, à 23:50
- thx_84
Re : lenteur dans OO Calc
t'inquiète il est complètement hors sujet...
ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...
Hors ligne